[Pkg-wmaker-commits] [wmcoincoin] 01/87: First commit

Doug Torrance dtorrance-guest at moszumanska.debian.org
Fri Aug 28 17:27:23 UTC 2015


This is an automated email from the git hooks/post-receive script.

dtorrance-guest pushed a commit to branch master
in repository wmcoincoin.

commit 4ec5b5989a248fac7e14ed02e5a2b9916e54515d
Author: SeeSchloss <mvalleton at noparking.net>
Date:   Fri May 30 17:04:55 2014 +0200

    First commit
---
 ABOUT-NLS                         |  1068 ++
 AUTHORS                           |    28 +
 COPYING                           |   340 +
 ChangeLog                         |  1357 +++
 INSTALL                           |   229 +
 MACOSX                            |    23 +
 Makefile.am                       |   130 +
 Makefile.in                       |   756 ++
 NEWS                              |    23 +
 README                            |    71 +
 TODO                              |     0
 aclocal.m4                        |  1067 ++
 compile                           |   107 +
 config.guess                      |  1465 +++
 config.h.in                       |   483 +
 config.rpath                      |   666 ++
 config.sub                        |  1569 +++
 configure                         | 18819 ++++++++++++++++++++++++++++++++++++
 configure.ac                      |   552 ++
 depcomp                           |   479 +
 genoptlst.sh                      |    34 +
 install-sh                        |   294 +
 intl/ChangeLog                    |     4 +
 intl/Makefile.in                  |   587 ++
 intl/VERSION                      |     1 +
 intl/bindtextdom.c                |   340 +
 intl/config.charset               |   640 ++
 intl/dcgettext.c                  |    56 +
 intl/dcigettext.c                 |  1689 ++++
 intl/dcngettext.c                 |    57 +
 intl/dgettext.c                   |    58 +
 intl/dngettext.c                  |    59 +
 intl/eval-plural.h                |   108 +
 intl/explodename.c                |   135 +
 intl/export.h                     |     6 +
 intl/finddomain.c                 |   212 +
 intl/gettext.c                    |    63 +
 intl/gettextP.h                   |   297 +
 intl/gmo.h                        |   152 +
 intl/hash-string.c                |    51 +
 intl/hash-string.h                |    36 +
 intl/intl-compat.c                |   133 +
 intl/intl-exports.c               |    36 +
 intl/l10nflist.c                  |   400 +
 intl/langprefs.c                  |   130 +
 intl/libgnuintl.h.in              |   419 +
 intl/libintl.rc                   |    38 +
 intl/loadinfo.h                   |   132 +
 intl/loadmsgcat.c                 |  1336 +++
 intl/localcharset.c               |   461 +
 intl/localcharset.h               |    42 +
 intl/locale.alias                 |    77 +
 intl/localealias.c                |   439 +
 intl/localename.c                 |  1507 +++
 intl/lock.c                       |   922 ++
 intl/lock.h                       |  1105 +++
 intl/log.c                        |   116 +
 intl/ngettext.c                   |    65 +
 intl/os2compat.c                  |    98 +
 intl/os2compat.h                  |    46 +
 intl/osdep.c                      |    26 +
 intl/plural-exp.c                 |   155 +
 intl/plural-exp.h                 |   129 +
 intl/plural.c                     |  1961 ++++
 intl/plural.y                     |   385 +
 intl/printf-args.c                |   188 +
 intl/printf-args.h                |   155 +
 intl/printf-parse.c               |   590 ++
 intl/printf-parse.h               |    75 +
 intl/printf.c                     |   427 +
 intl/ref-add.sin                  |    31 +
 intl/ref-del.sin                  |    26 +
 intl/relocatable.c                |   468 +
 intl/relocatable.h                |    79 +
 intl/textdomain.c                 |   127 +
 intl/tsearch.c                    |   684 ++
 intl/tsearch.h                    |    83 +
 intl/vasnprintf.c                 |  4677 +++++++++
 intl/vasnprintf.h                 |    78 +
 intl/vasnwprintf.h                |    46 +
 intl/version.c                    |    26 +
 intl/wprintf-parse.h              |    75 +
 intl/xsize.h                      |   109 +
 m4/ChangeLog                      |    62 +
 m4/Makefile.am                    |     2 +
 m4/Makefile.in                    |   381 +
 m4/codeset.m4                     |    21 +
 m4/gettext.m4                     |   381 +
 m4/glibc2.m4                      |    30 +
 m4/glibc21.m4                     |    30 +
 m4/iconv.m4                       |   180 +
 m4/intdiv0.m4                     |    84 +
 m4/intl.m4                        |   285 +
 m4/intldir.m4                     |    19 +
 m4/intlmacosx.m4                  |    51 +
 m4/intmax.m4                      |    33 +
 m4/inttypes-pri.m4                |    36 +
 m4/inttypes.m4                    |    27 +
 m4/inttypes_h.m4                  |    26 +
 m4/isc-posix.m4                   |    26 +
 m4/lcmessage.m4                   |    30 +
 m4/lib-ld.m4                      |   110 +
 m4/lib-link.m4                    |   709 ++
 m4/lib-prefix.m4                  |   185 +
 m4/lock.m4                        |   316 +
 m4/longlong.m4                    |   109 +
 m4/nls.m4                         |    31 +
 m4/po.m4                          |   449 +
 m4/printf-posix.m4                |    44 +
 m4/progtest.m4                    |    92 +
 m4/size_max.m4                    |    68 +
 m4/stdint_h.m4                    |    26 +
 m4/uintmax_t.m4                   |    30 +
 m4/ulonglong.m4                   |    23 +
 m4/visibility.m4                  |    52 +
 m4/wchar_t.m4                     |    20 +
 m4/wint_t.m4                      |    28 +
 m4/xsize.m4                       |    13 +
 missing                           |   336 +
 options                           |   530 +
 pixmaps/cbronson.jpg              |   Bin 0 -> 1210 bytes
 pixmaps/logo.xpm                  |   427 +
 pixmaps/logoh.png                 |   Bin 0 -> 3410 bytes
 platypus/Makefile.am              |     9 +
 platypus/Makefile.in              |   501 +
 platypus/fmalloc.c                |    41 +
 platypus/gif.h                    |   302 +
 platypus/giffunc.c                |   747 ++
 platypus/gifread.c                |   915 ++
 platypus/wmcoincoin_player.c      |   297 +
 po/ChangeLog                      |    32 +
 po/Makefile.in.in                 |   429 +
 po/Makevars                       |    25 +
 po/POTFILES.in                    |    25 +
 po/Rules-quot                     |    47 +
 po/boldquot.sed                   |    10 +
 po/en at boldquot.header             |    25 +
 po/en at quot.header                 |    22 +
 po/fr.gmo                         |   Bin 0 -> 16210 bytes
 po/fr.po                          |  2256 +++++
 po/insert-header.sin              |    23 +
 po/quot.sed                       |     6 +
 po/remove-potcdate.sin            |    19 +
 po/stamp-po                       |     1 +
 po/wmcoincoin.pot                 |  1898 ++++
 scripts/Makefile.am               |     2 +
 scripts/Makefile.in               |   407 +
 scripts/wmcoincoin-search-cookies |    44 +
 scripts/wmcoincoin-totoz-get      |   151 +
 scripts/wmpanpan                  |    53 +
 src/Makefile.am                   |   169 +
 src/Makefile.in                   |  1405 +++
 src/balloon.c                     |   403 +
 src/balltrap.c                    |   463 +
 src/balltrap.h                    |    12 +
 src/base64.c                      |   115 +
 src/base64.h                      |     7 +
 src/board.c                       |  2302 +++++
 src/board_pop3.c                  |   332 +
 src/board_priv.h                  |    31 +
 src/board_rss.c                   |   446 +
 src/board_util.c                  |  1053 ++
 src/board_util.h                  |    26 +
 src/cc_queue.c                    |   286 +
 src/coin_util.c                   |  1342 +++
 src/coin_util.h                   |   117 +
 src/coin_xutil.c                  |   697 ++
 src/coin_xutil.h                  |    42 +
 src/coincoin.h                    |   718 ++
 src/dock.c                        |  1572 +++
 src/dock.h                        |    22 +
 src/fake-getaddrinfo.c            |   119 +
 src/fake-getaddrinfo.h            |    75 +
 src/fake-getnameinfo.c            |    53 +
 src/fake-getnameinfo.h            |    21 +
 src/fontcoincoin.c                |   279 +
 src/fontcoincoin.h                |    27 +
 src/general.h                     |   265 +
 src/global.h                      |   295 +
 src/http.c                        |  1326 +++
 src/http.h                        |   154 +
 src/http_unix.c                   |   274 +
 src/http_win.c                    |   151 +
 src/inet_aton.c                   |   163 +
 src/inet_aton.h                   |    13 +
 src/kbcoincoin.c                  |   126 +
 src/kbcoincoin.h                  |    27 +
 src/keylist.c                     |   151 +
 src/keylist.h                     |    33 +
 src/md5.c                         |   381 +
 src/md5.h                         |    91 +
 src/msgbox.c                      |   268 +
 src/myprintf.c                    |   329 +
 src/myprintf.h                    |    32 +
 src/options_list.h                |   308 +
 src/palmipede.c                   |  2721 ++++++
 src/picohtml.c                    |   693 ++
 src/picohtml.h                    |    66 +
 src/pinnipede.c                   |  4268 ++++++++
 src/pinnipede.h                   |   302 +
 src/pinnipede_pdfm.c              |   342 +
 src/pinnipede_totoz.c             |   526 +
 src/pinnipede_widgets.c           |  1772 ++++
 src/plopup.c                      |   318 +
 src/prefs.c                       |  1751 ++++
 src/prefs.h                       |   399 +
 src/prefs_gestion.c               |   817 ++
 src/raster.c                      |   489 +
 src/raster.h                      |   102 +
 src/regexp.c                      |   467 +
 src/regexp.h                      |    94 +
 src/scrollcoin.c                  |   430 +
 src/scrollcoin.h                  |    24 +
 src/site.c                        |   294 +
 src/site.h                        |    16 +
 src/spell_coin.c                  |   448 +
 src/spell_coin.h                  |    49 +
 src/swallowcoincoin.c             |   105 +
 src/totoz_bookmark.c              |   169 +
 src/troll_data.h                  |   623 ++
 src/troll_detector.c              |   772 ++
 src/wmccc.c                       |  1557 +++
 src/wmccc.h                       |    71 +
 src/wmccc_callbacks.c             |    26 +
 src/wmccc_callbacks.h             |    39 +
 src/wmccc_dialogs.c               |   224 +
 src/wmccc_interface.c             |  3584 +++++++
 src/wmccc_interface.h             |    20 +
 src/wmccc_save_prefs.c            |   413 +
 src/wmccc_support.c               |   144 +
 src/wmccc_support.h               |    69 +
 src/wmcoincoin.c                  |  2349 +++++
 src/xmlcoincoin.c                 |   175 +
 src/xmlcoincoin.h                 |    22 +
 wmccc.glade                       |  8600 ++++++++++++++++
 wmcoincoin.spec                   |   106 +
 xpms/badnews.xpm                  |  4882 ++++++++++
 xpms/bracket.xpm                  |    28 +
 xpms/clippy.xpm                   |    81 +
 xpms/clock.xpm                    |    73 +
 xpms/coin.xpm                     |   516 +
 xpms/date.xpm                     |    24 +
 xpms/duck.xcf                     |   Bin 0 -> 8297 bytes
 xpms/duck.xpm                     |    55 +
 xpms/editwin_minib.xcf            |   Bin 0 -> 3772 bytes
 xpms/editwin_minib.xpm            |   173 +
 xpms/icon.xpm                     |    28 +
 xpms/led.xpm                      |    19 +
 xpms/leds.h                       |   100 +
 xpms/leds.xcf                     |   Bin 0 -> 1225 bytes
 xpms/logo.xpm                     |   427 +
 xpms/miniduck.xpm                 |    26 +
 xpms/mkduck.sh                    |     5 +
 xpms/month.xpm                    |    79 +
 xpms/porte.h                      |   738 ++
 xpms/porte.xcf                    |   Bin 0 -> 2994 bytes
 xpms/totoz.xpm                    |  3965 ++++++++
 xpms/weekday.xpm                  |    47 +
 258 files changed, 129045 insertions(+)

diff --git a/ABOUT-NLS b/ABOUT-NLS
new file mode 100644
index 0000000..83bc72e
--- /dev/null
+++ b/ABOUT-NLS
@@ -0,0 +1,1068 @@
+1 Notes on the Free Translation Project
+***************************************
+
+Free software is going international!  The Free Translation Project is
+a way to get maintainers of free software, translators, and users all
+together, so that free software will gradually become able to speak many
+languages.  A few packages already provide translations for their
+messages.
+
+   If you found this `ABOUT-NLS' file inside a distribution, you may
+assume that the distributed package does use GNU `gettext' internally,
+itself available at your nearest GNU archive site.  But you do _not_
+need to install GNU `gettext' prior to configuring, installing or using
+this package with messages translated.
+
+   Installers will find here some useful hints.  These notes also
+explain how users should proceed for getting the programs to use the
+available translations.  They tell how people wanting to contribute and
+work on translations can contact the appropriate team.
+
+   When reporting bugs in the `intl/' directory or bugs which may be
+related to internationalization, you should tell about the version of
+`gettext' which is used.  The information can be found in the
+`intl/VERSION' file, in internationalized packages.
+
+1.1 Quick configuration advice
+==============================
+
+If you want to exploit the full power of internationalization, you
+should configure it using
+
+     ./configure --with-included-gettext
+
+to force usage of internationalizing routines provided within this
+package, despite the existence of internationalizing capabilities in the
+operating system where this package is being installed.  So far, only
+the `gettext' implementation in the GNU C library version 2 provides as
+many features (such as locale alias, message inheritance, automatic
+charset conversion or plural form handling) as the implementation here.
+It is also not possible to offer this additional functionality on top
+of a `catgets' implementation.  Future versions of GNU `gettext' will
+very likely convey even more functionality.  So it might be a good idea
+to change to GNU `gettext' as soon as possible.
+
+   So you need _not_ provide this option if you are using GNU libc 2 or
+you have installed a recent copy of the GNU gettext package with the
+included `libintl'.
+
+1.2 INSTALL Matters
+===================
+
+Some packages are "localizable" when properly installed; the programs
+they contain can be made to speak your own native language.  Most such
+packages use GNU `gettext'.  Other packages have their own ways to
+internationalization, predating GNU `gettext'.
+
+   By default, this package will be installed to allow translation of
+messages.  It will automatically detect whether the system already
+provides the GNU `gettext' functions.  If not, the included GNU
+`gettext' library will be used.  This library is wholly contained
+within this package, usually in the `intl/' subdirectory, so prior
+installation of the GNU `gettext' package is _not_ required.
+Installers may use special options at configuration time for changing
+the default behaviour.  The commands:
+
+     ./configure --with-included-gettext
+     ./configure --disable-nls
+
+will, respectively, bypass any pre-existing `gettext' to use the
+internationalizing routines provided within this package, or else,
+_totally_ disable translation of messages.
+
+   When you already have GNU `gettext' installed on your system and run
+configure without an option for your new package, `configure' will
+probably detect the previously built and installed `libintl.a' file and
+will decide to use this.  This might not be desirable.  You should use
+the more recent version of the GNU `gettext' library.  I.e. if the file
+`intl/VERSION' shows that the library which comes with this package is
+more recent, you should use
+
+     ./configure --with-included-gettext
+
+to prevent auto-detection.
+
+   The configuration process will not test for the `catgets' function
+and therefore it will not be used.  The reason is that even an
+emulation of `gettext' on top of `catgets' could not provide all the
+extensions of the GNU `gettext' library.
+
+   Internationalized packages usually have many `po/LL.po' files, where
+LL gives an ISO 639 two-letter code identifying the language.  Unless
+translations have been forbidden at `configure' time by using the
+`--disable-nls' switch, all available translations are installed
+together with the package.  However, the environment variable `LINGUAS'
+may be set, prior to configuration, to limit the installed set.
+`LINGUAS' should then contain a space separated list of two-letter
+codes, stating which languages are allowed.
+
+1.3 Using This Package
+======================
+
+As a user, if your language has been installed for this package, you
+only have to set the `LANG' environment variable to the appropriate
+`LL_CC' combination.  If you happen to have the `LC_ALL' or some other
+`LC_xxx' environment variables set, you should unset them before
+setting `LANG', otherwise the setting of `LANG' will not have the
+desired effect.  Here `LL' is an ISO 639 two-letter language code, and
+`CC' is an ISO 3166 two-letter country code.  For example, let's
+suppose that you speak German and live in Germany.  At the shell
+prompt, merely execute `setenv LANG de_DE' (in `csh'),
+`export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash').
+This can be done from your `.login' or `.profile' file, once and for
+all.
+
+   You might think that the country code specification is redundant.
+But in fact, some languages have dialects in different countries.  For
+example, `de_AT' is used for Austria, and `pt_BR' for Brazil.  The
+country code serves to distinguish the dialects.
+
+   The locale naming convention of `LL_CC', with `LL' denoting the
+language and `CC' denoting the country, is the one use on systems based
+on GNU libc.  On other systems, some variations of this scheme are
+used, such as `LL' or `LL_CC.ENCODING'.  You can get the list of
+locales supported by your system for your language by running the
+command `locale -a | grep '^LL''.
+
+   Not all programs have translations for all languages.  By default, an
+English message is shown in place of a nonexistent translation.  If you
+understand other languages, you can set up a priority list of languages.
+This is done through a different environment variable, called
+`LANGUAGE'.  GNU `gettext' gives preference to `LANGUAGE' over `LANG'
+for the purpose of message handling, but you still need to have `LANG'
+set to the primary language; this is required by other parts of the
+system libraries.  For example, some Swedish users who would rather
+read translations in German than English for when Swedish is not
+available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'.
+
+   Special advice for Norwegian users: The language code for Norwegian
+bokma*l changed from `no' to `nb' recently (in 2003).  During the
+transition period, while some message catalogs for this language are
+installed under `nb' and some older ones under `no', it's recommended
+for Norwegian users to set `LANGUAGE' to `nb:no' so that both newer and
+older translations are used.
+
+   In the `LANGUAGE' environment variable, but not in the `LANG'
+environment variable, `LL_CC' combinations can be abbreviated as `LL'
+to denote the language's main dialect.  For example, `de' is equivalent
+to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT'
+(Portuguese as spoken in Portugal) in this context.
+
+1.4 Translating Teams
+=====================
+
+For the Free Translation Project to be a success, we need interested
+people who like their own language and write it well, and who are also
+able to synergize with other translators speaking the same language.
+Each translation team has its own mailing list.  The up-to-date list of
+teams can be found at the Free Translation Project's homepage,
+`http://translationproject.org/', in the "Teams" area.
+
+   If you'd like to volunteer to _work_ at translating messages, you
+should become a member of the translating team for your own language.
+The subscribing address is _not_ the same as the list itself, it has
+`-request' appended.  For example, speakers of Swedish can send a
+message to `sv-request at li.org', having this message body:
+
+     subscribe
+
+   Keep in mind that team members are expected to participate
+_actively_ in translations, or at solving translational difficulties,
+rather than merely lurking around.  If your team does not exist yet and
+you want to start one, or if you are unsure about what to do or how to
+get started, please write to `coordinator at translationproject.org' to
+reach the coordinator for all translator teams.
+
+   The English team is special.  It works at improving and uniformizing
+the terminology in use.  Proven linguistic skills are praised more than
+programming skills, here.
+
+1.5 Available Packages
+======================
+
+Languages are not equally supported in all packages.  The following
+matrix shows the current state of internationalization, as of November
+2007.  The matrix shows, in regard of each package, for which languages
+PO files have been submitted to translation coordination, with a
+translation percentage of at least 50%.
+
+     Ready PO files       af am ar az be bg bs ca cs cy da de el en en_GB eo
+                        +----------------------------------------------------+
+     Compendium         |                      []       [] []        []      |
+     a2ps               |             []                [] [] []     []      |
+     aegis              |                                  ()                |
+     ant-phone          |                                  ()                |
+     anubis             |                                  []                |
+     ap-utils           |                                                    |
+     aspell             |                      [] []    [] []        []      |
+     bash               |                                                 [] |
+     bfd                |                                                    |
+     bibshelf           |                                  []                |
+     binutils           |                                                    |
+     bison              |                               [] []                |
+     bison-runtime      |                                  []                |
+     bluez-pin          | []                      []       [] []          [] |
+     cflow              |                               []                   |
+     clisp              |                               [] []    []          |
+     console-tools      |                         []       []                |
+     coreutils          |                []    [] []       []                |
+     cpio               |                                                    |
+     cpplib             |                      []       [] []                |
+     cryptonit          |                                  []                |
+     dialog             |                                                    |
+     diffutils          |                      [] []    [] [] []          [] |
+     doodle             |                                  []                |
+     e2fsprogs          |                         []       []                |
+     enscript           |                      []       [] []        []      |
+     fetchmail          |                      []       [] () []     []      |
+     findutils          |                []                                  |
+     findutils_stable   |                []    []       []                   |
+     flex               |                      []       [] []                |
+     fslint             |                                                    |
+     gas                |                                                    |
+     gawk               |                      []       [] []                |
+     gcal               |                      []                            |
+     gcc                |                                  []                |
+     gettext-examples   | []                   []          [] []          [] |
+     gettext-runtime    |             []       []       [] []             [] |
+     gettext-tools      |                      []          []                |
+     gip                |                []                                  |
+     gliv               |                []                []                |
+     glunarclock        |                []                                  |
+     gmult              | []                               []                |
+     gnubiff            |                                  ()                |
+     gnucash            |                      [] []       () ()     []      |
+     gnuedu             |                                                    |
+     gnulib             |                []                                  |
+     gnunet             |                                                    |
+     gnunet-gtk         |                                                    |
+     gnutls             |                                  []                |
+     gpe-aerial         |                         []       []                |
+     gpe-beam           |                         []       []                |
+     gpe-calendar       |                                                    |
+     gpe-clock          |                         []       []                |
+     gpe-conf           |                         []       []                |
+     gpe-contacts       |                                                    |
+     gpe-edit           |                         []                         |
+     gpe-filemanager    |                                                    |
+     gpe-go             |                         []                         |
+     gpe-login          |                         []       []                |
+     gpe-ownerinfo      |                         []       []                |
+     gpe-package        |                                                    |
+     gpe-sketchbook     |                         []       []                |
+     gpe-su             |                         []       []                |
+     gpe-taskmanager    |                         []       []                |
+     gpe-timesheet      |                         []                         |
+     gpe-today          |                         []       []                |
+     gpe-todo           |                                                    |
+     gphoto2            |                         []    [] []        []      |
+     gprof              |                               [] []                |
+     gpsdrive           |                                                    |
+     gramadoir          | []                               []                |
+     grep               |                         []                      [] |
+     gretl              |                                  ()                |
+     gsasl              |                                                    |
+     gss                |                                                    |
+     gst-plugins-bad    |                []             []                   |
+     gst-plugins-base   |                []             []                   |
+     gst-plugins-good   |                []    []       []                   |
+     gst-plugins-ugly   |                []             []                   |
+     gstreamer          | []             []    [] []    [] []        []      |
+     gtick              |                                  ()                |
+     gtkam              |             []          []    [] []                |
+     gtkorphan          |                []                []                |
+     gtkspell           |             []                   [] []          [] |
+     gutenprint         |                               []                   |
+     hello              |                []    []       [] []             [] |
+     herrie             |                                  []                |
+     hylafax            |                                                    |
+     idutils            |                               [] []                |
+     indent             |                      [] []       []             [] |
+     iso_15924          |                                                    |
+     iso_3166           |       []    [] [] [] [] [] [] [] [] []          [] |
+     iso_3166_2         |                                                    |
+     iso_4217           |                         []    [] []                |
+     iso_639            |                         []    [] []             [] |
+     jpilot             |                         []                         |
+     jtag               |                                                    |
+     jwhois             |                                                    |
+     kbd                |                         []    [] [] []             |
+     keytouch           |                      []          []                |
+     keytouch-editor    |                                  []                |
+     keytouch-keyboa... |                      []                            |
+     latrine            |                                  ()                |
+     ld                 |                               []                   |
+     leafpad            |                []    [] []       [] []             |
+     libc               |                      [] []    [] []                |
+     libexif            |                                  []                |
+     libextractor       |                                  []                |
+     libgpewidget       |                         []    [] []                |
+     libgpg-error       |                                  []                |
+     libgphoto2         |                               [] []                |
+     libgphoto2_port    |                               [] []                |
+     libgsasl           |                                                    |
+     libiconv           |                                  []             [] |
+     libidn             |                         []    []                [] |
+     lifelines          |                               [] ()                |
+     lilypond           |                                  []                |
+     lingoteach         |                                                    |
+     lprng              |                                                    |
+     lynx               |                      [] []    [] []                |
+     m4                 |                         []    [] [] []             |
+     mailfromd          |                                                    |
+     mailutils          |                      []                            |
+     make               |                               [] []                |
+     man-db             |                      []       [] []                |
+     minicom            |                         []    [] []                |
+     nano               |                []    []          []                |
+     opcodes            |                                  []                |
+     parted             |                         []       []                |
+     pilot-qof          |                                                    |
+     popt               |                         []    [] []                |
+     psmisc             |                []                                  |
+     pwdutils           |                                                    |
+     qof                |                                                    |
+     radius             |                      []                            |
+     recode             |             []       []       [] [] []          [] |
+     rpm                |                               []                   |
+     screem             |                                                    |
+     scrollkeeper       |          [] []       [] [] [] [] []        []      |
+     sed                |                      []          []             [] |
+     shared-mime-info   |                []    [] []    [] () []     []   [] |
+     sharutils          |                []    [] []    [] [] []             |
+     shishi             |                                                    |
+     skencil            |                               [] ()                |
+     solfege            |                                                    |
+     soundtracker       |                               [] []                |
+     sp                 |                                  []                |
+     system-tools-ba... |       []       [] [] [] []    [] [] []     []      |
+     tar                |                []                []                |
+     texinfo            |                               [] []             [] |
+     tin                |                                  ()        ()      |
+     tuxpaint           | []             []             [] []        []   [] |
+     unicode-han-tra... |                                                    |
+     unicode-transla... |                                                    |
+     util-linux         |                      [] []    [] []                |
+     util-linux-ng      |                      [] []    [] []                |
+     vorbis-tools       |                         []                         |
+     wastesedge         |                                  ()                |
+     wdiff              |                      []       [] []        []      |
+     wget               |                      [] []       []                |
+     xchat              |             [] []    [] []       [] []     []      |
+     xkeyboard-config   |                []                                  |
+     xpad               |                []             []           []      |
+                        +----------------------------------------------------+
+                          af am ar az be bg bs ca cs cy da de el en en_GB eo
+                           6  0  2  1  8 26  2 40 48  2 56 88 15  1  15   18
+
+                          es et eu fa fi fr  ga gl gu he hi hr hu id is it
+                        +--------------------------------------------------+
+     Compendium         | []          [] []  []                []          |
+     a2ps               |    []       [] []                             () |
+     aegis              |                                                  |
+     ant-phone          |                []                                |
+     anubis             |                []                                |
+     ap-utils           |             [] []                                |
+     aspell             |                []  []                         [] |
+     bash               | []                                               |
+     bfd                | []          []                                   |
+     bibshelf           | []                 []                         [] |
+     binutils           | []          [] []                                |
+     bison              | [] []          []  []                   []    [] |
+     bison-runtime      |    []          []  []                   []    [] |
+     bluez-pin          |             [] []  []                [] []       |
+     cflow              |                    []                            |
+     clisp              | []             []                                |
+     console-tools      |                                                  |
+     coreutils          | [] []       [] []  []                []          |
+     cpio               | []             []  []                            |
+     cpplib             | []             []                                |
+     cryptonit          |                []                                |
+     dialog             |       []           []                         [] |
+     diffutils          | []          [] []  [] []    []       [] []    [] |
+     doodle             |                    []                         [] |
+     e2fsprogs          | []             []                             [] |
+     enscript           |                []  []             []             |
+     fetchmail          | []                                               |
+     findutils          |    []              []                []          |
+     findutils_stable   |    []          []  []                []          |
+     flex               | []             []  []                            |
+     fslint             |                                                  |
+     gas                | []             []                                |
+     gawk               | []             []  []       []                () |
+     gcal               | []             []                                |
+     gcc                | []                                               |
+     gettext-examples   | []          [] []  []                [] []    [] |
+     gettext-runtime    | []          [] []  []                   []    [] |
+     gettext-tools      | []    []       []                             [] |
+     gip                | []    []       []  []                            |
+     gliv               |                ()                                |
+     glunarclock        |             []     []                []          |
+     gmult              |       []       []                             [] |
+     gnubiff            |                ()                             () |
+     gnucash            | ()             ()                    ()          |
+     gnuedu             | []                                               |
+     gnulib             | [] []              []                            |
+     gnunet             |                                                  |
+     gnunet-gtk         |                                                  |
+     gnutls             |                                                  |
+     gpe-aerial         | []             []                                |
+     gpe-beam           | []             []                                |
+     gpe-calendar       |                                                  |
+     gpe-clock          | []          [] []                    []          |
+     gpe-conf           |                []                                |
+     gpe-contacts       | []             []                                |
+     gpe-edit           | []             []                    [] []       |
+     gpe-filemanager    | []                                               |
+     gpe-go             | []             []                    []          |
+     gpe-login          | []             []                    []          |
+     gpe-ownerinfo      | []          [] []                    [] []       |
+     gpe-package        | []                                               |
+     gpe-sketchbook     | []             []                                |
+     gpe-su             | []          [] []                    []          |
+     gpe-taskmanager    | []          [] []                                |
+     gpe-timesheet      | []             []  []                   []       |
+     gpe-today          | []          [] []  []                            |
+     gpe-todo           | []                                               |
+     gphoto2            | []          [] []                    []       [] |
+     gprof              | []          [] []  []                   []       |
+     gpsdrive           |    []                                            |
+     gramadoir          |                []  []                            |
+     grep               | []          []     []                            |
+     gretl              | []    []       []                             () |
+     gsasl              |                    []                   []       |
+     gss                |                []  []                            |
+     gst-plugins-bad    | []          []                       []       [] |
+     gst-plugins-base   | []          []                       []       [] |
+     gst-plugins-good   | []    []    []                       []       [] |
+     gst-plugins-ugly   | []          []                       []       [] |
+     gstreamer          |             []                       []       [] |
+     gtick              |             []     []                         [] |
+     gtkam              | []             []                    []       [] |
+     gtkorphan          |                []                             [] |
+     gtkspell           | []    []    [] []  []                []       [] |
+     gutenprint         |                                      []          |
+     hello              | [] [] [] [] [] []  [] []    []    [] [] []    [] |
+     herrie             |                    []                            |
+     hylafax            |                                                  |
+     idutils            |                []  []                [] []    [] |
+     indent             | [] [] []    [] []  [] []             [] []    [] |
+     iso_15924          |                []                                |
+     iso_3166           | [] [] []    [] []     [] [] [] [] [] [] []    [] |
+     iso_3166_2         |                []                                |
+     iso_4217           | [] []       [] []                    []       [] |
+     iso_639            | []       [] [] []  []                []          |
+     jpilot             | []             []                                |
+     jtag               |                []                                |
+     jwhois             | []             []                    [] []    [] |
+     kbd                | []             []                                |
+     keytouch           |                []  []                         [] |
+     keytouch-editor    |                    []                            |
+     keytouch-keyboa... |                    []                         [] |
+     latrine            |                    []                         [] |
+     ld                 | []          [] []  []                            |
+     leafpad            | []             []  []       []       []       [] |
+     libc               | []          [] []     []             []          |
+     libexif            | []                                               |
+     libextractor       |                    []                            |
+     libgpewidget       | []             []  []                [] []       |
+     libgpg-error       |                []                                |
+     libgphoto2         | []             []                             [] |
+     libgphoto2_port    |                []                             [] |
+     libgsasl           |                []  []                            |
+     libiconv           |    []       []     []                            |
+     libidn             |                []                             [] |
+     lifelines          |                ()                                |
+     lilypond           | []          [] []                                |
+     lingoteach         |                []                       []    [] |
+     lprng              |                                                  |
+     lynx               |    []                                []       [] |
+     m4                 |                []  [] []                []       |
+     mailfromd          |                                                  |
+     mailutils          | []             []                                |
+     make               | []          [] []  [] []    []    []    []       |
+     man-db             |                                               [] |
+     minicom            | []          [] []                    []          |
+     nano               | []    []       []  [] []             []       [] |
+     opcodes            | []          [] []  []                            |
+     parted             |                []                       []    [] |
+     pilot-qof          |                                                  |
+     popt               |                []  [] []                   []    |
+     psmisc             |                                      []       [] |
+     pwdutils           |                                                  |
+     qof                |                                         []       |
+     radius             | []             []                                |
+     recode             | []             []  [] []    []       [] []    [] |
+     rpm                |                []                       []       |
+     screem             |                                                  |
+     scrollkeeper       | []          []                       []          |
+     sed                | [] []          []  []                []          |
+     shared-mime-info   | []    []    [] []                    []       [] |
+     sharutils          | [] []       [] []  [] []             []       [] |
+     shishi             |                []                                |
+     skencil            | []             []                                |
+     solfege            |                                               [] |
+     soundtracker       | []             []                             [] |
+     sp                 |                []                                |
+     system-tools-ba... | []    []    [] []  []             [] [] []    [] |
+     tar                |    [] []    []     []                []          |
+     texinfo            |                []           []       []          |
+     tin                |    []          ()                                |
+     tuxpaint           |                    []                []          |
+     unicode-han-tra... |                                                  |
+     unicode-transla... |                []  []                            |
+     util-linux         | [] []       [] []                    [] []    [] |
+     util-linux-ng      | [] []       [] []                    [] []    [] |
+     vorbis-tools       |                                                  |
+     wastesedge         |                ()                                |
+     wdiff              | [] []          []  [] []             [] []    [] |
+     wget               |    []       [] []  []             [] [] []    [] |
+     xchat              | []          [] []        []    []    []       [] |
+     xkeyboard-config   | []          [] []                    []          |
+     xpad               | []                 []                []          |
+                        +--------------------------------------------------+
+                          es et eu fa fi fr  ga gl gu he hi hr hu id is it
+                          85 22 14  2 48 101 61 12  2  8  2  6 53 29  1 52
+
+                          ja ka ko ku ky lg lt lv mk mn ms mt nb ne nl  nn
+                        +--------------------------------------------------+
+     Compendium         |                                           []     |
+     a2ps               |       ()                      []          []     |
+     aegis              |                                           ()     |
+     ant-phone          |                                           []     |
+     anubis             |                               []    []    []     |
+     ap-utils           |                               []                 |
+     aspell             |                            []             []     |
+     bash               |                                           []     |
+     bfd                |                                                  |
+     bibshelf           |                               []                 |
+     binutils           |                                                  |
+     bison              |                               []    []    []     |
+     bison-runtime      |                               []    []    []     |
+     bluez-pin          |          []                   []          []     |
+     cflow              |                                                  |
+     clisp              |                                           []     |
+     console-tools      |                                                  |
+     coreutils          |                                           []     |
+     cpio               |                                           []     |
+     cpplib             |                                           []     |
+     cryptonit          |                                           []     |
+     dialog             |                               []          []     |
+     diffutils          | []                            []          []     |
+     doodle             |                                                  |
+     e2fsprogs          |                                           []     |
+     enscript           |                                           []     |
+     fetchmail          | []                                        []     |
+     findutils          |                                           []     |
+     findutils_stable   |                                           []     |
+     flex               |       []                                  []     |
+     fslint             |                                                  |
+     gas                |                                                  |
+     gawk               | []                                        []     |
+     gcal               |                                                  |
+     gcc                |                                                  |
+     gettext-examples   | []                            []          []     |
+     gettext-runtime    | []    []                                  []     |
+     gettext-tools      | []    []                                         |
+     gip                |                               []          []     |
+     gliv               |                                           []     |
+     glunarclock        |                               []          []     |
+     gmult              | []                            []          []     |
+     gnubiff            |                                                  |
+     gnucash            | ()                                  () ()        |
+     gnuedu             |                                                  |
+     gnulib             | []                                        []     |
+     gnunet             |                                                  |
+     gnunet-gtk         |                                                  |
+     gnutls             |                               []                 |
+     gpe-aerial         |                                           []     |
+     gpe-beam           |                                           []     |
+     gpe-calendar       | []                                               |
+     gpe-clock          | []    []                                  []     |
+     gpe-conf           | []    []                                  []     |
+     gpe-contacts       |       []                                         |
+     gpe-edit           | []    []                                  []     |
+     gpe-filemanager    | []    []                                         |
+     gpe-go             | []    []                                  []     |
+     gpe-login          | []    []                                  []     |
+     gpe-ownerinfo      | []                                        []     |
+     gpe-package        | []    []                                         |
+     gpe-sketchbook     |       []                                  []     |
+     gpe-su             | []    []                                  []     |
+     gpe-taskmanager    | []    [] []                               []     |
+     gpe-timesheet      |                                           []     |
+     gpe-today          | []                                        []     |
+     gpe-todo           | []                                               |
+     gphoto2            | []                                        []     |
+     gprof              |                               []                 |
+     gpsdrive           |                                           []     |
+     gramadoir          |                                           ()     |
+     grep               |             []                            []     |
+     gretl              |                                                  |
+     gsasl              |                                           []     |
+     gss                |                                                  |
+     gst-plugins-bad    |                                           []     |
+     gst-plugins-base   |                                           []     |
+     gst-plugins-good   |                                           []     |
+     gst-plugins-ugly   |                                           []     |
+     gstreamer          |                                           []     |
+     gtick              |                                           []     |
+     gtkam              | []                                        []     |
+     gtkorphan          |                                           []     |
+     gtkspell           |                            []             []     |
+     gutenprint         |                                           []     |
+     hello              | [] [] []                      []    []    []  [] |
+     herrie             |                                           []     |
+     hylafax            |                                                  |
+     idutils            |                                           []     |
+     indent             | []                                        []     |
+     iso_15924          |                                           []     |
+     iso_3166           | []    [] []       []    []          []    []  [] |
+     iso_3166_2         |                                           []     |
+     iso_4217           | []                []                      []     |
+     iso_639            | []                []                      []  [] |
+     jpilot             | ()                                        ()     |
+     jtag               |                                                  |
+     jwhois             |                                           []     |
+     kbd                |                                           []     |
+     keytouch           |                                           []     |
+     keytouch-editor    |                                           []     |
+     keytouch-keyboa... |                                                  |
+     latrine            |                                           []     |
+     ld                 |                                                  |
+     leafpad            | []                []                             |
+     libc               | []    []                                  []     |
+     libexif            |                                                  |
+     libextractor       |                                                  |
+     libgpewidget       |                                           []     |
+     libgpg-error       |                                                  |
+     libgphoto2         | []                                               |
+     libgphoto2_port    | []                                               |
+     libgsasl           |                                           []     |
+     libiconv           |                                           []     |
+     libidn             | []                                        []     |
+     lifelines          |                                           []     |
+     lilypond           |                                           []     |
+     lingoteach         |                                           []     |
+     lprng              |                                                  |
+     lynx               | []                                        []     |
+     m4                 | []                                        []     |
+     mailfromd          |                                                  |
+     mailutils          |                                                  |
+     make               | []    []                                  []     |
+     man-db             |                                                  |
+     minicom            | []                                               |
+     nano               |                               []    []    []     |
+     opcodes            |                                           []     |
+     parted             | []                                        []     |
+     pilot-qof          |                                                  |
+     popt               | []    []                                  []     |
+     psmisc             | []                                  []    []     |
+     pwdutils           |                                                  |
+     qof                |                                                  |
+     radius             |                                                  |
+     recode             |                                           []     |
+     rpm                | []    []                                         |
+     screem             | []                                               |
+     scrollkeeper       |                                     [] [] []  [] |
+     sed                | []                                        []     |
+     shared-mime-info   | []    []          []          []    []    []  [] |
+     sharutils          | []                                        []     |
+     shishi             |                                                  |
+     skencil            |                                                  |
+     solfege            |                                     ()        () |
+     soundtracker       |                                                  |
+     sp                 | ()                                               |
+     system-tools-ba... | []    []          []                      []     |
+     tar                | []          []                            []     |
+     texinfo            |                                     []    []     |
+     tin                |                                                  |
+     tuxpaint           |                                     ()    []  [] |
+     unicode-han-tra... |                                                  |
+     unicode-transla... |                                                  |
+     util-linux         | []                                        []     |
+     util-linux-ng      | []                                        []     |
+     vorbis-tools       |                                                  |
+     wastesedge         |                                           []     |
+     wdiff              |                               []    []           |
+     wget               | []                                        []     |
+     xchat              | []    []                []                []     |
+     xkeyboard-config   |    [] []                                  []     |
+     xpad               |       []                      []          []     |
+                        +--------------------------------------------------+
+                          ja ka ko ku ky lg lt lv mk mn ms mt nb ne nl  nn
+                          51  2 25  3  2  0  6  0  2  2 20  0 11  1 103  6
+
+                          or pa pl pt pt_BR rm ro ru rw sk sl sq sr sv  ta
+                        +--------------------------------------------------+
+     Compendium         |          []  []      []       []          []     |
+     a2ps               |       ()     []      [] []       []    [] []     |
+     aegis              |                      () ()                       |
+     ant-phone          |                      []                   []     |
+     anubis             |       []             [] []                       |
+     ap-utils           |       ()                                         |
+     aspell             |                      [] []    []                 |
+     bash               |       []                      []                 |
+     bfd                |                                                  |
+     bibshelf           |                                           []     |
+     binutils           |                         []    []                 |
+     bison              |       []     []      [] []                []     |
+     bison-runtime      |       []     []      []          []       []     |
+     bluez-pin          |       []     []   [] [] []    [] []    [] []     |
+     cflow              |       []                                         |
+     clisp              |                         []                       |
+     console-tools      |                         []                       |
+     coreutils          |       []                []       []       []     |
+     cpio               |       []                []                []     |
+     cpplib             |                                           []     |
+     cryptonit          |              []                           []     |
+     dialog             |                                           []     |
+     diffutils          |       []     []      [] []             [] []     |
+     doodle             |                                     []    []     |
+     e2fsprogs          |       []                                  []     |
+     enscript           |              []      [] []       []       []     |
+     fetchmail          |       []                []          []           |
+     findutils          |       [] []                               []     |
+     findutils_stable   |       [] []          []       [] []       []     |
+     flex               |       []     []      [] []                []     |
+     fslint             |                                           []     |
+     gas                |                                                  |
+     gawk               |       []     []      []                   []     |
+     gcal               |                                           []     |
+     gcc                |                                        [] []     |
+     gettext-examples   |       [] []          [] []    [] []    [] []     |
+     gettext-runtime    |       [] []          [] []    [] []    [] []     |
+     gettext-tools      |       []             [] []    [] []    [] []     |
+     gip                |                   []          []       [] []     |
+     gliv               |       []     []      [] []    []          []     |
+     glunarclock        |              []      [] []    []       [] []     |
+     gmult              |                   [] []                [] []     |
+     gnubiff            |                      ()                   []     |
+     gnucash            |       ()                                  []     |
+     gnuedu             |                                                  |
+     gnulib             |       []                         []       []     |
+     gnunet             |                                                  |
+     gnunet-gtk         |                                           []     |
+     gnutls             |       []                                  []     |
+     gpe-aerial         |          []  []      [] []       []    [] []     |
+     gpe-beam           |          []  []      [] []       []    [] []     |
+     gpe-calendar       |                         []       []    [] []     |
+     gpe-clock          |          []  []      [] []    [] []    [] []     |
+     gpe-conf           |          []  []      [] []    [] []       []     |
+     gpe-contacts       |                      [] []       []    [] []     |
+     gpe-edit           |       [] []  []      [] []    [] []    [] []     |
+     gpe-filemanager    |                                  []       []     |
+     gpe-go             |       []     []      [] []    [] []    [] []     |
+     gpe-login          |          []  []      [] []    [] []    [] []     |
+     gpe-ownerinfo      |          []  []      [] []    [] []    [] []     |
+     gpe-package        |                                  []       []     |
+     gpe-sketchbook     |          []  []      [] []    [] []    [] []     |
+     gpe-su             |          []  []      [] []    [] []    [] []     |
+     gpe-taskmanager    |          []  []      [] []    [] []    [] []     |
+     gpe-timesheet      |          []  []      [] []    [] []    [] []     |
+     gpe-today          |          []  []      [] []    [] []    [] []     |
+     gpe-todo           |                         []       []    [] []     |
+     gphoto2            |    [] []             []       []       [] []     |
+     gprof              |              []      []                   []     |
+     gpsdrive           |                         []                []     |
+     gramadoir          |                               []          []     |
+     grep               |       []                      [] []       []     |
+     gretl              |       [] []  []                                  |
+     gsasl              |       []                               [] []     |
+     gss                |       []             []       []          []     |
+     gst-plugins-bad    |       []     []                           []     |
+     gst-plugins-base   |       []                                  []     |
+     gst-plugins-good   |       []                                  []     |
+     gst-plugins-ugly   |       []     []                           []     |
+     gstreamer          |       []                            [] [] []     |
+     gtick              |                         []                       |
+     gtkam              |    [] []     []         []                []     |
+     gtkorphan          |                                           []     |
+     gtkspell           |              []   [] [] []    [] []    [] []     |
+     gutenprint         |                                           []     |
+     hello              |       []     []      [] []    [] []    [] []     |
+     herrie             |       []                []                []     |
+     hylafax            |                                                  |
+     idutils            |       []     []      [] []                []     |
+     indent             |       []     []      [] []    []       [] []     |
+     iso_15924          |                                                  |
+     iso_3166           |    [] [] []  []      [] [] [] [] [] [] [] []  [] |
+     iso_3166_2         |                                                  |
+     iso_4217           |       [] []             [] []    []    [] []     |
+     iso_639            |       []                [] [] [] []    [] []     |
+     jpilot             |                                                  |
+     jtag               |                               []                 |
+     jwhois             |       []     []      []                   []     |
+     kbd                |       []             []                   []     |
+     keytouch           |                                           []     |
+     keytouch-editor    |                                           []     |
+     keytouch-keyboa... |                                           []     |
+     latrine            |                                                  |
+     ld                 |                                           []     |
+     leafpad            |       [] []             []    []          []  [] |
+     libc               |       []                []    []          []     |
+     libexif            |       []                      []                 |
+     libextractor       |                      []                   []     |
+     libgpewidget       |       [] []  []      []       [] []    [] []     |
+     libgpg-error       |       []             []                   []     |
+     libgphoto2         |       []                                         |
+     libgphoto2_port    |       []                []                []     |
+     libgsasl           |       []             []                [] []     |
+     libiconv           |                                  []    [] []     |
+     libidn             |       []                               [] ()     |
+     lifelines          |       []                                  []     |
+     lilypond           |                                                  |
+     lingoteach         |              []                                  |
+     lprng              |       []                                         |
+     lynx               |              []         []                []     |
+     m4                 |       []     []      [] []                []     |
+     mailfromd          |       []                                         |
+     mailutils          |       []                []                []     |
+     make               |       []     []         []                []     |
+     man-db             |       []             [] []                []     |
+     minicom            |       []     []      [] []                []     |
+     nano               |              []      [] []                []     |
+     opcodes            |                      []                   []     |
+     parted             |       []                                         |
+     pilot-qof          |                                                  |
+     popt               |       [] []             []                []     |
+     psmisc             |       []                                  []     |
+     pwdutils           |       []                                  []     |
+     qof                |              []                           []     |
+     radius             |       []                []                       |
+     recode             |       [] []  []      [] []       []       []     |
+     rpm                |       [] []             []                []     |
+     screem             |                                                  |
+     scrollkeeper       |       []             [] []    []    [] [] []     |
+     sed                |       [] []  []      [] []    [] []    [] []     |
+     shared-mime-info   |       [] []  []                     [] [] []     |
+     sharutils          |       []                []             [] []     |
+     shishi             |       []                                         |
+     skencil            |          []  []                           []     |
+     solfege            |              []                                  |
+     soundtracker       |                               []          []     |
+     sp                 |                                                  |
+     system-tools-ba... |    [] [] []  []      []             [] [] []  [] |
+     tar                |       []                []       []       []     |
+     texinfo            |       []             [] []                []     |
+     tin                |                         ()                       |
+     tuxpaint           |       [] []                      [] [] [] []     |
+     unicode-han-tra... |                                                  |
+     unicode-transla... |                                                  |
+     util-linux         |              []         []       []       []     |
+     util-linux-ng      |              []         []       []       []     |
+     vorbis-tools       |                         []                       |
+     wastesedge         |                                                  |
+     wdiff              |       []     []      [] []    [] []       []     |
+     wget               |          []             []    []          []     |
+     xchat              |    []                   []    [] [] [] [] []     |
+     xkeyboard-config   |                               [] []       []     |
+     xpad               |                               [] []       []     |
+                        +--------------------------------------------------+
+                          or pa pl pt pt_BR rm ro ru rw sk sl sq sr sv  ta
+                           0  5 77 31  53    4 58 72  3 45 46  9 45 122  3
+
+                          tg th tk tr uk ven vi  wa xh zh_CN zh_HK zh_TW zu
+                        +---------------------------------------------------+
+     Compendium         |          []        []         []          []      | 19
+     a2ps               |          [] []     []                             | 19
+     aegis              |                    []                             |  1
+     ant-phone          |          []        []                             |  6
+     anubis             |          [] []     []                             | 11
+     ap-utils           |             ()     []                             |  4
+     aspell             |             []     []  []                         | 16
+     bash               |          []                                       |  6
+     bfd                |                                                   |  2
+     bibshelf           |                    []                             |  7
+     binutils           |          [] []     []                     []      |  9
+     bison              |          [] []     []                     []      | 20
+     bison-runtime      |             []     []         []          []      | 18
+     bluez-pin          |          [] []     []  []     []          []      | 28
+     cflow              |             []     []                             |  5
+     clisp              |                                                   |  9
+     console-tools      |          []        []                             |  5
+     coreutils          |          [] []     []                             | 18
+     cpio               |          [] []     []         []                  | 11
+     cpplib             |          [] []     []         []          []      | 12
+     cryptonit          |                    []                             |  6
+     dialog             |                    []  []     []                  |  9
+     diffutils          |          [] []     []         []          []      | 29
+     doodle             |                    []                             |  6
+     e2fsprogs          |          []        []                             | 10
+     enscript           |          [] []     []                             | 16
+     fetchmail          |          []        []                             | 12
+     findutils          |          [] []     []                             | 11
+     findutils_stable   |          [] []     []                     []      | 18
+     flex               |          []        []                             | 15
+     fslint             |                    []                             |  2
+     gas                |          []                                       |  3
+     gawk               |          []        []         []                  | 16
+     gcal               |          []                                       |  5
+     gcc                |          []                   []          []      |  7
+     gettext-examples   |          [] []     []         []    []    []      | 29
+     gettext-runtime    |          [] []     []         []    []    []      | 28
+     gettext-tools      |          [] []     []         []          []      | 20
+     gip                |                    []                     []      | 13
+     gliv               |          []        []                             | 11
+     glunarclock        |                    []  []                 []      | 15
+     gmult              |          []        []         []          []      | 16
+     gnubiff            |                    []                             |  2
+     gnucash            |          () []                                    |  5
+     gnuedu             |                    []                             |  2
+     gnulib             |                    []                             | 10
+     gnunet             |                                                   |  0
+     gnunet-gtk         |          []        []                             |  3
+     gnutls             |                                                   |  4
+     gpe-aerial         |                    []         []                  | 14
+     gpe-beam           |                    []         []                  | 14
+     gpe-calendar       |                    []  []                         |  7
+     gpe-clock          |          []        []  []     []                  | 21
+     gpe-conf           |                    []  []     []                  | 16
+     gpe-contacts       |                    []         []                  | 10
+     gpe-edit           |          []        []  []     []          []      | 22
+     gpe-filemanager    |                    []  []                         |  7
+     gpe-go             |          []        []  []     []                  | 19
+     gpe-login          |          []        []  []     []          []      | 21
+     gpe-ownerinfo      |          []        []         []          []      | 21
+     gpe-package        |                    []                             |  6
+     gpe-sketchbook     |          []        []                             | 16
+     gpe-su             |          []        []  []     []                  | 21
+     gpe-taskmanager    |          []        []  []     []                  | 21
+     gpe-timesheet      |          []        []         []          []      | 18
+     gpe-today          |          []        []  []     []          []      | 21
+     gpe-todo           |                    []  []                         |  8
+     gphoto2            |             []     []         []          []      | 21
+     gprof              |          []        []                             | 13
+     gpsdrive           |                    []                             |  5
+     gramadoir          |                    []                             |  7
+     grep               |                    []                             | 12
+     gretl              |                                                   |  6
+     gsasl              |                    []         []          []      |  9
+     gss                |                    []                             |  7
+     gst-plugins-bad    |             []     []         []                  | 13
+     gst-plugins-base   |             []     []                             | 11
+     gst-plugins-good   |             []     []         []    []    []      | 16
+     gst-plugins-ugly   |             []     []         []                  | 13
+     gstreamer          |          [] []     []                             | 18
+     gtick              |             []     []                             |  7
+     gtkam              |                    []                             | 16
+     gtkorphan          |                    []                             |  7
+     gtkspell           |             []     []  []     []    []    []      | 27
+     gutenprint         |                                                   |  4
+     hello              |          [] []     []         []          []      | 38
+     herrie             |          []        []                             |  8
+     hylafax            |                                                   |  0
+     idutils            |          []        []                             | 15
+     indent             |          [] []     []         []          []      | 28
+     iso_15924          |                    []         []                  |  4
+     iso_3166           |    [] [] [] []     []  []     []    []    []      | 54
+     iso_3166_2         |                    []         []                  |  4
+     iso_4217           |    []    []        []         []    []            | 24
+     iso_639            |             []     []  []     []    []            | 26
+     jpilot             |          [] []     []         []                  |  7
+     jtag               |                    []                             |  3
+     jwhois             |          []        []                     []      | 13
+     kbd                |          [] []     []                             | 13
+     keytouch           |                    []                             |  8
+     keytouch-editor    |                    []                             |  5
+     keytouch-keyboa... |                    []                             |  5
+     latrine            |          []        []                             |  5
+     ld                 |          []        []         []          []      | 10
+     leafpad            |          [] []     []         []          []      | 24
+     libc               |          []                   []          []      | 19
+     libexif            |                    []                             |  5
+     libextractor       |                    []                             |  5
+     libgpewidget       |                    []  []     []                  | 20
+     libgpg-error       |                    []                             |  6
+     libgphoto2         |             []     []                             |  9
+     libgphoto2_port    |             []     []                     []      | 11
+     libgsasl           |                    []                             |  8
+     libiconv           |                    []  []                         | 11
+     libidn             |                    []         []                  | 11
+     lifelines          |                                                   |  4
+     lilypond           |                    []                             |  6
+     lingoteach         |                    []                             |  6
+     lprng              |                    []                             |  2
+     lynx               |          [] []     []                             | 15
+     m4                 |                    []         []          []      | 18
+     mailfromd          |             []     []                             |  3
+     mailutils          |             []     []                             |  8
+     make               |          []        []         []                  | 20
+     man-db             |                    []                             |  9
+     minicom            |                    []                             | 14
+     nano               |                    []         []          []      | 20
+     opcodes            |          []        []                             | 10
+     parted             |          [] []                            []      | 11
+     pilot-qof          |                    []                             |  1
+     popt               |          []        []         []          []      | 18
+     psmisc             |                    []         []                  | 10
+     pwdutils           |                    []                             |  3
+     qof                |                    []                             |  4
+     radius             |             []     []                             |  7
+     recode             |          []        []         []                  | 25
+     rpm                |          [] []     []                     []      | 13
+     screem             |                    []                             |  2
+     scrollkeeper       |          [] []     []                     []      | 26
+     sed                |          []        []         []          []      | 23
+     shared-mime-info   |             []     []         []                  | 29
+     sharutils          |          []        []                     []      | 23
+     shishi             |                    []                             |  3
+     skencil            |                    []                             |  7
+     solfege            |                    []                             |  3
+     soundtracker       |          []        []                             |  9
+     sp                 |          []                                       |  3
+     system-tools-ba... |    []    [] []     []     []  []          []      | 38
+     tar                |          [] []     []                             | 17
+     texinfo            |          []        []         []                  | 15
+     tin                |                                                   |  1
+     tuxpaint           |                    []  []                 []      | 19
+     unicode-han-tra... |                                                   |  0
+     unicode-transla... |                                                   |  2
+     util-linux         |          [] []     []                             | 20
+     util-linux-ng      |          [] []     []                             | 20
+     vorbis-tools       |             []     []                             |  4
+     wastesedge         |                                                   |  1
+     wdiff              |          []        []                             | 23
+     wget               |          []        []                     []      | 20
+     xchat              |             []     []         []          []      | 29
+     xkeyboard-config   |          [] []     []                             | 14
+     xpad               |                    []         []          []      | 15
+                        +---------------------------------------------------+
+       76 teams           tg th tk tr uk ven vi  wa xh zh_CN zh_HK zh_TW zu
+      163 domains          0  3  1 74 51  0  143 21  1  57     7    45    0  2036
+
+   Some counters in the preceding matrix are higher than the number of
+visible blocks let us expect.  This is because a few extra PO files are
+used for implementing regional variants of languages, or language
+dialects.
+
+   For a PO file in the matrix above to be effective, the package to
+which it applies should also have been internationalized and
+distributed as such by its maintainer.  There might be an observable
+lag between the mere existence a PO file and its wide availability in a
+distribution.
+
+   If November 2007 seems to be old, you may fetch a more recent copy
+of this `ABOUT-NLS' file on most GNU archive sites.  The most
+up-to-date matrix with full percentage details can be found at
+`http://translationproject.org/extra/matrix.html'.
+
+1.6 Using `gettext' in new packages
+===================================
+
+If you are writing a freely available program and want to
+internationalize it you are welcome to use GNU `gettext' in your
+package.  Of course you have to respect the GNU Library General Public
+License which covers the use of the GNU `gettext' library.  This means
+in particular that even non-free programs can use `libintl' as a shared
+library, whereas only free software can use `libintl' as a static
+library or use modified versions of `libintl'.
+
+   Once the sources are changed appropriately and the setup can handle
+the use of `gettext' the only thing missing are the translations.  The
+Free Translation Project is also available for packages which are not
+developed inside the GNU project.  Therefore the information given above
+applies also for every other Free Software Project.  Contact
+`coordinator at translationproject.org' to make the `.pot' files available
+to the translation teams.
+
diff --git a/AUTHORS b/AUTHORS
new file mode 100644
index 0000000..0a943db
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,28 @@
+j. pommier (c0in at altern.org)
+mais aussi (dans un ordre plus ou moins chronologique):
+* Jérome Lambourg (http_win.c, le port cygwin)
+* Laurent Mazet (patch)
+* kadreg (pixmap de fond)
+* Mike Hommey (mode horloge, if-encoded-since, aide précieuse pour les pb de chunk encoding)
+* Josselin Mouette (ralentissement du coincoin, i18n)
+* Gael le Mignot (regexp.c)
+* Frederic Py (ispell)
+* Franck Quélain (commande externe, reprise du pdfm)
+* Loic Restoux (plateau de fruits de mer, patchs divers et variés)
+* Vincent Creuzillet (plop_words) 
+* Benjamin Michotte (option pinnipede.auto_open)
+* Jaimé Ragnagna aka jr-lamoule (idée du wmccc, promotion du wmccc :P)
+* Olivier Jeannet (retro traduction fr, reaccentuation de la page web)
+et d'autres (...) que j'ai oublié car c'est le bordaile dans ma bal
+* gle pour lui faire plaisir parce qu'il a pas proposé de patch mais il a bien aidé à virer pas mal de bugs -- update: gle est l'auteur du patch qui colore le fond du palmi -- reupdate: il a bien réparé cygwin qui était un peu explosé depuis le passage en ipv6
+* woof (compatibilité ipv6, passage à getaddrinfo)
+* choocroot pour son minipatch du wmccc qui corrige le refresh des boutons de couleur
+et aussi de vrais morceaux de wmpinboard, wget, et openssh (fake-*)
+* Dae pour la proxyfication de wmcc-totoz-get et ses nombreux bug-reports
+* 2xplop pour la feuille de style des totoz-bookmarks
+* happypenguin pour le minipatch du backend
+* the files src/md5.[ch] were written by L. Peter Deutsch -- http://libmd5-rfc.sourceforge.net/
+* eolyte (remplacement du script wmcoincoin-totoz-get par un truc plus nettement robuste et moins gruik dans pinnipede_totoz)
+* twolife: plein de bouts de patch pour la compile sur des trucs qui sucent (macosx, cygwin..)
+* MagicalTux: option translit pour iconv
+* Triton ( compat avec la tribune 2.0 de llinfo)
diff --git a/COPYING b/COPYING
new file mode 100644
index 0000000..4a1aafb
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,340 @@
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, 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
+

+	    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) <year>  <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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  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) year  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..e92fd3a
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,1357 @@
+2012-07-02  gettextize  <bug-gnu-gettext at gnu.org>
+
+	* configure.ac (AM_GNU_GETTEXT_VERSION): Bump to 0.17.
+
+--------------------------v2.6.0-----------------------------------------
+2012-07-02  pouaite <c0in at altern.org>
+	application du patch utf8 de seeschloss< + gestion du X-Post-Id 
+
+--------------------------v2.5.1-g-----------------------------------------
+2012-07-02   pierre80<pierre80 at fedoraproject.org> 
+
+	*src/wmcoincoin.c : mise a jour du post id pour linuxfr pour éviter de se 
+	prendre une erreur 406 au post et de l'adresse de la FSF 
+	*copying : Mise a jour de l'adresse FSF
+	*Makefile.am :ajout de xpms/icon.xpm a la ligne 126 
+--------------------------v2.5.1-f-----------------------------------------
+2007-09-26  triton <triton at kumal.info>
+
+	* pinnipede_totoz.c, totoz_bookmark.c, wmcoincoin-totoz-get: Co-patchage
+	de motodashi et Triton pour le support de totoz.eu en lieu et place de
+	forum.hardware.fr pour les smileys.
+
+	* pinnipede.c, prefs.c, etc: Patch de motodashi pour faire des recherches
+	sur wikipedia (fr)
+
+	* src/board.c: Gros patch de Triton pour le support enfin complet (pour
+	l'instant) de la tribune 2.0 de bouchot.org (llinfo iz daide). On peu
+	maintenant utiliser le backend "normal" sans avoir de <clock time="...">
+	ou de <a class="smiley..."> qui s'affichent.
+
+--------------------------v2.5.1-e-----------------------------------------
+2006-09-13  pouaite <c0in at altern.org>
+
+  * wmcoincoin.c, board.c etc: patch de Triton Circonflexe pour la
+	compatibilite avec la tribune 2.0 de llinfo (accept	+ HTTP 201)
+
+  * palmipede.c: patch de motodashi (raccourcis pour inserer des [:totoz]
+	de chats tout pourris)
+
+--------------------------v2.5.1-d-----------------------------------------
+2005-10-13  pouaite <c0in at altern.org>
+
+	* configure.ac: deux-trois bricoles pour que ca compile sous
+	cygwin.
+	
+	* src/pinnipede_totoz.c: robustification par rapport a la fonction
+	de hachage qui confirme sa nazitude.
+
+  * src/palmipede.c (editw_handle_button_press): le retour de la
+	molette dans le palmi, pour ceux qui mettent dans leur
+	.wmcoincoin/options: palmipede.enable_scroll_wheel_for_boulets:
+	True
+
+--------------------------v2.5.1-c-----------------------------------------
+2005-09-27  pouaite <c0in at altern.org>
+
+	* src/kbcoincoin.c (kb_xim_lookup_key): oops petit plantage avec
+	l'autoswallow.
+
+--------------------------v2.5.1-b-----------------------------------------
+2005-09-26  pouaite <c0in at altern.org>
+
+	* src/wmcoincoin.c: (x_error_handler): \o/ et maintenant c'est
+	l'odieux bug du sigpipe circulaire qui bouffe 100% de cpu quand on
+	reboute le X qui vient de passer à la casserole. oue!
+
+	* src/kbcoincoin.c (kb_xim_lookup_key): \o/ je lui ai mis sa maire
+	au bug qui faisait qu'on ne pouvait pas saisir d'accent
+	circonflexe (entre autres) dans le palmi quand le focus etait sur
+	le pinni. Maintenant que la gestion de l'"input method" est un peu
+	plus carré, il est meme possible que le bug x86_64 parte avec
+	l'eau du bain.
+	
+
+2005-09-25  pouaite <c0in at altern.org>
+	* src/wmcoincoin.c: un ptit bug cosmetique sur le refresh.
+
+--------------------------v2.5.1-a-----------------------------------------
+2005-09-24  pouaite  <c0in at altern.org>
+
+	* src/board.c: et une nouvelle feature, une: l'antibloub (patent
+	pending). Parce que comme moi vous avez envie de distribuer des
+	coups de pelle à clous quand vous venez de poster l'url d'une
+	super news yahoo sur Britney Spears et qu'un gros rabat-joie vous
+	hurle BLOUB. Cette humiliation fait désormais partie du passé,
+	l'antibloub vous signalera dans le palmi que vous vous apprêtez à
+	poster une url déjà vue!
+	
+	* src/palmipede.c (editw_cb_paste_external): correction du tres
+	vieux bug qui empechait de coller plus de 256 caracteres d'un coup
+	dans le palmi \o/
+
+	* src/palmipede.c (editw_handle_button_press): la mollette dans le
+	palmipede est officiellement désactivé, pour cause de: feature
+	trop chiante.
+
+	* src/wmcoincoin.c (update_timers): correction d'un vieux bug qui
+	faisait que certaines tribunes desactivées se chargeaient malgré
+	tout une fois au démarrage du coincoin.
+
+	* src/wmcoincoin.c (open_url): autorise les répetitions du '%s'
+	dans la commande pour lancer le browser suite à une suggestion de
+	guiguid. La commande par défaut pour firefox est désormais:
+	
+	mozilla-firefox -remote Openurl\(%s\,new-tab\) || mozilla-firefox %s& 
+
+	* src/coin_util.c: patch de MagicalTux (option translit pour iconv).
+
+--------------------------v2.5.0-g-----------------------------------------
+2005-06-11  pouaite  <c0in at altern.org>
+	* configure.ac: integration du patch de twolife pour la compile
+	sur macosx
+
+2005-06-09  pouaite  <c0in at altern.org>
+
+	* src/totoz_bookmark.c: correction du bug signalé par lordoric (le
+	bookmark.html n'etait plus mis a jour depuis le 15/02/05).
+
+--------------------------v2.5.0-f-----------------------------------------
+2005-02-23  pouaite  <c0in at altern.org>
+
+	* src/board.c: du coup y'avait des problemes de logins d'"Anonyme"
+	* configure.ac: ça devrait mieux compiler sous cygwin
+
+--------------------------v2.5.0-e-----------------------------------------
+2005-02-21  pouaite  <c0in at altern.org>
+
+	* src/board.c: voilà c'est fait le parseur historique a été mis à
+	la benne. Il est remplacé par XMLCoinCoin qui a déjà fait ses
+	preuves avec les RSS.
+
+--------------------------v2.5.0-d-----------------------------------------
+	
+2005-02-15  pouaite  <c0in at altern.org>
+
+	* src/pinnipede.c: kikooo! Salut les gros nains! ça fait pas loin
+	de 6 mois que je n'avais pas touché au bouzin. Mais puisque
+	pas_lui< me tanne depuis des semaines pour corriger le bug du ^S^S
+	dans le pinni, voilà c'est fait :o
+	
+	* src/palmipede.c: accepte le middle-clic sur le totoz.
+
+	* src/totoz_bookmark.c: passe une url du genre
+	"file:/home/coin/.wmcoincoin/bookmarks.html" au browser.
+	
+2004-07-02  pouaite  <c0in at altern.org>
+
+	* src/fontcoincoin.c: rooh le sale bug, je ne sais pas trop si
+	c'est un disfonctionnement de Xft, mais XftDrawChange fait parfois
+	une belle Xerror quand l'ancien drawable a été
+	détruit. Visiblement c'était ça le bug mystérieux du balltrap qui
+	tue coincoin pour de vrai.
+	
+2004-06-27  pouaite  <c0in at altern.org>
+
+	* src/prefs.c (option_browser): Zorel< a trouvé un bug dans la
+	gestion de http.browser (le bouzin plantait en essayant d'afficher
+	un message qui conseille de ne pas quoter le %s)
+
+--------------------------v2.5.0-c-----------------------------------------
+2004-05-16  pouaite  <c0in at altern.org>
+	
+	* encore des bugfixes, en particulier sur le balltrap, qui est
+	maintenant contrôlé par deux switches:
+	
+	  - le canard de la barre de boutons du pinnipede permet de
+	  desactiver globalement le balltrap.
+	
+	  - dans le wmccc, le dialogue "site options" permet de desactiver
+	  le balltrap sur certains sites (par ex. sur woof.lu)
+	
+	Il est aussi possible de liquider silencieusement tous les canards
+	qui volent avec un clic droit sur la partie supérieure de l'applet
+	(et le clic gauche permet de faire des lâchers de canards en
+	plastique).
+	
+	* les tabs peuvent être positionnés à gauche du pinni (par
+	défaut), ou bien en bas, ou à droite du pinni.
+	
+	* le pb de couleur de fond du palmi (qd l'options 'colored tabs'
+	n'est pas cochée) est fixé.
+	
+	* le d/l des smileys hfr ne devrait plus partir en vrille quand
+	hfr est down.
+	
+--------------------------v2.5.0-b-----------------------------------------
+2004-05-02  pouaite  <c0in at altern.org>
+
+	* plein de petits bugs fixes sur le balltrap, la relecture des
+	anciennes options, le changement de l'ordre des sites dans le
+	wmccc, etc (j'ai déjà oublié la liste :/)
+	
+--------------------------v2.5.0-a-----------------------------------------
+2004-04-28  pouaite  <c0in at altern.org>
+
+	* src/http.c: wmcc va chercher un proxy par défaut dans la
+	variable d'env http_proxy. c'est aussi celui qui est utilisé pour
+	le d/l des smileys hfr.
+
+	* quelques microbugfixes inspirés par les remarques constructives
+	du pointilleux dae (qui decroche le titre envié de Bug Reporter Of
+	The Month) + mini corrections dans le totoz_get
+
+2004-04-27  pouaite  <c0in at altern.org>
+
+	* src/pinnipede_totoz.c: patch d'eolyte (remplacement de
+	wmcc-totoz-get par du vrai code pour le d/l des img de hfr)
+
+	* src/balltrap.c: pan ! pan !
+
+	* le coincoin relit les options de la 2.4.6
+
+	* wmccc: bon c'est la merde avec l'utf8. gtk2 ne comprend que ça,
+	et wmcc n'est pas encore ready pour le tout-utf8, en conséquence
+	de quoi le wmccc n'accepte plus que l'US-ASCII de base, c'est beau
+	le progrès.
+
+2004-04-*  pouaite  <c0in at altern.org>
+	* wmccc: bon, le nouveau wmccc en gtk2 commence a planter un peu
+	moins, ça n'a pas été une mince affaire, et c'est surtout très
+	chiant à faire.
+	
+2004-02-*  pouaite  <c0in at altern.org>
+	
+	* src/board_pop3.c: ajout extremement goret de la surveillance des
+	mailbox pop3. On peut enfin profiter des 3nlarge Y0ur pEn!s en
+	direct dans le pinnipede, ou des gros trolls sur debian-legal,
+	tout ça avec une lisibilité maximale grace au dequoteur à
+	coulisse.
+
+	Degruikerie des options en conséquence: maintenant il y
+	a trois type de sites: "board_site:", "rss_site:", "pop_site:"
+	dont le param. principal est l'option ".backend.url: http://machin/truc"
+	(ou .backend.url: pop://mail.altern.org).
+	Les infos sensibles (cookies, passwd pop3) sont maintenant stockées (de preference) dans
+	le fichier options.auth , au format:
+	 "nomsite" cookie:"lescookies"
+	 "nomsite" user:"jkevin" pass:"1_0wn_J0o"
+
+	J'ai tenté de conserver la compat avec le format d'options
+	précedent, mais c'est très relatif.
+	
+	je conseille une certaine circonspection par rapport au pop3, le
+	comportement du coincoin n'est aucunement garanti, les mots de
+	passe sont en clairs dans le fichier options.auth ce qui est "pas
+	très bien"(c)
+	
+	* ajout de fontcoincoin, un wrapper d'une puissance rare qui
+	arrache les poils de pango. Du coup wmcc est maintenant dépendant
+	de Xft.
+	
+	* sauvegarde dans wmcc_state de l'etat du pinnipede: refresh auto
+	et tabs active
+	
+	* lecture de l'encoding des backends et conversion en iso8859 à
+	grands coups de iconv
+	
+	* src/wmccc*: passage en gtk2 -- le vieux wmccc est mis à la
+	casse.
+
+	* l'ancienne fenetre des news, la gestion des messages et des
+	commentaires: à la casse.  wmcc n'accepte plus que des backends
+	xml et affiche tout dans le pinni
+	
+	* src/board.c etc: gestion des rss avec un parseur XML en bois.
+	
+	* scripts/wmcoincoin-totoz-get: patch de dae pour la gestion du
+	proxy.
+
+	* scripts/wmcoincoin-search-cookies: script de recherche de
+	cookies dans les rep de mozilla, kde, etc.
+	
+	* src/swallowcoincoin.c: sorte de bidouille pour l'auto-avalage de
+	dockapps. marche mal.
+	
+	* src/pinnipede*: changement orientation de la liste des tabs.
+	
+	* src/totoz_bookmark.c: bookmarks pour les [:totoz]
+
+	* src/palmipede.c: enlargement du palmipede (de 16 pixels) --
+	compatibilité avec les locales UTF8
+
+--------------------------v2.4.6-b-----------------------------------------
+2003-08-26  pouaite  <c0in at altern.org>
+
+	* src/pinnipede.c (pp_handle_keyrelease): reglage du probleme de
+	bouton qui se blo, grace a une intervention cruciale de olo<
+	* src/board_util.c: reconnaissance des ref cross-tribune dont le @
+	contient des chiffres (micro-patch de gle).
+	* src/wmccc_callbacks.c: ajout de la tribune de nofrag (qui est
+	équipée d'un backend d'un fort beau gabarit) dans les options
+	predefinies du wmccc.
+
+2003-08-25  pouaite  <c0in at altern.org>
+
+	* src/pinnipede.c: patch de lo< pour les urls avec des attributs
+
+--------------------------v2.4.6-a-----------------------------------------
+2003-07-27  pouaite  <c0in at altern.org>
+
+	* platypus/* : ajout du wmcoincoin_player (nécessite imlib2-dev),
+	ainsi que wmcc-totoz-get pour la gestion des smileys de hfr. Voir
+	les nouvelles options du wmccc/onglet board.
+
+	* src/pinnipede.c src/coin_xutil.c: correction (je pense) des
+	problèmes de lenteur debilissime de la transparence. Par contre
+	j'ai toujours pas compris pourquoi c'était si lent, et pourquoi
+	des fois c'etait normal :-/ 
+	
+	* src/board.c (board_update): ne compte plus les posts boitakonnes
+	dans les nouveaux messages
+
+	* finalement le palmi en override redirect, c'était
+	mieux. L'option est qd meme dans le wmccc (onglet palmi).
+
+	* src/pinnipede.c: le clic sur la petite croix pour désactiver
+	l'autorefresh a été remplacé par shift+clic_gauche sur le tab,
+	c'est moins chiant à viser.
+	
+2003-07-19  pouaite  <c0in at altern.org>
+
+	* src/wmcoincoin.c,src/palmipede.c,src/coin_xutil.c: bidouilles
+	sur le palmi (et l'applet quand wmcc utilise les options -w -B):
+	auparavant ces fenetres étaient en "override redirect" cad non
+	gerées par le windowmanager, maintenant ce sont des fenetres
+	"normales" mais sans décorations, ce qui permet de laisser le
+	wmanager prendre soin de la gestion du focus dans le palmi.
+
+--------------------------v2.4.5-b-----------------------------------------
+2003-06-25  pouaite  <c0in at altern.org>
+
+	* support correct du xinerama
+	* src/palmipede.c: un petit timer pour les gens qui s'endorment
+	sur la touche "return"
+
+2003-06-24  pouaite  <c0in at altern.org>
+
+	* navigation clavier possible quand le palmi est sorti (pour
+	pouvoir répondre à plusieurs messages avec ctrl-enter). Du coup le
+	post anonyme n'est plus ctrl-enter mais shift-enter.
+	fix compile pour cygwin (particulièrement pour ouinouin-ixpé)
+	
+--------------------------v2.4.5-a-----------------------------------------
+2003-06-21  pouaite  <c0in at altern.org>
+
+	* src/pinnipede.c (pp_handle_keypress): le pinnipede comprend
+	enfin ce que lui dit le clavier: du coup plein de nouveaux
+	raccourcis (qui sont pour la plupart désactivés quand le palmipede
+	est activé):
+
+	- return : ouvre le palmipede	
+	- ctrl-return: ouvre le palmipede pour répondre au message affiché
+	en bas du pinnipède ou au message selectionné avec ctrl+(haut|bas)
+	- ctrl-s : passe en mode recherche incrémentale (tapez le texte à
+	chercher, et le pinni affiche tous les postes qui "matchent" le
+	mot. La recherche du mot est aussi faite dans les logins, les ua,
+	et a l'intérieur des urls.
+	- ctrl-f : active/désactive le filtrage.
+	- ctrl-z : passe en boss-mode.
+	- espace : rafraichissement immédiat de la tribune affichée.
+	- ctrl-espace: rafraichissement immédiat de toutes les tribunes
+	affichées.
+	- tab : bascule entre une tribune affichée et toutes les tribunes
+	affichées.
+	- escape : annule le téléchargement en cours
+	- haut,bas,pgup,pgdown,home,end: scrolle le pinnipede.
+	- ctrl+(haut|bas): navigue dans le pinnipède en selectionnant les
+	messages successifs en en faisant ressortir leurs horloges comme
+	si elles étaient survolées par la souris.
+	- gauche/droite : change la tribune active.
+	- "r": active/désactive l'autorefresh.
+
+	* ajout d'un deuxième bigornophone, les deux bigornophones sont
+	désactivables dans le menu popup du pinnipède.
+	
+2003-06-19  pouaite  <c0in at altern.org>
+	ce soir c'est flush des trucs faciles de la toudou-list:
+	* src/board.c (board_check_my_messages): suppression du
+	clignotement quand on répond à un de ses propres messages
+	* src/palmipede.c (editw_handle_button_press): changement de la
+	tribune avec la roulette de la souris
+	* src/pinnipede.c (pp_check_survol): sépare la boitakon du
+	décompte des réponses à un post.
+
+2003-06-17  pouaite  <c0in at altern.org>
+
+	* configure.ac: suppr. du test sur le cflag '-g'
+
+2003-06-09  pouaite  <c0in at altern.org>
+
+	* remplacement de la vérif des urls "http:// | ftp:// | https://"
+	par une vérif du style "\w+://.*"
+
+2003-05-26  pouaite  <c0in at altern.org>
+
+	* src/http.c (http_skip_header): fix de la verif des status codes
+	http, grace à happypenguin et son httpd bizarre.
+
+2003-05-07  pouaite  <c0in at altern.org>
+
+	* src/fake-getaddrinfo.h: quelques fixes pour solaris 7 qui sent
+	des pieds. 
+	* src/http.c: typo dans les requetes http pour l'entrée "no-cache"
+
+2003-04-28  pouaite  <c0in at altern.org>
+
+	* src/wmccc.glade reconnection des boites proxy_user et
+	proxy_passwd dont les valeurs n'étaient pas sauvées (merci Huzi).
+
+--------------------------v2.4.4-c-----------------------------------------
+2003-03-12  pouaite  <c0in at altern.org>
+
+	* src/fake-getnameinfo.[ch] src/inet_aton.[ch]: et hop le patch de
+	gle pour cygwin est integré!
+	
+	* src/wmcoincoin.c ajout d'un slash à la fin du referer pour
+	pouvoir à nouveau poster sur linuxfr.
+
+--------------------------v2.4.4-b-----------------------------------------
+2003-03-09  pouaite  <c0in at altern.org>
+
+	* src/board.c (board_log_msg): le bug qui faisait apparaitre
+	certains messages d'une même tribune dans le mauvais ordre est
+	(semble-t-il) résolu.
+	* src/wmccc.c: correction du pb de refresh des boutons de
+	selection de couleur (merci choocroot). Suppression de la floppée
+	de g[td]k-warnings affichés par le wmccc.
+	* src/http.c: tentative de correction pour cygwin. Au moins ça
+	compile. Par contre ça ne marche plus que sous winXP :-/
+	
+--------------------------v2.4.4-a-----------------------------------------
+2003-03-01  pouaite  <c0in at altern.org>
+
+	* src/http.c: passage de tout le truc en IPv6 d'après le patch de
+	woof. Tant pis pour les loosers qui n'ont pas getaddrinfo et consorts.
+	* src/wmccc.c: le wmccc ne sauve plus que les options dont les valeurs
+	sont différentes des valeurs par défaut.
+
+2003-02-28  pouaite  <c0in at altern.org>
+
+	* fix du crash wmccc/wmcc de lordoric. fix des urls relatives pour
+	la caverne. ajout d'un certain nb de tribunes predefinies.
+
+--------------------------v2.4.3-c-----------------------------------------
+2003-01-19  pouaite  <c0in at altern.org>
+
+	* src/palmipede.c (editw_draw): patch gle (couleur de fond du palmi)
+
+--------------------------v2.4.3-b-----------------------------------------
+2003-01-12  pouaite  <c0in at altern.org>
+
+	* les stats de la 2.4.3a sont toutes nazes elles prennent pas en
+	compte le ping pour évaluer la qualitai, du coup ça a été changé
+	et maintenant c'est beaucoup mieux. La qualitai est comprise entre
+	0 et 10, en hommage à l'école des fans, <jacques>booon
+	dimaaaaanche, sous vos applaudissements</jacques>. Pour atteindre
+	le mythique 10 il suffit d'avoir une tribune qui marche et un ping
+	à 60ms (ou un truc du genre j'ai oublié). Pour info, la tribune
+	libre de linuxfr obtient la pathétique note de 0.
+
+	Suite aux requêtes d'une foule en délire d'au moins trois
+	personnes, les tabs peuvent être colorées en fonctions de la
+	couleur de fond des messages, l'option correspondante est dans
+	l'onglet 'pinnipede' en haut.
+
+--------------------------v2.4.3-a-----------------------------------------
+
+2003-01-11  pouaite  <c0in at altern.org>
+
+	* src/palmipede.c src/pinnipede_widgets.c src/pinnipede.c: modif
+	du comportement du palmipede, qui devrait être un peu plus
+	conforme au "bon sens". Le palmipede devrait maintenant permettre
+	à shift< de retrouver son bras gauche (i.e. la touche altgr
+	refonctionne avec xfree 4.3 mais je maintiens qu'il y a quelque
+	chose de louche dans le keymap par défaut de xfree). On peut
+	ouvrir le palmi sur un site particulier et changer le site courant
+	du palmi avec un clic droit sur une des tabs du pinni.
+
+	Le coincoin ne bronche plus quand il se prend un 302 Found dans la
+	face après avoir posté (ce qui arrive sur les tribune hebergées
+	par free.fr).
+		
+	Des petites stats à la noix sur les sites sont accessibles par
+	clic gauche sur la première led, ou bien clic droit sur la led du
+	trollo.
+
+--------------------------v2.4.2-b-----------------------------------------
+2002-12-20  pouaite  <c0in at altern.org>
+
+	* src/board.c (board_update): leger assouplissement du parser de backend
+	(qui supportait mal les espaces avant les balises).
+
+	* src/prefs.c: ajout des options bold, souligné etc pour le login, useragent
+	et l'horloge.
+
+	* src/wmcoincoin.c: non suicide du coincoin quand le xopenim foire
+	pour que ça marche sur l'exceed tout pourri de kadreg.
+
+2002-12-16  F.P.
+	* paf la tribune
+--------------------------v2.4.2-a-----------------------------------------
+2002-11-21  pouaite  <c0in at altern.org>
+
+	* po/fr.po: retro-traductions de oje. Pas testé j'arrive a faire 
+	le coincoin :-/
+
+	* src/comments.c (site_yc_parse_dacode2): collection d'hiver pour
+	les patch de lo< : xp pour templeet, ajout du '/' manquant pour les
+	~login , marquage des urls ouvertes par middle clic
+
+	prise en compte des grouiqueries du nouveau backend (tags du
+	soulignement et du strike).
+
+--------------------------v2.4.1-a-----------------------------------------
+2002-10-16  pouaite  <c0in at altern.org>
+
+	* src/coin_util.c: bugfix de sécurité signalé par jjb: le fichier
+	d'options est créé avec le umask par défaut.. du coup si votre
+	$HOME est world-readable, tout le monde peut connaitre votre
+	cookie. Du coup ça va nous faire une 2.4.1 un peu bâtarde.
+
+	* src/regexp.c (extract_news_txt_dacode2): retour experimental des
+	news de linuxfr
+
+2002-10-14  pouaite  <c0in at altern.org>
+
+	* rendons à jr ce qui appartient à jr :°)
+
+2002-10-05  pouaite  <c0in at altern.org>
+
+	* src/plopup.c (plopup_show): (quasimement) toutes les combos du
+	pinni sont remplacées par un menu contextuel (right clic).
+
+2002-09-25  pouaite  <c0in at altern.org>
+
+	* src/board.c (mi_check_boitakon): la boitakon qui rend kon
+	(+option pinnipede.hungry_boitakon) .. a utiliser avec parcimonie
+	sous peine de se sentir un peu seul
+
+2002-09-22  pouaite  <c0in at altern.org>
+
+	* src/pinnipede_pdfm.c: ajout du patch de Shift (css pour le pdfm)
+
+--------------------------v2.4.0-c-----------------------------------------
+2002-09-08  pouaite  <c0in at altern.org>
+
+	* src/wmcoincoin.c (update_timers): la ptite croix pour desactiver
+	l'autorefresh était cassée
+
+--------------------------v2.4.0-b-----------------------------------------
+2002-09-08  pouaite  <c0in at altern.org>
+
+	* configure.ac: ajout de l'option --disable-wmccc pour ceux qui n'ont pas gtk
+	* cc_queue.c: correction d'un beau bug qui bouffait les posts envoyés pendant un download
+	en cours..
+	et des petits bugfixes mineurs.
+
+--------------------------v2.4.0-a-----------------------------------------
+
+2002-09-06  pouaite  <c0in at altern.org>
+
+	* bugfixes bucoliques
+
+2002-09-05  pouaite  <c0in at altern.org>
+
+	* Quelques modifs au niveau de la gestion des d/l, on peut
+	maintenant annuler un d/l en cours.
+
+2002-08-28  pouaite  <c0in at altern.org>
+
+	* ramasse-zombie
+	* les tabs marchent à peu près
+	* le wmccc aussi, à 90%
+	
+2002-08-17  gettextize  <bug-gnu-gettext at gnu.org>
+
+	Bonjour je m'appelle gettextize et je me viens foutre la merde:	
+	* Makefile.am (SUBDIRS): Add m4.
+	(SUBDIRS): Remove intl.
+	(ACLOCAL_AMFLAGS): New variable.
+	(EXTRA_DIST): Add config.rpath.
+	* configure.in (AC_OUTPUT): Add m4/Makefile.
+	(AC_OUTPUT): Remove intl/Makefile.
+
+2002-06-24  pouaite  <c0in at altern.org>
+
+	* correction du bug des votes négatifs, deux trois bugfixes et
+	ajout du support des display 8bits (attention il faut customiser
+	les couleurs pour aboutir à quelque chose de lisible).
+
+2002-06-23  josselin mouette  <joss at debian.org>
+
+	* i18nisation of the coincoin !!
+
+2002-06-09  lordOric (lordoric at free.fr)
+ 
+ 	* src/picohtml.c (picohtml_parse): patch pour le support des
+ 	balises autorisées par défaut dans daCode (ajout de <ul>, <ol>,
+ 	<blockquopte>, <em>)
+
+--------------------------v2.3.8-b-----------------------------------------
+2002-06-02  pouaite  <c0in at altern.org>
+
+	* src/http_unix.c: forcément y'avait un truc qui n'allait pas dans
+	le gethostbyname non bloquant (quand le dns ne marchait pas, le
+	coincoin entrait dans une boucle infinie, en bouffant 100% du cpu
+	au passage). C'est corrigé. J'en ai profité pour que la led de
+	transferts http indique quand un gethostbyname est en cours
+	(couleur verte).
+
+--------------------------v2.3.8-a-----------------------------------------
+2002-05-31  pouaite  <c0in at altern.org>
+
+	* src/http.c: et hop un gethostbyname non bloquant, à grands coups de fork!
+
+2002-05-30  pouaite  <c0in at altern.org>
+
+	* bidouille dans configure.in et cie.. normalement 'options' et 'useragents'
+	sont installés dans $prefix/share/wmcoincoin  , et wmcc les recopie dans le
+	~/.wmcoincoin à la première utilisation.
+
+2002-05-28  pouaite  <c0in at altern.org>
+
+	* ajout d'un petit arbre pour que le pinnipède rame moins quand il
+	y a beaucoup de messages (1000 , 2000 ...). Les références doivent
+	aussi fonctionner de manière satisfaisante quand le contenu de la
+	tribune s'étend sur plusieurs jours.
+
+2002-05-27  binny  <binny at baby-linux.net>
+
+	* option option -W et pinnipede.auto_open pour auto-ouvrir le
+	pinnipede quand on lance le coincoin.
+	
+2002-05-26  pouaite  <c0in at altern.org>
+
+	* ajout d'options inutiles
+		pinnipede.strike_color:            008000 000080
+		pinnipede.buttonbar.bgcolor:       cdcdcd cdcdcd
+		pinnipede.buttonbar_fgcolor:       000000 000000
+		pinnipede.buttonbar_msgcnt_color:  7070af 7070af
+		pinnipede.buttonbar_updlcnt_color: 7070af 7070af
+		pinnipede.buttonbar_progressbar_color: ff0000 ff0000
+		pinnipede.buttonbar.bg_color:      cdcdcd cdcdcd
+		pinnipede.buttonbar.fg_color:      000000 000000
+		scrollcoin.bg_color:               cdcdcd cdcdcd
+		scrollcoin.bg_light_color:         ffffff ffffff
+		scrollcoin.bg_dark_color:          626262 626262
+		scrollcoin.arrow_normal_color:     0000ff 00ff00
+		scrollcoin.arrow_emphasized_color: 9c99cd 99cd99
+		scrollcoin.bar_color:              9c99cd 99cd99
+		scrollcoin.bar_light_color:        cdceff ceffce
+		scrollcoin.bar_dark_color:         62659c 649c64
+	
+2002-05-25  pouaite  <c0in at altern.org>
+
+	* src/wmcoincoin.c: sauvegarde automatique des pos/dimensions du
+	pinni et de la fenetre de news (quand pinnipede.location et
+	news.location ne sont pas utilisées)
+
+2002-05-20  pouaite  <c0in at altern.org>
+
+	* nouveau raccourci du palmipède: Alt-F (F comme filtre) active le
+	filtre du pinnipede sur le mot du palmipède qui se trouve sous le
+	curseur. Pratique pour savoir si la dernière news de yahoo sur
+	britney spears a déjà été postée. 
+
+2002-05-13  pouaite  <c0in at altern.org>
+
+	* src/prefs.c: nouvelle option 'include: ' pour inclure un autre
+	fichier d'options (c'est pour faire des thèmes par exemple).
+
+2002-05-12  pouaite  <c0in at altern.org>
+
+	* src/http.c: grosses modifs dans le code http, pour enfin gèrer
+	convenablement les contenus chunk-encodés. Ça rend le coincoin
+	nettement plus rapide pour les d/l, en lui évitant d'attendre
+	(longtemps) que le serveur http prenne de lui-même la décision de
+	fermer la connexion. Par contre, y'a surement pleins de trucs dans
+	le code http qui sont cassés --> trouver lesquels.
+
+	option dock.skin_pixmap, pour pouvoir utiliser les magnifiques
+	skins en cuir crouté de Brice2Nice :)
+
+--------------------------v2.3.7-b-----------------------------------------
+2002-04-26  pouaite  <c0in at altern.org>
+
+	* bugfix du mode horloge pour KDE (ça crashait, merci à gle!)
+
+	* mini bugfixes (autoscroll, bug de survol des horloges,
+	reconnaissances des horloges suivies de points de suspension).
+
+	Option pinnipede.use_AM_PM pour les horloges à l'anglaise comme
+	sur http://woof.lu/board.
+
+--------------------------v2.3.7-a-----------------------------------------
+	
+2002-04-13  pouaite  <c0in at altern.org>
+
+	* nouvelle option 'http.gogole_search_url' pour lancer une
+	recherche (sur google ou autre) avec Alt+{left|middle} clic sur un
+	mot/une selection etc.. D'ailleurs dorénavant le plopifieur, le
+	filtre etc utilisent aussi le texte sélectionné (*quand* il a du
+	texte selectionné) au lieu de l'élément cliqué.
+
+	Le {left|middle} clic sur un login ouvre la page http://linuxfr/~lelogin.
+	Un right clic sur le login ouvre le palmipède en remplissant '/msg lelogin'.
+
+	wmcc fonctionne correctement sous KDE3 (il a pris une fois de plus
+	exemple sur wmpinboard).
+	
+2002-04-12  pouaite  <c0in at altern.org>
+
+	* modifs légères sur la boitakon, avec deux nouveaux
+	super-raccourcis: 
+	  - Shift+Mod1+right clic pour plopifier en niveau 1
+	  - Shift+Ctrl+Mod1+Mod4+right clic pour porter un coup fatal au
+	malotru et l'expédier dans la boitakon.
+	
+	todo: un boitakon howto
+	
+2002-04-10  pouaite  <c0in at altern.org>
+
+	* de nouvelles options:
+	pinnipede.use_fake_real_transparency, (qui suxe)
+	pinnipede.hilight.keyword_color0,
+	pinnipede.hilight.keyword_color1,
+	pinnipede.hilight.keyword_color2,
+	pinnipede.hilight.keyword_color3,
+	pinnipede.hilight.keyword_color4,
+	pinnipede.plop_keywords,
+	pinnipede.hilight_keywords
+	avec les modifs qui vont avec.. Un effet de bord intéressant est que
+	l'option 'pinnipede.plop_keywords' permet de profiter d'une jolie
+	boitakon (voir le fichier d'options)
+	
+2002-04-09  pouaite  <c0in at altern.org>
+
+	* ajout de l'option 'tribune.wiki_emulation', pour émuler le wiki
+	quand celui n'est pas géré par le backend.
+
+2002-04-02  pouaite  <c0in at altern.org>
+
+	* src/coin_xutil.c src/prefs.[ch] etc.. : pas mal de boulot sur la
+	pseudo-transp pour le pinnipède, avec les options qui vont
+	bien. Pour la pseudo-transp, se reporter au RTFF, y'a des astuces.
+	Le type de backend est spécifié par l'option
+	'tribune.backend_type' (voir le fichier d'options)
+	
+2002-04-01  pouaite  <c0in at altern.org>
+
+	* très gros remaniement des préférences, l'ex-coincoin_prefs.c est splitté
+	en prefs.c et prefs_gestion.c. Un middle-clic sur la led du trollo permet
+	de relire le fichier d'options sans avoir à relancer le coincoin... 
+	Comme il y a eu énormément de changements dans cette partie du code, des
+	bugs sont à prévoir..
+
+	En outre, le coincoin peut (a priori) gèrer trois types de backend
+	de tribune: 
+	  * le backend à l'ancienne:
+              			<b> -> '<b>' et 'é' -> &eacute, 
+	  * le backend nouveau style:
+				'<b>' -> '<b>'     et 'é' -> &eacute,
+	  * le backend sans slip (activé par défaut pour l'instant):
+                                '<b>  -> ça dépend et 'é' -> ça dépend
+	
+2002-03-27  pouaite  <c0in at altern.org>
+
+	* very ugly very quick very hack very pas beau bricolage pour que ça marchouille
+	avec le nouveau backend
+
+2002-03-25  pouaite  <c0in at altern.org>
+
+	* src/pinnipede.c (pp_tribuneshot_kikoooo): patch de lordOric,
+	pour que les plateaux de fruits de mer soient w3c compliant. Ajout
+	d'une icone toute pourrie au pinnipede et à la fenêtre de news.
+
+2002-03-18  pouaite  <c0in at altern.org>
+
+	* configure.in src/raster.c (RGBACreatePixmapFromXpmData) etc..:
+	suppression de la dépendance à la libXpm, c'est un peu sale mais
+	ça passe.
+	
+--------------------------v2.3.6-3-----------------------------------------
+
+2002-03-09  pouaite  <c0in at altern.org>
+
+	* src/wmcoincoin.c src/coincoin_prefs.c: fix d'un petit pb quand
+	dlfp répond après un post sur la tribune (caractères bidons
+	affichés), j'en ai aussi profité pour mettre posts.php3 à la place
+	de myposts.php3 (qui semble voué a disparaitre)
+
+
+--------------------------v2.3.6-2-----------------------------------------
+	
+2002-03-09  pouaite  <c0in at altern.org>
+
+	* src/pinnipede.c (pp_handle_shift_clic): petit bugfix lorsqu'on
+	plopifie en premier un ua non authentifié. Du coup j'ai aussi
+	ajouté une macro PATCH_LEVEL .. c'est la version 2.3.6-2
+
+--------------------------v2.3.6-----------------------------------------
+
+2002-03-08  pouaite  <c0in at altern.org>
+
+	* src/editwin.c: modif mineures sur les balises (alt-b avec du
+	texte selectionne insere les balise autour du texte, au lieu de
+	l'effacer). Et Alt-M permet d'inserer des moments conformes à la
+	RFC moule 42 (histoire qu'il n'y ait pas que des bugfix dans la
+	2.3.6). La plopification sur un useragent ne plopifie plus les
+	utilisateurs authentifiés dont le useragent est le même.
+
+2002-03-06  pouaite  <c0in at altern.org>
+
+	* src/pinnipede.c (plopify_word): integration du patch d'estian
+	(nouvelle option pinnipede.plop_words)
+
+	* src/http.c (http_skip_header), src/wmcoincoin.c
+	(exec_coin_coin): detection des reponses chunk-encodée
+	
+	* src/pinnipede.c (pp_build): l'option pinnipede.login_color
+	fonctionne (jjb)
+
+2002-03-05  pouaite  <c0in at altern.org>
+
+	* src/coincoin_prefs.c (init_default_prefs): changement du backend
+	par défaut pour les news (maintenant backend.rss)
+
+	* src/pinnipede.c (plopify_word): amélioration du plopifieur,
+	retour (suite à une forte pression moulesque) de l'ancien
+	comportement du clic sur une horloge (affiche le post en BAS du
+	pinnipède). Correction du problème avec la scrollbar dans les
+	news. Bugfix très partiel du "ouups linufr a repondu O"
+	(d'où vient ce bug, pourquoi ne se produit-il que sur certaines
+	machines?)
+
+--------------------------v2.3.5-----------------------------------------
+
+2002-03-02  pouaite  <c0in at altern.org>
+
+	* bugfixes divers... je crois que c'est parti pour une release
+
+2002-02-27  pouaite  <c0in at altern.org>
+
+	* src/newswin.c ajout de la scrollcoin a la fenetre des news
+	* soirée gruik, correction d'un petit pb sur cygwin et
+	reconnaissance plus précise des tags html (mais porchou-style).. a
+	tester un peu
+
+2002-02-24  pouaite  <c0in at altern.org>
+
+	* src/scrollcoin.c, src/pinnipede: pas mal de modifs visibles sur
+	le pinnipede: le scrollcoin fait son apparition, parce finalement
+	y'a des fois où c'est bien, une scrollbar. Et comme son look
+	n'allait pas avec la barre de boutons, elle a été modifiée.. moins
+	grosse, peut être moins moche (mais pas génial non plus..)
+
+	au niveau des options, tribune.stop_refresh a été remplacé par
+	'tribunenews.max_refresh_delay' et
+	'tribunenews.switch_off_coincoin_delay'
+	(voir le fichier d'options pour + d'info)
+	et une option 'dock.start_in_boss_mode' a été rajoutée
+
+	la plopification et la 'mise en relief (avec les crochets)'
+	(par shift+right clic/shift+left clic) peuvent désormais se faire
+	sur les 'threads', il suffit de cliquer dans la bordure à gauche
+	de l'horloge du message.
+
+2002-02-21  pouaite  <c0in at altern.org>
+
+	* src/pinnipede.c (plopify_word): ajout d'une nouvelle
+	fonctionnalité: la plopification des malotrus -> shift + right	
+	clic sur un login/useragent/mot (fonctionnement similaire au
+	shift+left clic, couleur fixée par 'pinnipede.plopify_color')
+
+2002-02-18  pouaite  <c0in at altern.org>
+
+	* src/pinnipede.c, src/editwin.c: mini bugfixes du weekend
+
+2002-02-10  pouaite  <c0in at altern.org>
+
+	* src/pinnipede.c: ajout(enfin!) de la sélection de texte. bugfix
+	pour les <u> dans le pinnipède. Masquage automatique du palmipède
+	quand l'applet n'est plus visible. MAJ de wmpanpan.
+
+2002-02-02  pouaite  <c0in at altern.org>
+
+	* src/dock.c (dock_update_pix_trolloscope): augmentation de la
+	vitesse de défilement du trolloscope: la vitesse max était de un
+	décalage toutes les minutes, elle est maintenant de un décalage
+	toutes les 15secondes. Gros ménage dans http*.c, vérif du bon
+	fonctionnement sous cygwin et openbsd.
+
+2002-02-01  pouaite  <c0in at altern.org>
+
+	* src/tribune_util.c, src/pinnipede.c: bugfix pour les refs aux
+	post multiples 
+	* src/coincoin.h, src/wmcoincoin.c, src/dock.c:
+	bugfix (définitif j'espère) du flamomètre
+
+--------------------------v2.3.4-----------------------------------------
+
+2002-01-20  pouaite  <c0in at altern.org>
+
+	* src/http_*.c configure.in: bugfix de l'option
+	"http.proxy_use_nocache:" pour qu'elle fonctionne avec les proxy
+	transparents (qui puent). bugfix du configure.in pour cygwin.
+
+2002-01-19  pouaite  <c0in at altern.org>
+
+	* src/pinnipede.c src/tribune_util.c src/coincoin.h src/global.h
+	src/coincoin_prefs.c la mise en valeur des posts de l'utilisateur
+	ainsi que leurs reponses se fait par un petit crochet affiché à
+	gauche du pinnipede. En fait Shift+Clic gauche sur un mot, login,
+	useragent, tous les messages correspondant seront mis en valeur
+	par un petit crochet. Les trois couleurs possibles du crochet sont
+	fixées dans les options par: 
+		pinnipede.hilight.my_msg_color:
+	        pinnipede.hilight.answer_my_msg_color:
+		pinnipede.hilight.keyword_color:
+	Ils peuvent être affichés/masqués avec un clic gauche sur le crochet 
+	(ou un clic sur le mot clef).
+
+	remarque: l'option 'pinnipede.my_msg_bgcolor' n'existe plus
+	
+2002-01-18  pouaite  <c0in at altern.org>
+
+	* src/pinnipede.c src/coincoin_tribune.c src/tribune_util.c le
+	ménage continue (un nouveau fichier: tribune_util.c), le ctrl+clic
+	sur l'horloge active le filtre de 'threads'. tout ceci n'a
+	quasiment pas été testé, présence de bugs plus ou moins fatals
+	certaine à 100% (et oui, je sais, les couleurs des reponses sont
+	hideuses, ça viendra plus tard).
+	
+2002-01-16  pouaite  <c0in at altern.org>
+
+	* src/dock.c, src/wmcoincoin.c, src/useragents_file.c, src/coincoin.h
+	wmcoincoin.c a été splitté en trois fichiers
+
+2002-01-15  pouaite  <c0in at altern.org>
+
+	* nouvelles options 'palmipede.userlogin: <votre login dlfp>' et
+	'pinnipede.my_msg_bgcolor: couleurRGB' ces deux options ont pour
+	pour d'aider à la detection et la mise en valeur de vos posts
+	parmi la marée quotidienne des trolls qui se déversent sur la
+	tribune. Si userlogin n'est pas rempli (ou si vous postez
+	systématiquement en anonyme), alors la reconnaissance se basera
+	sur le useragent (eh oui, c'est pas très fiable).
+
+2002-01-13  pouaite  <c0in at altern.org>
+
+	* yé fais le ménage un peu partout
+
+2002-01-13  shift
+
+	* src/coincoin_tribune.c (dlfp_tribune_call_external): mouvelle
+	option 'tribune.post_cmd' pour appeler un prog externe à chaque
+	nouveau message. Réservé aux personnes AWARE, ceci était la plus
+	grosse faille de sécurité potentielle du canard !
+
+2002-01-13  lordOric
+
+	* src/pinnipede.c (pp_tribuneshot_kikoooo): nouvelle option
+	'tribune.archive' pour faire de jolis screenchotes de la tribune
+	en html (ctrl+middle clic dans le pinnipede pour faire un scrinechote)
+
+2002-01-12  pouaite  <c0in at altern.org>
+
+	* src/editwin.c, src/wmcoincoin.c, src/pinnipede.c, options,
+	src/coincoin_prefs.c: gestion de l'iso8859-15 (l'encoding est
+	maintenant dans les options: 'font.encoding'). Le symbole euro est
+	accessible avec AltGr-e dans le palmipede (ou bien la touche
+	'currency'). Par contre il faut installer les fontes kivonbien.
+
+2001-01-10 jarjarbinks 
+	* options, src/coincoin_prefs.c, src/global.h, src/wmcoincoin.c
+	patch qui ralentit progressivement les refresh de la tribune en cas de
+	totale inactivité de l'utilisateur (option 'tribune.stop_refresh')
+	
+--------------------------v2.3.3mh4-----------------------------------------
+2001-01-08 glandium <mh at glandium.org>
+
+	* src/http_unix.c, src/http_win.c, src/http.h et tout plein d'autres:
+	Remplacement des requêtes HTTP/1.0 par des requêtes HTTP/1.0 avec
+	entête If-Modified-Since pour décharger le serveur dacode en trafic.
+	(en théorie, ça peut faire pas mal de différence, parce que, en prenant
+	l'exemple de la tribune, même si on arrête de récupérer les posts
+	parce qu'il n'y en a pas de nouveaux, les données ont déjà été
+	transmises).
+
+--------------------------v2.3.3mh3-----------------------------------------
+
+2001-12-28 glandium <mh at glandium.org>
+
+	* src/pinnipede.c: redirection des [mots] vers le [wiki] ; reste à
+	faire en sorte que les [expressions complètes] soient prises en
+	compte...
+
+--------------------------v2.3.3--------------------------------------------
+
+2001-12-17 pouaite <c0in at altern.org>
+
+	* src/coincoin_news.c, src/wmcoincoin.c: bugfix pour la lecture
+	des news et le flamometre
+
+--------------------------v2.3.2--------------------------------------------
+	
+
+2001-12-17  pouaite  <c0in at altern.org>
+
+	* src/coincoin_news.c (dlfp_updatenews): changement dans l'urgence
+	du backend des news (c'est /backend.rdf maintenant)
+
+2001-12-16  pouaite  <c0in at altern.org>
+
+	* src/editwin.c: ajout des suggestions proposées par Amaury.
+	Clippy joins C0IN C0IN !
+
+2001-12-16  pouaite <c0in at altern.org>
+
+	* src/pinnipede.c (filter_msg_info): ajout du filtrage des
+	messages, et meilleure gestion des posts multiples (attention,
+	modifs assez nombreuses dans pinnipede.c !)
+
+2001-12-10  kilobug <kilobug at freesurf.fr>
+ 
+ 	* src/wmcoincoin.c, src/coincoin.h: patch pour éviter qu'un mauvais
+ 	message ne soit posté si on édites le message entre l'appuie sur le
+ 	bouton rouge et l'appel de la fonction exec_coin_coin
+
+2001-12-10  Frédéric Py <fpy at laas.fr>
+	* src/spell_coin.c : Patch nickel chrome qui elimine le clignotement 
+	lors de la frappe
+
+--------------------------v2.3.1--------------------------------------------
+	
+2001-12-06  pouaite  <c0in at altern.org>
+
+	* src/wmcoincoin.c (dock_refresh_horloge_mode): patch de glandium
+	pour un bugfix du mode horloge
+
+2001-12-02  pouaite  <c0in at altern.org>
+
+	* options, useragents: ajout de ces deux fichiers dans les
+	sources, quelques modifs sur configure.in, makefiles (et http.c
+	qui n'est plus un lien)
+
+	* src/pinnipede.c (pp_refresh): correction du bug d'affichage des
+	post multiples ayant un même timestamp (enfin !!)
+
+	* src/global.h (ALLOW_X_LOOP_AND_ISPELL): 
+	* src/wmcoincoin.c (X_loop): 
+	* src/editwin.c (editw_colorize):
+	* src/spell_coin.c (ispell_run_background): modifs pour avoir le
+	spell_check en background (sinon ça ralentissait trop) -> attention c'est pas 
+	joli-joli
+
+2001-12-01  pouaite  <c0in at altern.org>
+
+	* src/coin_util.c (convert_to_ascii): divers bricolages, modif des
+	regex des news, gestion bancale du char MSEURO (0x80). wmcc devrait
+	à nouveau fonctionner correctement sous BSD
+
+2001-11-26  Frédéric Py <fpy at laas.fr>
+
+	* src/spell_coin.[ch]: Ajout de ces deux fichiers regroupant les 
+	fonctions permettant l'appel a ispell et de recuperer le resultat.
+	Doit marcher pour aspell mais j'ai pas verifie
+
+	* src/editwin.c(editw_colorize): refonte et optimisation (?) de la 
+	fonction pour qu'elle supporte le spellcheck et mette en EWC_SPELLWORD
+	les mots inconnus.
+
+	* src/global.h: ajout des champs ew_do_spell,ew_spell_cmd et 
+	ew_spell_dict dans la structure strucPrefs
+
+	* src/coincoins.c: ajout des options spell.enable, spell.cmd et 
+	spell.dict
+
+	* src/defaultoptionsfile.h: ajout des options spell.*
+
+2001-11-25  Hommey Mike <mh at glandium.org>
+
+	* src/wmcoincoin.c: j'avais mal pompé le code d'asclock et la date
+	s'affichait mal, c'est réglé
+
+2001-11-23  Pouaite  <c0in at altern.org>
+
+	* src/wmcoincoin.c: miniretouche du patch de glandium pour que
+	l'horloge (qui roulaize) s'affiche correctement à la reception de SIGUSR1
+
+2001-11-23  hommey mike <mh at glandium.org>
+
+	* src/wmcoincoin.c (dock_refresh_horloge_mode): modification de
+	l'horloge ; maintenant, elle ressemble à asclock (xpms lâchement
+	repompés) et s'affiche même si la tribune est indisponible
+	* src/wmcoincoin.c (dock_handle_button_press): gestion de la
+	transparence de l'horloge
+	* src/wmcoincoin.c (dock_handle_button_press_horloge_mode): retour au
+	mode normal uniquement sur ctrl+clic et gestion de la transparence de
+	l'horloge.
+	* src/wmcoincoin.c (initx): initialisation des pixmaps pour l'horloge.
+
+2001-11-18  pouaite  <c0in at altern.org>
+
+	* src/coincoin_prefs.c (init_default_prefs): ajout d'option pour
+	specifier le chemin des differents backends etc.. + option '-o'
+	pour specifier le fichier d'options
+
+	* src/coincoin_tribune.c (dlfp_updatetribune): le remote.php3 est maintenant un remote.rdf
+
+	* src/picohtml.c (picohtml_parse): gestion du tag bizarre <br />
+
+2001-11-11  pouaite  <c0in at altern.org>
+
+	* src/wmcoincoin.c (X_loop), src/newswin.c,
+	src/msgbox.c,src/pinnipede.c: suppression des appels à
+	flush_expose
+	(c'est Mal(tm)), remplacés par l'inspection du champ 'count' de
+	l'evenement expose ajout de flag_sending_coin_coin, et modif de la
+	led 1 pour indiquer quand un post est en attente d'expedition/en
+	expedition/expedié
+	(dock_refresh_horloge_mode): ajout du mode horloge, pour toujours
+	plus de discretion -- et sinon plein de petites modifs (decrassage
+	de code) dans un peu tous les fichiers.
+
+2001-11-07  le mignot gaël <kilobug at freesurf.fr>
+
+	* src/coincoin_prefs.c (option_set_useragent): patch pour la
+	substitution des $v $r $m dans le useragent
+
+2001-10-27  pouaite  <c0in at altern.org>
+
+	* src/coincoin_news.c (dlfp_msg_update_messages): ajout de la
+	messagerie + modifs des regexp de kilobug
+
+2001-11-05 le mignot gaël <kilobug at freesurf.fr>
+
+	* src/wmcoincoin_news.c: utilisation des regexp
+	* src/regexp.*: système de gestion des regexp
+
+2001-11-04 le mignot gaël <kilobug at freesurf.fr>
+
+	* src/wmcoincoin_news.c: hotfix pour la nouvelle version de DaCode
+	
+2001-10-28  pouaite  <c0in at altern.org>
+
+	* src/wmcoincoin.c (install_sighandlers): gestion des signaux
+	SIGUSR1 et SIGUSR2 pour cacher/restaurer rapidement les fenetres
+	du coincoin. La v2.2beta est prete.
+
+2001-10-27  pouaite  <c0in at altern.org>
+
+	* src/wmcoincoin.c (prepare_pixmap_porte): petits amenagements sur
+	le pixmap de fond
+
+2001-10-26  pouaite  <c0in at altern.org>
+
+	* src/picohtml.c (picohtml_parse): encore du travail sur picohtml
+	qui interprete mieux les &eacute et cie.
+
+	* src/pinnipede.c, src/coincoin_news.c: on recupere la charge cpu
+	et un fortune sur myposts.php3 !
+
+2001-10-25  pouaite  <c0in at altern.org>
+
+	* src/http_unix.c (net_tcp_connect_with_timeout): wmcc fonctionne
+	dorénavant sous openbsd 2.9 !!
+
+2001-10-25  pouaite  <c0in at altern.org>
+
+	* src/wmcoincoin.c (prepare_pixmap_porte): integration du patch de
+	kadreg (bg_pixmap)
+
+2001-10-21  pouaite  <c0in at altern.org>
+
+	* src/picohtml.c: amélioration du parse de l'html (reconnaissance
+	des urls, un nouveau tag pourri pour la newswin, etc...).
+
+	* src/coincoin_prefs.c (option_browser): nouvelles options + bugfixes
+
+	* src/coincoin_news.c (dlfp_updatenews): correction d'un vilain
+	bug (double free beurk), récupération de l'heure de la modération
+	d'une news, récupération de la liste des liens de la news.
+
+	* src/wmcoincoin.c: gestion d'une seconde commande de
+	browser externe + modifs liées à newswin.
+
+	* newswin.c: nouveau nom de l'ex-txtwin.c, entierement rebricolé
+	pour un affichage des news plus convivial.
+
+2001-10-15  pouaite  <c0in at altern.org>
+
+	* src/raster.[ch]: et hop, la libwraster s'est pris un coup de
+	pied au cul, on se contente désormais de raster.c et coin_util.c
+	(le source reste néanmoins dégueulasse)
+
+2001-10-12  pouaite  <c0in at altern.org>
+
+	* src/pinnipede.c (pp_show): petite modif du positionnement
+	initial du pinnipede pour que ça marche avec pwm.
+
+	* src/http_win.c (http_get_with_cookie) src/http_unix.c (http_get_with_cookie): 
+	changement de 'Authrozation:' par 'Proxy-Authorization:'
+
+2001-10-11  pouaite  <c0in at altern.org>
+
+	* src/http_unix.c (http_get_with_cookie) src/http_win.c
+	(http_get_with_cookie): ajout de l'option proxy_use_nocache pour
+	les proxy avec un cache casse-ouille (merci msieur anonyme)
+
+	* inclusion de la branche cygwin de gege !
+
+	* src/wmcoincoin.c (update_pix_tribune_load): le retour de la
+	multiresolution dans le trolloscope
+
+	* src/msgbox.c (dispatch_msgbox_event): appel de msgbox_hide sur
+	buttonrelease et pas buttonpress, c'etait idiot.
+
+	* src/coincoin_news.c (dlfp_updatenews): bugfix pour la detection
+	des nouvelles news, ça devrait *enfin* marcher 
+
+	* src/picohtml.c, src/pinnipede.c: modif des fontes: on impose
+	l'encoding iso8859-1
+	(merci loïc !)
+
+	* src/pinnipede.c (pp_check_tribune_updated): rajout du bugfix du
+	défilement automatique qui clochait en cas d'apparition simultanée
+	de plusieurs messages.
+	(pp_handle_button_release): ajout de l'option
+	'palmipede.autoprompt'
+
+2001-09-30  pouaite  <c0in at altern.org>
+
+	* src/wmcoincoin.c (main): remplacement de l'appel signal() par
+	sigaction(), plus portable. ça devrait fixer le problème de la
+	non-réinstallage du gestionnaire de signal sous solaris.
+
+2001-09-29  pouaite  <c0in at altern.org>
+
+	* src/pinnipede.c (pp_show): oh mon dieu ! j'avais fait une fote d'ortografe dans le titre de la fenetre
+
+	* src/wmcoincoin.c: ajout de   setlocale(LC_ALL, ""); XSetLocaleModifiers("@im=none"); (c'est ça qui manquait pour que l'azerty marche à 100%)
+	* src/editwin.c (editw_show): modif XInputContext, l'azerty marche
+	au poil :), j'espere ne pas avoir nické le fonctionnimeent des
+	qwerty
+
+2001-09-28  pouaite  <c0in at altern.org>
+
+	* src/coincoin_tribune.c (dlfp_updatetribune): les 'é' et
+	compagnie présent dans les useragents sont maintenant correctement
+	interpretes.
+
+	* src/http.c (net_tcp_connect): ajout de cette fonction, qui est
+	utilise si on fait un #define CONNECT_WITHOUT_TIMEOUT (. ça
+	arrangera peut être ceux qui ont des messages d'erreur du style
+	connect: scket already opened (problème qui apparaissait sous
+	bsd). par contre, le connect peut devenir bloquant, il n'y a plus
+	de timeout
+	
+	* src/pinnipede.c: amélioration de la reconnaissance des hh:mm:ss,
+	ballon d'aide du pinnipede -- ajout de l'option
+	'pinnipede.buttons' -- amélioration du rendu du pinnipède
+
+2001-09-27  pouaite  <c0in at altern.org>
+
+	* src/pinnipede.c: bugfix sécurite + mémorisation de la position
+	du pinnipede -- ajout de l'option 'pinnipede.location' soulignage
+	des post faisant références au timestamp survolé (les antiref..)
+
+2001-09-18  pouaite  <c0in at altern.org>
+
+	* src/pinnipede.c: ajout du pinnipede teletype
+
+2001-08-16  pouaite  <c0in at altern.org>
+
+	* src/*: sauvegarde des news lues d'une session a l'autre, et
+	flamophone.
+
+2001-08-14  pouaite  <c0in at altern.org>
+
+	* src/coincoin_tribune.c
+	* src/coincoin_news.c
+	* src/wmcoincoin.c: trolloscope multivitesse, ajout de l'option
+	-r pour fonctionner avec l'ensemble des sites sous dacode , et de
+	l'option -s pour modifier la vitesse initiale du trolloscope
+
+2001-07-17  pouaite  <c0in at altern.org>
+
+	* src/coincoin_tribune.c: décidément... c'est le format des news
+	(pour le style 7) qui a changé..-> rerebugfix
+
+2001-07-12  pouaite  <c0in at altern.org>
+
+	* src/coincoin_tribune.c (dlfp_updatetribune): remodif de
+	trib_sign suite au rechangement de linuxfr.org/board... maintenant
+	ca devrait toujours marcher
+
+2001-07-04  pouaite  <c0in at altern.org>
+
+	* src/coincoin_tribune.c (dlfp_updatetribune): changement
+	trib_sign apres la modif de dacode
+
+2001-06-19  pouaite  <c0in at altern.org>
+
+	* src/http.c (http_get): implement du timeout dans connect()
+
+2001-06-12  pouaite  <c0in at altern.org>
+
+	* configure.in: ça devrait marcher correctement avec la
+	libwraster-0.65 de debian qui est liee a la lib hermes
+	* src/editwin.c: ajout d'un bouton pour restaurer le user-agent
+	par defaut, remplacement balise <strong> par <b>, correction d'un
+	petit bug
+
+2001-06-06  pouaite  <c0in at altern.org>
+
+	* src/coincoin_news: recuperation des news en format 'printable'
+	ce qui evite de se coltiner les commentaire sur les news un peu
+	grosses
+
+2001-05-25  pouaite  <c0in at altern.org>
+
+	* src/coincoin.h: passage de certains flags en volatile, c'est plus adequat
+	* src/coincoin_tribune.c: flag_updating_tribune un peu plus ciblé
+
+2001-05-24  pouaite  <c0in at altern.org>
+
+	* src/balloon.c: creation (ballons d'aide du style de ceux de windowmaker)
+	* src/msgbox.c: creation (affichage de petits messages)
+	* src/http.c: creation (remplace curl)
+	* src/editwin.c: creation (edition des messages/useragent a poster
+	sur la tribune)
+	* src/picohtml.c: routines extraites de wmcoincoin.c utilise par
+	ballon,msgbox et txtwin * src/divers modifs: integration des
+	fichiers precedents, compatibilite KDE
+
+2001-03-10  ned flanders  <c0in at altern.org>
+
+	* tout: grosses grosses modifs .. la 1.0beta est prête.
+
+2001-02-21  ned flanders  <c0in at altern.org>
+
+	* wmcoincoin.c: fix de l'affichage de l'option -h (merci Amaury!)
+
+2001-02-21  ned flanders  <c0in at altern.org>
+
+	* README: qqes modifs: la version min. de wmaker EST la 0.62
+
+2001-02-21  ned flanders  <c0in at altern.org>
+
+	* threads virees, ca marchait bien mais c'etait vraiment pas judicieux.
+	maintenant on utilise un bon vieux SIGALRM.
+
+2001-02-19  ned flanders  <c0in at altern.org>
+
+	* initial release, comme on dit chez les pros.
+
diff --git a/INSTALL b/INSTALL
new file mode 100644
index 0000000..54caf7c
--- /dev/null
+++ b/INSTALL
@@ -0,0 +1,229 @@
+Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software
+Foundation, Inc.
+
+   This file is free documentation; the Free Software Foundation gives
+unlimited permission to copy, distribute and modify it.
+
+Basic Installation
+==================
+
+   These are generic installation instructions.
+
+   The `configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation.  It uses
+those values to create a `Makefile' in each directory of the package.
+It may also create one or more `.h' files containing system-dependent
+definitions.  Finally, it creates a shell script `config.status' that
+you can run in the future to recreate the current configuration, and a
+file `config.log' containing compiler output (useful mainly for
+debugging `configure').
+
+   It can also use an optional file (typically called `config.cache'
+and enabled with `--cache-file=config.cache' or simply `-C') that saves
+the results of its tests to speed up reconfiguring.  (Caching is
+disabled by default to prevent problems with accidental use of stale
+cache files.)
+
+   If you need to do unusual things to compile the package, please try
+to figure out how `configure' could check whether to do them, and mail
+diffs or instructions to the address given in the `README' so they can
+be considered for the next release.  If you are using the cache, and at
+some point `config.cache' contains results you don't want to keep, you
+may remove or edit it.
+
+   The file `configure.ac' (or `configure.in') is used to create
+`configure' by a program called `autoconf'.  You only need
+`configure.ac' if you want to change it or regenerate `configure' using
+a newer version of `autoconf'.
+
+The simplest way to compile this package is:
+
+  1. `cd' to the directory containing the package's source code and type
+     `./configure' to configure the package for your system.  If you're
+     using `csh' on an old version of System V, you might need to type
+     `sh ./configure' instead to prevent `csh' from trying to execute
+     `configure' itself.
+
+     Running `configure' takes awhile.  While running, it prints some
+     messages telling which features it is checking for.
+
+  2. Type `make' to compile the package.
+
+  3. Optionally, type `make check' to run any self-tests that come with
+     the package.
+
+  4. Type `make install' to install the programs and any data files and
+     documentation.
+
+  5. You can remove the program binaries and object files from the
+     source code directory by typing `make clean'.  To also remove the
+     files that `configure' created (so you can compile the package for
+     a different kind of computer), type `make distclean'.  There is
+     also a `make maintainer-clean' target, but that is intended mainly
+     for the package's developers.  If you use it, you may have to get
+     all sorts of other programs in order to regenerate files that came
+     with the distribution.
+
+Compilers and Options
+=====================
+
+   Some systems require unusual options for compilation or linking that
+the `configure' script does not know about.  Run `./configure --help'
+for details on some of the pertinent environment variables.
+
+   You can give `configure' initial values for configuration parameters
+by setting variables in the command line or in the environment.  Here
+is an example:
+
+     ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix
+
+   *Note Defining Variables::, for more details.
+
+Compiling For Multiple Architectures
+====================================
+
+   You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory.  To do this, you must use a version of `make' that
+supports the `VPATH' variable, such as GNU `make'.  `cd' to the
+directory where you want the object files and executables to go and run
+the `configure' script.  `configure' automatically checks for the
+source code in the directory that `configure' is in and in `..'.
+
+   If you have to use a `make' that does not support the `VPATH'
+variable, you have to compile the package for one architecture at a
+time in the source code directory.  After you have installed the
+package for one architecture, use `make distclean' before reconfiguring
+for another architecture.
+
+Installation Names
+==================
+
+   By default, `make install' will install the package's files in
+`/usr/local/bin', `/usr/local/man', etc.  You can specify an
+installation prefix other than `/usr/local' by giving `configure' the
+option `--prefix=PATH'.
+
+   You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files.  If you
+give `configure' the option `--exec-prefix=PATH', the package will use
+PATH as the prefix for installing programs and libraries.
+Documentation and other data files will still use the regular prefix.
+
+   In addition, if you use an unusual directory layout you can give
+options like `--bindir=PATH' to specify different values for particular
+kinds of files.  Run `configure --help' for a list of the directories
+you can set and what kinds of files go in them.
+
+   If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving `configure' the
+option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
+
+Optional Features
+=================
+
+   Some packages pay attention to `--enable-FEATURE' options to
+`configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to `--with-PACKAGE' options, where PACKAGE
+is something like `gnu-as' or `x' (for the X Window System).  The
+`README' should mention any `--enable-' and `--with-' options that the
+package recognizes.
+
+   For packages that use the X Window System, `configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the `configure' options `--x-includes=DIR' and
+`--x-libraries=DIR' to specify their locations.
+
+Specifying the System Type
+==========================
+
+   There may be some features `configure' cannot figure out
+automatically, but needs to determine by the type of machine the package
+will run on.  Usually, assuming the package is built to be run on the
+_same_ architectures, `configure' can figure that out, but if it prints
+a message saying it cannot guess the machine type, give it the
+`--build=TYPE' option.  TYPE can either be a short name for the system
+type, such as `sun4', or a canonical name which has the form:
+
+     CPU-COMPANY-SYSTEM
+
+where SYSTEM can have one of these forms:
+
+     OS KERNEL-OS
+
+   See the file `config.sub' for the possible values of each field.  If
+`config.sub' isn't included in this package, then this package doesn't
+need to know the machine type.
+
+   If you are _building_ compiler tools for cross-compiling, you should
+use the `--target=TYPE' option to select the type of system they will
+produce code for.
+
+   If you want to _use_ a cross compiler, that generates code for a
+platform different from the build platform, you should specify the
+"host" platform (i.e., that on which the generated programs will
+eventually be run) with `--host=TYPE'.
+
+Sharing Defaults
+================
+
+   If you want to set default values for `configure' scripts to share,
+you can create a site shell script called `config.site' that gives
+default values for variables like `CC', `cache_file', and `prefix'.
+`configure' looks for `PREFIX/share/config.site' if it exists, then
+`PREFIX/etc/config.site' if it exists.  Or, you can set the
+`CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all `configure' scripts look for a site script.
+
+Defining Variables
+==================
+
+   Variables not defined in a site shell script can be set in the
+environment passed to `configure'.  However, some packages may run
+configure again during the build, and the customized values of these
+variables may be lost.  In order to avoid this problem, you should set
+them in the `configure' command line, using `VAR=value'.  For example:
+
+     ./configure CC=/usr/local2/bin/gcc
+
+will cause the specified gcc to be used as the C compiler (unless it is
+overridden in the site shell script).
+
+`configure' Invocation
+======================
+
+   `configure' recognizes the following options to control how it
+operates.
+
+`--help'
+`-h'
+     Print a summary of the options to `configure', and exit.
+
+`--version'
+`-V'
+     Print the version of Autoconf used to generate the `configure'
+     script, and exit.
+
+`--cache-file=FILE'
+     Enable the cache: use and save the results of the tests in FILE,
+     traditionally `config.cache'.  FILE defaults to `/dev/null' to
+     disable caching.
+
+`--config-cache'
+`-C'
+     Alias for `--cache-file=config.cache'.
+
+`--quiet'
+`--silent'
+`-q'
+     Do not print messages saying which checks are being made.  To
+     suppress all normal output, redirect it to `/dev/null' (any error
+     messages will still be shown).
+
+`--srcdir=DIR'
+     Look for the package's source code in directory DIR.  Usually
+     `configure' can determine that directory automatically.
+
+`configure' also accepts some other, not widely useful, options.  Run
+`configure --help' for more details.
+
diff --git a/MACOSX b/MACOSX
new file mode 100644
index 0000000..8443d97
--- /dev/null
+++ b/MACOSX
@@ -0,0 +1,23 @@
+
+Pr�requis
+---------
+ * Xcode
+ * X11
+ * Fink :
+   - gettext-dev
+   - pkgconfig
+   - gtk+2-dev glib2-dev atk1 pango1-xft2-dev
+   - imlib2
+
+
+MacOS 10.3
+----------
+CPPFLAGS="-I/sw/include" LDFLAGS="-L/sw/lib" ./configure && make && sudo make install
+
+MacOS 10.4 + Xcode 2.0
+----------
+CC=gcc-3.3 CPPFLAGS="-I/sw/include" LDFLAGS="-L/sw/lib" ./configure && make && sudo make install
+
+MacOS 10.4 + Xcode 2.1
+----------
+CPPFLAGS="-I/sw/include" LDFLAGS="-L/sw/lib" ./configure && make && sudo make install
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 0000000..200452e
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,130 @@
+## rcsid=$Id: Makefile.am,v 1.31 2005/09/25 12:08:55 pouaite Exp $
+## ChangeLog:
+##   $Log: Makefile.am,v $
+##   Revision 1.31  2005/09/25 12:08:55  pouaite
+##   ca marche encore ca ?
+##
+##   Revision 1.30  2005/06/11 22:47:39  pouaite
+##   prout?
+##
+##   Revision 1.29  2005/02/22 18:44:42  pouaite
+##   *** empty log message ***
+##
+##   Revision 1.28  2004/04/26 20:32:15  pouaite
+##   roger demande le commit
+##
+##   Revision 1.27  2004/04/18 15:37:27  pouaite
+##   un deux un deux
+##
+##   Revision 1.26  2004/02/29 15:01:18  pouaite
+##   May the charles bronson spirit be with you
+##
+##   Revision 1.25  2003/08/26 21:50:47  pouaite
+##   2.6.4b au mastic
+##
+##   Revision 1.24  2003/07/20 22:22:27  pouaite
+##   ce commit est dedie a Pierre Tramo
+##
+##   Revision 1.23  2003/03/11 23:40:30  pouaite
+##   rajout fake-getaddrinfo .. si �a compile alors cygwin remarche (pas test�)
+##
+##   Revision 1.22  2003/03/02 17:56:25  pouaite
+##   wmcoincoin-2.4.4a.tar.gz is ready for distribution
+##
+##   Revision 1.21  2002/09/08 14:28:44  pouaite
+##   bugfixes salutaires
+##
+##   Revision 1.20  2002/09/03 22:42:16  pouaite
+##   coin
+##
+##   Revision 1.19  2002/08/31 21:26:46  pouaite
+##   ajout du wmccc
+##
+##   Revision 1.18  2002/08/23 00:25:21  pouaite
+##   ou�
+##
+##   Revision 1.17  2002/08/22 20:04:09  pouaite
+##   fin de la premiere manche contre gettextize
+##
+##   Revision 1.16  2002/08/22 18:50:38  pouaite
+##   et l� �a compile ?
+##
+##   Revision 1.15  2002/08/17 18:33:37  pouaite
+##   grosse commition
+##
+##   Revision 1.14  2002/06/23 14:01:36  pouaite
+##   ouups, j'avais flingu� les modifs depuis la v2.3.8b
+##
+##   Revision 1.13  2002/06/23 10:44:05  pouaite
+##   i18n-isation of the coincoin(kwakkwak), thanks to the incredible jjb !
+##
+##   Revision 1.11  2002/06/01 20:21:18  pouaite
+##   version 2.3.8a
+##
+##   Revision 1.10  2002/06/01 17:54:04  pouaite
+##   nettoyage
+##
+##   Revision 1.9  2002/05/29 22:38:12  pouaite
+##   bidouilles dans configure.in et cie
+##
+##   Revision 1.8  2002/05/25 10:53:05  pouaite
+##   aujourd'hui c'est la saint beugue
+##
+##   Revision 1.7  2002/04/15 19:56:38  pouaite
+##   v2.3.7a
+##
+##   Revision 1.6  2002/04/13 11:55:19  pouaite
+##   fix kde3 + deux trois conneries
+##
+##   Revision 1.5  2002/03/05 21:04:28  pouaite
+##   bugfixes suite � l'upgrade de dlfp [et retour au comportement � l'ancienne du clic sur les horloges pour les moules ronchonnes]
+##
+##   Revision 1.4  2001/12/16 16:46:12  pouaite
+##   Clippouille joins C0IN C0IN
+##
+##   Revision 1.3  2001/12/02 20:29:31  pouaite
+##   rajout de 'options' et 'useragents' dans le Makefile.am ...
+##
+##   Revision 1.2  2001/12/02 18:32:05  pouaite
+##   update suite � la modif sur http.c et a la generation automatique de src/default*.h
+##
+## Process this file with automake to produce Makefile.in
+
+#AUTOMAKE_OPTIONS = 1.5 dist-bzip2
+ACLOCAL_AMFLAGS = -I m4
+
+MAINT_CHARSET = latin1
+
+# pour faire plaisir � woof :�)
+prefix=$(DESTDIR)@prefix@
+
+SUBDIRS = intl  m4  po src scripts platypus
+EXTRA_DIST = config.rpath  MACOSX xpms/porte.h xpms/editwin_minib.xcf xpms/editwin_minib.xpm \
+             xpms/coin.xpm  xpms/leds.h  xpms/leds.xcf \
+             xpms/porte.xcf  xpms/weekday.xpm xpms/month.xpm \
+             xpms/clock.xpm xpms/date.xpm xpms/led.xpm xpms/clippy.xpm xpms/icon.xpm \
+	     xpms/duck.xcf xpms/duck.xpm xpms/mkduck.sh \
+            xpms/badnews.xpm  xpms/bracket.xpm  xpms/logo.xpm xpms/totoz.xpm xpms/miniduck.xpm ./wmcoincoin.spec \
+             ./options ./config.rpath wmccc.glade genoptlst.sh pixmaps/cbronson.jpg pixmaps/logoh.png pixmaps/logo.xpm
+
+rpm-dist: dist
+	cp $(PACKAGE)-$(VERSION).tar.gz $(HOME)/rpm/SOURCES
+	-rm -f $(HOME)/rpm/SOURCES/$(PACKAGE)-$(VERSION).tar.bz2
+	bzme $(HOME)/rpm/SOURCES/$(PACKAGE)-$(VERSION).tar.gz
+	rpm -ba $(PACKAGE).spec
+
+bin-dist: all
+	cp src/wmcoincoin .
+	cp src/wmccc .
+	strip wmcoincoin
+	strip wmccc
+	tar czvf $(PACKAGE)-$(VERSION)-$(COIN_ARCH).tgz ChangeLog README options wmcoincoin wmccc
+
+nightly: dist
+	cp $(PACKAGE)-$(VERSION).tar.gz ../wmcoincoin-cvs.tar.gz
+	(cd ..; ./up.sh ./wmcoincoin-cvs.tar.gz download/devel)
+
+pkgdata_DATA = options README wmcoincoin.spec xpms/bracket.xpm  xpms/logo.xpm xpms/badnews.xpm \
+	xpms/totoz.xpm pixmaps/cbronson.jpg pixmaps/logoh.png pixmaps/logo.xpm xpms/icon.xpm
+
+CLEANFILES = stamp-h
diff --git a/Makefile.in b/Makefile.in
new file mode 100644
index 0000000..23e2a5b
--- /dev/null
+++ b/Makefile.in
@@ -0,0 +1,756 @@
+# Makefile.in generated by automake 1.10.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = .
+DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
+	$(srcdir)/Makefile.in $(srcdir)/config.h.in \
+	$(top_srcdir)/configure $(top_srcdir)/intl/Makefile.in \
+	ABOUT-NLS AUTHORS COPYING ChangeLog INSTALL NEWS TODO compile \
+	config.guess config.rpath config.sub depcomp install-sh \
+	missing
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/codeset.m4 \
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/glibc2.m4 \
+	$(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intdiv0.m4 $(top_srcdir)/m4/intl.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax.m4 \
+	$(top_srcdir)/m4/inttypes-pri.m4 \
+	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/isc-posix.m4 \
+	$(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/lock.m4 $(top_srcdir)/m4/longlong.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/printf-posix.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/stdint_h.m4 \
+	$(top_srcdir)/m4/uintmax_t.m4 $(top_srcdir)/m4/visibility.m4 \
+	$(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wint_t.m4 \
+	$(top_srcdir)/m4/xsize.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno config.status.lineno
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = config.h
+CONFIG_CLEAN_FILES = intl/Makefile
+SOURCES =
+DIST_SOURCES =
+RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
+	html-recursive info-recursive install-data-recursive \
+	install-dvi-recursive install-exec-recursive \
+	install-html-recursive install-info-recursive \
+	install-pdf-recursive install-ps-recursive install-recursive \
+	installcheck-recursive installdirs-recursive pdf-recursive \
+	ps-recursive uninstall-recursive
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
+am__installdirs = "$(DESTDIR)$(pkgdatadir)"
+pkgdataDATA_INSTALL = $(INSTALL_DATA)
+DATA = $(pkgdata_DATA)
+RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive	\
+  distclean-recursive maintainer-clean-recursive
+ETAGS = etags
+CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+  { test ! -d $(distdir) \
+    || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
+         && rm -fr $(distdir); }; }
+DIST_ARCHIVES = $(distdir).tar.gz
+GZIP_ENV = --best
+distuninstallcheck_listfiles = find . -type f -print
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CFLAG_VISIBILITY = @CFLAG_VISIBILITY@
+COIN_ARCH = @COIN_ARCH@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GENCAT = @GENCAT@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIBC2 = @GLIBC2@
+GLIBC21 = @GLIBC21@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+HAVE_ASPRINTF = @HAVE_ASPRINTF@
+HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@
+HAVE_SNPRINTF = @HAVE_SNPRINTF@
+HAVE_VISIBILITY = @HAVE_VISIBILITY@
+HAVE_WPRINTF = @HAVE_WPRINTF@
+IMLIB2_CONFIG_IN_PATH = @IMLIB2_CONFIG_IN_PATH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLBISON = @INTLBISON@
+INTLLIBS = @INTLLIBS@
+INTLOBJS = @INTLOBJS@
+INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMULTITHREAD = @LIBMULTITHREAD@
+LIBOBJS = @LIBOBJS@
+LIBPTH = @LIBPTH@
+LIBPTH_PREFIX = @LIBPTH_PREFIX@
+LIBS = @LIBS@
+LIBTHREAD = @LIBTHREAD@
+LTLIBC = @LTLIBC@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBMULTITHREAD = @LTLIBMULTITHREAD@
+LTLIBOBJS = @LTLIBOBJS@
+LTLIBPTH = @LTLIBPTH@
+LTLIBTHREAD = @LTLIBTHREAD@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_CFLAGS = @PACKAGE_CFLAGS@
+PACKAGE_LIBS = @PACKAGE_LIBS@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POSUB = @POSUB@
+PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+WINDRES = @WINDRES@
+WMCCC = @WMCCC@
+WMCOINCOIN_PLAYER = @WMCOINCOIN_PLAYER@
+WOE32 = @WOE32@
+WOE32DLL = @WOE32DLL@
+XFT_CFLAGS = @XFT_CFLAGS@
+XFT_LIBS = @XFT_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+
+# pour faire plaisir � woof :�)
+prefix = $(DESTDIR)@prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+#AUTOMAKE_OPTIONS = 1.5 dist-bzip2
+ACLOCAL_AMFLAGS = -I m4
+MAINT_CHARSET = latin1
+SUBDIRS = intl  m4  po src scripts platypus
+EXTRA_DIST = config.rpath  MACOSX xpms/porte.h xpms/editwin_minib.xcf xpms/editwin_minib.xpm \
+             xpms/coin.xpm  xpms/leds.h  xpms/leds.xcf \
+             xpms/porte.xcf  xpms/weekday.xpm xpms/month.xpm \
+             xpms/clock.xpm xpms/date.xpm xpms/led.xpm xpms/clippy.xpm xpms/icon.xpm \
+	     xpms/duck.xcf xpms/duck.xpm xpms/mkduck.sh \
+            xpms/badnews.xpm  xpms/bracket.xpm  xpms/logo.xpm xpms/totoz.xpm xpms/miniduck.xpm ./wmcoincoin.spec \
+             ./options ./config.rpath wmccc.glade genoptlst.sh pixmaps/cbronson.jpg pixmaps/logoh.png pixmaps/logo.xpm
+
+pkgdata_DATA = options README wmcoincoin.spec xpms/bracket.xpm  xpms/logo.xpm xpms/badnews.xpm \
+	xpms/totoz.xpm pixmaps/cbronson.jpg pixmaps/logoh.png pixmaps/logo.xpm xpms/icon.xpm
+
+CLEANFILES = stamp-h
+all: config.h
+	$(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+.SUFFIXES:
+am--refresh:
+	@:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      echo ' cd $(srcdir) && $(AUTOMAKE) --gnu '; \
+	      cd $(srcdir) && $(AUTOMAKE) --gnu  \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    echo ' $(SHELL) ./config.status'; \
+	    $(SHELL) ./config.status;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	$(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+
+config.h: stamp-h1
+	@if test ! -f $@; then \
+	  rm -f stamp-h1; \
+	  $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \
+	else :; fi
+
+stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
+	@rm -f stamp-h1
+	cd $(top_builddir) && $(SHELL) ./config.status config.h
+$(srcdir)/config.h.in:  $(am__configure_deps) 
+	cd $(top_srcdir) && $(AUTOHEADER)
+	rm -f stamp-h1
+	touch $@
+
+distclean-hdr:
+	-rm -f config.h stamp-h1
+intl/Makefile: $(top_builddir)/config.status $(top_srcdir)/intl/Makefile.in
+	cd $(top_builddir) && $(SHELL) ./config.status $@
+install-pkgdataDATA: $(pkgdata_DATA)
+	@$(NORMAL_INSTALL)
+	test -z "$(pkgdatadir)" || $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)"
+	@list='$(pkgdata_DATA)'; for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  f=$(am__strip_dir) \
+	  echo " $(pkgdataDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(pkgdatadir)/$$f'"; \
+	  $(pkgdataDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(pkgdatadir)/$$f"; \
+	done
+
+uninstall-pkgdataDATA:
+	@$(NORMAL_UNINSTALL)
+	@list='$(pkgdata_DATA)'; for p in $$list; do \
+	  f=$(am__strip_dir) \
+	  echo " rm -f '$(DESTDIR)$(pkgdatadir)/$$f'"; \
+	  rm -f "$(DESTDIR)$(pkgdatadir)/$$f"; \
+	done
+
+# This directory's subdirectories are mostly independent; you can cd
+# into them and run `make' without going through this Makefile.
+# To change the values of `make' variables: instead of editing Makefiles,
+# (1) if the variable is set in `config.status', edit `config.status'
+#     (which will cause the Makefiles to be regenerated when you run `make');
+# (2) otherwise, pass the desired values on the `make' command line.
+$(RECURSIVE_TARGETS):
+	@failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	target=`echo $@ | sed s/-recursive//`; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    dot_seen=yes; \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+$(RECURSIVE_CLEAN_TARGETS):
+	@failcom='exit 1'; \
+	for f in x $$MAKEFLAGS; do \
+	  case $$f in \
+	    *=* | --[!k]*);; \
+	    *k*) failcom='fail=yes';; \
+	  esac; \
+	done; \
+	dot_seen=no; \
+	case "$@" in \
+	  distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
+	  *) list='$(SUBDIRS)' ;; \
+	esac; \
+	rev=''; for subdir in $$list; do \
+	  if test "$$subdir" = "."; then :; else \
+	    rev="$$subdir $$rev"; \
+	  fi; \
+	done; \
+	rev="$$rev ."; \
+	target=`echo $@ | sed s/-recursive//`; \
+	for subdir in $$rev; do \
+	  echo "Making $$target in $$subdir"; \
+	  if test "$$subdir" = "."; then \
+	    local_target="$$target-am"; \
+	  else \
+	    local_target="$$target"; \
+	  fi; \
+	  (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
+	  || eval $$failcom; \
+	done && test -z "$$fail"
+tags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
+	done
+ctags-recursive:
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  test "$$subdir" = . || (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
+	done
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
+	  include_option=--etags-include; \
+	  empty_fix=.; \
+	else \
+	  include_option=--include; \
+	  empty_fix=; \
+	fi; \
+	list='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test ! -f $$subdir/TAGS || \
+	      tags="$$tags $$include_option=$$here/$$subdir/TAGS"; \
+	  fi; \
+	done; \
+	list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	    $$tags $$unique; \
+	fi
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$tags $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && cd $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	$(am__remove_distdir)
+	test -d $(distdir) || mkdir $(distdir)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    fi; \
+	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+	list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d "$(distdir)/$$subdir" \
+	    || $(MKDIR_P) "$(distdir)/$$subdir" \
+	    || exit 1; \
+	    distdir=`$(am__cd) $(distdir) && pwd`; \
+	    top_distdir=`$(am__cd) $(top_distdir) && pwd`; \
+	    (cd $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$$top_distdir" \
+	        distdir="$$distdir/$$subdir" \
+		am__remove_distdir=: \
+		am__skip_length_check=: \
+	        distdir) \
+	      || exit 1; \
+	  fi; \
+	done
+	-find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
+	  ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+	  ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+	  ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
+	|| chmod -R a+r $(distdir)
+dist-gzip: distdir
+	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+	$(am__remove_distdir)
+
+dist-bzip2: distdir
+	tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
+	$(am__remove_distdir)
+
+dist-lzma: distdir
+	tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
+	$(am__remove_distdir)
+
+dist-tarZ: distdir
+	tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+	$(am__remove_distdir)
+
+dist-shar: distdir
+	shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
+	$(am__remove_distdir)
+
+dist-zip: distdir
+	-rm -f $(distdir).zip
+	zip -rq $(distdir).zip $(distdir)
+	$(am__remove_distdir)
+
+dist dist-all: distdir
+	tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+	$(am__remove_distdir)
+
+# This target untars the dist file and tries a VPATH configuration.  Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+	case '$(DIST_ARCHIVES)' in \
+	*.tar.gz*) \
+	  GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
+	*.tar.bz2*) \
+	  bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
+	*.tar.lzma*) \
+	  unlzma -c $(distdir).tar.lzma | $(am__untar) ;;\
+	*.tar.Z*) \
+	  uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+	*.shar.gz*) \
+	  GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
+	*.zip*) \
+	  unzip $(distdir).zip ;;\
+	esac
+	chmod -R a-w $(distdir); chmod a+w $(distdir)
+	mkdir $(distdir)/_build
+	mkdir $(distdir)/_inst
+	chmod a-w $(distdir)
+	dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+	  && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+	  && cd $(distdir)/_build \
+	  && ../configure --srcdir=.. --prefix="$$dc_install_base" \
+	    --with-included-gettext \
+	    $(DISTCHECK_CONFIGURE_FLAGS) \
+	  && $(MAKE) $(AM_MAKEFLAGS) \
+	  && $(MAKE) $(AM_MAKEFLAGS) dvi \
+	  && $(MAKE) $(AM_MAKEFLAGS) check \
+	  && $(MAKE) $(AM_MAKEFLAGS) install \
+	  && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+	  && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+	  && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+	        distuninstallcheck \
+	  && chmod -R a-w "$$dc_install_base" \
+	  && ({ \
+	       (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+	       && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+	            distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+	      } || { rm -rf "$$dc_destdir"; exit 1; }) \
+	  && rm -rf "$$dc_destdir" \
+	  && $(MAKE) $(AM_MAKEFLAGS) dist \
+	  && rm -rf $(DIST_ARCHIVES) \
+	  && $(MAKE) $(AM_MAKEFLAGS) distcleancheck
+	$(am__remove_distdir)
+	@(echo "$(distdir) archives ready for distribution: "; \
+	  list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+	  sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
+distuninstallcheck:
+	@cd $(distuninstallcheck_dir) \
+	&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
+	   || { echo "ERROR: files left after uninstall:" ; \
+	        if test -n "$(DESTDIR)"; then \
+	          echo "  (check DESTDIR support)"; \
+	        fi ; \
+	        $(distuninstallcheck_listfiles) ; \
+	        exit 1; } >&2
+distcleancheck: distclean
+	@if test '$(srcdir)' = . ; then \
+	  echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+	  exit 1 ; \
+	fi
+	@test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+	  || { echo "ERROR: files left in build directory after distclean:" ; \
+	       $(distcleancheck_listfiles) ; \
+	       exit 1; } >&2
+check-am: all-am
+check: check-recursive
+all-am: Makefile $(DATA) config.h
+installdirs: installdirs-recursive
+installdirs-am:
+	for dir in "$(DESTDIR)$(pkgdatadir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-recursive
+install-exec: install-exec-recursive
+install-data: install-data-recursive
+uninstall: uninstall-recursive
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-recursive
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+	-test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-recursive
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-recursive
+	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic distclean-hdr distclean-tags
+
+dvi: dvi-recursive
+
+dvi-am:
+
+html: html-recursive
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-pkgdataDATA
+
+install-dvi: install-dvi-recursive
+
+install-exec-am:
+
+install-html: install-html-recursive
+
+install-info: install-info-recursive
+
+install-man:
+
+install-pdf: install-pdf-recursive
+
+install-ps: install-ps-recursive
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-recursive
+	-rm -f $(am__CONFIG_DISTCLEAN_FILES)
+	-rm -rf $(top_srcdir)/autom4te.cache
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-recursive
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-recursive
+
+pdf-am:
+
+ps: ps-recursive
+
+ps-am:
+
+uninstall-am: uninstall-pkgdataDATA
+
+.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) install-am \
+	install-strip
+
+.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
+	all all-am am--refresh check check-am clean clean-generic \
+	ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \
+	dist-lzma dist-shar dist-tarZ dist-zip distcheck distclean \
+	distclean-generic distclean-hdr distclean-tags distcleancheck \
+	distdir distuninstallcheck dvi dvi-am html html-am info \
+	info-am install install-am install-data install-data-am \
+	install-dvi install-dvi-am install-exec install-exec-am \
+	install-html install-html-am install-info install-info-am \
+	install-man install-pdf install-pdf-am install-pkgdataDATA \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs installdirs-am maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
+	pdf-am ps ps-am tags tags-recursive uninstall uninstall-am \
+	uninstall-pkgdataDATA
+
+
+rpm-dist: dist
+	cp $(PACKAGE)-$(VERSION).tar.gz $(HOME)/rpm/SOURCES
+	-rm -f $(HOME)/rpm/SOURCES/$(PACKAGE)-$(VERSION).tar.bz2
+	bzme $(HOME)/rpm/SOURCES/$(PACKAGE)-$(VERSION).tar.gz
+	rpm -ba $(PACKAGE).spec
+
+bin-dist: all
+	cp src/wmcoincoin .
+	cp src/wmccc .
+	strip wmcoincoin
+	strip wmccc
+	tar czvf $(PACKAGE)-$(VERSION)-$(COIN_ARCH).tgz ChangeLog README options wmcoincoin wmccc
+
+nightly: dist
+	cp $(PACKAGE)-$(VERSION).tar.gz ../wmcoincoin-cvs.tar.gz
+	(cd ..; ./up.sh ./wmcoincoin-cvs.tar.gz download/devel)
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/NEWS b/NEWS
new file mode 100644
index 0000000..451197e
--- /dev/null
+++ b/NEWS
@@ -0,0 +1,23 @@
+2001-12-16 v2.3.2: bugfixes divers 
+2001-12-02 super ispell pour le palmipede + bugfixes + cleanup pour le cvs
+2001-10-28 la v2.2beta a aussi une bone tete
+2001-09-29 la v2.1beta a une bonne tete
+2001-09-19 rolala ça fait longtemps que j'ai pas touché a ce fichier.
+2001-05-24 apres la 1.0beta, solide comme un roc, on va passer directement a la 1.1...
+           Avec tout plein de nouveautés pour encore mieux troller:
+		* des petits ballons d'aide, c'est pas utile mais c'est marrant a faire.
+		* des messages dans de vrai fenetre quand il y a une erreur embetante
+		* j'ai viré curl ! c'etait surtout histoire d'ecrire un petit truc 
+		pour faire des GET et des POST, avec des sockets et tout.. instructif. 
+		j'ai peut etre rendu le truc moins robuste qu'avec curl, mais c'est plus
+		propre, et ca permet de mieux gerer les situations d'erreurs.
+		* le palmipede editor, qui permet d'editer les messages/useragent a poster
+		avec gestion des balises html...
+		* la compatibilité KDE ! et sans doute plein d'autres windowmanagers, mais
+		j'ai pas essayé.
+2001-03-10 Ca fait des semaines que je me dis qu'il faut sortir la version suivante
+	   Je crois que je vqis pqsser a l'acte.
+2001-02-21 Je viens de corriger 2-3 conneries dans le README
+2001-02-21 Apres reflexion, c'etait debile d'utiliser des threads --> retour aux
+           bon vieux signaux. ca marche bien :-)
+2001-02-19 La version 0.9 de wmCoinCoin semble prête !
diff --git a/README b/README
new file mode 100644
index 0000000..e28339f
--- /dev/null
+++ b/README
@@ -0,0 +1,71 @@
+NE LISEZ PAS CE README !!!!!!!!!!!!!!!!!!!!
+il est beaucoup trop vieux, voir plutot http://hules.free.fr/wmcoincoin
+
+
+wmCoinCoin 2.1beta: yet another braindamaged dock applet
+
+-------------------<abstract>---------------------------------
+ prerequis 
+	- rien de particulier (x11,...)
+ compilation: 
+	./configure && make ; su ; make install	
+ avant de lancer:
+	wmcoincoin -h
+--------------------</abstract>--------------------------------
+
+Tout d'abord, ce programme n'a d'interet(!?!) que pour les personnes qui
+cliquent 'refresh' 500 fois par jour sur DaLinuxFrenchPage (http://linuxfr.org)
+
+Il est maintenant capable de fonctionner avec d'autres site que linuxfr.org,
+sous reserve qu'ils tournent sous dacode 1.2 ou mieux.
+
+c'est une dock applet pour windowmaker (http://www.wimdowmaker.org). 
+Ses fonctionnalités::
+ * Affichage de l'heure du dernier post sur la tribune
+ * Affichage défilant des titres des dernières news de http://linuxfr.org
+ * Visionnage rapide du contenu d'une news (sans les commentaires)
+ * Troll-o-metre incorporé de qualité professionnelle.
+ * Troll-o-scope de dernière génération, modele couleur multiprecision 55x21
+ * (NEW!) Palmipède Editor, permet d'editer les messages a envoyer sur la tribune
+ainsi que le useragent.
+ * (NEW!) Estimation du nombre de personnes présentes sur la tribune.
+ * (NEW!) Compatibilité KDE .
+(faire: Menu KDE/Configurer/Ajouter/Extension/Applets Windowmaker),
+ * le pinnipede etc...
+ * non, le coredump ne fait pas partie des fonctionnalites, alors si
+wmcoincoin a tendance a en pondre, faites le moi savoir :)
+
+Pour plus de details, consulter la wmCoinCoinHomePage 
+(http://hules.free.fr/wmcoincoin)
+
+Pour la compilation: les informations classiques sont dans le fichier INSTALL.
+* la libwraster n'est plus necessaire depuis la v2.2beta
+* il n'y a PLUS BESOIN de curl, wmcoincoin s'est doté d'un magnifique module http, que 
+  j'espere a peu pres fonctionnel..
+* un DISPLAY sur au moins 15 bits (eh oui...)
+* un BRAS, muni d'une main prolongée par un périphérique de pointage.
+
+En option: 
+* un cerveau (vraiment pas obligatoire :-)
+
+pour compiler:
+
+[prière à St Isodore, notre Saint Patron]
+
+./configure
+
+[à ce stade, je recommande de faire une offrande a shivah, ça peut aider]
+
+make
+make install
+
+les options utiles de ./configure :
+--prefix chemin (par defaut chemin == /usr/local )
+
+Pour voir les options de wmCoinCoin, executer 'wmcoincoin -h'
+
+[Nouveau (v2.x)]
+* un fichier permettant de stocker les options (utile pour KDE qui ne sauve pas les options de
+ligne de commande d'une session à l'autre) est utilisé: $HOME/wmcoincoin/options
+(un fichier par défaut est crée au premier lancement, vous pouvez ensuite l'éditer)
+Il contient aussi des options supplémentaires permettant de paramètrer le PINNIPEDE TELETYPE.
diff --git a/TODO b/TODO
new file mode 100644
index 0000000..e69de29
diff --git a/aclocal.m4 b/aclocal.m4
new file mode 100644
index 0000000..3ffbc84
--- /dev/null
+++ b/aclocal.m4
@@ -0,0 +1,1067 @@
+# generated automatically by aclocal 1.10.1 -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+m4_ifndef([AC_AUTOCONF_VERSION],
+  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+m4_if(AC_AUTOCONF_VERSION, [2.61],,
+[m4_warning([this file was generated for autoconf 2.61.
+You have another version of autoconf.  It may work, but is not guaranteed to.
+If you have problems, you may need to regenerate the build system entirely.
+To do so, use the procedure documented by the package, typically `autoreconf'.])])
+
+# pkg.m4 - Macros to locate and utilise pkg-config.            -*- Autoconf -*-
+# 
+# Copyright © 2004 Scott James Remnant <scott at netsplit.com>.
+#
+# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# PKG_PROG_PKG_CONFIG([MIN-VERSION])
+# ----------------------------------
+AC_DEFUN([PKG_PROG_PKG_CONFIG],
+[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
+m4_pattern_allow([^PKG_CONFIG(_PATH)?$])
+AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+	AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
+fi
+if test -n "$PKG_CONFIG"; then
+	_pkg_min_version=m4_default([$1], [0.9.0])
+	AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
+	if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+		AC_MSG_RESULT([yes])
+	else
+		AC_MSG_RESULT([no])
+		PKG_CONFIG=""
+	fi
+		
+fi[]dnl
+])# PKG_PROG_PKG_CONFIG
+
+# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+#
+# Check to see whether a particular set of modules exists.  Similar
+# to PKG_CHECK_MODULES(), but does not set variables or print errors.
+#
+#
+# Similar to PKG_CHECK_MODULES, make sure that the first instance of
+# this or PKG_CHECK_MODULES is called, or make sure to call
+# PKG_CHECK_EXISTS manually
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_EXISTS],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+if test -n "$PKG_CONFIG" && \
+    AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
+  m4_ifval([$2], [$2], [:])
+m4_ifvaln([$3], [else
+  $3])dnl
+fi])
+
+
+# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
+# ---------------------------------------------
+m4_define([_PKG_CONFIG],
+[if test -n "$PKG_CONFIG"; then
+    if test -n "$$1"; then
+        pkg_cv_[]$1="$$1"
+    else
+        PKG_CHECK_EXISTS([$3],
+                         [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`],
+			 [pkg_failed=yes])
+    fi
+else
+	pkg_failed=untried
+fi[]dnl
+])# _PKG_CONFIG
+
+# _PKG_SHORT_ERRORS_SUPPORTED
+# -----------------------------
+AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi[]dnl
+])# _PKG_SHORT_ERRORS_SUPPORTED
+
+
+# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+# [ACTION-IF-NOT-FOUND])
+#
+#
+# Note that if there is a possibility the first call to
+# PKG_CHECK_MODULES might not happen, you should be sure to include an
+# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
+#
+#
+# --------------------------------------------------------------
+AC_DEFUN([PKG_CHECK_MODULES],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
+AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
+
+pkg_failed=no
+AC_MSG_CHECKING([for $1])
+
+_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
+_PKG_CONFIG([$1][_LIBS], [libs], [$2])
+
+m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
+and $1[]_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.])
+
+if test $pkg_failed = yes; then
+        _PKG_SHORT_ERRORS_SUPPORTED
+        if test $_pkg_short_errors_supported = yes; then
+	        $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$2"`
+        else 
+	        $1[]_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
+
+	ifelse([$4], , [AC_MSG_ERROR(dnl
+[Package requirements ($2) were not met:
+
+$$1_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+_PKG_TEXT
+])],
+		[AC_MSG_RESULT([no])
+                $4])
+elif test $pkg_failed = untried; then
+	ifelse([$4], , [AC_MSG_FAILURE(dnl
+[The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+_PKG_TEXT
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.])],
+		[$4])
+else
+	$1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
+	$1[]_LIBS=$pkg_cv_[]$1[]_LIBS
+        AC_MSG_RESULT([yes])
+	ifelse([$3], , :, [$3])
+fi[]dnl
+])# PKG_CHECK_MODULES
+
+# Copyright (C) 2002, 2003, 2005, 2006, 2007  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+# (This private macro should not be called outside this file.)
+AC_DEFUN([AM_AUTOMAKE_VERSION],
+[am__api_version='1.10'
+dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+dnl require some minimum version.  Point them to the right macro.
+m4_if([$1], [1.10.1], [],
+      [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+])
+
+# _AM_AUTOCONF_VERSION(VERSION)
+# -----------------------------
+# aclocal traces this macro to find the Autoconf version.
+# This is a private macro too.  Using m4_define simplifies
+# the logic in aclocal, which can simply ignore this definition.
+m4_define([_AM_AUTOCONF_VERSION], [])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+[AM_AUTOMAKE_VERSION([1.10.1])dnl
+m4_ifndef([AC_AUTOCONF_VERSION],
+  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+_AM_AUTOCONF_VERSION(AC_AUTOCONF_VERSION)])
+
+# AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
+
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to `$srcdir/foo'.  In other projects, it is set to
+# `$srcdir', `$srcdir/..', or `$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory.  The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run.  This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+#    fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+#    fails if $ac_aux_dir is absolute,
+#    fails when called from a subdirectory in a VPATH build with
+#          a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir.  In an in-source build this is usually
+# harmless because $srcdir is `.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir.  That would be:
+#   am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+#   MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH.  The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[dnl Rely on autoconf to set up CDPATH properly.
+AC_PREREQ([2.50])dnl
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+])
+
+# AM_CONDITIONAL                                            -*- Autoconf -*-
+
+# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 8
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ(2.52)dnl
+ ifelse([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
+	[$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])dnl
+AC_SUBST([$1_FALSE])dnl
+_AM_SUBST_NOTMAKE([$1_TRUE])dnl
+_AM_SUBST_NOTMAKE([$1_FALSE])dnl
+if $2; then
+  $1_TRUE=
+  $1_FALSE='#'
+else
+  $1_TRUE='#'
+  $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+  AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 9
+
+# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
+# written in clear, in which case automake, when reading aclocal.m4,
+# will think it sees a *use*, and therefore will trigger all it's
+# C support machinery.  Also note that it means that autoscan, seeing
+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+
+
+# _AM_DEPENDENCIES(NAME)
+# ----------------------
+# See how the compiler implements dependency checking.
+# NAME is "CC", "CXX", "GCJ", or "OBJC".
+# We try a few techniques and use that to set a single cache variable.
+#
+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+# dependency, and given that the user is not expected to run this macro,
+# just rely on AC_PROG_CC.
+AC_DEFUN([_AM_DEPENDENCIES],
+[AC_REQUIRE([AM_SET_DEPDIR])dnl
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+ifelse([$1], CC,   [depcc="$CC"   am_compiler_list=],
+       [$1], CXX,  [depcc="$CXX"  am_compiler_list=],
+       [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+       [$1], UPC,  [depcc="$UPC"  am_compiler_list=],
+       [$1], GCJ,  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
+                   [depcc="$$1"   am_compiler_list=])
+
+AC_CACHE_CHECK([dependency style of $depcc],
+               [am_cv_$1_dependencies_compiler_type],
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_$1_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+  fi
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    case $depmode in
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    none) break ;;
+    esac
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.
+    if depmode=$depmode \
+       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_$1_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_$1_dependencies_compiler_type=none
+fi
+])
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+AM_CONDITIONAL([am__fastdep$1], [
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
+])
+
+
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES
+AC_DEFUN([AM_SET_DEPDIR],
+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+])
+
+
+# AM_DEP_TRACK
+# ------------
+AC_DEFUN([AM_DEP_TRACK],
+[AC_ARG_ENABLE(dependency-tracking,
+[  --disable-dependency-tracking  speeds up one-time build
+  --enable-dependency-tracking   do not reject slow dependency extractors])
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+])
+
+# Generate code to set up dependency tracking.              -*- Autoconf -*-
+
+# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+#serial 3
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[for mf in $CONFIG_FILES; do
+  # Strip MF so we end up with the name of the file.
+  mf=`echo "$mf" | sed -e 's/:.*$//'`
+  # Check whether this is an Automake generated Makefile or not.
+  # We used to match only the files named `Makefile.in', but
+  # some people rename them; so instead we look at the file content.
+  # Grep'ing the first line is not enough: some people post-process
+  # each Makefile.in and add a new line on top of each file to say so.
+  # Grep'ing the whole file is not good either: AIX grep has a line
+  # limit of 2048, but all sed's we know have understand at least 4000.
+  if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+    dirpart=`AS_DIRNAME("$mf")`
+  else
+    continue
+  fi
+  # Extract the definition of DEPDIR, am__include, and am__quote
+  # from the Makefile without running `make'.
+  DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+  test -z "$DEPDIR" && continue
+  am__include=`sed -n 's/^am__include = //p' < "$mf"`
+  test -z "am__include" && continue
+  am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+  # When using ansi2knr, U may be empty or an underscore; expand it
+  U=`sed -n 's/^U = //p' < "$mf"`
+  # Find all dependency output files, they are included files with
+  # $(DEPDIR) in their names.  We invoke sed twice because it is the
+  # simplest approach to changing $(DEPDIR) to its actual value in the
+  # expansion.
+  for file in `sed -n "
+    s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+       sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+    # Make sure the directory exists.
+    test -f "$dirpart/$file" && continue
+    fdir=`AS_DIRNAME(["$file"])`
+    AS_MKDIR_P([$dirpart/$fdir])
+    # echo "creating $dirpart/$file"
+    echo '# dummy' > "$dirpart/$file"
+  done
+done
+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+
+
+# AM_OUTPUT_DEPENDENCY_COMMANDS
+# -----------------------------
+# This macro should only be invoked once -- use via AC_REQUIRE.
+#
+# This code is only required when automatic dependency tracking
+# is enabled.  FIXME.  This creates each `.P' file that we will
+# need in order to bootstrap the dependency handling code.
+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+[AC_CONFIG_COMMANDS([depfiles],
+     [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+     [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
+])
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 8
+
+# AM_CONFIG_HEADER is obsolete.  It has been replaced by AC_CONFIG_HEADERS.
+AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)])
+
+# Do all the work for Automake.                             -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
+# 2005, 2006, 2008 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 13
+
+# This macro actually does too much.  Some checks are only needed if
+# your package does certain things.  But this isn't really a big deal.
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out.  PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition.  After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.60])dnl
+dnl Autoconf wants to disallow AM_ names.  We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+  # is not polluted with repeated "-I."
+  AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
+  # test to see if srcdir already configured
+  if test -f $srcdir/config.status; then
+    AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+  fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
+m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,,
+  [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package])
+ AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version})
+AM_MISSING_PROG(AUTOCONF, autoconf)
+AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
+AM_MISSING_PROG(AUTOHEADER, autoheader)
+AM_MISSING_PROG(MAKEINFO, makeinfo)
+AM_PROG_INSTALL_SH
+AM_PROG_INSTALL_STRIP
+AC_REQUIRE([AM_PROG_MKDIR_P])dnl
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+              [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+	      		     [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+                  [_AM_DEPENDENCIES(CC)],
+                  [define([AC_PROG_CC],
+                          defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+                  [_AM_DEPENDENCIES(CXX)],
+                  [define([AC_PROG_CXX],
+                          defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+                  [_AM_DEPENDENCIES(OBJC)],
+                  [define([AC_PROG_OBJC],
+                          defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
+])
+])
+
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated.  The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_arg=$1
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $_am_arg | $_am_arg:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
+
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"}
+AC_SUBST(install_sh)])
+
+# Copyright (C) 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot.  For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Check to see how 'make' treats includes.	            -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 3
+
+# AM_MAKE_INCLUDE()
+# -----------------
+# Check to see how make treats includes.
+AC_DEFUN([AM_MAKE_INCLUDE],
+[am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+	@echo done
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+AC_MSG_CHECKING([for style of include used by $am_make])
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# We grep out `Entering directory' and `Leaving directory'
+# messages which can occur if `w' ends up in MAKEFLAGS.
+# In particular we don't look at `^make:' because GNU make might
+# be invoked under some other name (usually "gmake"), in which
+# case it prints its new name instead of `make'.
+if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
+   am__include=include
+   am__quote=
+   _am_result=GNU
+fi
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+   echo '.include "confinc"' > confmf
+   if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
+      am__include=.include
+      am__quote="\""
+      _am_result=BSD
+   fi
+fi
+AC_SUBST([am__include])
+AC_SUBST([am__quote])
+AC_MSG_RESULT([$_am_result])
+rm -f confinc confmf
+])
+
+# Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
+
+# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 5
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it supports --run.
+# If it does, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([missing])dnl
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
+else
+  am_missing_run=
+  AC_MSG_WARN([`missing' script is too old or missing])
+fi
+])
+
+# Copyright (C) 2003, 2004, 2005, 2006  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_MKDIR_P
+# ---------------
+# Check for `mkdir -p'.
+AC_DEFUN([AM_PROG_MKDIR_P],
+[AC_PREREQ([2.60])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+dnl Automake 1.8 to 1.9.6 used to define mkdir_p.  We now use MKDIR_P,
+dnl while keeping a definition of mkdir_p for backward compatibility.
+dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile.
+dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of
+dnl Makefile.ins that do not define MKDIR_P, so we do our own
+dnl adjustment using top_builddir (which is defined more often than
+dnl MKDIR_P).
+AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl
+case $mkdir_p in
+  [[\\/$]]* | ?:[[\\/]]*) ;;
+  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+])
+
+# Helper functions for option handling.                     -*- Autoconf -*-
+
+# Copyright (C) 2001, 2002, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 3
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# ------------------------------
+# Set option NAME.  Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), 1)])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ----------------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[AC_FOREACH([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+# Check to make sure that the build environment is sane.    -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
+# Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 4
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
+   if test "$[*]" = "X"; then
+      # -L didn't work.
+      set X `ls -t $srcdir/configure conftest.file`
+   fi
+   rm -f conftest.file
+   if test "$[*]" != "X $srcdir/configure conftest.file" \
+      && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
+alias in your environment])
+   fi
+
+   test "$[2]" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT(yes)])
+
+# Copyright (C) 2001, 2003, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_STRIP
+# ---------------------
+# One issue with vendor `install' (even GNU) is that you can't
+# specify the program used to strip binaries.  This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in `make install-strip', and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be `maybe'.
+if test "$cross_compiling" != no; then
+  AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# Copyright (C) 2006  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
+# This macro is traced by Automake.
+AC_DEFUN([_AM_SUBST_NOTMAKE])
+
+# Check how to create a tarball.                            -*- Autoconf -*-
+
+# Copyright (C) 2004, 2005  Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 2
+
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of `v7', `ustar', or `pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+#     tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+#     $(am__untar) < result.tar
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility.
+AM_MISSING_PROG([AMTAR], [tar])
+m4_if([$1], [v7],
+     [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'],
+     [m4_case([$1], [ustar],, [pax],,
+              [m4_fatal([Unknown tar format])])
+AC_MSG_CHECKING([how to create a $1 tar archive])
+# Loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+_am_tools=${am_cv_prog_tar_$1-$_am_tools}
+# Do not fold the above two line into one, because Tru64 sh and
+# Solaris sh will not grok spaces in the rhs of `-'.
+for _am_tool in $_am_tools
+do
+  case $_am_tool in
+  gnutar)
+    for _am_tar in tar gnutar gtar;
+    do
+      AM_RUN_LOG([$_am_tar --version]) && break
+    done
+    am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+    am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+    am__untar="$_am_tar -xf -"
+    ;;
+  plaintar)
+    # Must skip GNU tar: if it does not support --format= it doesn't create
+    # ustar tarball either.
+    (tar --version) >/dev/null 2>&1 && continue
+    am__tar='tar chf - "$$tardir"'
+    am__tar_='tar chf - "$tardir"'
+    am__untar='tar xf -'
+    ;;
+  pax)
+    am__tar='pax -L -x $1 -w "$$tardir"'
+    am__tar_='pax -L -x $1 -w "$tardir"'
+    am__untar='pax -r'
+    ;;
+  cpio)
+    am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+    am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+    am__untar='cpio -i -H $1 -d'
+    ;;
+  none)
+    am__tar=false
+    am__tar_=false
+    am__untar=false
+    ;;
+  esac
+
+  # If the value was cached, stop now.  We just wanted to have am__tar
+  # and am__untar set.
+  test -n "${am_cv_prog_tar_$1}" && break
+
+  # tar/untar a dummy directory, and stop if the command works
+  rm -rf conftest.dir
+  mkdir conftest.dir
+  echo GrepMe > conftest.dir/file
+  AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+  rm -rf conftest.dir
+  if test -s conftest.tar; then
+    AM_RUN_LOG([$am__untar <conftest.tar])
+    grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+  fi
+done
+rm -rf conftest.dir
+
+AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+]) # _AM_PROG_TAR
+
+m4_include([m4/codeset.m4])
+m4_include([m4/gettext.m4])
+m4_include([m4/glibc2.m4])
+m4_include([m4/glibc21.m4])
+m4_include([m4/iconv.m4])
+m4_include([m4/intdiv0.m4])
+m4_include([m4/intl.m4])
+m4_include([m4/intlmacosx.m4])
+m4_include([m4/intmax.m4])
+m4_include([m4/inttypes-pri.m4])
+m4_include([m4/inttypes_h.m4])
+m4_include([m4/isc-posix.m4])
+m4_include([m4/lcmessage.m4])
+m4_include([m4/lib-ld.m4])
+m4_include([m4/lib-link.m4])
+m4_include([m4/lib-prefix.m4])
+m4_include([m4/lock.m4])
+m4_include([m4/longlong.m4])
+m4_include([m4/nls.m4])
+m4_include([m4/po.m4])
+m4_include([m4/printf-posix.m4])
+m4_include([m4/progtest.m4])
+m4_include([m4/size_max.m4])
+m4_include([m4/stdint_h.m4])
+m4_include([m4/uintmax_t.m4])
+m4_include([m4/visibility.m4])
+m4_include([m4/wchar_t.m4])
+m4_include([m4/wint_t.m4])
+m4_include([m4/xsize.m4])
diff --git a/compile b/compile
new file mode 100755
index 0000000..ac07cc5
--- /dev/null
+++ b/compile
@@ -0,0 +1,107 @@
+#! /bin/sh
+
+# Wrapper for compilers which do not understand `-c -o'.
+
+# Copyright 1999, 2000 Free Software Foundation, Inc.
+# Written by Tom Tromey <tromey at cygnus.com>.
+#
+# 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, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Usage:
+# compile PROGRAM [ARGS]...
+# `-o FOO.o' is removed from the args passed to the actual compile.
+
+# Usage statement added by Billy Biggs <vektor at dumbterm.net>.
+if [ -z $1 ]; then
+    echo "Wrapper for compilers which do not understand '-c -o'."
+    echo "usage: compile PROGRAM [ARGS]..."
+    echo "'-o FOO.o' is removed from the args passed to the actual compile."
+    exit 1
+fi
+
+prog=$1
+shift
+
+ofile=
+cfile=
+args=
+while test $# -gt 0; do
+   case "$1" in
+    -o)
+       # configure might choose to run compile as `compile cc -o foo foo.c'.
+       # So we do something ugly here.
+       ofile=$2
+       shift
+       case "$ofile" in
+	*.o | *.obj)
+	   ;;
+	*)
+	   args="$args -o $ofile"
+	   ofile=
+	   ;;
+       esac
+       ;;
+    *.c)
+       cfile=$1
+       args="$args $1"
+       ;;
+    *)
+       args="$args $1"
+       ;;
+   esac
+   shift
+done
+
+if test -z "$ofile" || test -z "$cfile"; then
+   # If no `-o' option was seen then we might have been invoked from a
+   # pattern rule where we don't need one.  That is ok -- this is a
+   # normal compilation that the losing compiler can handle.  If no
+   # `.c' file was seen then we are probably linking.  That is also
+   # ok.
+   exec "$prog" $args
+fi
+
+# Name of file we expect compiler to create.
+cofile=`echo $cfile | sed -e 's|^.*/||' -e 's/\.c$/.o/'`
+
+# Create the lock directory.
+# Note: use `[/.-]' here to ensure that we don't use the same name
+# that we are using for the .o file.  Also, base the name on the expected
+# object file name, since that is what matters with a parallel build.
+lockdir=`echo $cofile | sed -e 's|[/.-]|_|g'`.d
+while true; do
+   if mkdir $lockdir > /dev/null 2>&1; then
+      break
+   fi
+   sleep 1
+done
+# FIXME: race condition here if user kills between mkdir and trap.
+trap "rmdir $lockdir; exit 1" 1 2 15
+
+# Run the compile.
+"$prog" $args
+status=$?
+
+if test -f "$cofile"; then
+   mv "$cofile" "$ofile"
+fi
+
+rmdir $lockdir
+exit $status
diff --git a/config.guess b/config.guess
new file mode 100755
index 0000000..45bee13
--- /dev/null
+++ b/config.guess
@@ -0,0 +1,1465 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+
+timestamp='2005-04-22'
+
+# This file 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Originally written by Per Bothner <per at bothner.com>.
+# Please send patches to <config-patches at gnu.org>.  Submit a context
+# diff and a properly formatted ChangeLog entry.
+#
+# This script attempts to guess a canonical system name similar to
+# config.sub.  If it succeeds, it prints the system name on stdout, and
+# exits with 0.  Otherwise, it exits with 1.
+#
+# The plan is that this can be called by configure scripts if you
+# don't specify an explicit build system type.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches at gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit 0 ;;
+    --version | -v )
+       echo "$version" ; exit 0 ;;
+    --help | --h* | -h )
+       echo "$usage"; exit 0 ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )	# Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help" >&2
+       exit 1 ;;
+    * )
+       break ;;
+  esac
+done
+
+if test $# != 0; then
+  echo "$me: too many arguments$help" >&2
+  exit 1
+fi
+
+trap 'exit 1' 1 2 15
+
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+# compiler to aid in system detection is discouraged as it requires
+# temporary files to be created and, as you can see below, it is a
+# headache to deal with in a portable fashion.
+
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+# Portable tmp directory creation inspired by the Autoconf team.
+
+set_cc_for_build='
+trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
+trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
+: ${TMPDIR=/tmp} ;
+ { tmp=`(umask 077 && mktemp -d -q "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
+ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
+dummy=$tmp/dummy ;
+tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
+case $CC_FOR_BUILD,$HOST_CC,$CC in
+ ,,)    echo "int x;" > $dummy.c ;
+	for c in cc gcc c89 c99 ; do
+	  if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
+	     CC_FOR_BUILD="$c"; break ;
+	  fi ;
+	done ;
+	if test x"$CC_FOR_BUILD" = x ; then
+	  CC_FOR_BUILD=no_compiler_found ;
+	fi
+	;;
+ ,,*)   CC_FOR_BUILD=$CC ;;
+ ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
+esac ;'
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi at noc.rutgers.edu 1994-08-24)
+if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
+	PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
+    *:NetBSD:*:*)
+	# NetBSD (nbsd) targets should (where applicable) match one or
+	# more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
+	# *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
+	# switched to ELF, *-*-netbsd* would select the old
+	# object file format.  This provides both forward
+	# compatibility and a consistent mechanism for selecting the
+	# object file format.
+	#
+	# Note: NetBSD doesn't particularly care about the vendor
+	# portion of the name.  We always set it to "unknown".
+	sysctl="sysctl -n hw.machine_arch"
+	UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
+	    /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
+	case "${UNAME_MACHINE_ARCH}" in
+	    armeb) machine=armeb-unknown ;;
+	    arm*) machine=arm-unknown ;;
+	    sh3el) machine=shl-unknown ;;
+	    sh3eb) machine=sh-unknown ;;
+	    *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
+	esac
+	# The Operating System including object format, if it has switched
+	# to ELF recently, or will in the future.
+	case "${UNAME_MACHINE_ARCH}" in
+	    arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+		eval $set_cc_for_build
+		if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+			| grep __ELF__ >/dev/null
+		then
+		    # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+		    # Return netbsd for either.  FIX?
+		    os=netbsd
+		else
+		    os=netbsdelf
+		fi
+		;;
+	    *)
+	        os=netbsd
+		;;
+	esac
+	# The OS release
+	# Debian GNU/NetBSD machines have a different userland, and
+	# thus, need a distinct triplet. However, they do not need
+	# kernel version information, so it can be replaced with a
+	# suitable tag, in the style of linux-gnu.
+	case "${UNAME_VERSION}" in
+	    Debian*)
+		release='-gnu'
+		;;
+	    *)
+		release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+		;;
+	esac
+	# Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+	# contains redundant information, the shorter form:
+	# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+	echo "${machine}-${os}${release}"
+	exit 0 ;;
+    amd64:OpenBSD:*:*)
+	echo x86_64-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    amiga:OpenBSD:*:*)
+	echo m68k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    cats:OpenBSD:*:*)
+	echo arm-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    hp300:OpenBSD:*:*)
+	echo m68k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    luna88k:OpenBSD:*:*)
+    	echo m88k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    mac68k:OpenBSD:*:*)
+	echo m68k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    macppc:OpenBSD:*:*)
+	echo powerpc-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    mvme68k:OpenBSD:*:*)
+	echo m68k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    mvme88k:OpenBSD:*:*)
+	echo m88k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    mvmeppc:OpenBSD:*:*)
+	echo powerpc-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    sgi:OpenBSD:*:*)
+	echo mips64-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    sun3:OpenBSD:*:*)
+	echo m68k-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    *:OpenBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-openbsd${UNAME_RELEASE}
+	exit 0 ;;
+    *:ekkoBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
+	exit 0 ;;
+    macppc:MirBSD:*:*)
+	echo powerppc-unknown-mirbsd${UNAME_RELEASE}
+	exit 0 ;;
+    *:MirBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
+	exit 0 ;;
+    alpha:OSF1:*:*)
+	case $UNAME_RELEASE in
+	*4.0)
+		UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+		;;
+	*5.*)
+	        UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+		;;
+	esac
+	# According to Compaq, /usr/sbin/psrinfo has been available on
+	# OSF/1 and Tru64 systems produced since 1995.  I hope that
+	# covers most systems running today.  This code pipes the CPU
+	# types through head -n 1, so we only detect the type of CPU 0.
+	ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+	case "$ALPHA_CPU_TYPE" in
+	    "EV4 (21064)")
+		UNAME_MACHINE="alpha" ;;
+	    "EV4.5 (21064)")
+		UNAME_MACHINE="alpha" ;;
+	    "LCA4 (21066/21068)")
+		UNAME_MACHINE="alpha" ;;
+	    "EV5 (21164)")
+		UNAME_MACHINE="alphaev5" ;;
+	    "EV5.6 (21164A)")
+		UNAME_MACHINE="alphaev56" ;;
+	    "EV5.6 (21164PC)")
+		UNAME_MACHINE="alphapca56" ;;
+	    "EV5.7 (21164PC)")
+		UNAME_MACHINE="alphapca57" ;;
+	    "EV6 (21264)")
+		UNAME_MACHINE="alphaev6" ;;
+	    "EV6.7 (21264A)")
+		UNAME_MACHINE="alphaev67" ;;
+	    "EV6.8CB (21264C)")
+		UNAME_MACHINE="alphaev68" ;;
+	    "EV6.8AL (21264B)")
+		UNAME_MACHINE="alphaev68" ;;
+	    "EV6.8CX (21264D)")
+		UNAME_MACHINE="alphaev68" ;;
+	    "EV6.9A (21264/EV69A)")
+		UNAME_MACHINE="alphaev69" ;;
+	    "EV7 (21364)")
+		UNAME_MACHINE="alphaev7" ;;
+	    "EV7.9 (21364A)")
+		UNAME_MACHINE="alphaev79" ;;
+	esac
+	# A Pn.n version is a patched version.
+	# A Vn.n version is a released version.
+	# A Tn.n version is a released field test version.
+	# A Xn.n version is an unreleased experimental baselevel.
+	# 1.2 uses "1.2" for uname -r.
+	echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+	exit 0 ;;
+    Alpha\ *:Windows_NT*:*)
+	# How do we know it's Interix rather than the generic POSIX subsystem?
+	# Should we change UNAME_MACHINE based on the output of uname instead
+	# of the specific Alpha model?
+	echo alpha-pc-interix
+	exit 0 ;;
+    21064:Windows_NT:50:3)
+	echo alpha-dec-winnt3.5
+	exit 0 ;;
+    Amiga*:UNIX_System_V:4.0:*)
+	echo m68k-unknown-sysv4
+	exit 0;;
+    *:[Aa]miga[Oo][Ss]:*:*)
+	echo ${UNAME_MACHINE}-unknown-amigaos
+	exit 0 ;;
+    *:[Mm]orph[Oo][Ss]:*:*)
+	echo ${UNAME_MACHINE}-unknown-morphos
+	exit 0 ;;
+    *:OS/390:*:*)
+	echo i370-ibm-openedition
+	exit 0 ;;
+    *:z/VM:*:*)
+	echo s390-ibm-zvmoe
+	exit 0 ;;
+    *:OS400:*:*)
+        echo powerpc-ibm-os400
+	exit 0 ;;
+    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+	echo arm-acorn-riscix${UNAME_RELEASE}
+	exit 0;;
+    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+	echo hppa1.1-hitachi-hiuxmpp
+	exit 0;;
+    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+	# akee at wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+	if test "`(/bin/universe) 2>/dev/null`" = att ; then
+		echo pyramid-pyramid-sysv3
+	else
+		echo pyramid-pyramid-bsd
+	fi
+	exit 0 ;;
+    NILE*:*:*:dcosx)
+	echo pyramid-pyramid-svr4
+	exit 0 ;;
+    DRS?6000:unix:4.0:6*)
+	echo sparc-icl-nx6
+	exit 0 ;;
+    DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
+	case `/usr/bin/uname -p` in
+	    sparc) echo sparc-icl-nx7 && exit 0 ;;
+	esac ;;
+    sun4H:SunOS:5.*:*)
+	echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit 0 ;;
+    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+	echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit 0 ;;
+    i86pc:SunOS:5.*:*)
+	echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit 0 ;;
+    sun4*:SunOS:6*:*)
+	# According to config.sub, this is the proper way to canonicalize
+	# SunOS6.  Hard to guess exactly what SunOS6 will be like, but
+	# it's likely to be more like Solaris than SunOS4.
+	echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit 0 ;;
+    sun4*:SunOS:*:*)
+	case "`/usr/bin/arch -k`" in
+	    Series*|S4*)
+		UNAME_RELEASE=`uname -v`
+		;;
+	esac
+	# Japanese Language versions have a version number like `4.1.3-JL'.
+	echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
+	exit 0 ;;
+    sun3*:SunOS:*:*)
+	echo m68k-sun-sunos${UNAME_RELEASE}
+	exit 0 ;;
+    sun*:*:4.2BSD:*)
+	UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+	test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+	case "`/bin/arch`" in
+	    sun3)
+		echo m68k-sun-sunos${UNAME_RELEASE}
+		;;
+	    sun4)
+		echo sparc-sun-sunos${UNAME_RELEASE}
+		;;
+	esac
+	exit 0 ;;
+    aushp:SunOS:*:*)
+	echo sparc-auspex-sunos${UNAME_RELEASE}
+	exit 0 ;;
+    # The situation for MiNT is a little confusing.  The machine name
+    # can be virtually everything (everything which is not
+    # "atarist" or "atariste" at least should have a processor
+    # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
+    # to the lowercase version "mint" (or "freemint").  Finally
+    # the system name "TOS" denotes a system which is actually not
+    # MiNT.  But MiNT is downward compatible to TOS, so this should
+    # be no problem.
+    atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+	exit 0 ;;
+    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+	echo m68k-atari-mint${UNAME_RELEASE}
+        exit 0 ;;
+    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+        echo m68k-atari-mint${UNAME_RELEASE}
+	exit 0 ;;
+    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+        echo m68k-milan-mint${UNAME_RELEASE}
+        exit 0 ;;
+    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+        echo m68k-hades-mint${UNAME_RELEASE}
+        exit 0 ;;
+    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+        echo m68k-unknown-mint${UNAME_RELEASE}
+        exit 0 ;;
+    m68k:machten:*:*)
+	echo m68k-apple-machten${UNAME_RELEASE}
+	exit 0 ;;
+    powerpc:machten:*:*)
+	echo powerpc-apple-machten${UNAME_RELEASE}
+	exit 0 ;;
+    RISC*:Mach:*:*)
+	echo mips-dec-mach_bsd4.3
+	exit 0 ;;
+    RISC*:ULTRIX:*:*)
+	echo mips-dec-ultrix${UNAME_RELEASE}
+	exit 0 ;;
+    VAX*:ULTRIX*:*:*)
+	echo vax-dec-ultrix${UNAME_RELEASE}
+	exit 0 ;;
+    2020:CLIX:*:* | 2430:CLIX:*:*)
+	echo clipper-intergraph-clix${UNAME_RELEASE}
+	exit 0 ;;
+    mips:*:*:UMIPS | mips:*:*:RISCos)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+#ifdef __cplusplus
+#include <stdio.h>  /* for printf() prototype */
+	int main (int argc, char *argv[]) {
+#else
+	int main (argc, argv) int argc; char *argv[]; {
+#endif
+	#if defined (host_mips) && defined (MIPSEB)
+	#if defined (SYSTYPE_SYSV)
+	  printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
+	#endif
+	#if defined (SYSTYPE_SVR4)
+	  printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
+	#endif
+	#if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+	  printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
+	#endif
+	#endif
+	  exit (-1);
+	}
+EOF
+	$CC_FOR_BUILD -o $dummy $dummy.c \
+	  && $dummy `echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` \
+	  && exit 0
+	echo mips-mips-riscos${UNAME_RELEASE}
+	exit 0 ;;
+    Motorola:PowerMAX_OS:*:*)
+	echo powerpc-motorola-powermax
+	exit 0 ;;
+    Motorola:*:4.3:PL8-*)
+	echo powerpc-harris-powermax
+	exit 0 ;;
+    Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+	echo powerpc-harris-powermax
+	exit 0 ;;
+    Night_Hawk:Power_UNIX:*:*)
+	echo powerpc-harris-powerunix
+	exit 0 ;;
+    m88k:CX/UX:7*:*)
+	echo m88k-harris-cxux7
+	exit 0 ;;
+    m88k:*:4*:R4*)
+	echo m88k-motorola-sysv4
+	exit 0 ;;
+    m88k:*:3*:R3*)
+	echo m88k-motorola-sysv3
+	exit 0 ;;
+    AViiON:dgux:*:*)
+        # DG/UX returns AViiON for all architectures
+        UNAME_PROCESSOR=`/usr/bin/uname -p`
+	if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
+	then
+	    if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
+	       [ ${TARGET_BINARY_INTERFACE}x = x ]
+	    then
+		echo m88k-dg-dgux${UNAME_RELEASE}
+	    else
+		echo m88k-dg-dguxbcs${UNAME_RELEASE}
+	    fi
+	else
+	    echo i586-dg-dgux${UNAME_RELEASE}
+	fi
+ 	exit 0 ;;
+    M88*:DolphinOS:*:*)	# DolphinOS (SVR3)
+	echo m88k-dolphin-sysv3
+	exit 0 ;;
+    M88*:*:R3*:*)
+	# Delta 88k system running SVR3
+	echo m88k-motorola-sysv3
+	exit 0 ;;
+    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+	echo m88k-tektronix-sysv3
+	exit 0 ;;
+    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+	echo m68k-tektronix-bsd
+	exit 0 ;;
+    *:IRIX*:*:*)
+	echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
+	exit 0 ;;
+    ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+	echo romp-ibm-aix      # uname -m gives an 8 hex-code CPU id
+	exit 0 ;;              # Note that: echo "'`uname -s`'" gives 'AIX '
+    i*86:AIX:*:*)
+	echo i386-ibm-aix
+	exit 0 ;;
+    ia64:AIX:*:*)
+	if [ -x /usr/bin/oslevel ] ; then
+		IBM_REV=`/usr/bin/oslevel`
+	else
+		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+	fi
+	echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
+	exit 0 ;;
+    *:AIX:2:3)
+	if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+		eval $set_cc_for_build
+		sed 's/^		//' << EOF >$dummy.c
+		#include <sys/systemcfg.h>
+
+		main()
+			{
+			if (!__power_pc())
+				exit(1);
+			puts("powerpc-ibm-aix3.2.5");
+			exit(0);
+			}
+EOF
+		$CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
+		echo rs6000-ibm-aix3.2.5
+	elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+		echo rs6000-ibm-aix3.2.4
+	else
+		echo rs6000-ibm-aix3.2
+	fi
+	exit 0 ;;
+    *:AIX:*:[45])
+	IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+	if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
+		IBM_ARCH=rs6000
+	else
+		IBM_ARCH=powerpc
+	fi
+	if [ -x /usr/bin/oslevel ] ; then
+		IBM_REV=`/usr/bin/oslevel`
+	else
+		IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
+	fi
+	echo ${IBM_ARCH}-ibm-aix${IBM_REV}
+	exit 0 ;;
+    *:AIX:*:*)
+	echo rs6000-ibm-aix
+	exit 0 ;;
+    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
+	echo romp-ibm-bsd4.4
+	exit 0 ;;
+    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
+	echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
+	exit 0 ;;                           # report: romp-ibm BSD 4.3
+    *:BOSX:*:*)
+	echo rs6000-bull-bosx
+	exit 0 ;;
+    DPX/2?00:B.O.S.:*:*)
+	echo m68k-bull-sysv3
+	exit 0 ;;
+    9000/[34]??:4.3bsd:1.*:*)
+	echo m68k-hp-bsd
+	exit 0 ;;
+    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+	echo m68k-hp-bsd4.4
+	exit 0 ;;
+    9000/[34678]??:HP-UX:*:*)
+	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+	case "${UNAME_MACHINE}" in
+	    9000/31? )            HP_ARCH=m68000 ;;
+	    9000/[34]?? )         HP_ARCH=m68k ;;
+	    9000/[678][0-9][0-9])
+		if [ -x /usr/bin/getconf ]; then
+		    sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+                    sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+                    case "${sc_cpu_version}" in
+                      523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
+                      528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
+                      532)                      # CPU_PA_RISC2_0
+                        case "${sc_kernel_bits}" in
+                          32) HP_ARCH="hppa2.0n" ;;
+                          64) HP_ARCH="hppa2.0w" ;;
+			  '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
+                        esac ;;
+                    esac
+		fi
+		if [ "${HP_ARCH}" = "" ]; then
+		    eval $set_cc_for_build
+		    sed 's/^              //' << EOF >$dummy.c
+
+              #define _HPUX_SOURCE
+              #include <stdlib.h>
+              #include <unistd.h>
+
+              int main ()
+              {
+              #if defined(_SC_KERNEL_BITS)
+                  long bits = sysconf(_SC_KERNEL_BITS);
+              #endif
+                  long cpu  = sysconf (_SC_CPU_VERSION);
+
+                  switch (cpu)
+              	{
+              	case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+              	case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+              	case CPU_PA_RISC2_0:
+              #if defined(_SC_KERNEL_BITS)
+              	    switch (bits)
+              		{
+              		case 64: puts ("hppa2.0w"); break;
+              		case 32: puts ("hppa2.0n"); break;
+              		default: puts ("hppa2.0"); break;
+              		} break;
+              #else  /* !defined(_SC_KERNEL_BITS) */
+              	    puts ("hppa2.0"); break;
+              #endif
+              	default: puts ("hppa1.0"); break;
+              	}
+                  exit (0);
+              }
+EOF
+		    (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
+		    test -z "$HP_ARCH" && HP_ARCH=hppa
+		fi ;;
+	esac
+	if [ ${HP_ARCH} = "hppa2.0w" ]
+	then
+	    # avoid double evaluation of $set_cc_for_build
+	    test -n "$CC_FOR_BUILD" || eval $set_cc_for_build
+	    if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E -) | grep __LP64__ >/dev/null
+	    then
+		HP_ARCH="hppa2.0w"
+	    else
+		HP_ARCH="hppa64"
+	    fi
+	fi
+	echo ${HP_ARCH}-hp-hpux${HPUX_REV}
+	exit 0 ;;
+    ia64:HP-UX:*:*)
+	HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
+	echo ia64-hp-hpux${HPUX_REV}
+	exit 0 ;;
+    3050*:HI-UX:*:*)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#include <unistd.h>
+	int
+	main ()
+	{
+	  long cpu = sysconf (_SC_CPU_VERSION);
+	  /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+	     true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
+	     results, however.  */
+	  if (CPU_IS_PA_RISC (cpu))
+	    {
+	      switch (cpu)
+		{
+		  case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+		  case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+		  case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+		  default: puts ("hppa-hitachi-hiuxwe2"); break;
+		}
+	    }
+	  else if (CPU_IS_HP_MC68K (cpu))
+	    puts ("m68k-hitachi-hiuxwe2");
+	  else puts ("unknown-hitachi-hiuxwe2");
+	  exit (0);
+	}
+EOF
+	$CC_FOR_BUILD -o $dummy $dummy.c && $dummy && exit 0
+	echo unknown-hitachi-hiuxwe2
+	exit 0 ;;
+    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
+	echo hppa1.1-hp-bsd
+	exit 0 ;;
+    9000/8??:4.3bsd:*:*)
+	echo hppa1.0-hp-bsd
+	exit 0 ;;
+    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+	echo hppa1.0-hp-mpeix
+	exit 0 ;;
+    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
+	echo hppa1.1-hp-osf
+	exit 0 ;;
+    hp8??:OSF1:*:*)
+	echo hppa1.0-hp-osf
+	exit 0 ;;
+    i*86:OSF1:*:*)
+	if [ -x /usr/sbin/sysversion ] ; then
+	    echo ${UNAME_MACHINE}-unknown-osf1mk
+	else
+	    echo ${UNAME_MACHINE}-unknown-osf1
+	fi
+	exit 0 ;;
+    parisc*:Lites*:*:*)
+	echo hppa1.1-hp-lites
+	exit 0 ;;
+    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+	echo c1-convex-bsd
+        exit 0 ;;
+    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+	if getsysinfo -f scalar_acc
+	then echo c32-convex-bsd
+	else echo c2-convex-bsd
+	fi
+        exit 0 ;;
+    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+	echo c34-convex-bsd
+        exit 0 ;;
+    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+	echo c38-convex-bsd
+        exit 0 ;;
+    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+	echo c4-convex-bsd
+        exit 0 ;;
+    CRAY*Y-MP:*:*:*)
+	echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit 0 ;;
+    CRAY*[A-Z]90:*:*:*)
+	echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
+	| sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+	      -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+	      -e 's/\.[^.]*$/.X/'
+	exit 0 ;;
+    CRAY*TS:*:*:*)
+	echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit 0 ;;
+    CRAY*T3E:*:*:*)
+	echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit 0 ;;
+    CRAY*SV1:*:*:*)
+	echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit 0 ;;
+    *:UNICOS/mp:*:*)
+	echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
+	exit 0 ;;
+    F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+	FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
+        echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+        exit 0 ;;
+    5000:UNIX_System_V:4.*:*)
+        FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
+        FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
+        echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+	exit 0 ;;
+    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+	echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
+	exit 0 ;;
+    sparc*:BSD/OS:*:*)
+	echo sparc-unknown-bsdi${UNAME_RELEASE}
+	exit 0 ;;
+    *:BSD/OS:*:*)
+	echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
+	exit 0 ;;
+    *:FreeBSD:*:*)
+	echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+	exit 0 ;;
+    i*:CYGWIN*:*)
+	echo ${UNAME_MACHINE}-pc-cygwin
+	exit 0 ;;
+    i*:MINGW*:*)
+	echo ${UNAME_MACHINE}-pc-mingw32
+	exit 0 ;;
+    i*:PW*:*)
+	echo ${UNAME_MACHINE}-pc-pw32
+	exit 0 ;;
+    x86:Interix*:[34]*)
+	echo i586-pc-interix${UNAME_RELEASE}|sed -e 's/\..*//'
+	exit 0 ;;
+    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
+	echo i${UNAME_MACHINE}-pc-mks
+	exit 0 ;;
+    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
+	# How do we know it's Interix rather than the generic POSIX subsystem?
+	# It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
+	# UNAME_MACHINE based on the output of uname instead of i386?
+	echo i586-pc-interix
+	exit 0 ;;
+    i*:UWIN*:*)
+	echo ${UNAME_MACHINE}-pc-uwin
+	exit 0 ;;
+    amd64:CYGWIN*:*:*)
+	echo x86_64-unknown-cygwin
+	exit 0 ;;
+    p*:CYGWIN*:*)
+	echo powerpcle-unknown-cygwin
+	exit 0 ;;
+    prep*:SunOS:5.*:*)
+	echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+	exit 0 ;;
+    *:GNU:*:*)
+	# the GNU system
+	echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+	exit 0 ;;
+    *:GNU/*:*:*)
+	# other systems with GNU libc and userland
+	echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
+	exit 0 ;;
+    i*86:Minix:*:*)
+	echo ${UNAME_MACHINE}-pc-minix
+	exit 0 ;;
+    arm*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
+    cris:Linux:*:*)
+	echo cris-axis-linux-gnu
+	exit 0 ;;
+    crisv32:Linux:*:*)
+	echo crisv32-axis-linux-gnu
+	exit 0 ;;
+    frv:Linux:*:*)
+    	echo frv-unknown-linux-gnu
+	exit 0 ;;
+    ia64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
+    m32r*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
+    m68*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
+    mips:Linux:*:*)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#undef CPU
+	#undef mips
+	#undef mipsel
+	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+	CPU=mipsel
+	#else
+	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+	CPU=mips
+	#else
+	CPU=
+	#endif
+	#endif
+EOF
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
+	test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
+	;;
+    mips64:Linux:*:*)
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#undef CPU
+	#undef mips64
+	#undef mips64el
+	#if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+	CPU=mips64el
+	#else
+	#if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+	CPU=mips64
+	#else
+	CPU=
+	#endif
+	#endif
+EOF
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^CPU=`
+	test x"${CPU}" != x && echo "${CPU}-unknown-linux-gnu" && exit 0
+	;;
+    ppc:Linux:*:*)
+	echo powerpc-unknown-linux-gnu
+	exit 0 ;;
+    ppc64:Linux:*:*)
+	echo powerpc64-unknown-linux-gnu
+	exit 0 ;;
+    alpha:Linux:*:*)
+	case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+	  EV5)   UNAME_MACHINE=alphaev5 ;;
+	  EV56)  UNAME_MACHINE=alphaev56 ;;
+	  PCA56) UNAME_MACHINE=alphapca56 ;;
+	  PCA57) UNAME_MACHINE=alphapca56 ;;
+	  EV6)   UNAME_MACHINE=alphaev6 ;;
+	  EV67)  UNAME_MACHINE=alphaev67 ;;
+	  EV68*) UNAME_MACHINE=alphaev68 ;;
+        esac
+	objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null
+	if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
+	echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
+	exit 0 ;;
+    parisc:Linux:*:* | hppa:Linux:*:*)
+	# Look for CPU level
+	case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+	  PA7*) echo hppa1.1-unknown-linux-gnu ;;
+	  PA8*) echo hppa2.0-unknown-linux-gnu ;;
+	  *)    echo hppa-unknown-linux-gnu ;;
+	esac
+	exit 0 ;;
+    parisc64:Linux:*:* | hppa64:Linux:*:*)
+	echo hppa64-unknown-linux-gnu
+	exit 0 ;;
+    s390:Linux:*:* | s390x:Linux:*:*)
+	echo ${UNAME_MACHINE}-ibm-linux
+	exit 0 ;;
+    sh64*:Linux:*:*)
+    	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
+    sh*:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
+    sparc:Linux:*:* | sparc64:Linux:*:*)
+	echo ${UNAME_MACHINE}-unknown-linux-gnu
+	exit 0 ;;
+    x86_64:Linux:*:*)
+	echo x86_64-unknown-linux-gnu
+	exit 0 ;;
+    i*86:Linux:*:*)
+	# The BFD linker knows what the default object file format is, so
+	# first see if it will tell us. cd to the root directory to prevent
+	# problems with other programs or directories called `ld' in the path.
+	# Set LC_ALL=C to ensure ld outputs messages in English.
+	ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
+			 | sed -ne '/supported targets:/!d
+				    s/[ 	][ 	]*/ /g
+				    s/.*supported targets: *//
+				    s/ .*//
+				    p'`
+        case "$ld_supported_targets" in
+	  elf32-i386)
+		TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
+		;;
+	  a.out-i386-linux)
+		echo "${UNAME_MACHINE}-pc-linux-gnuaout"
+		exit 0 ;;
+	  coff-i386)
+		echo "${UNAME_MACHINE}-pc-linux-gnucoff"
+		exit 0 ;;
+	  "")
+		# Either a pre-BFD a.out linker (linux-gnuoldld) or
+		# one that does not give us useful --help.
+		echo "${UNAME_MACHINE}-pc-linux-gnuoldld"
+		exit 0 ;;
+	esac
+	# Determine whether the default compiler is a.out or elf
+	eval $set_cc_for_build
+	sed 's/^	//' << EOF >$dummy.c
+	#include <features.h>
+	#ifdef __ELF__
+	# ifdef __GLIBC__
+	#  if __GLIBC__ >= 2
+	LIBC=gnu
+	#  else
+	LIBC=gnulibc1
+	#  endif
+	# else
+	LIBC=gnulibc1
+	# endif
+	#else
+	#ifdef __INTEL_COMPILER
+	LIBC=gnu
+	#else
+	LIBC=gnuaout
+	#endif
+	#endif
+	#ifdef __dietlibc__
+	LIBC=dietlibc
+	#endif
+EOF
+	eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep ^LIBC=`
+	test x"${LIBC}" != x && echo "${UNAME_MACHINE}-pc-linux-${LIBC}" && exit 0
+	test x"${TENTATIVE}" != x && echo "${TENTATIVE}" && exit 0
+	;;
+    i*86:DYNIX/ptx:4*:*)
+	# ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+	# earlier versions are messed up and put the nodename in both
+	# sysname and nodename.
+	echo i386-sequent-sysv4
+	exit 0 ;;
+    i*86:UNIX_SV:4.2MP:2.*)
+        # Unixware is an offshoot of SVR4, but it has its own version
+        # number series starting with 2...
+        # I am not positive that other SVR4 systems won't match this,
+	# I just have to hope.  -- rms.
+        # Use sysv4.2uw... so that sysv4* matches it.
+	echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+	exit 0 ;;
+    i*86:OS/2:*:*)
+	# If we were able to find `uname', then EMX Unix compatibility
+	# is probably installed.
+	echo ${UNAME_MACHINE}-pc-os2-emx
+	exit 0 ;;
+    i*86:XTS-300:*:STOP)
+	echo ${UNAME_MACHINE}-unknown-stop
+	exit 0 ;;
+    i*86:atheos:*:*)
+	echo ${UNAME_MACHINE}-unknown-atheos
+	exit 0 ;;
+	i*86:syllable:*:*)
+	echo ${UNAME_MACHINE}-pc-syllable
+	exit 0 ;;
+    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*)
+	echo i386-unknown-lynxos${UNAME_RELEASE}
+	exit 0 ;;
+    i*86:*DOS:*:*)
+	echo ${UNAME_MACHINE}-pc-msdosdjgpp
+	exit 0 ;;
+    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
+	UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
+	if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+		echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
+	else
+		echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
+	fi
+	exit 0 ;;
+    i*86:*:5:[78]*)
+	case `/bin/uname -X | grep "^Machine"` in
+	    *486*)	     UNAME_MACHINE=i486 ;;
+	    *Pentium)	     UNAME_MACHINE=i586 ;;
+	    *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+	esac
+	echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
+	exit 0 ;;
+    i*86:*:3.2:*)
+	if test -f /usr/options/cb.name; then
+		UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+		echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
+	elif /bin/uname -X 2>/dev/null >/dev/null ; then
+		UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+		(/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+		(/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
+			&& UNAME_MACHINE=i586
+		(/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
+			&& UNAME_MACHINE=i686
+		(/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
+			&& UNAME_MACHINE=i686
+		echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
+	else
+		echo ${UNAME_MACHINE}-pc-sysv32
+	fi
+	exit 0 ;;
+    pc:*:*:*)
+	# Left here for compatibility:
+        # uname -m prints for DJGPP always 'pc', but it prints nothing about
+        # the processor, so we play safe by assuming i386.
+	echo i386-pc-msdosdjgpp
+        exit 0 ;;
+    Intel:Mach:3*:*)
+	echo i386-pc-mach3
+	exit 0 ;;
+    paragon:*:*:*)
+	echo i860-intel-osf1
+	exit 0 ;;
+    i860:*:4.*:*) # i860-SVR4
+	if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+	  echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
+	else # Add other i860-SVR4 vendors below as they are discovered.
+	  echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
+	fi
+	exit 0 ;;
+    mini*:CTIX:SYS*5:*)
+	# "miniframe"
+	echo m68010-convergent-sysv
+	exit 0 ;;
+    mc68k:UNIX:SYSTEM5:3.51m)
+	echo m68k-convergent-sysv
+	exit 0 ;;
+    M680?0:D-NIX:5.3:*)
+	echo m68k-diab-dnix
+	exit 0 ;;
+    M68*:*:R3V[5678]*:*)
+	test -r /sysV68 && echo 'm68k-motorola-sysv' && exit 0 ;;
+    3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
+	OS_REL=''
+	test -r /etc/.relid \
+	&& OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+	/bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+	  && echo i486-ncr-sysv4.3${OS_REL} && exit 0
+	/bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+	  && echo i586-ncr-sysv4.3${OS_REL} && exit 0 ;;
+    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+        /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+          && echo i486-ncr-sysv4 && exit 0 ;;
+    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+	echo m68k-unknown-lynxos${UNAME_RELEASE}
+	exit 0 ;;
+    mc68030:UNIX_System_V:4.*:*)
+	echo m68k-atari-sysv4
+	exit 0 ;;
+    TSUNAMI:LynxOS:2.*:*)
+	echo sparc-unknown-lynxos${UNAME_RELEASE}
+	exit 0 ;;
+    rs6000:LynxOS:2.*:*)
+	echo rs6000-unknown-lynxos${UNAME_RELEASE}
+	exit 0 ;;
+    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*)
+	echo powerpc-unknown-lynxos${UNAME_RELEASE}
+	exit 0 ;;
+    SM[BE]S:UNIX_SV:*:*)
+	echo mips-dde-sysv${UNAME_RELEASE}
+	exit 0 ;;
+    RM*:ReliantUNIX-*:*:*)
+	echo mips-sni-sysv4
+	exit 0 ;;
+    RM*:SINIX-*:*:*)
+	echo mips-sni-sysv4
+	exit 0 ;;
+    *:SINIX-*:*:*)
+	if uname -p 2>/dev/null >/dev/null ; then
+		UNAME_MACHINE=`(uname -p) 2>/dev/null`
+		echo ${UNAME_MACHINE}-sni-sysv4
+	else
+		echo ns32k-sni-sysv
+	fi
+	exit 0 ;;
+    PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+                      # says <Richard.M.Bartel at ccMail.Census.GOV>
+        echo i586-unisys-sysv4
+        exit 0 ;;
+    *:UNIX_System_V:4*:FTX*)
+	# From Gerald Hewes <hewes at openmarket.com>.
+	# How about differentiating between stratus architectures? -djm
+	echo hppa1.1-stratus-sysv4
+	exit 0 ;;
+    *:*:*:FTX*)
+	# From seanf at swdc.stratus.com.
+	echo i860-stratus-sysv4
+	exit 0 ;;
+    i*86:VOS:*:*)
+	# From Paul.Green at stratus.com.
+	echo ${UNAME_MACHINE}-stratus-vos
+	exit 0 ;;
+    *:VOS:*:*)
+	# From Paul.Green at stratus.com.
+	echo hppa1.1-stratus-vos
+	exit 0 ;;
+    mc68*:A/UX:*:*)
+	echo m68k-apple-aux${UNAME_RELEASE}
+	exit 0 ;;
+    news*:NEWS-OS:6*:*)
+	echo mips-sony-newsos6
+	exit 0 ;;
+    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+	if [ -d /usr/nec ]; then
+	        echo mips-nec-sysv${UNAME_RELEASE}
+	else
+	        echo mips-unknown-sysv${UNAME_RELEASE}
+	fi
+        exit 0 ;;
+    BeBox:BeOS:*:*)	# BeOS running on hardware made by Be, PPC only.
+	echo powerpc-be-beos
+	exit 0 ;;
+    BeMac:BeOS:*:*)	# BeOS running on Mac or Mac clone, PPC only.
+	echo powerpc-apple-beos
+	exit 0 ;;
+    BePC:BeOS:*:*)	# BeOS running on Intel PC compatible.
+	echo i586-pc-beos
+	exit 0 ;;
+    SX-4:SUPER-UX:*:*)
+	echo sx4-nec-superux${UNAME_RELEASE}
+	exit 0 ;;
+    SX-5:SUPER-UX:*:*)
+	echo sx5-nec-superux${UNAME_RELEASE}
+	exit 0 ;;
+    SX-6:SUPER-UX:*:*)
+	echo sx6-nec-superux${UNAME_RELEASE}
+	exit 0 ;;
+    Power*:Rhapsody:*:*)
+	echo powerpc-apple-rhapsody${UNAME_RELEASE}
+	exit 0 ;;
+    *:Rhapsody:*:*)
+	echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
+	exit 0 ;;
+    *:Darwin:*:*)
+	UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
+	case $UNAME_PROCESSOR in
+	    *86) UNAME_PROCESSOR=i686 ;;
+	    unknown) UNAME_PROCESSOR=powerpc ;;
+	esac
+	echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
+	exit 0 ;;
+    *:procnto*:*:* | *:QNX:[0123456789]*:*)
+	UNAME_PROCESSOR=`uname -p`
+	if test "$UNAME_PROCESSOR" = "x86"; then
+		UNAME_PROCESSOR=i386
+		UNAME_MACHINE=pc
+	fi
+	echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
+	exit 0 ;;
+    *:QNX:*:4*)
+	echo i386-pc-qnx
+	exit 0 ;;
+    NSE-?:NONSTOP_KERNEL:*:*)
+	echo nse-tandem-nsk${UNAME_RELEASE}
+	exit 0 ;;
+    NSR-?:NONSTOP_KERNEL:*:*)
+	echo nsr-tandem-nsk${UNAME_RELEASE}
+	exit 0 ;;
+    *:NonStop-UX:*:*)
+	echo mips-compaq-nonstopux
+	exit 0 ;;
+    BS2000:POSIX*:*:*)
+	echo bs2000-siemens-sysv
+	exit 0 ;;
+    DS/*:UNIX_System_V:*:*)
+	echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
+	exit 0 ;;
+    *:Plan9:*:*)
+	# "uname -m" is not consistent, so use $cputype instead. 386
+	# is converted to i386 for consistency with other x86
+	# operating systems.
+	if test "$cputype" = "386"; then
+	    UNAME_MACHINE=i386
+	else
+	    UNAME_MACHINE="$cputype"
+	fi
+	echo ${UNAME_MACHINE}-unknown-plan9
+	exit 0 ;;
+    *:TOPS-10:*:*)
+	echo pdp10-unknown-tops10
+	exit 0 ;;
+    *:TENEX:*:*)
+	echo pdp10-unknown-tenex
+	exit 0 ;;
+    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+	echo pdp10-dec-tops20
+	exit 0 ;;
+    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+	echo pdp10-xkl-tops20
+	exit 0 ;;
+    *:TOPS-20:*:*)
+	echo pdp10-unknown-tops20
+	exit 0 ;;
+    *:ITS:*:*)
+	echo pdp10-unknown-its
+	exit 0 ;;
+    SEI:*:*:SEIUX)
+        echo mips-sei-seiux${UNAME_RELEASE}
+	exit 0 ;;
+    *:DragonFly:*:*)
+	echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
+	exit 0 ;;
+    *:*VMS:*:*)
+    	UNAME_MACHINE=`(uname -p) 2>/dev/null`
+	case "${UNAME_MACHINE}" in
+	    A*) echo alpha-dec-vms && exit 0 ;;
+	    I*) echo ia64-dec-vms && exit 0 ;;
+	    V*) echo vax-dec-vms && exit 0 ;;
+	esac ;;
+    *:XENIX:*:SysV)
+	echo i386-pc-xenix
+	exit 0 ;;
+esac
+
+#echo '(No uname command or uname output not recognized.)' 1>&2
+#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
+
+eval $set_cc_for_build
+cat >$dummy.c <<EOF
+#ifdef _SEQUENT_
+# include <sys/types.h>
+# include <sys/utsname.h>
+#endif
+main ()
+{
+#if defined (sony)
+#if defined (MIPSEB)
+  /* BFD wants "bsd" instead of "newsos".  Perhaps BFD should be changed,
+     I don't know....  */
+  printf ("mips-sony-bsd\n"); exit (0);
+#else
+#include <sys/param.h>
+  printf ("m68k-sony-newsos%s\n",
+#ifdef NEWSOS4
+          "4"
+#else
+	  ""
+#endif
+         ); exit (0);
+#endif
+#endif
+
+#if defined (__arm) && defined (__acorn) && defined (__unix)
+  printf ("arm-acorn-riscix"); exit (0);
+#endif
+
+#if defined (hp300) && !defined (hpux)
+  printf ("m68k-hp-bsd\n"); exit (0);
+#endif
+
+#if defined (NeXT)
+#if !defined (__ARCHITECTURE__)
+#define __ARCHITECTURE__ "m68k"
+#endif
+  int version;
+  version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
+  if (version < 4)
+    printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
+  else
+    printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
+  exit (0);
+#endif
+
+#if defined (MULTIMAX) || defined (n16)
+#if defined (UMAXV)
+  printf ("ns32k-encore-sysv\n"); exit (0);
+#else
+#if defined (CMU)
+  printf ("ns32k-encore-mach\n"); exit (0);
+#else
+  printf ("ns32k-encore-bsd\n"); exit (0);
+#endif
+#endif
+#endif
+
+#if defined (__386BSD__)
+  printf ("i386-pc-bsd\n"); exit (0);
+#endif
+
+#if defined (sequent)
+#if defined (i386)
+  printf ("i386-sequent-dynix\n"); exit (0);
+#endif
+#if defined (ns32000)
+  printf ("ns32k-sequent-dynix\n"); exit (0);
+#endif
+#endif
+
+#if defined (_SEQUENT_)
+    struct utsname un;
+
+    uname(&un);
+
+    if (strncmp(un.version, "V2", 2) == 0) {
+	printf ("i386-sequent-ptx2\n"); exit (0);
+    }
+    if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
+	printf ("i386-sequent-ptx1\n"); exit (0);
+    }
+    printf ("i386-sequent-ptx\n"); exit (0);
+
+#endif
+
+#if defined (vax)
+# if !defined (ultrix)
+#  include <sys/param.h>
+#  if defined (BSD)
+#   if BSD == 43
+      printf ("vax-dec-bsd4.3\n"); exit (0);
+#   else
+#    if BSD == 199006
+      printf ("vax-dec-bsd4.3reno\n"); exit (0);
+#    else
+      printf ("vax-dec-bsd\n"); exit (0);
+#    endif
+#   endif
+#  else
+    printf ("vax-dec-bsd\n"); exit (0);
+#  endif
+# else
+    printf ("vax-dec-ultrix\n"); exit (0);
+# endif
+#endif
+
+#if defined (alliant) && defined (i860)
+  printf ("i860-alliant-bsd\n"); exit (0);
+#endif
+
+  exit (1);
+}
+EOF
+
+$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && $dummy && exit 0
+
+# Apollos put the system type in the environment.
+
+test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit 0; }
+
+# Convex versions that predate uname can use getsysinfo(1)
+
+if [ -x /usr/convex/getsysinfo ]
+then
+    case `getsysinfo -f cpu_type` in
+    c1*)
+	echo c1-convex-bsd
+	exit 0 ;;
+    c2*)
+	if getsysinfo -f scalar_acc
+	then echo c32-convex-bsd
+	else echo c2-convex-bsd
+	fi
+	exit 0 ;;
+    c34*)
+	echo c34-convex-bsd
+	exit 0 ;;
+    c38*)
+	echo c38-convex-bsd
+	exit 0 ;;
+    c4*)
+	echo c4-convex-bsd
+	exit 0 ;;
+    esac
+fi
+
+cat >&2 <<EOF
+$0: unable to guess system type
+
+This script, last modified $timestamp, has failed to recognize
+the operating system you are using. It is advised that you
+download the most up to date version of the config scripts from
+
+  http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.guess
+and
+  http://savannah.gnu.org/cgi-bin/viewcvs/*checkout*/config/config/config.sub
+
+If the version you run ($0) is already up to date, please
+send the following data and any information you think might be
+pertinent to <config-patches at gnu.org> in order to provide the needed
+information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo               = `(hostinfo) 2>/dev/null`
+/bin/universe          = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch              = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = ${UNAME_MACHINE}
+UNAME_RELEASE = ${UNAME_RELEASE}
+UNAME_SYSTEM  = ${UNAME_SYSTEM}
+UNAME_VERSION = ${UNAME_VERSION}
+EOF
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/config.h.in b/config.h.in
new file mode 100644
index 0000000..0eda820
--- /dev/null
+++ b/config.h.in
@@ -0,0 +1,483 @@
+/* config.h.in.  Generated from configure.ac by autoheader.  */
+
+/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP
+   systems. This function is required for `alloca.c' support on those systems.
+   */
+#undef CRAY_STACKSEG_END
+
+/* Define to 1 if using `alloca.c'. */
+#undef C_ALLOCA
+
+/* Define to 1 if translation of program messages to the user's native
+   language is requested. */
+#undef ENABLE_NLS
+
+/* Define to 1 if you have `alloca', as a function or macro. */
+#undef HAVE_ALLOCA
+
+/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
+   */
+#undef HAVE_ALLOCA_H
+
+/* Define to 1 if you have the `argz_count' function. */
+#undef HAVE_ARGZ_COUNT
+
+/* Define to 1 if you have the <argz.h> header file. */
+#undef HAVE_ARGZ_H
+
+/* Define to 1 if you have the `argz_next' function. */
+#undef HAVE_ARGZ_NEXT
+
+/* Define to 1 if you have the `argz_stringify' function. */
+#undef HAVE_ARGZ_STRINGIFY
+
+/* Define to 1 if you have the `asprintf' function. */
+#undef HAVE_ASPRINTF
+
+/* glibc backtrace function */
+#undef HAVE_BACKTRACE
+
+/* Define to 1 if the compiler understands __builtin_expect. */
+#undef HAVE_BUILTIN_EXPECT
+
+/* Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the
+   CoreFoundation framework. */
+#undef HAVE_CFLOCALECOPYCURRENT
+
+/* Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in
+   the CoreFoundation framework. */
+#undef HAVE_CFPREFERENCESCOPYAPPVALUE
+
+/* Define if the GNU dcgettext() function is already present or preinstalled.
+   */
+#undef HAVE_DCGETTEXT
+
+/* Define to 1 if you have the declaration of `feof_unlocked', and to 0 if you
+   don't. */
+#undef HAVE_DECL_FEOF_UNLOCKED
+
+/* Define to 1 if you have the declaration of `fgets_unlocked', and to 0 if
+   you don't. */
+#undef HAVE_DECL_FGETS_UNLOCKED
+
+/* Define to 1 if you have the declaration of `getc_unlocked', and to 0 if you
+   don't. */
+#undef HAVE_DECL_GETC_UNLOCKED
+
+/* Define to 1 if you have the declaration of `_snprintf', and to 0 if you
+   don't. */
+#undef HAVE_DECL__SNPRINTF
+
+/* Define to 1 if you have the declaration of `_snwprintf', and to 0 if you
+   don't. */
+#undef HAVE_DECL__SNWPRINTF
+
+/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */
+#undef HAVE_DOPRNT
+
+/* Define to 1 if you have the `freeaddrinfo' function. */
+#undef HAVE_FREEADDRINFO
+
+/* Define to 1 if you have the `fwprintf' function. */
+#undef HAVE_FWPRINTF
+
+/* Define to 1 if you have the `gai_strerror' function. */
+#undef HAVE_GAI_STRERROR
+
+/* Define to 1 if you have the `getaddrinfo' function. */
+#undef HAVE_GETADDRINFO
+
+/* Define to 1 if you have the `getcwd' function. */
+#undef HAVE_GETCWD
+
+/* Define to 1 if you have the `getegid' function. */
+#undef HAVE_GETEGID
+
+/* Define to 1 if you have the `geteuid' function. */
+#undef HAVE_GETEUID
+
+/* Define to 1 if you have the `getgid' function. */
+#undef HAVE_GETGID
+
+/* Define to 1 if you have the `getnameinfo' function. */
+#undef HAVE_GETNAMEINFO
+
+/* Define to 1 if you have the `getpagesize' function. */
+#undef HAVE_GETPAGESIZE
+
+/* Define if the GNU gettext() function is already present or preinstalled. */
+#undef HAVE_GETTEXT
+
+/* Define to 1 if you have the `getuid' function. */
+#undef HAVE_GETUID
+
+/* Define if you have the iconv() function and it works. */
+#undef HAVE_ICONV
+
+/* use imlib2 for the player */
+#undef HAVE_IMLIB2
+
+/* Define to 1 if you have the `inet_aton' function. */
+#undef HAVE_INET_ATON
+
+/* Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>. */
+#undef HAVE_INTMAX_T
+
+/* Define to 1 if you have the <inttypes.h> header file. */
+#undef HAVE_INTTYPES_H
+
+/* Define if <inttypes.h> exists, doesn't clash with <sys/types.h>, and
+   declares uintmax_t. */
+#undef HAVE_INTTYPES_H_WITH_UINTMAX
+
+/* Define if you have <langinfo.h> and nl_langinfo(CODESET). */
+#undef HAVE_LANGINFO_CODESET
+
+/* Define if your <locale.h> file defines LC_MESSAGES. */
+#undef HAVE_LC_MESSAGES
+
+/* Define to 1 if you have the `wsock32' library (-lwsock32). */
+#undef HAVE_LIBWSOCK32
+
+/* Define to 1 if you have the <limits.h> header file. */
+#undef HAVE_LIMITS_H
+
+/* Define to 1 if the system has the type `long long int'. */
+#undef HAVE_LONG_LONG_INT
+
+/* Define to 1 if you have the <memory.h> header file. */
+#undef HAVE_MEMORY_H
+
+/* Define to 1 if you have the `mempcpy' function. */
+#undef HAVE_MEMPCPY
+
+/* Define to 1 if you have a working `mmap' system call. */
+#undef HAVE_MMAP
+
+/* Define to 1 if you have the `munmap' function. */
+#undef HAVE_MUNMAP
+
+/* Define if you have <langinfo.h> and it defines the NL_LOCALE_NAME macro if
+   _GNU_SOURCE is defined. */
+#undef HAVE_NL_LOCALE_NAME
+
+/* Define if your printf() function supports format strings with positions. */
+#undef HAVE_POSIX_PRINTF
+
+/* Define if the <pthread.h> defines PTHREAD_MUTEX_RECURSIVE. */
+#undef HAVE_PTHREAD_MUTEX_RECURSIVE
+
+/* Define if the POSIX multithreading library has read/write locks. */
+#undef HAVE_PTHREAD_RWLOCK
+
+/* Define to 1 if you have the `putenv' function. */
+#undef HAVE_PUTENV
+
+/* Define to 1 if you have the <pwd.h> header file. */
+#undef HAVE_PWD_H
+
+/* Define to 1 if you have the `select' function. */
+#undef HAVE_SELECT
+
+/* Define to 1 if you have the `setenv' function. */
+#undef HAVE_SETENV
+
+/* Define to 1 if you have the `setlocale' function. */
+#undef HAVE_SETLOCALE
+
+/* Define to 1 if you have the `signal' function. */
+#undef HAVE_SIGNAL
+
+/* Define to 1 if you have the <signal.h> header file. */
+#undef HAVE_SIGNAL_H
+
+/* Define to 1 if you have the `snprintf' function. */
+#undef HAVE_SNPRINTF
+
+/* Define to 1 if you have the <stdarg.h> header file. */
+#undef HAVE_STDARG_H
+
+/* Define to 1 if you have the <stddef.h> header file. */
+#undef HAVE_STDDEF_H
+
+/* Define to 1 if you have the <stdint.h> header file. */
+#undef HAVE_STDINT_H
+
+/* Define if <stdint.h> exists, doesn't clash with <sys/types.h>, and declares
+   uintmax_t. */
+#undef HAVE_STDINT_H_WITH_UINTMAX
+
+/* Define to 1 if you have the <stdlib.h> header file. */
+#undef HAVE_STDLIB_H
+
+/* Define to 1 if you have the `stpcpy' function. */
+#undef HAVE_STPCPY
+
+/* Define to 1 if you have the `strcasecmp' function. */
+#undef HAVE_STRCASECMP
+
+/* Define to 1 if you have the `strdup' function. */
+#undef HAVE_STRDUP
+
+/* Define to 1 if you have the `strerror' function. */
+#undef HAVE_STRERROR
+
+/* Define to 1 if you have the <strings.h> header file. */
+#undef HAVE_STRINGS_H
+
+/* Define to 1 if you have the <string.h> header file. */
+#undef HAVE_STRING_H
+
+/* Define to 1 if you have the `strncasecmp' function. */
+#undef HAVE_STRNCASECMP
+
+/* Define to 1 if you have the `strstr' function. */
+#undef HAVE_STRSTR
+
+/* Define to 1 if you have the `strtoul' function. */
+#undef HAVE_STRTOUL
+
+/* struct addrinfo */
+#undef HAVE_STRUCT_ADDRINFO
+
+/* struct sockaddr */
+#undef HAVE_STRUCT_SOCKADDR_STORAGE
+
+/* Define to 1 if you have the <sys/param.h> header file. */
+#undef HAVE_SYS_PARAM_H
+
+/* Define to 1 if you have the <sys/select.h> header file. */
+#undef HAVE_SYS_SELECT_H
+
+/* Define to 1 if you have the <sys/stat.h> header file. */
+#undef HAVE_SYS_STAT_H
+
+/* Define to 1 if you have the <sys/time.h> header file. */
+#undef HAVE_SYS_TIME_H
+
+/* Define to 1 if you have the <sys/types.h> header file. */
+#undef HAVE_SYS_TYPES_H
+
+/* Define to 1 if you have the <sys/utime.h> header file. */
+#undef HAVE_SYS_UTIME_H
+
+/* Define to 1 if you have the <sys/utsname.h> header file. */
+#undef HAVE_SYS_UTSNAME_H
+
+/* Define to 1 if you have the `tsearch' function. */
+#undef HAVE_TSEARCH
+
+/* Define if you have the 'uintmax_t' type in <stdint.h> or <inttypes.h>. */
+#undef HAVE_UINTMAX_T
+
+/* Define to 1 if you have the `uname' function. */
+#undef HAVE_UNAME
+
+/* Define to 1 if you have the <unistd.h> header file. */
+#undef HAVE_UNISTD_H
+
+/* Define to 1 if the system has the type `unsigned long long int'. */
+#undef HAVE_UNSIGNED_LONG_LONG_INT
+
+/* Define to 1 if you have the <utime.h> header file. */
+#undef HAVE_UTIME_H
+
+/* Define to 1 or 0, depending whether the compiler supports simple visibility
+   declarations. */
+#undef HAVE_VISIBILITY
+
+/* Define to 1 if you have the `vprintf' function. */
+#undef HAVE_VPRINTF
+
+/* Define to 1 if you have the `vsnprintf' function. */
+#undef HAVE_VSNPRINTF
+
+/* Define if you have the 'wchar_t' type. */
+#undef HAVE_WCHAR_T
+
+/* Define to 1 if you have the `wcslen' function. */
+#undef HAVE_WCSLEN
+
+/* Define to 1 if you have the <windows.h> header file. */
+#undef HAVE_WINDOWS_H
+
+/* Define if you have the 'wint_t' type. */
+#undef HAVE_WINT_T
+
+/* wmcoincoin_player is supported */
+#undef HAVE_WMCOINCOIN_PLAYER
+
+/* Define to 1 if you have the `__fsetlocking' function. */
+#undef HAVE___FSETLOCKING
+
+/* Define as const if the declaration of iconv() needs const. */
+#undef ICONV_CONST
+
+/* Define if integer division by zero raises signal SIGFPE. */
+#undef INTDIV0_RAISES_SIGFPE
+
+/* Name of package */
+#undef PACKAGE
+
+/* Define to the address where bug reports for this package should be sent. */
+#undef PACKAGE_BUGREPORT
+
+/* Define to the full name of this package. */
+#undef PACKAGE_NAME
+
+/* Define to the full name and version of this package. */
+#undef PACKAGE_STRING
+
+/* Define to the one symbol short name of this package. */
+#undef PACKAGE_TARNAME
+
+/* Define to the version of this package. */
+#undef PACKAGE_VERSION
+
+/* Define if <inttypes.h> exists and defines unusable PRI* macros. */
+#undef PRI_MACROS_BROKEN
+
+/* Define if the pthread_in_use() detection is hard. */
+#undef PTHREAD_IN_USE_DETECTION_HARD
+
+/* Define as the maximum value of type 'size_t', if the system doesn't define
+   it. */
+#undef SIZE_MAX
+
+/* If using the C implementation of alloca, define if you know the
+   direction of stack growth for your system; otherwise it will be
+   automatically deduced at runtime.
+	STACK_DIRECTION > 0 => grows toward higher addresses
+	STACK_DIRECTION < 0 => grows toward lower addresses
+	STACK_DIRECTION = 0 => direction of growth unknown */
+#undef STACK_DIRECTION
+
+/* Define to 1 if you have the ANSI C header files. */
+#undef STDC_HEADERS
+
+/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */
+#undef TIME_WITH_SYS_TIME
+
+/* Define to 1 if your <sys/time.h> declares `struct tm'. */
+#undef TM_IN_SYS_TIME
+
+/* Define if the POSIX multithreading library can be used. */
+#undef USE_POSIX_THREADS
+
+/* Define if references to the POSIX multithreading library should be made
+   weak. */
+#undef USE_POSIX_THREADS_WEAK
+
+/* Define if the GNU Pth multithreading library can be used. */
+#undef USE_PTH_THREADS
+
+/* Define if references to the GNU Pth multithreading library should be made
+   weak. */
+#undef USE_PTH_THREADS_WEAK
+
+/* Define if the old Solaris multithreading library can be used. */
+#undef USE_SOLARIS_THREADS
+
+/* Define if references to the old Solaris multithreading library should be
+   made weak. */
+#undef USE_SOLARIS_THREADS_WEAK
+
+/* Define if the Win32 multithreading API can be used. */
+#undef USE_WIN32_THREADS
+
+/* Version number of package */
+#undef VERSION
+
+/* define if xinerama API is supported */
+#undef XINERAMA
+
+/* Define to 1 if the X Window System is missing or not being used. */
+#undef X_DISPLAY_MISSING
+
+/* Define to 1 if on AIX 3.
+   System headers sometimes define this.
+   We just want to avoid a redefinition error message.  */
+#ifndef _ALL_SOURCE
+# undef _ALL_SOURCE
+#endif
+
+/* Enable GNU extensions on systems that have them.  */
+#ifndef _GNU_SOURCE
+# undef _GNU_SOURCE
+#endif
+
+/* Define to 1 if on MINIX. */
+#undef _MINIX
+
+/* Define to 2 if the system does not provide POSIX.1 features except with
+   this defined. */
+#undef _POSIX_1_SOURCE
+
+/* Define to 1 if you need to in order for `stat' and other things to work. */
+#undef _POSIX_SOURCE
+
+/* Enable extensions on Solaris.  */
+#ifndef __EXTENSIONS__
+# undef __EXTENSIONS__
+#endif
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# undef _POSIX_PTHREAD_SEMANTICS
+#endif
+#ifndef _TANDEM_SOURCE
+# undef _TANDEM_SOURCE
+#endif
+
+/* Define to empty if `const' does not conform to ANSI C. */
+#undef const
+
+/* Define to `__inline__' or `__inline' if that's what the C compiler
+   calls it, or to nothing if 'inline' is not supported under any name.  */
+#ifndef __cplusplus
+#undef inline
+#endif
+
+/* Define to `int' if <sys/types.h> does not define. */
+#undef pid_t
+
+/* Define as the type of the result of subtracting two pointers, if the system
+   doesn't define it. */
+#undef ptrdiff_t
+
+/* Define to `unsigned int' if <sys/types.h> does not define. */
+#undef size_t
+
+/* Define to unsigned long or unsigned long long if <stdint.h> and
+   <inttypes.h> don't define. */
+#undef uintmax_t
+
+
+#define __libc_lock_t                   gl_lock_t
+#define __libc_lock_define              gl_lock_define
+#define __libc_lock_define_initialized  gl_lock_define_initialized
+#define __libc_lock_init                gl_lock_init
+#define __libc_lock_lock                gl_lock_lock
+#define __libc_lock_unlock              gl_lock_unlock
+#define __libc_lock_recursive_t                   gl_recursive_lock_t
+#define __libc_lock_define_recursive              gl_recursive_lock_define
+#define __libc_lock_define_initialized_recursive  gl_recursive_lock_define_initialized
+#define __libc_lock_init_recursive                gl_recursive_lock_init
+#define __libc_lock_lock_recursive                gl_recursive_lock_lock
+#define __libc_lock_unlock_recursive              gl_recursive_lock_unlock
+#define glthread_in_use  libintl_thread_in_use
+#define glthread_lock_init     libintl_lock_init
+#define glthread_lock_lock     libintl_lock_lock
+#define glthread_lock_unlock   libintl_lock_unlock
+#define glthread_lock_destroy  libintl_lock_destroy
+#define glthread_rwlock_init     libintl_rwlock_init
+#define glthread_rwlock_rdlock   libintl_rwlock_rdlock
+#define glthread_rwlock_wrlock   libintl_rwlock_wrlock
+#define glthread_rwlock_unlock   libintl_rwlock_unlock
+#define glthread_rwlock_destroy  libintl_rwlock_destroy
+#define glthread_recursive_lock_init     libintl_recursive_lock_init
+#define glthread_recursive_lock_lock     libintl_recursive_lock_lock
+#define glthread_recursive_lock_unlock   libintl_recursive_lock_unlock
+#define glthread_recursive_lock_destroy  libintl_recursive_lock_destroy
+#define glthread_once                 libintl_once
+#define glthread_once_call            libintl_once_call
+#define glthread_once_singlethreaded  libintl_once_singlethreaded
+
diff --git a/config.rpath b/config.rpath
new file mode 100755
index 0000000..c547c68
--- /dev/null
+++ b/config.rpath
@@ -0,0 +1,666 @@
+#! /bin/sh
+# Output a system dependent set of variables, describing how to set the
+# run time search path of shared libraries in an executable.
+#
+#   Copyright 1996-2007 Free Software Foundation, Inc.
+#   Taken from GNU libtool, 2001
+#   Originally by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 1996
+#
+#   This file is free software; the Free Software Foundation gives
+#   unlimited permission to copy and/or distribute it, with or without
+#   modifications, as long as this notice is preserved.
+#
+# The first argument passed to this file is the canonical host specification,
+#    CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or
+#    CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld
+# should be set by the caller.
+#
+# The set of defined variables is at the end of this script.
+
+# Known limitations:
+# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer
+#   than 256 bytes, otherwise the compiler driver will dump core. The only
+#   known workaround is to choose shorter directory names for the build
+#   directory and/or the installation directory.
+
+# All known linkers require a `.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+shrext=.so
+
+host="$1"
+host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+# Code taken from libtool.m4's _LT_CC_BASENAME.
+
+for cc_temp in $CC""; do
+  case $cc_temp in
+    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+    \-*) ;;
+    *) break;;
+  esac
+done
+cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'`
+
+# Code taken from libtool.m4's AC_LIBTOOL_PROG_COMPILER_PIC.
+
+wl=
+if test "$GCC" = yes; then
+  wl='-Wl,'
+else
+  case "$host_os" in
+    aix*)
+      wl='-Wl,'
+      ;;
+    darwin*)
+      case $cc_basename in
+        xlc*)
+          wl='-Wl,'
+          ;;
+      esac
+      ;;
+    mingw* | cygwin* | pw32* | os2*)
+      ;;
+    hpux9* | hpux10* | hpux11*)
+      wl='-Wl,'
+      ;;
+    irix5* | irix6* | nonstopux*)
+      wl='-Wl,'
+      ;;
+    newsos6)
+      ;;
+    linux* | k*bsd*-gnu)
+      case $cc_basename in
+        icc* | ecc*)
+          wl='-Wl,'
+          ;;
+        pgcc | pgf77 | pgf90)
+          wl='-Wl,'
+          ;;
+        ccc*)
+          wl='-Wl,'
+          ;;
+        como)
+          wl='-lopt='
+          ;;
+        *)
+          case `$CC -V 2>&1 | sed 5q` in
+            *Sun\ C*)
+              wl='-Wl,'
+              ;;
+          esac
+          ;;
+      esac
+      ;;
+    osf3* | osf4* | osf5*)
+      wl='-Wl,'
+      ;;
+    rdos*)
+      ;;
+    solaris*)
+      wl='-Wl,'
+      ;;
+    sunos4*)
+      wl='-Qoption ld '
+      ;;
+    sysv4 | sysv4.2uw2* | sysv4.3*)
+      wl='-Wl,'
+      ;;
+    sysv4*MP*)
+      ;;
+    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+      wl='-Wl,'
+      ;;
+    unicos*)
+      wl='-Wl,'
+      ;;
+    uts4*)
+      ;;
+  esac
+fi
+
+# Code taken from libtool.m4's AC_LIBTOOL_PROG_LD_SHLIBS.
+
+hardcode_libdir_flag_spec=
+hardcode_libdir_separator=
+hardcode_direct=no
+hardcode_minus_L=no
+
+case "$host_os" in
+  cygwin* | mingw* | pw32*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  interix*)
+    # we just hope/assume this is gcc and not c89 (= MSVC++)
+    with_gnu_ld=yes
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+esac
+
+ld_shlibs=yes
+if test "$with_gnu_ld" = yes; then
+  # Set some defaults for GNU ld with shared library support. These
+  # are reset later if shared libraries are not supported. Putting them
+  # here allows them to be overridden if necessary.
+  # Unlike libtool, we use -rpath here, not --rpath, since the documented
+  # option of GNU ld is called -rpath, not --rpath.
+  hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+  case "$host_os" in
+    aix3* | aix4* | aix5*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+        ld_shlibs=no
+      fi
+      ;;
+    amigaos*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      # Samuel A. Falvo II <kc5tja at dolphin.openprojects.net> reports
+      # that the semantics of dynamic libraries on AmigaOS, at least up
+      # to version 4, is to share data among multiple programs linked
+      # with the same dynamic library.  Since this doesn't match the
+      # behavior of shared libraries on other platforms, we cannot use
+      # them.
+      ld_shlibs=no
+      ;;
+    beos*)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+        :
+      else
+        ld_shlibs=no
+      fi
+      ;;
+    cygwin* | mingw* | pw32*)
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      hardcode_libdir_flag_spec='-L$libdir'
+      if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+        :
+      else
+        ld_shlibs=no
+      fi
+      ;;
+    interix[3-9]*)
+      hardcode_direct=no
+      hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+      ;;
+    gnu* | linux* | k*bsd*-gnu)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+        :
+      else
+        ld_shlibs=no
+      fi
+      ;;
+    netbsd*)
+      ;;
+    solaris*)
+      if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
+        ld_shlibs=no
+      elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+        :
+      else
+        ld_shlibs=no
+      fi
+      ;;
+    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+      case `$LD -v 2>&1` in
+        *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+          ld_shlibs=no
+          ;;
+        *)
+          if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+            hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
+          else
+            ld_shlibs=no
+          fi
+          ;;
+      esac
+      ;;
+    sunos4*)
+      hardcode_direct=yes
+      ;;
+    *)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+        :
+      else
+        ld_shlibs=no
+      fi
+      ;;
+  esac
+  if test "$ld_shlibs" = no; then
+    hardcode_libdir_flag_spec=
+  fi
+else
+  case "$host_os" in
+    aix3*)
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      hardcode_minus_L=yes
+      if test "$GCC" = yes; then
+        # Neither direct hardcoding nor static linking is supported with a
+        # broken collect2.
+        hardcode_direct=unsupported
+      fi
+      ;;
+    aix4* | aix5*)
+      if test "$host_cpu" = ia64; then
+        # On IA64, the linker does run time linking by default, so we don't
+        # have to do anything special.
+        aix_use_runtimelinking=no
+      else
+        aix_use_runtimelinking=no
+        # Test if we are trying to use run time linking or normal
+        # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+        # need to do runtime linking.
+        case $host_os in aix4.[23]|aix4.[23].*|aix5*)
+          for ld_flag in $LDFLAGS; do
+            if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+              aix_use_runtimelinking=yes
+              break
+            fi
+          done
+          ;;
+        esac
+      fi
+      hardcode_direct=yes
+      hardcode_libdir_separator=':'
+      if test "$GCC" = yes; then
+        case $host_os in aix4.[012]|aix4.[012].*)
+          collect2name=`${CC} -print-prog-name=collect2`
+          if test -f "$collect2name" && \
+            strings "$collect2name" | grep resolve_lib_name >/dev/null
+          then
+            # We have reworked collect2
+            :
+          else
+            # We have old collect2
+            hardcode_direct=unsupported
+            hardcode_minus_L=yes
+            hardcode_libdir_flag_spec='-L$libdir'
+            hardcode_libdir_separator=
+          fi
+          ;;
+        esac
+      fi
+      # Begin _LT_AC_SYS_LIBPATH_AIX.
+      echo 'int main () { return 0; }' > conftest.c
+      ${CC} ${LDFLAGS} conftest.c -o conftest
+      aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+      if test -z "$aix_libpath"; then
+        aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+      fi
+      if test -z "$aix_libpath"; then
+        aix_libpath="/usr/lib:/lib"
+      fi
+      rm -f conftest.c conftest
+      # End _LT_AC_SYS_LIBPATH_AIX.
+      if test "$aix_use_runtimelinking" = yes; then
+        hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+      else
+        if test "$host_cpu" = ia64; then
+          hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+        else
+          hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+        fi
+      fi
+      ;;
+    amigaos*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      # see comment about different semantics on the GNU ld section
+      ld_shlibs=no
+      ;;
+    bsdi[45]*)
+      ;;
+    cygwin* | mingw* | pw32*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      hardcode_libdir_flag_spec=' '
+      libext=lib
+      ;;
+    darwin* | rhapsody*)
+      hardcode_direct=no
+      if test "$GCC" = yes ; then
+        :
+      else
+        case $cc_basename in
+          xlc*)
+            ;;
+          *)
+            ld_shlibs=no
+            ;;
+        esac
+      fi
+      ;;
+    dgux*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      ;;
+    freebsd1*)
+      ld_shlibs=no
+      ;;
+    freebsd2.2*)
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      ;;
+    freebsd2*)
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      ;;
+    freebsd* | dragonfly*)
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      ;;
+    hpux9*)
+      hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+      hardcode_libdir_separator=:
+      hardcode_direct=yes
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      hardcode_minus_L=yes
+      ;;
+    hpux10*)
+      if test "$with_gnu_ld" = no; then
+        hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+        hardcode_libdir_separator=:
+        hardcode_direct=yes
+        # hardcode_minus_L: Not really in the search PATH,
+        # but as the default location of the library.
+        hardcode_minus_L=yes
+      fi
+      ;;
+    hpux11*)
+      if test "$with_gnu_ld" = no; then
+        hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+        hardcode_libdir_separator=:
+        case $host_cpu in
+          hppa*64*|ia64*)
+            hardcode_direct=no
+            ;;
+          *)
+            hardcode_direct=yes
+            # hardcode_minus_L: Not really in the search PATH,
+            # but as the default location of the library.
+            hardcode_minus_L=yes
+            ;;
+        esac
+      fi
+      ;;
+    irix5* | irix6* | nonstopux*)
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      ;;
+    netbsd*)
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      ;;
+    newsos6)
+      hardcode_direct=yes
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      ;;
+    openbsd*)
+      if test -f /usr/libexec/ld.so; then
+        hardcode_direct=yes
+        if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+          hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+        else
+          case "$host_os" in
+            openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+              hardcode_libdir_flag_spec='-R$libdir'
+              ;;
+            *)
+              hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+              ;;
+          esac
+        fi
+      else
+        ld_shlibs=no
+      fi
+      ;;
+    os2*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      ;;
+    osf3*)
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      ;;
+    osf4* | osf5*)
+      if test "$GCC" = yes; then
+        hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      else
+        # Both cc and cxx compiler support -rpath directly
+        hardcode_libdir_flag_spec='-rpath $libdir'
+      fi
+      hardcode_libdir_separator=:
+      ;;
+    solaris*)
+      hardcode_libdir_flag_spec='-R$libdir'
+      ;;
+    sunos4*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      ;;
+    sysv4)
+      case $host_vendor in
+        sni)
+          hardcode_direct=yes # is this really true???
+          ;;
+        siemens)
+          hardcode_direct=no
+          ;;
+        motorola)
+          hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+          ;;
+      esac
+      ;;
+    sysv4.3*)
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+        ld_shlibs=yes
+      fi
+      ;;
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+      ;;
+    sysv5* | sco3.2v5* | sco5v6*)
+      hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
+      hardcode_libdir_separator=':'
+      ;;
+    uts4*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      ;;
+    *)
+      ld_shlibs=no
+      ;;
+  esac
+fi
+
+# Check dynamic linker characteristics
+# Code taken from libtool.m4's AC_LIBTOOL_SYS_DYNAMIC_LINKER.
+# Unlike libtool.m4, here we don't care about _all_ names of the library, but
+# only about the one the linker finds when passed -lNAME. This is the last
+# element of library_names_spec in libtool.m4, or possibly two of them if the
+# linker has special search rules.
+library_names_spec=      # the last element of library_names_spec in libtool.m4
+libname_spec='lib$name'
+case "$host_os" in
+  aix3*)
+    library_names_spec='$libname.a'
+    ;;
+  aix4* | aix5*)
+    library_names_spec='$libname$shrext'
+    ;;
+  amigaos*)
+    library_names_spec='$libname.a'
+    ;;
+  beos*)
+    library_names_spec='$libname$shrext'
+    ;;
+  bsdi[45]*)
+    library_names_spec='$libname$shrext'
+    ;;
+  cygwin* | mingw* | pw32*)
+    shrext=.dll
+    library_names_spec='$libname.dll.a $libname.lib'
+    ;;
+  darwin* | rhapsody*)
+    shrext=.dylib
+    library_names_spec='$libname$shrext'
+    ;;
+  dgux*)
+    library_names_spec='$libname$shrext'
+    ;;
+  freebsd1*)
+    ;;
+  freebsd* | dragonfly*)
+    case "$host_os" in
+      freebsd[123]*)
+        library_names_spec='$libname$shrext$versuffix' ;;
+      *)
+        library_names_spec='$libname$shrext' ;;
+    esac
+    ;;
+  gnu*)
+    library_names_spec='$libname$shrext'
+    ;;
+  hpux9* | hpux10* | hpux11*)
+    case $host_cpu in
+      ia64*)
+        shrext=.so
+        ;;
+      hppa*64*)
+        shrext=.sl
+        ;;
+      *)
+        shrext=.sl
+        ;;
+    esac
+    library_names_spec='$libname$shrext'
+    ;;
+  interix[3-9]*)
+    library_names_spec='$libname$shrext'
+    ;;
+  irix5* | irix6* | nonstopux*)
+    library_names_spec='$libname$shrext'
+    case "$host_os" in
+      irix5* | nonstopux*)
+        libsuff= shlibsuff=
+        ;;
+      *)
+        case $LD in
+          *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;;
+          *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;;
+          *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;;
+          *) libsuff= shlibsuff= ;;
+        esac
+        ;;
+    esac
+    ;;
+  linux*oldld* | linux*aout* | linux*coff*)
+    ;;
+  linux* | k*bsd*-gnu)
+    library_names_spec='$libname$shrext'
+    ;;
+  knetbsd*-gnu)
+    library_names_spec='$libname$shrext'
+    ;;
+  netbsd*)
+    library_names_spec='$libname$shrext'
+    ;;
+  newsos6)
+    library_names_spec='$libname$shrext'
+    ;;
+  nto-qnx*)
+    library_names_spec='$libname$shrext'
+    ;;
+  openbsd*)
+    library_names_spec='$libname$shrext$versuffix'
+    ;;
+  os2*)
+    libname_spec='$name'
+    shrext=.dll
+    library_names_spec='$libname.a'
+    ;;
+  osf3* | osf4* | osf5*)
+    library_names_spec='$libname$shrext'
+    ;;
+  rdos*)
+    ;;
+  solaris*)
+    library_names_spec='$libname$shrext'
+    ;;
+  sunos4*)
+    library_names_spec='$libname$shrext$versuffix'
+    ;;
+  sysv4 | sysv4.3*)
+    library_names_spec='$libname$shrext'
+    ;;
+  sysv4*MP*)
+    library_names_spec='$libname$shrext'
+    ;;
+  sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+    library_names_spec='$libname$shrext'
+    ;;
+  uts4*)
+    library_names_spec='$libname$shrext'
+    ;;
+esac
+
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"`
+shlibext=`echo "$shrext" | sed -e 's,^\.,,'`
+escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+
+LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF
+
+# How to pass a linker flag through the compiler.
+wl="$escaped_wl"
+
+# Static library suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally "so").
+shlibext="$shlibext"
+
+# Format of library name prefix.
+libname_spec="$escaped_libname_spec"
+
+# Library names that the linker finds when passed -lNAME.
+library_names_spec="$escaped_library_names_spec"
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec"
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator="$hardcode_libdir_separator"
+
+# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct="$hardcode_direct"
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L="$hardcode_minus_L"
+
+EOF
diff --git a/config.sub b/config.sub
new file mode 100755
index 0000000..87a1ee4
--- /dev/null
+++ b/config.sub
@@ -0,0 +1,1569 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+#   Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
+#   2000, 2001, 2002, 2003, 2004, 2005 Free Software Foundation, Inc.
+
+timestamp='2005-04-22'
+
+# This file is (in principle) common to ALL GNU software.
+# The presence of a machine in this file suggests that SOME GNU software
+# can handle that machine.  It does not imply ALL GNU software can.
+#
+# This file 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., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Please send patches to <config-patches at gnu.org>.  Submit a context
+# diff and a properly formatted ChangeLog entry.
+#
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support.  The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+#	CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+#	CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS
+       $0 [OPTION] ALIAS
+
+Canonicalize a configuration name.
+
+Operation modes:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches at gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
+Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit 0 ;;
+    --version | -v )
+       echo "$version" ; exit 0 ;;
+    --help | --h* | -h )
+       echo "$usage"; exit 0 ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )	# Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help"
+       exit 1 ;;
+
+    *local*)
+       # First pass through any local machine types.
+       echo $1
+       exit 0;;
+
+    * )
+       break ;;
+  esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+    exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+    exit 1;;
+esac
+
+# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
+# Here we must recognize all the valid KERNEL-OS combinations.
+maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
+case $maybe_os in
+  nto-qnx* | linux-gnu* | linux-dietlibc | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | \
+  kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | storm-chaos* | os2-emx* | rtmk-nova*)
+    os=-$maybe_os
+    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
+    ;;
+  *)
+    basic_machine=`echo $1 | sed 's/-[^-]*$//'`
+    if [ $basic_machine != $1 ]
+    then os=`echo $1 | sed 's/.*-/-/'`
+    else os=; fi
+    ;;
+esac
+
+### Let's recognize common machines as not being operating systems so
+### that things like config.sub decstation-3100 work.  We also
+### recognize some manufacturers as not being operating systems, so we
+### can provide default operating systems below.
+case $os in
+	-sun*os*)
+		# Prevent following clause from handling this invalid input.
+		;;
+	-dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
+	-att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
+	-unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
+	-convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
+	-c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
+	-harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
+	-apple | -axis | -knuth | -cray)
+		os=
+		basic_machine=$1
+		;;
+	-sim | -cisco | -oki | -wec | -winbond)
+		os=
+		basic_machine=$1
+		;;
+	-scout)
+		;;
+	-wrs)
+		os=-vxworks
+		basic_machine=$1
+		;;
+	-chorusos*)
+		os=-chorusos
+		basic_machine=$1
+		;;
+ 	-chorusrdb)
+ 		os=-chorusrdb
+		basic_machine=$1
+ 		;;
+	-hiux*)
+		os=-hiuxwe2
+		;;
+	-sco5)
+		os=-sco3.2v5
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco4)
+		os=-sco3.2v4
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco3.2.[4-9]*)
+		os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco3.2v[4-9]*)
+		# Don't forget version if it is 3.2v4 or newer.
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-sco*)
+		os=-sco3.2v2
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-udk*)
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-isc)
+		os=-isc2.2
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-clix*)
+		basic_machine=clipper-intergraph
+		;;
+	-isc*)
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
+		;;
+	-lynx*)
+		os=-lynxos
+		;;
+	-ptx*)
+		basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
+		;;
+	-windowsnt*)
+		os=`echo $os | sed -e 's/windowsnt/winnt/'`
+		;;
+	-psos*)
+		os=-psos
+		;;
+	-mint | -mint[0-9]*)
+		basic_machine=m68k-atari
+		os=-mint
+		;;
+esac
+
+# Decode aliases for certain CPU-COMPANY combinations.
+case $basic_machine in
+	# Recognize the basic CPU types without company name.
+	# Some are omitted here because they have special meanings below.
+	1750a | 580 \
+	| a29k \
+	| alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
+	| alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
+	| am33_2.0 \
+	| arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr \
+	| bfin \
+	| c4x | clipper \
+	| d10v | d30v | dlx | dsp16xx \
+	| fr30 | frv \
+	| h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+	| i370 | i860 | i960 | ia64 \
+	| ip2k | iq2000 \
+	| m32r | m32rle | m68000 | m68k | m88k | maxq | mcore \
+	| mips | mipsbe | mipseb | mipsel | mipsle \
+	| mips16 \
+	| mips64 | mips64el \
+	| mips64vr | mips64vrel \
+	| mips64orion | mips64orionel \
+	| mips64vr4100 | mips64vr4100el \
+	| mips64vr4300 | mips64vr4300el \
+	| mips64vr5000 | mips64vr5000el \
+	| mipsisa32 | mipsisa32el \
+	| mipsisa32r2 | mipsisa32r2el \
+	| mipsisa64 | mipsisa64el \
+	| mipsisa64r2 | mipsisa64r2el \
+	| mipsisa64sb1 | mipsisa64sb1el \
+	| mipsisa64sr71k | mipsisa64sr71kel \
+	| mipstx39 | mipstx39el \
+	| mn10200 | mn10300 \
+	| msp430 \
+	| ns16k | ns32k \
+	| openrisc | or32 \
+	| pdp10 | pdp11 | pj | pjl \
+	| powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
+	| pyramid \
+	| sh | sh[1234] | sh[23]e | sh[34]eb | shbe | shle | sh[1234]le | sh3ele \
+	| sh64 | sh64le \
+	| sparc | sparc64 | sparc64b | sparc86x | sparclet | sparclite \
+	| sparcv8 | sparcv9 | sparcv9b \
+	| strongarm \
+	| tahoe | thumb | tic4x | tic80 | tron \
+	| v850 | v850e \
+	| we32k \
+	| x86 | xscale | xscalee[bl] | xstormy16 | xtensa \
+	| z8k)
+		basic_machine=$basic_machine-unknown
+		;;
+	m6811 | m68hc11 | m6812 | m68hc12)
+		# Motorola 68HC11/12.
+		basic_machine=$basic_machine-unknown
+		os=-none
+		;;
+	m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
+		;;
+
+	# We use `pc' rather than `unknown'
+	# because (1) that's what they normally are, and
+	# (2) the word "unknown" tends to confuse beginning users.
+	i*86 | x86_64)
+	  basic_machine=$basic_machine-pc
+	  ;;
+	# Object if more than one company name word.
+	*-*-*)
+		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+		exit 1
+		;;
+	# Recognize the basic CPU types with company name.
+	580-* \
+	| a29k-* \
+	| alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
+	| alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
+	| alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
+	| arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
+	| avr-* \
+	| bfin-* | bs2000-* \
+	| c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
+	| clipper-* | craynv-* | cydra-* \
+	| d10v-* | d30v-* | dlx-* \
+	| elxsi-* \
+	| f30[01]-* | f700-* | fr30-* | frv-* | fx80-* \
+	| h8300-* | h8500-* \
+	| hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
+	| i*86-* | i860-* | i960-* | ia64-* \
+	| ip2k-* | iq2000-* \
+	| m32r-* | m32rle-* \
+	| m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
+	| m88110-* | m88k-* | maxq-* | mcore-* \
+	| mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
+	| mips16-* \
+	| mips64-* | mips64el-* \
+	| mips64vr-* | mips64vrel-* \
+	| mips64orion-* | mips64orionel-* \
+	| mips64vr4100-* | mips64vr4100el-* \
+	| mips64vr4300-* | mips64vr4300el-* \
+	| mips64vr5000-* | mips64vr5000el-* \
+	| mipsisa32-* | mipsisa32el-* \
+	| mipsisa32r2-* | mipsisa32r2el-* \
+	| mipsisa64-* | mipsisa64el-* \
+	| mipsisa64r2-* | mipsisa64r2el-* \
+	| mipsisa64sb1-* | mipsisa64sb1el-* \
+	| mipsisa64sr71k-* | mipsisa64sr71kel-* \
+	| mipstx39-* | mipstx39el-* \
+	| mmix-* \
+	| msp430-* \
+	| none-* | np1-* | ns16k-* | ns32k-* \
+	| orion-* \
+	| pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
+	| powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
+	| pyramid-* \
+	| romp-* | rs6000-* \
+	| sh-* | sh[1234]-* | sh[23]e-* | sh[34]eb-* | shbe-* \
+	| shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
+	| sparc-* | sparc64-* | sparc64b-* | sparc86x-* | sparclet-* \
+	| sparclite-* \
+	| sparcv8-* | sparcv9-* | sparcv9b-* | strongarm-* | sv1-* | sx?-* \
+	| tahoe-* | thumb-* \
+	| tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
+	| tron-* \
+	| v850-* | v850e-* | vax-* \
+	| we32k-* \
+	| x86-* | x86_64-* | xps100-* | xscale-* | xscalee[bl]-* \
+	| xstormy16-* | xtensa-* \
+	| ymp-* \
+	| z8k-*)
+		;;
+	# Recognize the various machine names and aliases which stand
+	# for a CPU type and a company and sometimes even an OS.
+	386bsd)
+		basic_machine=i386-unknown
+		os=-bsd
+		;;
+	3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+		basic_machine=m68000-att
+		;;
+	3b*)
+		basic_machine=we32k-att
+		;;
+	a29khif)
+		basic_machine=a29k-amd
+		os=-udi
+		;;
+    	abacus)
+		basic_machine=abacus-unknown
+		;;
+	adobe68k)
+		basic_machine=m68010-adobe
+		os=-scout
+		;;
+	alliant | fx80)
+		basic_machine=fx80-alliant
+		;;
+	altos | altos3068)
+		basic_machine=m68k-altos
+		;;
+	am29k)
+		basic_machine=a29k-none
+		os=-bsd
+		;;
+	amd64)
+		basic_machine=x86_64-pc
+		;;
+	amd64-*)
+		basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	amdahl)
+		basic_machine=580-amdahl
+		os=-sysv
+		;;
+	amiga | amiga-*)
+		basic_machine=m68k-unknown
+		;;
+	amigaos | amigados)
+		basic_machine=m68k-unknown
+		os=-amigaos
+		;;
+	amigaunix | amix)
+		basic_machine=m68k-unknown
+		os=-sysv4
+		;;
+	apollo68)
+		basic_machine=m68k-apollo
+		os=-sysv
+		;;
+	apollo68bsd)
+		basic_machine=m68k-apollo
+		os=-bsd
+		;;
+	aux)
+		basic_machine=m68k-apple
+		os=-aux
+		;;
+	balance)
+		basic_machine=ns32k-sequent
+		os=-dynix
+		;;
+	c90)
+		basic_machine=c90-cray
+		os=-unicos
+		;;
+	convex-c1)
+		basic_machine=c1-convex
+		os=-bsd
+		;;
+	convex-c2)
+		basic_machine=c2-convex
+		os=-bsd
+		;;
+	convex-c32)
+		basic_machine=c32-convex
+		os=-bsd
+		;;
+	convex-c34)
+		basic_machine=c34-convex
+		os=-bsd
+		;;
+	convex-c38)
+		basic_machine=c38-convex
+		os=-bsd
+		;;
+	cray | j90)
+		basic_machine=j90-cray
+		os=-unicos
+		;;
+	craynv)
+		basic_machine=craynv-cray
+		os=-unicosmp
+		;;
+	cr16c)
+		basic_machine=cr16c-unknown
+		os=-elf
+		;;
+	crds | unos)
+		basic_machine=m68k-crds
+		;;
+	crisv32 | crisv32-* | etraxfs*)
+		basic_machine=crisv32-axis
+		;;
+	cris | cris-* | etrax*)
+		basic_machine=cris-axis
+		;;
+	crx)
+		basic_machine=crx-unknown
+		os=-elf
+		;;
+	da30 | da30-*)
+		basic_machine=m68k-da30
+		;;
+	decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
+		basic_machine=mips-dec
+		;;
+	decsystem10* | dec10*)
+		basic_machine=pdp10-dec
+		os=-tops10
+		;;
+	decsystem20* | dec20*)
+		basic_machine=pdp10-dec
+		os=-tops20
+		;;
+	delta | 3300 | motorola-3300 | motorola-delta \
+	      | 3300-motorola | delta-motorola)
+		basic_machine=m68k-motorola
+		;;
+	delta88)
+		basic_machine=m88k-motorola
+		os=-sysv3
+		;;
+	djgpp)
+		basic_machine=i586-pc
+		os=-msdosdjgpp
+		;;
+	dpx20 | dpx20-*)
+		basic_machine=rs6000-bull
+		os=-bosx
+		;;
+	dpx2* | dpx2*-bull)
+		basic_machine=m68k-bull
+		os=-sysv3
+		;;
+	ebmon29k)
+		basic_machine=a29k-amd
+		os=-ebmon
+		;;
+	elxsi)
+		basic_machine=elxsi-elxsi
+		os=-bsd
+		;;
+	encore | umax | mmax)
+		basic_machine=ns32k-encore
+		;;
+	es1800 | OSE68k | ose68k | ose | OSE)
+		basic_machine=m68k-ericsson
+		os=-ose
+		;;
+	fx2800)
+		basic_machine=i860-alliant
+		;;
+	genix)
+		basic_machine=ns32k-ns
+		;;
+	gmicro)
+		basic_machine=tron-gmicro
+		os=-sysv
+		;;
+	go32)
+		basic_machine=i386-pc
+		os=-go32
+		;;
+	h3050r* | hiux*)
+		basic_machine=hppa1.1-hitachi
+		os=-hiuxwe2
+		;;
+	h8300hms)
+		basic_machine=h8300-hitachi
+		os=-hms
+		;;
+	h8300xray)
+		basic_machine=h8300-hitachi
+		os=-xray
+		;;
+	h8500hms)
+		basic_machine=h8500-hitachi
+		os=-hms
+		;;
+	harris)
+		basic_machine=m88k-harris
+		os=-sysv3
+		;;
+	hp300-*)
+		basic_machine=m68k-hp
+		;;
+	hp300bsd)
+		basic_machine=m68k-hp
+		os=-bsd
+		;;
+	hp300hpux)
+		basic_machine=m68k-hp
+		os=-hpux
+		;;
+	hp3k9[0-9][0-9] | hp9[0-9][0-9])
+		basic_machine=hppa1.0-hp
+		;;
+	hp9k2[0-9][0-9] | hp9k31[0-9])
+		basic_machine=m68000-hp
+		;;
+	hp9k3[2-9][0-9])
+		basic_machine=m68k-hp
+		;;
+	hp9k6[0-9][0-9] | hp6[0-9][0-9])
+		basic_machine=hppa1.0-hp
+		;;
+	hp9k7[0-79][0-9] | hp7[0-79][0-9])
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k78[0-9] | hp78[0-9])
+		# FIXME: really hppa2.0-hp
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+		# FIXME: really hppa2.0-hp
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k8[0-9][13679] | hp8[0-9][13679])
+		basic_machine=hppa1.1-hp
+		;;
+	hp9k8[0-9][0-9] | hp8[0-9][0-9])
+		basic_machine=hppa1.0-hp
+		;;
+	hppa-next)
+		os=-nextstep3
+		;;
+	hppaosf)
+		basic_machine=hppa1.1-hp
+		os=-osf
+		;;
+	hppro)
+		basic_machine=hppa1.1-hp
+		os=-proelf
+		;;
+	i370-ibm* | ibm*)
+		basic_machine=i370-ibm
+		;;
+# I'm not sure what "Sysv32" means.  Should this be sysv3.2?
+	i*86v32)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv32
+		;;
+	i*86v4*)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv4
+		;;
+	i*86v)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-sysv
+		;;
+	i*86sol2)
+		basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
+		os=-solaris2
+		;;
+	i386mach)
+		basic_machine=i386-mach
+		os=-mach
+		;;
+	i386-vsta | vsta)
+		basic_machine=i386-unknown
+		os=-vsta
+		;;
+	iris | iris4d)
+		basic_machine=mips-sgi
+		case $os in
+		    -irix*)
+			;;
+		    *)
+			os=-irix4
+			;;
+		esac
+		;;
+	isi68 | isi)
+		basic_machine=m68k-isi
+		os=-sysv
+		;;
+	m88k-omron*)
+		basic_machine=m88k-omron
+		;;
+	magnum | m3230)
+		basic_machine=mips-mips
+		os=-sysv
+		;;
+	merlin)
+		basic_machine=ns32k-utek
+		os=-sysv
+		;;
+	mingw32)
+		basic_machine=i386-pc
+		os=-mingw32
+		;;
+	miniframe)
+		basic_machine=m68000-convergent
+		;;
+	*mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
+		basic_machine=m68k-atari
+		os=-mint
+		;;
+	mips3*-*)
+		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
+		;;
+	mips3*)
+		basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
+		;;
+	monitor)
+		basic_machine=m68k-rom68k
+		os=-coff
+		;;
+	morphos)
+		basic_machine=powerpc-unknown
+		os=-morphos
+		;;
+	msdos)
+		basic_machine=i386-pc
+		os=-msdos
+		;;
+	mvs)
+		basic_machine=i370-ibm
+		os=-mvs
+		;;
+	ncr3000)
+		basic_machine=i486-ncr
+		os=-sysv4
+		;;
+	netbsd386)
+		basic_machine=i386-unknown
+		os=-netbsd
+		;;
+	netwinder)
+		basic_machine=armv4l-rebel
+		os=-linux
+		;;
+	news | news700 | news800 | news900)
+		basic_machine=m68k-sony
+		os=-newsos
+		;;
+	news1000)
+		basic_machine=m68030-sony
+		os=-newsos
+		;;
+	news-3600 | risc-news)
+		basic_machine=mips-sony
+		os=-newsos
+		;;
+	necv70)
+		basic_machine=v70-nec
+		os=-sysv
+		;;
+	next | m*-next )
+		basic_machine=m68k-next
+		case $os in
+		    -nextstep* )
+			;;
+		    -ns2*)
+		      os=-nextstep2
+			;;
+		    *)
+		      os=-nextstep3
+			;;
+		esac
+		;;
+	nh3000)
+		basic_machine=m68k-harris
+		os=-cxux
+		;;
+	nh[45]000)
+		basic_machine=m88k-harris
+		os=-cxux
+		;;
+	nindy960)
+		basic_machine=i960-intel
+		os=-nindy
+		;;
+	mon960)
+		basic_machine=i960-intel
+		os=-mon960
+		;;
+	nonstopux)
+		basic_machine=mips-compaq
+		os=-nonstopux
+		;;
+	np1)
+		basic_machine=np1-gould
+		;;
+	nsr-tandem)
+		basic_machine=nsr-tandem
+		;;
+	op50n-* | op60c-*)
+		basic_machine=hppa1.1-oki
+		os=-proelf
+		;;
+	or32 | or32-*)
+		basic_machine=or32-unknown
+		os=-coff
+		;;
+	os400)
+		basic_machine=powerpc-ibm
+		os=-os400
+		;;
+	OSE68000 | ose68000)
+		basic_machine=m68000-ericsson
+		os=-ose
+		;;
+	os68k)
+		basic_machine=m68k-none
+		os=-os68k
+		;;
+	pa-hitachi)
+		basic_machine=hppa1.1-hitachi
+		os=-hiuxwe2
+		;;
+	paragon)
+		basic_machine=i860-intel
+		os=-osf
+		;;
+	pbd)
+		basic_machine=sparc-tti
+		;;
+	pbb)
+		basic_machine=m68k-tti
+		;;
+	pc532 | pc532-*)
+		basic_machine=ns32k-pc532
+		;;
+	pentium | p5 | k5 | k6 | nexgen | viac3)
+		basic_machine=i586-pc
+		;;
+	pentiumpro | p6 | 6x86 | athlon | athlon_*)
+		basic_machine=i686-pc
+		;;
+	pentiumii | pentium2 | pentiumiii | pentium3)
+		basic_machine=i686-pc
+		;;
+	pentium4)
+		basic_machine=i786-pc
+		;;
+	pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+		basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentiumpro-* | p6-* | 6x86-* | athlon-*)
+		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+		basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pentium4-*)
+		basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	pn)
+		basic_machine=pn-gould
+		;;
+	power)	basic_machine=power-ibm
+		;;
+	ppc)	basic_machine=powerpc-unknown
+		;;
+	ppc-*)	basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppcle | powerpclittle | ppc-le | powerpc-little)
+		basic_machine=powerpcle-unknown
+		;;
+	ppcle-* | powerpclittle-*)
+		basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppc64)	basic_machine=powerpc64-unknown
+		;;
+	ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ppc64le | powerpc64little | ppc64-le | powerpc64-little)
+		basic_machine=powerpc64le-unknown
+		;;
+	ppc64le-* | powerpc64little-*)
+		basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
+		;;
+	ps2)
+		basic_machine=i386-ibm
+		;;
+	pw32)
+		basic_machine=i586-unknown
+		os=-pw32
+		;;
+	rom68k)
+		basic_machine=m68k-rom68k
+		os=-coff
+		;;
+	rm[46]00)
+		basic_machine=mips-siemens
+		;;
+	rtpc | rtpc-*)
+		basic_machine=romp-ibm
+		;;
+	s390 | s390-*)
+		basic_machine=s390-ibm
+		;;
+	s390x | s390x-*)
+		basic_machine=s390x-ibm
+		;;
+	sa29200)
+		basic_machine=a29k-amd
+		os=-udi
+		;;
+	sb1)
+		basic_machine=mipsisa64sb1-unknown
+		;;
+	sb1el)
+		basic_machine=mipsisa64sb1el-unknown
+		;;
+	sei)
+		basic_machine=mips-sei
+		os=-seiux
+		;;
+	sequent)
+		basic_machine=i386-sequent
+		;;
+	sh)
+		basic_machine=sh-hitachi
+		os=-hms
+		;;
+	sh64)
+		basic_machine=sh64-unknown
+		;;
+	sparclite-wrs | simso-wrs)
+		basic_machine=sparclite-wrs
+		os=-vxworks
+		;;
+	sps7)
+		basic_machine=m68k-bull
+		os=-sysv2
+		;;
+	spur)
+		basic_machine=spur-unknown
+		;;
+	st2000)
+		basic_machine=m68k-tandem
+		;;
+	stratus)
+		basic_machine=i860-stratus
+		os=-sysv4
+		;;
+	sun2)
+		basic_machine=m68000-sun
+		;;
+	sun2os3)
+		basic_machine=m68000-sun
+		os=-sunos3
+		;;
+	sun2os4)
+		basic_machine=m68000-sun
+		os=-sunos4
+		;;
+	sun3os3)
+		basic_machine=m68k-sun
+		os=-sunos3
+		;;
+	sun3os4)
+		basic_machine=m68k-sun
+		os=-sunos4
+		;;
+	sun4os3)
+		basic_machine=sparc-sun
+		os=-sunos3
+		;;
+	sun4os4)
+		basic_machine=sparc-sun
+		os=-sunos4
+		;;
+	sun4sol2)
+		basic_machine=sparc-sun
+		os=-solaris2
+		;;
+	sun3 | sun3-*)
+		basic_machine=m68k-sun
+		;;
+	sun4)
+		basic_machine=sparc-sun
+		;;
+	sun386 | sun386i | roadrunner)
+		basic_machine=i386-sun
+		;;
+	sv1)
+		basic_machine=sv1-cray
+		os=-unicos
+		;;
+	symmetry)
+		basic_machine=i386-sequent
+		os=-dynix
+		;;
+	t3e)
+		basic_machine=alphaev5-cray
+		os=-unicos
+		;;
+	t90)
+		basic_machine=t90-cray
+		os=-unicos
+		;;
+	tic54x | c54x*)
+		basic_machine=tic54x-unknown
+		os=-coff
+		;;
+	tic55x | c55x*)
+		basic_machine=tic55x-unknown
+		os=-coff
+		;;
+	tic6x | c6x*)
+		basic_machine=tic6x-unknown
+		os=-coff
+		;;
+	tx39)
+		basic_machine=mipstx39-unknown
+		;;
+	tx39el)
+		basic_machine=mipstx39el-unknown
+		;;
+	toad1)
+		basic_machine=pdp10-xkl
+		os=-tops20
+		;;
+	tower | tower-32)
+		basic_machine=m68k-ncr
+		;;
+	tpf)
+		basic_machine=s390x-ibm
+		os=-tpf
+		;;
+	udi29k)
+		basic_machine=a29k-amd
+		os=-udi
+		;;
+	ultra3)
+		basic_machine=a29k-nyu
+		os=-sym1
+		;;
+	v810 | necv810)
+		basic_machine=v810-nec
+		os=-none
+		;;
+	vaxv)
+		basic_machine=vax-dec
+		os=-sysv
+		;;
+	vms)
+		basic_machine=vax-dec
+		os=-vms
+		;;
+	vpp*|vx|vx-*)
+		basic_machine=f301-fujitsu
+		;;
+	vxworks960)
+		basic_machine=i960-wrs
+		os=-vxworks
+		;;
+	vxworks68)
+		basic_machine=m68k-wrs
+		os=-vxworks
+		;;
+	vxworks29k)
+		basic_machine=a29k-wrs
+		os=-vxworks
+		;;
+	w65*)
+		basic_machine=w65-wdc
+		os=-none
+		;;
+	w89k-*)
+		basic_machine=hppa1.1-winbond
+		os=-proelf
+		;;
+	xbox)
+		basic_machine=i686-pc
+		os=-mingw32
+		;;
+	xps | xps100)
+		basic_machine=xps100-honeywell
+		;;
+	ymp)
+		basic_machine=ymp-cray
+		os=-unicos
+		;;
+	z8k-*-coff)
+		basic_machine=z8k-unknown
+		os=-sim
+		;;
+	none)
+		basic_machine=none-none
+		os=-none
+		;;
+
+# Here we handle the default manufacturer of certain CPU types.  It is in
+# some cases the only manufacturer, in others, it is the most popular.
+	w89k)
+		basic_machine=hppa1.1-winbond
+		;;
+	op50n)
+		basic_machine=hppa1.1-oki
+		;;
+	op60c)
+		basic_machine=hppa1.1-oki
+		;;
+	romp)
+		basic_machine=romp-ibm
+		;;
+	mmix)
+		basic_machine=mmix-knuth
+		;;
+	rs6000)
+		basic_machine=rs6000-ibm
+		;;
+	vax)
+		basic_machine=vax-dec
+		;;
+	pdp10)
+		# there are many clones, so DEC is not a safe bet
+		basic_machine=pdp10-unknown
+		;;
+	pdp11)
+		basic_machine=pdp11-dec
+		;;
+	we32k)
+		basic_machine=we32k-att
+		;;
+	sh3 | sh4 | sh[34]eb | sh[1234]le | sh[23]ele)
+		basic_machine=sh-unknown
+		;;
+	sh64)
+		basic_machine=sh64-unknown
+		;;
+	sparc | sparcv8 | sparcv9 | sparcv9b)
+		basic_machine=sparc-sun
+		;;
+	cydra)
+		basic_machine=cydra-cydrome
+		;;
+	orion)
+		basic_machine=orion-highlevel
+		;;
+	orion105)
+		basic_machine=clipper-highlevel
+		;;
+	mac | mpw | mac-mpw)
+		basic_machine=m68k-apple
+		;;
+	pmac | pmac-mpw)
+		basic_machine=powerpc-apple
+		;;
+	*-unknown)
+		# Make sure to match an already-canonicalized machine name.
+		;;
+	*)
+		echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
+		exit 1
+		;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $basic_machine in
+	*-digital*)
+		basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
+		;;
+	*-commodore*)
+		basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
+		;;
+	*)
+		;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x"$os" != x"" ]
+then
+case $os in
+        # First match some system type aliases
+        # that might get confused with valid system types.
+	# -solaris* is a basic system type, with this one exception.
+	-solaris1 | -solaris1.*)
+		os=`echo $os | sed -e 's|solaris1|sunos4|'`
+		;;
+	-solaris)
+		os=-solaris2
+		;;
+	-svr4*)
+		os=-sysv4
+		;;
+	-unixware*)
+		os=-sysv4.2uw
+		;;
+	-gnu/linux*)
+		os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+		;;
+	# First accept the basic system types.
+	# The portable systems comes first.
+	# Each alternative MUST END IN A *, to match a version number.
+	# -sysv* is not here because it comes later, after sysvr4.
+	-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
+	      | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
+	      | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
+	      | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+	      | -aos* \
+	      | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+	      | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
+	      | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* | -openbsd* \
+	      | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
+	      | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
+	      | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
+	      | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
+	      | -chorusos* | -chorusrdb* \
+	      | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+	      | -mingw32* | -linux-gnu* | -linux-uclibc* | -uxpv* | -beos* | -mpeix* | -udk* \
+	      | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
+	      | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
+	      | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
+	      | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
+	      | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
+	      | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly*)
+	# Remember, each alternative MUST END IN *, to match a version number.
+		;;
+	-qnx*)
+		case $basic_machine in
+		    x86-* | i*86-*)
+			;;
+		    *)
+			os=-nto$os
+			;;
+		esac
+		;;
+	-nto-qnx*)
+		;;
+	-nto*)
+		os=`echo $os | sed -e 's|nto|nto-qnx|'`
+		;;
+	-sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
+	      | -windows* | -osx | -abug | -netware* | -os9* | -beos* \
+	      | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
+		;;
+	-mac*)
+		os=`echo $os | sed -e 's|mac|macos|'`
+		;;
+	-linux-dietlibc)
+		os=-linux-dietlibc
+		;;
+	-linux*)
+		os=`echo $os | sed -e 's|linux|linux-gnu|'`
+		;;
+	-sunos5*)
+		os=`echo $os | sed -e 's|sunos5|solaris2|'`
+		;;
+	-sunos6*)
+		os=`echo $os | sed -e 's|sunos6|solaris3|'`
+		;;
+	-opened*)
+		os=-openedition
+		;;
+        -os400*)
+		os=-os400
+		;;
+	-wince*)
+		os=-wince
+		;;
+	-osfrose*)
+		os=-osfrose
+		;;
+	-osf*)
+		os=-osf
+		;;
+	-utek*)
+		os=-bsd
+		;;
+	-dynix*)
+		os=-bsd
+		;;
+	-acis*)
+		os=-aos
+		;;
+	-atheos*)
+		os=-atheos
+		;;
+	-syllable*)
+		os=-syllable
+		;;
+	-386bsd)
+		os=-bsd
+		;;
+	-ctix* | -uts*)
+		os=-sysv
+		;;
+	-nova*)
+		os=-rtmk-nova
+		;;
+	-ns2 )
+		os=-nextstep2
+		;;
+	-nsk*)
+		os=-nsk
+		;;
+	# Preserve the version number of sinix5.
+	-sinix5.*)
+		os=`echo $os | sed -e 's|sinix|sysv|'`
+		;;
+	-sinix*)
+		os=-sysv4
+		;;
+        -tpf*)
+		os=-tpf
+		;;
+	-triton*)
+		os=-sysv3
+		;;
+	-oss*)
+		os=-sysv3
+		;;
+	-svr4)
+		os=-sysv4
+		;;
+	-svr3)
+		os=-sysv3
+		;;
+	-sysvr4)
+		os=-sysv4
+		;;
+	# This must come after -sysvr4.
+	-sysv*)
+		;;
+	-ose*)
+		os=-ose
+		;;
+	-es1800*)
+		os=-ose
+		;;
+	-xenix)
+		os=-xenix
+		;;
+	-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+		os=-mint
+		;;
+	-aros*)
+		os=-aros
+		;;
+	-kaos*)
+		os=-kaos
+		;;
+	-zvmoe)
+		os=-zvmoe
+		;;
+	-none)
+		;;
+	*)
+		# Get rid of the `-' at the beginning of $os.
+		os=`echo $os | sed 's/[^-]*-//'`
+		echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
+		exit 1
+		;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system.  Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $basic_machine in
+	*-acorn)
+		os=-riscix1.2
+		;;
+	arm*-rebel)
+		os=-linux
+		;;
+	arm*-semi)
+		os=-aout
+		;;
+    c4x-* | tic4x-*)
+        os=-coff
+        ;;
+	# This must come before the *-dec entry.
+	pdp10-*)
+		os=-tops20
+		;;
+	pdp11-*)
+		os=-none
+		;;
+	*-dec | vax-*)
+		os=-ultrix4.2
+		;;
+	m68*-apollo)
+		os=-domain
+		;;
+	i386-sun)
+		os=-sunos4.0.2
+		;;
+	m68000-sun)
+		os=-sunos3
+		# This also exists in the configure program, but was not the
+		# default.
+		# os=-sunos4
+		;;
+	m68*-cisco)
+		os=-aout
+		;;
+	mips*-cisco)
+		os=-elf
+		;;
+	mips*-*)
+		os=-elf
+		;;
+	or32-*)
+		os=-coff
+		;;
+	*-tti)	# must be before sparc entry or we get the wrong os.
+		os=-sysv3
+		;;
+	sparc-* | *-sun)
+		os=-sunos4.1.1
+		;;
+	*-be)
+		os=-beos
+		;;
+	*-ibm)
+		os=-aix
+		;;
+    	*-knuth)
+		os=-mmixware
+		;;
+	*-wec)
+		os=-proelf
+		;;
+	*-winbond)
+		os=-proelf
+		;;
+	*-oki)
+		os=-proelf
+		;;
+	*-hp)
+		os=-hpux
+		;;
+	*-hitachi)
+		os=-hiux
+		;;
+	i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+		os=-sysv
+		;;
+	*-cbm)
+		os=-amigaos
+		;;
+	*-dg)
+		os=-dgux
+		;;
+	*-dolphin)
+		os=-sysv3
+		;;
+	m68k-ccur)
+		os=-rtu
+		;;
+	m88k-omron*)
+		os=-luna
+		;;
+	*-next )
+		os=-nextstep
+		;;
+	*-sequent)
+		os=-ptx
+		;;
+	*-crds)
+		os=-unos
+		;;
+	*-ns)
+		os=-genix
+		;;
+	i370-*)
+		os=-mvs
+		;;
+	*-next)
+		os=-nextstep3
+		;;
+	*-gould)
+		os=-sysv
+		;;
+	*-highlevel)
+		os=-bsd
+		;;
+	*-encore)
+		os=-bsd
+		;;
+	*-sgi)
+		os=-irix
+		;;
+	*-siemens)
+		os=-sysv4
+		;;
+	*-masscomp)
+		os=-rtu
+		;;
+	f30[01]-fujitsu | f700-fujitsu)
+		os=-uxpv
+		;;
+	*-rom68k)
+		os=-coff
+		;;
+	*-*bug)
+		os=-coff
+		;;
+	*-apple)
+		os=-macos
+		;;
+	*-atari*)
+		os=-mint
+		;;
+	*)
+		os=-none
+		;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer.  We pick the logical manufacturer.
+vendor=unknown
+case $basic_machine in
+	*-unknown)
+		case $os in
+			-riscix*)
+				vendor=acorn
+				;;
+			-sunos*)
+				vendor=sun
+				;;
+			-aix*)
+				vendor=ibm
+				;;
+			-beos*)
+				vendor=be
+				;;
+			-hpux*)
+				vendor=hp
+				;;
+			-mpeix*)
+				vendor=hp
+				;;
+			-hiux*)
+				vendor=hitachi
+				;;
+			-unos*)
+				vendor=crds
+				;;
+			-dgux*)
+				vendor=dg
+				;;
+			-luna*)
+				vendor=omron
+				;;
+			-genix*)
+				vendor=ns
+				;;
+			-mvs* | -opened*)
+				vendor=ibm
+				;;
+			-os400*)
+				vendor=ibm
+				;;
+			-ptx*)
+				vendor=sequent
+				;;
+			-tpf*)
+				vendor=ibm
+				;;
+			-vxsim* | -vxworks* | -windiss*)
+				vendor=wrs
+				;;
+			-aux*)
+				vendor=apple
+				;;
+			-hms*)
+				vendor=hitachi
+				;;
+			-mpw* | -macos*)
+				vendor=apple
+				;;
+			-*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
+				vendor=atari
+				;;
+			-vos*)
+				vendor=stratus
+				;;
+		esac
+		basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
+		;;
+esac
+
+echo $basic_machine$os
+exit 0
+
+# Local variables:
+# eval: (add-hook 'write-file-hooks 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/configure b/configure
new file mode 100755
index 0000000..1b62dc1
--- /dev/null
+++ b/configure
@@ -0,0 +1,18819 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.61 for wmcoincoin 2.6.1.
+#
+# Report bugs to <triton at kumal.info>.
+#
+# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+# 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+## --------------------- ##
+## M4sh Initialization.  ##
+## --------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in
+  *posix*) set -o posix ;;
+esac
+
+fi
+
+
+
+
+# PATH needs CR
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+as_nl='
+'
+IFS=" ""	$as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+case $0 in
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  { (exit 1); exit 1; }
+fi
+
+# Work around bugs in pre-3.0 UWIN ksh.
+for as_var in ENV MAIL MAILPATH
+do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+  LC_TELEPHONE LC_TIME
+do
+  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+    eval $as_var=C; export $as_var
+  else
+    ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+  fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+
+# CDPATH.
+$as_unset CDPATH
+
+
+if test "x$CONFIG_SHELL" = x; then
+  if (eval ":") 2>/dev/null; then
+  as_have_required=yes
+else
+  as_have_required=no
+fi
+
+  if test $as_have_required = yes && 	 (eval ":
+(as_func_return () {
+  (exit \$1)
+}
+as_func_success () {
+  as_func_return 0
+}
+as_func_failure () {
+  as_func_return 1
+}
+as_func_ret_success () {
+  return 0
+}
+as_func_ret_failure () {
+  return 1
+}
+
+exitcode=0
+if as_func_success; then
+  :
+else
+  exitcode=1
+  echo as_func_success failed.
+fi
+
+if as_func_failure; then
+  exitcode=1
+  echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+  :
+else
+  exitcode=1
+  echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+  exitcode=1
+  echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
+  :
+else
+  exitcode=1
+  echo positional parameters were not saved.
+fi
+
+test \$exitcode = 0) || { (exit 1); exit 1; }
+
+(
+  as_lineno_1=\$LINENO
+  as_lineno_2=\$LINENO
+  test \"x\$as_lineno_1\" != \"x\$as_lineno_2\" &&
+  test \"x\`expr \$as_lineno_1 + 1\`\" = \"x\$as_lineno_2\") || { (exit 1); exit 1; }
+") 2> /dev/null; then
+  :
+else
+  as_candidate_shells=
+    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  case $as_dir in
+	 /*)
+	   for as_base in sh bash ksh sh5; do
+	     as_candidate_shells="$as_candidate_shells $as_dir/$as_base"
+	   done;;
+       esac
+done
+IFS=$as_save_IFS
+
+
+      for as_shell in $as_candidate_shells $SHELL; do
+	 # Try only shells that exist, to save several forks.
+	 if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
+		{ ("$as_shell") 2> /dev/null <<\_ASEOF
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in
+  *posix*) set -o posix ;;
+esac
+
+fi
+
+
+:
+_ASEOF
+}; then
+  CONFIG_SHELL=$as_shell
+	       as_have_required=yes
+	       if { "$as_shell" 2> /dev/null <<\_ASEOF
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in
+  *posix*) set -o posix ;;
+esac
+
+fi
+
+
+:
+(as_func_return () {
+  (exit $1)
+}
+as_func_success () {
+  as_func_return 0
+}
+as_func_failure () {
+  as_func_return 1
+}
+as_func_ret_success () {
+  return 0
+}
+as_func_ret_failure () {
+  return 1
+}
+
+exitcode=0
+if as_func_success; then
+  :
+else
+  exitcode=1
+  echo as_func_success failed.
+fi
+
+if as_func_failure; then
+  exitcode=1
+  echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+  :
+else
+  exitcode=1
+  echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+  exitcode=1
+  echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = "$1" ); then
+  :
+else
+  exitcode=1
+  echo positional parameters were not saved.
+fi
+
+test $exitcode = 0) || { (exit 1); exit 1; }
+
+(
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2") || { (exit 1); exit 1; }
+
+_ASEOF
+}; then
+  break
+fi
+
+fi
+
+      done
+
+      if test "x$CONFIG_SHELL" != x; then
+  for as_var in BASH_ENV ENV
+        do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+        done
+        export CONFIG_SHELL
+        exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
+fi
+
+
+    if test $as_have_required = no; then
+  echo This script requires a shell more modern than all the
+      echo shells that I found on your system.  Please install a
+      echo modern shell, or manually run the script under such a
+      echo shell if you do have one.
+      { (exit 1); exit 1; }
+fi
+
+
+fi
+
+fi
+
+
+
+(eval "as_func_return () {
+  (exit \$1)
+}
+as_func_success () {
+  as_func_return 0
+}
+as_func_failure () {
+  as_func_return 1
+}
+as_func_ret_success () {
+  return 0
+}
+as_func_ret_failure () {
+  return 1
+}
+
+exitcode=0
+if as_func_success; then
+  :
+else
+  exitcode=1
+  echo as_func_success failed.
+fi
+
+if as_func_failure; then
+  exitcode=1
+  echo as_func_failure succeeded.
+fi
+
+if as_func_ret_success; then
+  :
+else
+  exitcode=1
+  echo as_func_ret_success failed.
+fi
+
+if as_func_ret_failure; then
+  exitcode=1
+  echo as_func_ret_failure succeeded.
+fi
+
+if ( set x; as_func_ret_success y && test x = \"\$1\" ); then
+  :
+else
+  exitcode=1
+  echo positional parameters were not saved.
+fi
+
+test \$exitcode = 0") || {
+  echo No shell found that supports shell functions.
+  echo Please tell autoconf at gnu.org about your system,
+  echo including any error possibly output before this
+  echo message
+}
+
+
+
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
+
+  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+  # uniformly replaced by the line number.  The first 'sed' inserts a
+  # line-number line after each line using $LINENO; the second 'sed'
+  # does the real work.  The second script uses 'N' to pair each
+  # line-number line with the line containing $LINENO, and appends
+  # trailing '-' during substitution so that $LINENO is not a special
+  # case at line end.
+  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+  # scripts with optimization help from Paolo Bonzini.  Blame Lee
+  # E. McMahon (1931-1989) for sed's syntax.  :-)
+  sed -n '
+    p
+    /[$]LINENO/=
+  ' <$as_myself |
+    sed '
+      s/[$]LINENO.*/&-/
+      t lineno
+      b
+      :lineno
+      N
+      :loop
+      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+      t loop
+      s/-\n.*//
+    ' >$as_me.lineno &&
+  chmod +x "$as_me.lineno" ||
+    { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+   { (exit 1); exit 1; }; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensitive to this).
+  . "./$as_me.lineno"
+  # Exit status is that of the last command.
+  exit
+}
+
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in
+-n*)
+  case `echo 'x\c'` in
+  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
+  *)   ECHO_C='\c';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir
+fi
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s='ln -s'
+  # ... but there are two gotchas:
+  # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+  # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+  # In both cases, we have to default to `cp -p'.
+  ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+    as_ln_s='cp -p'
+elif ln conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s=ln
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p=:
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+  as_test_x='test -x'
+else
+  if ls -dL / >/dev/null 2>&1; then
+    as_ls_L_option=L
+  else
+    as_ls_L_option=
+  fi
+  as_test_x='
+    eval sh -c '\''
+      if test -d "$1"; then
+        test -d "$1/.";
+      else
+	case $1 in
+        -*)set "./$1";;
+	esac;
+	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
+	???[sx]*):;;*)false;;esac;fi
+    '\'' sh
+  '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+
+exec 7<&0 </dev/null 6>&1
+
+# Name of the host.
+# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
+# so uname gets run too.
+ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_clean_files=
+ac_config_libobj_dir=.
+LIBOBJS=
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+# Identity of this package.
+PACKAGE_NAME='wmcoincoin'
+PACKAGE_TARNAME='wmcoincoin'
+PACKAGE_VERSION='2.6.1'
+PACKAGE_STRING='wmcoincoin 2.6.1'
+PACKAGE_BUGREPORT='triton at kumal.info'
+
+ac_unique_file="src/wmcoincoin.c"
+gt_needs=
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#ifdef HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#ifdef HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#ifdef STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# ifdef HAVE_STDLIB_H
+#  include <stdlib.h>
+# endif
+#endif
+#ifdef HAVE_STRING_H
+# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
+#  include <memory.h>
+# endif
+# include <string.h>
+#endif
+#ifdef HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#ifdef HAVE_INTTYPES_H
+# include <inttypes.h>
+#endif
+#ifdef HAVE_STDINT_H
+# include <stdint.h>
+#endif
+#ifdef HAVE_UNISTD_H
+# include <unistd.h>
+#endif"
+
+ac_subst_vars='SHELL
+PATH_SEPARATOR
+PACKAGE_NAME
+PACKAGE_TARNAME
+PACKAGE_VERSION
+PACKAGE_STRING
+PACKAGE_BUGREPORT
+exec_prefix
+prefix
+program_transform_name
+bindir
+sbindir
+libexecdir
+datarootdir
+datadir
+sysconfdir
+sharedstatedir
+localstatedir
+includedir
+oldincludedir
+docdir
+infodir
+htmldir
+dvidir
+pdfdir
+psdir
+libdir
+localedir
+mandir
+DEFS
+ECHO_C
+ECHO_N
+ECHO_T
+LIBS
+build_alias
+host_alias
+target_alias
+INSTALL_PROGRAM
+INSTALL_SCRIPT
+INSTALL_DATA
+am__isrc
+CYGPATH_W
+PACKAGE
+VERSION
+ACLOCAL
+AUTOCONF
+AUTOMAKE
+AUTOHEADER
+MAKEINFO
+install_sh
+STRIP
+INSTALL_STRIP_PROGRAM
+mkdir_p
+AWK
+SET_MAKE
+am__leading_dot
+AMTAR
+am__tar
+am__untar
+build
+build_cpu
+build_vendor
+build_os
+host
+host_cpu
+host_vendor
+host_os
+COIN_ARCH
+USE_NLS
+GETTEXT_MACRO_VERSION
+MSGFMT
+GMSGFMT
+MSGFMT_015
+GMSGFMT_015
+XGETTEXT
+XGETTEXT_015
+MSGMERGE
+XGETTEXT_EXTRA_OPTIONS
+CC
+CFLAGS
+LDFLAGS
+CPPFLAGS
+ac_ct_CC
+EXEEXT
+OBJEXT
+DEPDIR
+am__include
+am__quote
+AMDEP_TRUE
+AMDEP_FALSE
+AMDEPBACKSLASH
+CCDEPMODE
+am__fastdepCC_TRUE
+am__fastdepCC_FALSE
+CPP
+GREP
+EGREP
+GLIBC2
+RANLIB
+CFLAG_VISIBILITY
+HAVE_VISIBILITY
+ALLOCA
+PRI_MACROS_BROKEN
+LIBPTH
+LTLIBPTH
+LIBPTH_PREFIX
+LIBTHREAD
+LTLIBTHREAD
+LIBMULTITHREAD
+LTLIBMULTITHREAD
+LIBICONV
+LTLIBICONV
+INTLBISON
+GLIBC21
+INTL_MACOSX_LIBS
+HAVE_POSIX_PRINTF
+HAVE_ASPRINTF
+HAVE_SNPRINTF
+HAVE_WPRINTF
+WOE32DLL
+WOE32
+WINDRES
+LTLIBC
+BUILD_INCLUDED_LIBINTL
+USE_INCLUDED_LIBINTL
+CATOBJEXT
+DATADIRNAME
+INSTOBJEXT
+GENCAT
+INTLOBJS
+INTL_LIBTOOL_SUFFIX_PREFIX
+INTLLIBS
+LIBINTL
+LTLIBINTL
+POSUB
+XMKMF
+X_CFLAGS
+X_PRE_LIBS
+X_LIBS
+X_EXTRA_LIBS
+PKG_CONFIG
+XFT_CFLAGS
+XFT_LIBS
+PACKAGE_CFLAGS
+PACKAGE_LIBS
+GTK_CFLAGS
+GTK_LIBS
+WMCCC
+IMLIB2_CONFIG_IN_PATH
+WMCOINCOIN_PLAYER
+LIBOBJS
+LTLIBOBJS'
+ac_subst_files=''
+      ac_precious_vars='build_alias
+host_alias
+target_alias
+CC
+CFLAGS
+LDFLAGS
+LIBS
+CPPFLAGS
+CPP
+XMKMF
+PKG_CONFIG
+XFT_CFLAGS
+XFT_LIBS
+PACKAGE_CFLAGS
+PACKAGE_LIBS'
+
+
+# Initialize some variables set by options.
+ac_init_help=
+ac_init_version=false
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+cache_file=/dev/null
+exec_prefix=NONE
+no_create=
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+verbose=
+x_includes=NONE
+x_libraries=NONE
+
+# Installation directory options.
+# These are left unexpanded so users can "make install exec_prefix=/foo"
+# and all the variables that are supposed to be based on exec_prefix
+# by default will actually change.
+# Use braces instead of parens because sh, perl, etc. also accept them.
+# (The list follows the same order as the GNU Coding Standards.)
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datarootdir='${prefix}/share'
+datadir='${datarootdir}'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
+infodir='${datarootdir}/info'
+htmldir='${docdir}'
+dvidir='${docdir}'
+pdfdir='${docdir}'
+psdir='${docdir}'
+libdir='${exec_prefix}/lib'
+localedir='${datarootdir}/locale'
+mandir='${datarootdir}/man'
+
+ac_prev=
+ac_dashdash=
+for ac_option
+do
+  # If the previous option needs an argument, assign it.
+  if test -n "$ac_prev"; then
+    eval $ac_prev=\$ac_option
+    ac_prev=
+    continue
+  fi
+
+  case $ac_option in
+  *=*)	ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
+  *)	ac_optarg=yes ;;
+  esac
+
+  # Accept the important Cygnus configure options, so we can diagnose typos.
+
+  case $ac_dashdash$ac_option in
+  --)
+    ac_dashdash=yes ;;
+
+  -bindir | --bindir | --bindi | --bind | --bin | --bi)
+    ac_prev=bindir ;;
+  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+    bindir=$ac_optarg ;;
+
+  -build | --build | --buil | --bui | --bu)
+    ac_prev=build_alias ;;
+  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+    build_alias=$ac_optarg ;;
+
+  -cache-file | --cache-file | --cache-fil | --cache-fi \
+  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+    ac_prev=cache_file ;;
+  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+    cache_file=$ac_optarg ;;
+
+  --config-cache | -C)
+    cache_file=config.cache ;;
+
+  -datadir | --datadir | --datadi | --datad)
+    ac_prev=datadir ;;
+  -datadir=* | --datadir=* | --datadi=* | --datad=*)
+    datadir=$ac_optarg ;;
+
+  -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
+  | --dataroo | --dataro | --datar)
+    ac_prev=datarootdir ;;
+  -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
+  | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
+    datarootdir=$ac_optarg ;;
+
+  -disable-* | --disable-*)
+    ac_feature=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+   { (exit 1); exit 1; }; }
+    ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'`
+    eval enable_$ac_feature=no ;;
+
+  -docdir | --docdir | --docdi | --doc | --do)
+    ac_prev=docdir ;;
+  -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
+    docdir=$ac_optarg ;;
+
+  -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
+    ac_prev=dvidir ;;
+  -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
+    dvidir=$ac_optarg ;;
+
+  -enable-* | --enable-*)
+    ac_feature=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_feature" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid feature name: $ac_feature" >&2
+   { (exit 1); exit 1; }; }
+    ac_feature=`echo $ac_feature | sed 's/[-.]/_/g'`
+    eval enable_$ac_feature=\$ac_optarg ;;
+
+  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+  | --exec | --exe | --ex)
+    ac_prev=exec_prefix ;;
+  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+  | --exec=* | --exe=* | --ex=*)
+    exec_prefix=$ac_optarg ;;
+
+  -gas | --gas | --ga | --g)
+    # Obsolete; use --with-gas.
+    with_gas=yes ;;
+
+  -help | --help | --hel | --he | -h)
+    ac_init_help=long ;;
+  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
+    ac_init_help=recursive ;;
+  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
+    ac_init_help=short ;;
+
+  -host | --host | --hos | --ho)
+    ac_prev=host_alias ;;
+  -host=* | --host=* | --hos=* | --ho=*)
+    host_alias=$ac_optarg ;;
+
+  -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
+    ac_prev=htmldir ;;
+  -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
+  | --ht=*)
+    htmldir=$ac_optarg ;;
+
+  -includedir | --includedir | --includedi | --included | --include \
+  | --includ | --inclu | --incl | --inc)
+    ac_prev=includedir ;;
+  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+  | --includ=* | --inclu=* | --incl=* | --inc=*)
+    includedir=$ac_optarg ;;
+
+  -infodir | --infodir | --infodi | --infod | --info | --inf)
+    ac_prev=infodir ;;
+  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+    infodir=$ac_optarg ;;
+
+  -libdir | --libdir | --libdi | --libd)
+    ac_prev=libdir ;;
+  -libdir=* | --libdir=* | --libdi=* | --libd=*)
+    libdir=$ac_optarg ;;
+
+  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+  | --libexe | --libex | --libe)
+    ac_prev=libexecdir ;;
+  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+  | --libexe=* | --libex=* | --libe=*)
+    libexecdir=$ac_optarg ;;
+
+  -localedir | --localedir | --localedi | --localed | --locale)
+    ac_prev=localedir ;;
+  -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
+    localedir=$ac_optarg ;;
+
+  -localstatedir | --localstatedir | --localstatedi | --localstated \
+  | --localstate | --localstat | --localsta | --localst | --locals)
+    ac_prev=localstatedir ;;
+  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+  | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
+    localstatedir=$ac_optarg ;;
+
+  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+    ac_prev=mandir ;;
+  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+    mandir=$ac_optarg ;;
+
+  -nfp | --nfp | --nf)
+    # Obsolete; use --without-fp.
+    with_fp=no ;;
+
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c | -n)
+    no_create=yes ;;
+
+  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+    no_recursion=yes ;;
+
+  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+  | --oldin | --oldi | --old | --ol | --o)
+    ac_prev=oldincludedir ;;
+  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+    oldincludedir=$ac_optarg ;;
+
+  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+    ac_prev=prefix ;;
+  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+    prefix=$ac_optarg ;;
+
+  -program-prefix | --program-prefix | --program-prefi | --program-pref \
+  | --program-pre | --program-pr | --program-p)
+    ac_prev=program_prefix ;;
+  -program-prefix=* | --program-prefix=* | --program-prefi=* \
+  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+    program_prefix=$ac_optarg ;;
+
+  -program-suffix | --program-suffix | --program-suffi | --program-suff \
+  | --program-suf | --program-su | --program-s)
+    ac_prev=program_suffix ;;
+  -program-suffix=* | --program-suffix=* | --program-suffi=* \
+  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+    program_suffix=$ac_optarg ;;
+
+  -program-transform-name | --program-transform-name \
+  | --program-transform-nam | --program-transform-na \
+  | --program-transform-n | --program-transform- \
+  | --program-transform | --program-transfor \
+  | --program-transfo | --program-transf \
+  | --program-trans | --program-tran \
+  | --progr-tra | --program-tr | --program-t)
+    ac_prev=program_transform_name ;;
+  -program-transform-name=* | --program-transform-name=* \
+  | --program-transform-nam=* | --program-transform-na=* \
+  | --program-transform-n=* | --program-transform-=* \
+  | --program-transform=* | --program-transfor=* \
+  | --program-transfo=* | --program-transf=* \
+  | --program-trans=* | --program-tran=* \
+  | --progr-tra=* | --program-tr=* | --program-t=*)
+    program_transform_name=$ac_optarg ;;
+
+  -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
+    ac_prev=pdfdir ;;
+  -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
+    pdfdir=$ac_optarg ;;
+
+  -psdir | --psdir | --psdi | --psd | --ps)
+    ac_prev=psdir ;;
+  -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
+    psdir=$ac_optarg ;;
+
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil)
+    silent=yes ;;
+
+  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+    ac_prev=sbindir ;;
+  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+  | --sbi=* | --sb=*)
+    sbindir=$ac_optarg ;;
+
+  -sharedstatedir | --sharedstatedir | --sharedstatedi \
+  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+  | --sharedst | --shareds | --shared | --share | --shar \
+  | --sha | --sh)
+    ac_prev=sharedstatedir ;;
+  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+  | --sha=* | --sh=*)
+    sharedstatedir=$ac_optarg ;;
+
+  -site | --site | --sit)
+    ac_prev=site ;;
+  -site=* | --site=* | --sit=*)
+    site=$ac_optarg ;;
+
+  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+    ac_prev=srcdir ;;
+  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+    srcdir=$ac_optarg ;;
+
+  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+  | --syscon | --sysco | --sysc | --sys | --sy)
+    ac_prev=sysconfdir ;;
+  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+    sysconfdir=$ac_optarg ;;
+
+  -target | --target | --targe | --targ | --tar | --ta | --t)
+    ac_prev=target_alias ;;
+  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+    target_alias=$ac_optarg ;;
+
+  -v | -verbose | --verbose | --verbos | --verbo | --verb)
+    verbose=yes ;;
+
+  -version | --version | --versio | --versi | --vers | -V)
+    ac_init_version=: ;;
+
+  -with-* | --with-*)
+    ac_package=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid package name: $ac_package" >&2
+   { (exit 1); exit 1; }; }
+    ac_package=`echo $ac_package | sed 's/[-.]/_/g'`
+    eval with_$ac_package=\$ac_optarg ;;
+
+  -without-* | --without-*)
+    ac_package=`expr "x$ac_option" : 'x-*without-\(.*\)'`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_package" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid package name: $ac_package" >&2
+   { (exit 1); exit 1; }; }
+    ac_package=`echo $ac_package | sed 's/[-.]/_/g'`
+    eval with_$ac_package=no ;;
+
+  --x)
+    # Obsolete; use --with-x.
+    with_x=yes ;;
+
+  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+  | --x-incl | --x-inc | --x-in | --x-i)
+    ac_prev=x_includes ;;
+  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+    x_includes=$ac_optarg ;;
+
+  -x-libraries | --x-libraries | --x-librarie | --x-librari \
+  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+    ac_prev=x_libraries ;;
+  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+    x_libraries=$ac_optarg ;;
+
+  -*) { echo "$as_me: error: unrecognized option: $ac_option
+Try \`$0 --help' for more information." >&2
+   { (exit 1); exit 1; }; }
+    ;;
+
+  *=*)
+    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
+    # Reject names that are not valid shell variable names.
+    expr "x$ac_envvar" : ".*[^_$as_cr_alnum]" >/dev/null &&
+      { echo "$as_me: error: invalid variable name: $ac_envvar" >&2
+   { (exit 1); exit 1; }; }
+    eval $ac_envvar=\$ac_optarg
+    export $ac_envvar ;;
+
+  *)
+    # FIXME: should be removed in autoconf 3.0.
+    echo "$as_me: WARNING: you should use --build, --host, --target" >&2
+    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
+      echo "$as_me: WARNING: invalid host type: $ac_option" >&2
+    : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
+    ;;
+
+  esac
+done
+
+if test -n "$ac_prev"; then
+  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
+  { echo "$as_me: error: missing argument to $ac_option" >&2
+   { (exit 1); exit 1; }; }
+fi
+
+# Be sure to have absolute directory names.
+for ac_var in	exec_prefix prefix bindir sbindir libexecdir datarootdir \
+		datadir sysconfdir sharedstatedir localstatedir includedir \
+		oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
+		libdir localedir mandir
+do
+  eval ac_val=\$$ac_var
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* )  continue;;
+    NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
+  esac
+  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+   { (exit 1); exit 1; }; }
+done
+
+# There might be people who depend on the old broken behavior: `$host'
+# used to hold the argument of --host etc.
+# FIXME: To remove some day.
+build=$build_alias
+host=$host_alias
+target=$target_alias
+
+# FIXME: To remove some day.
+if test "x$host_alias" != x; then
+  if test "x$build_alias" = x; then
+    cross_compiling=maybe
+    echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
+    If a cross compiler is detected then cross compile mode will be used." >&2
+  elif test "x$build_alias" != "x$host_alias"; then
+    cross_compiling=yes
+  fi
+fi
+
+ac_tool_prefix=
+test -n "$host_alias" && ac_tool_prefix=$host_alias-
+
+test "$silent" = yes && exec 6>/dev/null
+
+
+ac_pwd=`pwd` && test -n "$ac_pwd" &&
+ac_ls_di=`ls -di .` &&
+ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
+  { echo "$as_me: error: Working directory cannot be determined" >&2
+   { (exit 1); exit 1; }; }
+test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
+  { echo "$as_me: error: pwd does not report name of working directory" >&2
+   { (exit 1); exit 1; }; }
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+  ac_srcdir_defaulted=yes
+  # Try the directory containing this script, then the parent directory.
+  ac_confdir=`$as_dirname -- "$0" ||
+$as_expr X"$0" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$0" : 'X\(//\)[^/]' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+echo X"$0" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+  srcdir=$ac_confdir
+  if test ! -r "$srcdir/$ac_unique_file"; then
+    srcdir=..
+  fi
+else
+  ac_srcdir_defaulted=no
+fi
+if test ! -r "$srcdir/$ac_unique_file"; then
+  test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
+  { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+   { (exit 1); exit 1; }; }
+fi
+ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
+ac_abs_confdir=`(
+	cd "$srcdir" && test -r "./$ac_unique_file" || { echo "$as_me: error: $ac_msg" >&2
+   { (exit 1); exit 1; }; }
+	pwd)`
+# When building in place, set srcdir=.
+if test "$ac_abs_confdir" = "$ac_pwd"; then
+  srcdir=.
+fi
+# Remove unnecessary trailing slashes from srcdir.
+# Double slashes in file names in object file debugging info
+# mess up M-x gdb in Emacs.
+case $srcdir in
+*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
+esac
+for ac_var in $ac_precious_vars; do
+  eval ac_env_${ac_var}_set=\${${ac_var}+set}
+  eval ac_env_${ac_var}_value=\$${ac_var}
+  eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
+  eval ac_cv_env_${ac_var}_value=\$${ac_var}
+done
+
+#
+# Report the --help message.
+#
+if test "$ac_init_help" = "long"; then
+  # Omit some internal or obsolete options to make the list less imposing.
+  # This message is too long to be a string in the A/UX 3.1 sh.
+  cat <<_ACEOF
+\`configure' configures wmcoincoin 2.6.1 to adapt to many kinds of systems.
+
+Usage: $0 [OPTION]... [VAR=VALUE]...
+
+To assign environment variables (e.g., CC, CFLAGS...), specify them as
+VAR=VALUE.  See below for descriptions of some of the useful variables.
+
+Defaults for the options are specified in brackets.
+
+Configuration:
+  -h, --help              display this help and exit
+      --help=short        display options specific to this package
+      --help=recursive    display the short help of all the included packages
+  -V, --version           display version information and exit
+  -q, --quiet, --silent   do not print \`checking...' messages
+      --cache-file=FILE   cache test results in FILE [disabled]
+  -C, --config-cache      alias for \`--cache-file=config.cache'
+  -n, --no-create         do not create output files
+      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
+
+Installation directories:
+  --prefix=PREFIX         install architecture-independent files in PREFIX
+			  [$ac_default_prefix]
+  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
+			  [PREFIX]
+
+By default, \`make install' will install all the files in
+\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
+an installation prefix other than \`$ac_default_prefix' using \`--prefix',
+for instance \`--prefix=\$HOME'.
+
+For better control, use the options below.
+
+Fine tuning of the installation directories:
+  --bindir=DIR           user executables [EPREFIX/bin]
+  --sbindir=DIR          system admin executables [EPREFIX/sbin]
+  --libexecdir=DIR       program executables [EPREFIX/libexec]
+  --sysconfdir=DIR       read-only single-machine data [PREFIX/etc]
+  --sharedstatedir=DIR   modifiable architecture-independent data [PREFIX/com]
+  --localstatedir=DIR    modifiable single-machine data [PREFIX/var]
+  --libdir=DIR           object code libraries [EPREFIX/lib]
+  --includedir=DIR       C header files [PREFIX/include]
+  --oldincludedir=DIR    C header files for non-gcc [/usr/include]
+  --datarootdir=DIR      read-only arch.-independent data root [PREFIX/share]
+  --datadir=DIR          read-only architecture-independent data [DATAROOTDIR]
+  --infodir=DIR          info documentation [DATAROOTDIR/info]
+  --localedir=DIR        locale-dependent data [DATAROOTDIR/locale]
+  --mandir=DIR           man documentation [DATAROOTDIR/man]
+  --docdir=DIR           documentation root [DATAROOTDIR/doc/wmcoincoin]
+  --htmldir=DIR          html documentation [DOCDIR]
+  --dvidir=DIR           dvi documentation [DOCDIR]
+  --pdfdir=DIR           pdf documentation [DOCDIR]
+  --psdir=DIR            ps documentation [DOCDIR]
+_ACEOF
+
+  cat <<\_ACEOF
+
+Program names:
+  --program-prefix=PREFIX            prepend PREFIX to installed program names
+  --program-suffix=SUFFIX            append SUFFIX to installed program names
+  --program-transform-name=PROGRAM   run sed PROGRAM on installed program names
+
+X features:
+  --x-includes=DIR    X include files are in DIR
+  --x-libraries=DIR   X library files are in DIR
+
+System types:
+  --build=BUILD     configure for building on BUILD [guessed]
+  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
+_ACEOF
+fi
+
+if test -n "$ac_init_help"; then
+  case $ac_init_help in
+     short | recursive ) echo "Configuration of wmcoincoin 2.6.1:";;
+   esac
+  cat <<\_ACEOF
+
+Optional Features:
+  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --disable-nls           do not use Native Language Support
+  --disable-dependency-tracking  speeds up one-time build
+  --enable-dependency-tracking   do not reject slow dependency extractors
+  --enable-threads={posix|solaris|pth|win32}
+                          specify multithreading API
+  --disable-threads       build without multithread safety
+  --disable-rpath         do not hardcode runtime library paths
+  --disable-xinerama	  disable XInerama extension support
+  --enable-wmccc        Builds the wmccc (requires gtk2), the graphical wmcoincoin configuration tool (Default is yes)
+  --disable-wmccc         Do not build wmccc
+  --enable-wmcoincoin_player Builds the wmcoincoin_player (requires imlib2) (viewer for totoz.eu pictures)
+  --disable-wmcoincoin_player  Do not build wmcoincoin_player
+
+Optional Packages:
+  --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+  --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+  --with-gnu-ld           assume the C compiler uses GNU ld default=no
+  --with-libpth-prefix[=DIR]  search for libpth in DIR/include and DIR/lib
+  --without-libpth-prefix     don't search for libpth in includedir and libdir
+  --with-libiconv-prefix[=DIR]  search for libiconv in DIR/include and DIR/lib
+  --without-libiconv-prefix     don't search for libiconv in includedir and libdir
+  --with-included-gettext use the GNU gettext library included here
+  --with-libintl-prefix[=DIR]  search for libintl in DIR/include and DIR/lib
+  --without-libintl-prefix     don't search for libintl in includedir and libdir
+  --with-x                use the X Window System
+
+Some influential environment variables:
+  CC          C compiler command
+  CFLAGS      C compiler flags
+  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
+              nonstandard directory <lib dir>
+  LIBS        libraries to pass to the linker, e.g. -l<library>
+  CPPFLAGS    C/C++/Objective C preprocessor flags, e.g. -I<include dir> if
+              you have headers in a nonstandard directory <include dir>
+  CPP         C preprocessor
+  XMKMF       Path to xmkmf, Makefile generator for X Window System
+  PKG_CONFIG  path to pkg-config utility
+  XFT_CFLAGS  C compiler flags for XFT, overriding pkg-config
+  XFT_LIBS    linker flags for XFT, overriding pkg-config
+  PACKAGE_CFLAGS
+              C compiler flags for PACKAGE, overriding pkg-config
+  PACKAGE_LIBS
+              linker flags for PACKAGE, overriding pkg-config
+
+Use these variables to override the choices made by `configure' or to help
+it to find libraries and programs with nonstandard names/locations.
+
+Report bugs to <triton at kumal.info>.
+_ACEOF
+ac_status=$?
+fi
+
+if test "$ac_init_help" = "recursive"; then
+  # If there are subdirs, report their specific --help.
+  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+    test -d "$ac_dir" || continue
+    ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+  .)  # We are building in place.
+    ac_srcdir=.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+    cd "$ac_dir" || { ac_status=$?; continue; }
+    # Check for guested configure.
+    if test -f "$ac_srcdir/configure.gnu"; then
+      echo &&
+      $SHELL "$ac_srcdir/configure.gnu" --help=recursive
+    elif test -f "$ac_srcdir/configure"; then
+      echo &&
+      $SHELL "$ac_srcdir/configure" --help=recursive
+    else
+      echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+    fi || ac_status=$?
+    cd "$ac_pwd" || { ac_status=$?; break; }
+  done
+fi
+
+test -n "$ac_init_help" && exit $ac_status
+if $ac_init_version; then
+  cat <<\_ACEOF
+wmcoincoin configure 2.6.1
+generated by GNU Autoconf 2.61
+
+Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
+2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+This configure script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it.
+_ACEOF
+  exit
+fi
+cat >config.log <<_ACEOF
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by wmcoincoin $as_me 2.6.1, which was
+generated by GNU Autoconf 2.61.  Invocation command line was
+
+  $ $0 $@
+
+_ACEOF
+exec 5>>config.log
+{
+cat <<_ASUNAME
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
+
+/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
+/usr/bin/hostinfo      = `(/usr/bin/hostinfo) 2>/dev/null      || echo unknown`
+/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
+/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
+
+_ASUNAME
+
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  echo "PATH: $as_dir"
+done
+IFS=$as_save_IFS
+
+} >&5
+
+cat >&5 <<_ACEOF
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+_ACEOF
+
+
+# Keep a trace of the command line.
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Strip out --silent because we don't want to record it for future runs.
+# Also quote any args containing shell meta-characters.
+# Make two passes to allow for proper duplicate-argument suppression.
+ac_configure_args=
+ac_configure_args0=
+ac_configure_args1=
+ac_must_keep_next=false
+for ac_pass in 1 2
+do
+  for ac_arg
+  do
+    case $ac_arg in
+    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
+    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+    | -silent | --silent | --silen | --sile | --sil)
+      continue ;;
+    *\'*)
+      ac_arg=`echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
+    esac
+    case $ac_pass in
+    1) ac_configure_args0="$ac_configure_args0 '$ac_arg'" ;;
+    2)
+      ac_configure_args1="$ac_configure_args1 '$ac_arg'"
+      if test $ac_must_keep_next = true; then
+	ac_must_keep_next=false # Got value, back to normal.
+      else
+	case $ac_arg in
+	  *=* | --config-cache | -C | -disable-* | --disable-* \
+	  | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
+	  | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
+	  | -with-* | --with-* | -without-* | --without-* | --x)
+	    case "$ac_configure_args0 " in
+	      "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
+	    esac
+	    ;;
+	  -* ) ac_must_keep_next=true ;;
+	esac
+      fi
+      ac_configure_args="$ac_configure_args '$ac_arg'"
+      ;;
+    esac
+  done
+done
+$as_unset ac_configure_args0 || test "${ac_configure_args0+set}" != set || { ac_configure_args0=; export ac_configure_args0; }
+$as_unset ac_configure_args1 || test "${ac_configure_args1+set}" != set || { ac_configure_args1=; export ac_configure_args1; }
+
+# When interrupted or exit'd, cleanup temporary files, and complete
+# config.log.  We remove comments because anyway the quotes in there
+# would cause problems or look ugly.
+# WARNING: Use '\'' to represent an apostrophe within the trap.
+# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
+trap 'exit_status=$?
+  # Save into config.log some information that might help in debugging.
+  {
+    echo
+
+    cat <<\_ASBOX
+## ---------------- ##
+## Cache variables. ##
+## ---------------- ##
+_ASBOX
+    echo
+    # The following way of writing the cache mishandles newlines in values,
+(
+  for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
+    eval ac_val=\$$ac_var
+    case $ac_val in #(
+    *${as_nl}*)
+      case $ac_var in #(
+      *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
+echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      *) $as_unset $ac_var ;;
+      esac ;;
+    esac
+  done
+  (set) 2>&1 |
+    case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
+    *${as_nl}ac_space=\ *)
+      sed -n \
+	"s/'\''/'\''\\\\'\'''\''/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
+      ;; #(
+    *)
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+)
+    echo
+
+    cat <<\_ASBOX
+## ----------------- ##
+## Output variables. ##
+## ----------------- ##
+_ASBOX
+    echo
+    for ac_var in $ac_subst_vars
+    do
+      eval ac_val=\$$ac_var
+      case $ac_val in
+      *\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+      esac
+      echo "$ac_var='\''$ac_val'\''"
+    done | sort
+    echo
+
+    if test -n "$ac_subst_files"; then
+      cat <<\_ASBOX
+## ------------------- ##
+## File substitutions. ##
+## ------------------- ##
+_ASBOX
+      echo
+      for ac_var in $ac_subst_files
+      do
+	eval ac_val=\$$ac_var
+	case $ac_val in
+	*\'\''*) ac_val=`echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
+	esac
+	echo "$ac_var='\''$ac_val'\''"
+      done | sort
+      echo
+    fi
+
+    if test -s confdefs.h; then
+      cat <<\_ASBOX
+## ----------- ##
+## confdefs.h. ##
+## ----------- ##
+_ASBOX
+      echo
+      cat confdefs.h
+      echo
+    fi
+    test "$ac_signal" != 0 &&
+      echo "$as_me: caught signal $ac_signal"
+    echo "$as_me: exit $exit_status"
+  } >&5
+  rm -f core *.core core.conftest.* &&
+    rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
+    exit $exit_status
+' 0
+for ac_signal in 1 2 13 15; do
+  trap 'ac_signal='$ac_signal'; { (exit 1); exit 1; }' $ac_signal
+done
+ac_signal=0
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -f -r conftest* confdefs.h
+
+# Predefined preprocessor variables.
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_NAME "$PACKAGE_NAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_VERSION "$PACKAGE_VERSION"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_STRING "$PACKAGE_STRING"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
+_ACEOF
+
+
+# Let the site file select an alternate cache file if it wants to.
+# Prefer explicitly selected file to automatically selected ones.
+if test -n "$CONFIG_SITE"; then
+  set x "$CONFIG_SITE"
+elif test "x$prefix" != xNONE; then
+  set x "$prefix/share/config.site" "$prefix/etc/config.site"
+else
+  set x "$ac_default_prefix/share/config.site" \
+	"$ac_default_prefix/etc/config.site"
+fi
+shift
+for ac_site_file
+do
+  if test -r "$ac_site_file"; then
+    { echo "$as_me:$LINENO: loading site script $ac_site_file" >&5
+echo "$as_me: loading site script $ac_site_file" >&6;}
+    sed 's/^/| /' "$ac_site_file" >&5
+    . "$ac_site_file"
+  fi
+done
+
+if test -r "$cache_file"; then
+  # Some versions of bash will fail to source /dev/null (special
+  # files actually), so we avoid doing that.
+  if test -f "$cache_file"; then
+    { echo "$as_me:$LINENO: loading cache $cache_file" >&5
+echo "$as_me: loading cache $cache_file" >&6;}
+    case $cache_file in
+      [\\/]* | ?:[\\/]* ) . "$cache_file";;
+      *)                      . "./$cache_file";;
+    esac
+  fi
+else
+  { echo "$as_me:$LINENO: creating cache $cache_file" >&5
+echo "$as_me: creating cache $cache_file" >&6;}
+  >$cache_file
+fi
+
+gt_needs="$gt_needs "
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in $ac_precious_vars; do
+  eval ac_old_set=\$ac_cv_env_${ac_var}_set
+  eval ac_new_set=\$ac_env_${ac_var}_set
+  eval ac_old_val=\$ac_cv_env_${ac_var}_value
+  eval ac_new_val=\$ac_env_${ac_var}_value
+  case $ac_old_set,$ac_new_set in
+    set,)
+      { echo "$as_me:$LINENO: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,set)
+      { echo "$as_me:$LINENO: error: \`$ac_var' was not set in the previous run" >&5
+echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
+      ac_cache_corrupted=: ;;
+    ,);;
+    *)
+      if test "x$ac_old_val" != "x$ac_new_val"; then
+	{ echo "$as_me:$LINENO: error: \`$ac_var' has changed since the previous run:" >&5
+echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
+	{ echo "$as_me:$LINENO:   former value:  $ac_old_val" >&5
+echo "$as_me:   former value:  $ac_old_val" >&2;}
+	{ echo "$as_me:$LINENO:   current value: $ac_new_val" >&5
+echo "$as_me:   current value: $ac_new_val" >&2;}
+	ac_cache_corrupted=:
+      fi;;
+  esac
+  # Pass precious variables to config.status.
+  if test "$ac_new_set" = set; then
+    case $ac_new_val in
+    *\'*) ac_arg=$ac_var=`echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
+    *) ac_arg=$ac_var=$ac_new_val ;;
+    esac
+    case " $ac_configure_args " in
+      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
+      *) ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+    esac
+  fi
+done
+if $ac_cache_corrupted; then
+  { echo "$as_me:$LINENO: error: changes in the environment can compromise the build" >&5
+echo "$as_me: error: changes in the environment can compromise the build" >&2;}
+  { { echo "$as_me:$LINENO: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&5
+echo "$as_me: error: run \`make distclean' and/or \`rm $cache_file' and start over" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
+
+am__api_version='1.10'
+
+ac_aux_dir=
+for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
+  if test -f "$ac_dir/install-sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install-sh -c"
+    break
+  elif test -f "$ac_dir/install.sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  elif test -f "$ac_dir/shtool"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/shtool install -c"
+    break
+  fi
+done
+if test -z "$ac_aux_dir"; then
+  { { echo "$as_me:$LINENO: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&5
+echo "$as_me: error: cannot find install-sh or install.sh in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"  # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"  # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
+
+
+# Find a good install program.  We prefer a C program (faster),
+# so one script is as good as another.  But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+{ echo "$as_me:$LINENO: checking for a BSD-compatible install" >&5
+echo $ECHO_N "checking for a BSD-compatible install... $ECHO_C" >&6; }
+if test -z "$INSTALL"; then
+if test "${ac_cv_path_install+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in
+  ./ | .// | /cC/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:\\/os2\\/install\\/* | ?:\\/OS2\\/INSTALL\\/* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+	if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
+	  if test $ac_prog = install &&
+	    grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # AIX install.  It has an incompatible calling convention.
+	    :
+	  elif test $ac_prog = install &&
+	    grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+	    # program-specific install script used by HP pwplus--don't use.
+	    :
+	  else
+	    ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+	    break 3
+	  fi
+	fi
+      done
+    done
+    ;;
+esac
+done
+IFS=$as_save_IFS
+
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
+fi
+{ echo "$as_me:$LINENO: result: $INSTALL" >&5
+echo "${ECHO_T}$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+{ echo "$as_me:$LINENO: checking whether build environment is sane" >&5
+echo $ECHO_N "checking whether build environment is sane... $ECHO_C" >&6; }
+# Just in case
+sleep 1
+echo timestamp > conftest.file
+# Do `set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
+   if test "$*" = "X"; then
+      # -L didn't work.
+      set X `ls -t $srcdir/configure conftest.file`
+   fi
+   rm -f conftest.file
+   if test "$*" != "X $srcdir/configure conftest.file" \
+      && test "$*" != "X conftest.file $srcdir/configure"; then
+
+      # If neither matched, then we have a broken ls.  This can happen
+      # if, for instance, CONFIG_SHELL is bash and it inherits a
+      # broken ls alias from the environment.  This has actually
+      # happened.  Such a system could not be considered "sane".
+      { { echo "$as_me:$LINENO: error: ls -t appears to fail.  Make sure there is not a broken
+alias in your environment" >&5
+echo "$as_me: error: ls -t appears to fail.  Make sure there is not a broken
+alias in your environment" >&2;}
+   { (exit 1); exit 1; }; }
+   fi
+
+   test "$2" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   { { echo "$as_me:$LINENO: error: newly created file is older than distributed files!
+Check your system clock" >&5
+echo "$as_me: error: newly created file is older than distributed files!
+Check your system clock" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+{ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+test "$program_prefix" != NONE &&
+  program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.  echo might interpret backslashes.
+# By default was `s,x,x', remove it if useless.
+cat <<\_ACEOF >conftest.sed
+s/[\\$]/&&/g;s/;s,x,x,$//
+_ACEOF
+program_transform_name=`echo $program_transform_name | sed -f conftest.sed`
+rm -f conftest.sed
+
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+
+test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
+# Use eval to expand $SHELL
+if eval "$MISSING --run true"; then
+  am_missing_run="$MISSING --run "
+else
+  am_missing_run=
+  { echo "$as_me:$LINENO: WARNING: \`missing' script is too old or missing" >&5
+echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
+fi
+
+{ echo "$as_me:$LINENO: checking for a thread-safe mkdir -p" >&5
+echo $ECHO_N "checking for a thread-safe mkdir -p... $ECHO_C" >&6; }
+if test -z "$MKDIR_P"; then
+  if test "${ac_cv_path_mkdir+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_prog in mkdir gmkdir; do
+	 for ac_exec_ext in '' $ac_executable_extensions; do
+	   { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue
+	   case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
+	     'mkdir (GNU coreutils) '* | \
+	     'mkdir (coreutils) '* | \
+	     'mkdir (fileutils) '4.1*)
+	       ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
+	       break 3;;
+	   esac
+	 done
+       done
+done
+IFS=$as_save_IFS
+
+fi
+
+  if test "${ac_cv_path_mkdir+set}" = set; then
+    MKDIR_P="$ac_cv_path_mkdir -p"
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for MKDIR_P within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    test -d ./--version && rmdir ./--version
+    MKDIR_P="$ac_install_sh -d"
+  fi
+fi
+{ echo "$as_me:$LINENO: result: $MKDIR_P" >&5
+echo "${ECHO_T}$MKDIR_P" >&6; }
+
+mkdir_p="$MKDIR_P"
+case $mkdir_p in
+  [\\/$]* | ?:[\\/]*) ;;
+  */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
+esac
+
+for ac_prog in gawk mawk nawk awk
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_AWK+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$AWK"; then
+  ac_cv_prog_AWK="$AWK" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_AWK="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+  { echo "$as_me:$LINENO: result: $AWK" >&5
+echo "${ECHO_T}$AWK" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+  test -n "$AWK" && break
+done
+
+{ echo "$as_me:$LINENO: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+echo $ECHO_N "checking whether ${MAKE-make} sets \$(MAKE)... $ECHO_C" >&6; }
+set x ${MAKE-make}; ac_make=`echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+	@echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+  *@@@%%%=?*=@@@%%%*)
+    eval ac_cv_prog_make_${ac_make}_set=yes;;
+  *)
+    eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+  { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+  SET_MAKE=
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+  SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+  # is not polluted with repeated "-I."
+  am__isrc=' -I$(srcdir)'
+  # test to see if srcdir already configured
+  if test -f $srcdir/config.status; then
+    { { echo "$as_me:$LINENO: error: source directory already configured; run \"make distclean\" there first" >&5
+echo "$as_me: error: source directory already configured; run \"make distclean\" there first" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+
+
+# Define the identity of the package.
+ PACKAGE='wmcoincoin'
+ VERSION='2.6.1'
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define VERSION "$VERSION"
+_ACEOF
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"}
+
+# Installed binaries are usually stripped using `strip' when the user
+# run `make install-strip'.  However `strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the `STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_STRIP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  { echo "$as_me:$LINENO: result: $STRIP" >&5
+echo "${ECHO_T}$STRIP" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_STRIP="strip"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_STRIP" >&5
+echo "${ECHO_T}$ac_ct_STRIP" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+  if test "x$ac_ct_STRIP" = x; then
+    STRIP=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf at gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf at gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    STRIP=$ac_ct_STRIP
+  fi
+else
+  STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+# Always define AMTAR for backward compatibility.
+
+AMTAR=${AMTAR-"${am_missing_run}tar"}
+
+am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
+
+
+
+
+
+ac_config_headers="$ac_config_headers config.h"
+
+
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+  { { echo "$as_me:$LINENO: error: cannot run $SHELL $ac_aux_dir/config.sub" >&5
+echo "$as_me: error: cannot run $SHELL $ac_aux_dir/config.sub" >&2;}
+   { (exit 1); exit 1; }; }
+
+{ echo "$as_me:$LINENO: checking build system type" >&5
+echo $ECHO_N "checking build system type... $ECHO_C" >&6; }
+if test "${ac_cv_build+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+  ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+test "x$ac_build_alias" = x &&
+  { { echo "$as_me:$LINENO: error: cannot guess build type; you must specify one" >&5
+echo "$as_me: error: cannot guess build type; you must specify one" >&2;}
+   { (exit 1); exit 1; }; }
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+  { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&5
+echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $ac_build_alias failed" >&2;}
+   { (exit 1); exit 1; }; }
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_build" >&5
+echo "${ECHO_T}$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) { { echo "$as_me:$LINENO: error: invalid value of canonical build" >&5
+echo "$as_me: error: invalid value of canonical build" >&2;}
+   { (exit 1); exit 1; }; };;
+esac
+build=$ac_cv_build
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
+
+
+{ echo "$as_me:$LINENO: checking host system type" >&5
+echo $ECHO_N "checking host system type... $ECHO_C" >&6; }
+if test "${ac_cv_host+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "x$host_alias" = x; then
+  ac_cv_host=$ac_cv_build
+else
+  ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+    { { echo "$as_me:$LINENO: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&5
+echo "$as_me: error: $SHELL $ac_aux_dir/config.sub $host_alias failed" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_host" >&5
+echo "${ECHO_T}$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) { { echo "$as_me:$LINENO: error: invalid value of canonical host" >&5
+echo "$as_me: error: invalid value of canonical host" >&2;}
+   { (exit 1); exit 1; }; };;
+esac
+host=$ac_cv_host
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
+
+
+COIN_ARCH="${host_cpu}-${host_vendor}-${host_os}"
+
+case $host_os in
+  *cygwin* ) CYGWIN=yes; EXEEXT=".exe";;
+         * ) CYGWIN=no; EXEEXT="";;
+esac
+
+ALL_LINGUAS="fr"
+
+  { echo "$as_me:$LINENO: checking whether NLS is requested" >&5
+echo $ECHO_N "checking whether NLS is requested... $ECHO_C" >&6; }
+    # Check whether --enable-nls was given.
+if test "${enable_nls+set}" = set; then
+  enableval=$enable_nls; USE_NLS=$enableval
+else
+  USE_NLS=yes
+fi
+
+  { echo "$as_me:$LINENO: result: $USE_NLS" >&5
+echo "${ECHO_T}$USE_NLS" >&6; }
+
+
+
+
+      GETTEXT_MACRO_VERSION=0.17
+
+
+
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+  ac_executable_p="test -x"
+else
+  ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "msgfmt", so it can be a program name with args.
+set dummy msgfmt; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_path_MSGFMT+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case "$MSGFMT" in
+  [\\/]* | ?:[\\/]*)
+    ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path.
+    ;;
+  *)
+    ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH; do
+      IFS="$ac_save_IFS"
+      test -z "$ac_dir" && ac_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+        if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+          echo "$as_me: trying $ac_dir/$ac_word..." >&5
+          if $ac_dir/$ac_word --statistics /dev/null >&5 2>&1 &&
+     (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+            ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exec_ext"
+            break 2
+          fi
+        fi
+      done
+    done
+    IFS="$ac_save_IFS"
+  test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":"
+    ;;
+esac
+fi
+MSGFMT="$ac_cv_path_MSGFMT"
+if test "$MSGFMT" != ":"; then
+  { echo "$as_me:$LINENO: result: $MSGFMT" >&5
+echo "${ECHO_T}$MSGFMT" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+  # Extract the first word of "gmsgfmt", so it can be a program name with args.
+set dummy gmsgfmt; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_path_GMSGFMT+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $GMSGFMT in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT"
+  ;;
+esac
+fi
+GMSGFMT=$ac_cv_path_GMSGFMT
+if test -n "$GMSGFMT"; then
+  { echo "$as_me:$LINENO: result: $GMSGFMT" >&5
+echo "${ECHO_T}$GMSGFMT" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+
+    case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+    '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;;
+    *) MSGFMT_015=$MSGFMT ;;
+  esac
+
+  case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+    '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;;
+    *) GMSGFMT_015=$GMSGFMT ;;
+  esac
+
+
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+  ac_executable_p="test -x"
+else
+  ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "xgettext", so it can be a program name with args.
+set dummy xgettext; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_path_XGETTEXT+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case "$XGETTEXT" in
+  [\\/]* | ?:[\\/]*)
+    ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path.
+    ;;
+  *)
+    ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH; do
+      IFS="$ac_save_IFS"
+      test -z "$ac_dir" && ac_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+        if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+          echo "$as_me: trying $ac_dir/$ac_word..." >&5
+          if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&5 2>&1 &&
+     (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+            ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext"
+            break 2
+          fi
+        fi
+      done
+    done
+    IFS="$ac_save_IFS"
+  test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":"
+    ;;
+esac
+fi
+XGETTEXT="$ac_cv_path_XGETTEXT"
+if test "$XGETTEXT" != ":"; then
+  { echo "$as_me:$LINENO: result: $XGETTEXT" >&5
+echo "${ECHO_T}$XGETTEXT" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+    rm -f messages.po
+
+    case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+    '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;;
+    *) XGETTEXT_015=$XGETTEXT ;;
+  esac
+
+
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+  ac_executable_p="test -x"
+else
+  ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "msgmerge", so it can be a program name with args.
+set dummy msgmerge; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_path_MSGMERGE+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case "$MSGMERGE" in
+  [\\/]* | ?:[\\/]*)
+    ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path.
+    ;;
+  *)
+    ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in $PATH; do
+      IFS="$ac_save_IFS"
+      test -z "$ac_dir" && ac_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+        if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+          echo "$as_me: trying $ac_dir/$ac_word..." >&5
+          if $ac_dir/$ac_word --update -q /dev/null /dev/null >&5 2>&1; then
+            ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext"
+            break 2
+          fi
+        fi
+      done
+    done
+    IFS="$ac_save_IFS"
+  test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":"
+    ;;
+esac
+fi
+MSGMERGE="$ac_cv_path_MSGMERGE"
+if test "$MSGMERGE" != ":"; then
+  { echo "$as_me:$LINENO: result: $MSGMERGE" >&5
+echo "${ECHO_T}$MSGMERGE" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+        test -n "$localedir" || localedir='${datadir}/locale'
+
+
+    test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS=
+
+
+  ac_config_commands="$ac_config_commands po-directories"
+
+
+DEPDIR="${am__leading_dot}deps"
+
+ac_config_commands="$ac_config_commands depfiles"
+
+
+am_make=${MAKE-make}
+cat > confinc << 'END'
+am__doit:
+	@echo done
+.PHONY: am__doit
+END
+# If we don't find an include directive, just comment out the code.
+{ echo "$as_me:$LINENO: checking for style of include used by $am_make" >&5
+echo $ECHO_N "checking for style of include used by $am_make... $ECHO_C" >&6; }
+am__include="#"
+am__quote=
+_am_result=none
+# First try GNU make style include.
+echo "include confinc" > confmf
+# We grep out `Entering directory' and `Leaving directory'
+# messages which can occur if `w' ends up in MAKEFLAGS.
+# In particular we don't look at `^make:' because GNU make might
+# be invoked under some other name (usually "gmake"), in which
+# case it prints its new name instead of `make'.
+if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
+   am__include=include
+   am__quote=
+   _am_result=GNU
+fi
+# Now try BSD make style include.
+if test "$am__include" = "#"; then
+   echo '.include "confinc"' > confmf
+   if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
+      am__include=.include
+      am__quote="\""
+      _am_result=BSD
+   fi
+fi
+
+
+{ echo "$as_me:$LINENO: result: $_am_result" >&5
+echo "${ECHO_T}$_am_result" >&6; }
+rm -f confinc confmf
+
+# Check whether --enable-dependency-tracking was given.
+if test "${enable_dependency_tracking+set}" = set; then
+  enableval=$enable_dependency_tracking;
+fi
+
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+fi
+ if test "x$enable_dependency_tracking" != xno; then
+  AMDEP_TRUE=
+  AMDEP_FALSE='#'
+else
+  AMDEP_TRUE='#'
+  AMDEP_FALSE=
+fi
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="${ac_tool_prefix}gcc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CC="gcc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf at gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf at gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+          if test -n "$ac_tool_prefix"; then
+    # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="${ac_tool_prefix}cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+  fi
+fi
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+       ac_prog_rejected=yes
+       continue
+     fi
+    ac_cv_prog_CC="cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# != 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+  fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in cl.exe
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  for ac_prog in cl.exe
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CC="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CC" && break
+done
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf at gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf at gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+fi
+
+fi
+
+
+test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&5
+echo "$as_me: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+
+# Provide some information about the compiler.
+echo "$as_me:$LINENO: checking for C compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (ac_try="$ac_compiler --version >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler --version >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (ac_try="$ac_compiler -v >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler -v >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (ac_try="$ac_compiler -V >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler -V >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files a.out a.exe b.out"
+# Try to create an executable without -o first, disregard a.out.
+# It will help us diagnose broken compilers, and finding out an intuition
+# of exeext.
+{ echo "$as_me:$LINENO: checking for C compiler default output file name" >&5
+echo $ECHO_N "checking for C compiler default output file name... $ECHO_C" >&6; }
+ac_link_default=`echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
+#
+# List of possible output files, starting from the most likely.
+# The algorithm is not robust to junk in `.', hence go to wildcards (a.*)
+# only as a last resort.  b.out is created by i960 compilers.
+ac_files='a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out'
+#
+# The IRIX 6 linker writes into existing files which may not be
+# executable, retaining their permissions.  Remove them first so a
+# subsequent execution test works.
+ac_rmfiles=
+for ac_file in $ac_files
+do
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;;
+    * ) ac_rmfiles="$ac_rmfiles $ac_file";;
+  esac
+done
+rm -f $ac_rmfiles
+
+if { (ac_try="$ac_link_default"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link_default") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
+# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
+# in a Makefile.  We should not override ac_cv_exeext if it was cached,
+# so that the user can short-circuit this test for compilers unknown to
+# Autoconf.
+for ac_file in $ac_files ''
+do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj )
+	;;
+    [ab].out )
+	# We found the default executable, but exeext='' is most
+	# certainly right.
+	break;;
+    *.* )
+        if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
+	then :; else
+	   ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	fi
+	# We set ac_cv_exeext here because the later test for it is not
+	# safe: cross compilers may not add the suffix if given an `-o'
+	# argument, so we may need to know it at that point already.
+	# Even if this section looks crufty: it has the advantage of
+	# actually working.
+	break;;
+    * )
+	break;;
+  esac
+done
+test "$ac_cv_exeext" = no && ac_cv_exeext=
+
+else
+  ac_file=''
+fi
+
+{ echo "$as_me:$LINENO: result: $ac_file" >&5
+echo "${ECHO_T}$ac_file" >&6; }
+if test -z "$ac_file"; then
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: C compiler cannot create executables
+See \`config.log' for more details." >&5
+echo "$as_me: error: C compiler cannot create executables
+See \`config.log' for more details." >&2;}
+   { (exit 77); exit 77; }; }
+fi
+
+ac_exeext=$ac_cv_exeext
+
+# Check that the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+{ echo "$as_me:$LINENO: checking whether the C compiler works" >&5
+echo $ECHO_N "checking whether the C compiler works... $ECHO_C" >&6; }
+# FIXME: These cross compiler hacks should be removed for Autoconf 3.0
+# If not cross compiling, check that we can run a simple program.
+if test "$cross_compiling" != yes; then
+  if { ac_try='./$ac_file'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+    cross_compiling=no
+  else
+    if test "$cross_compiling" = maybe; then
+	cross_compiling=yes
+    else
+	{ { echo "$as_me:$LINENO: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot run C compiled programs.
+If you meant to cross compile, use \`--host'.
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+    fi
+  fi
+fi
+{ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+
+rm -f a.out a.exe conftest$ac_cv_exeext b.out
+ac_clean_files=$ac_clean_files_save
+# Check that the compiler produces executables we can run.  If not, either
+# the compiler is broken, or we cross compile.
+{ echo "$as_me:$LINENO: checking whether we are cross compiling" >&5
+echo $ECHO_N "checking whether we are cross compiling... $ECHO_C" >&6; }
+{ echo "$as_me:$LINENO: result: $cross_compiling" >&5
+echo "${ECHO_T}$cross_compiling" >&6; }
+
+{ echo "$as_me:$LINENO: checking for suffix of executables" >&5
+echo $ECHO_N "checking for suffix of executables... $ECHO_C" >&6; }
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # If both `conftest.exe' and `conftest' are `present' (well, observable)
+# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
+# work properly (i.e., refer to `conftest.exe'), while it won't with
+# `rm'.
+for ac_file in conftest.exe conftest conftest.*; do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.o | *.obj ) ;;
+    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	  break;;
+    * ) break;;
+  esac
+done
+else
+  { { echo "$as_me:$LINENO: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of executables: cannot compile and link
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest$ac_cv_exeext
+{ echo "$as_me:$LINENO: result: $ac_cv_exeext" >&5
+echo "${ECHO_T}$ac_cv_exeext" >&6; }
+
+rm -f conftest.$ac_ext
+EXEEXT=$ac_cv_exeext
+ac_exeext=$EXEEXT
+{ echo "$as_me:$LINENO: checking for suffix of object files" >&5
+echo $ECHO_N "checking for suffix of object files... $ECHO_C" >&6; }
+if test "${ac_cv_objext+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.o conftest.obj
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  for ac_file in conftest.o conftest.obj conftest.*; do
+  test -f "$ac_file" || continue;
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf ) ;;
+    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
+       break;;
+  esac
+done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+{ { echo "$as_me:$LINENO: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&5
+echo "$as_me: error: cannot compute suffix of object files: cannot compile
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+rm -f conftest.$ac_cv_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_objext" >&5
+echo "${ECHO_T}$ac_cv_objext" >&6; }
+OBJEXT=$ac_cv_objext
+ac_objext=$OBJEXT
+{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; }
+if test "${ac_cv_c_compiler_gnu+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_compiler_gnu=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_compiler_gnu=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; }
+GCC=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; }
+if test "${ac_cv_prog_cc_g+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_save_c_werror_flag=$ac_c_werror_flag
+   ac_c_werror_flag=yes
+   ac_cv_prog_cc_g=no
+   CFLAGS="-g"
+   cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_cc_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	CFLAGS=""
+      cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_c_werror_flag=$ac_save_c_werror_flag
+	 CFLAGS="-g"
+	 cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_cc_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5
+echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; }
+if test "${ac_cv_prog_cc_c89+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not '\xHH' hex character constants.
+   These don't provoke an error unfortunately, instead are silently treated
+   as 'x'.  The following induces an error, until -std is added to get
+   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+   array size at least.  It's necessary to write '\x00'==0 to get something
+   that's true only with -std.  */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+   inside strings and character constants.  */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+	-Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_cc_c89=$ac_arg
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext
+  test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+  x)
+    { echo "$as_me:$LINENO: result: none needed" >&5
+echo "${ECHO_T}none needed" >&6; } ;;
+  xno)
+    { echo "$as_me:$LINENO: result: unsupported" >&5
+echo "${ECHO_T}unsupported" >&6; } ;;
+  *)
+    CC="$CC $ac_cv_prog_cc_c89"
+    { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+depcc="$CC"   am_compiler_list=
+
+{ echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
+echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; }
+if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CC_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    case $depmode in
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    none) break ;;
+    esac
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.
+    if depmode=$depmode \
+       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CC_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
+echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+  am__fastdepCC_TRUE=
+  am__fastdepCC_FALSE='#'
+else
+  am__fastdepCC_TRUE='#'
+  am__fastdepCC_FALSE=
+fi
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ echo "$as_me:$LINENO: checking how to run the C preprocessor" >&5
+echo $ECHO_N "checking how to run the C preprocessor... $ECHO_C" >&6; }
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+  CPP=
+fi
+if test -z "$CPP"; then
+  if test "${ac_cv_prog_CPP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+      # Double quotes because CPP needs to be expanded
+    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
+    do
+      ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  break
+fi
+
+    done
+    ac_cv_prog_CPP=$CPP
+
+fi
+  CPP=$ac_cv_prog_CPP
+else
+  ac_cv_prog_CPP=$CPP
+fi
+{ echo "$as_me:$LINENO: result: $CPP" >&5
+echo "${ECHO_T}$CPP" >&6; }
+ac_preproc_ok=false
+for ac_c_preproc_warn_flag in '' yes
+do
+  # Use a header file that comes with gcc, so configuring glibc
+  # with a fresh cross-compiler works.
+  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+  # <limits.h> exists even on freestanding compilers.
+  # On the NeXT, cc -E runs the code through the compiler's parser,
+  # not just through cpp. "Syntax error" is here to catch this case.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+		     Syntax error
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Broken: fails on valid input.
+continue
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+  # OK, works on sane cases.  Now check whether nonexistent headers
+  # can be detected and how.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ac_nonexistent.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  # Broken: success on invalid input.
+continue
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  # Passes both tests.
+ac_preproc_ok=:
+break
+fi
+
+rm -f conftest.err conftest.$ac_ext
+
+done
+# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
+rm -f conftest.err conftest.$ac_ext
+if $ac_preproc_ok; then
+  :
+else
+  { { echo "$as_me:$LINENO: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&5
+echo "$as_me: error: C preprocessor \"$CPP\" fails sanity check
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+{ echo "$as_me:$LINENO: checking for grep that handles long lines and -e" >&5
+echo $ECHO_N "checking for grep that handles long lines and -e... $ECHO_C" >&6; }
+if test "${ac_cv_path_GREP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  # Extract the first word of "grep ggrep" to use in msg output
+if test -z "$GREP"; then
+set dummy grep ggrep; ac_prog_name=$2
+if test "${ac_cv_path_GREP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_path_GREP_found=false
+# Loop through the user's path and test for each of PROGNAME-LIST
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_prog in grep ggrep; do
+  for ac_exec_ext in '' $ac_executable_extensions; do
+    ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
+    { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
+    # Check for GNU ac_path_GREP and select it if it is found.
+  # Check for GNU $ac_path_GREP
+case `"$ac_path_GREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
+*)
+  ac_count=0
+  echo $ECHO_N "0123456789$ECHO_C" >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    echo 'GREP' >> "conftest.nl"
+    "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    ac_count=`expr $ac_count + 1`
+    if test $ac_count -gt ${ac_path_GREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_GREP="$ac_path_GREP"
+      ac_path_GREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+
+    $ac_path_GREP_found && break 3
+  done
+done
+
+done
+IFS=$as_save_IFS
+
+
+fi
+
+GREP="$ac_cv_path_GREP"
+if test -z "$GREP"; then
+  { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
+echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+else
+  ac_cv_path_GREP=$GREP
+fi
+
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_path_GREP" >&5
+echo "${ECHO_T}$ac_cv_path_GREP" >&6; }
+ GREP="$ac_cv_path_GREP"
+
+
+{ echo "$as_me:$LINENO: checking for egrep" >&5
+echo $ECHO_N "checking for egrep... $ECHO_C" >&6; }
+if test "${ac_cv_path_EGREP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+   then ac_cv_path_EGREP="$GREP -E"
+   else
+     # Extract the first word of "egrep" to use in msg output
+if test -z "$EGREP"; then
+set dummy egrep; ac_prog_name=$2
+if test "${ac_cv_path_EGREP+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_path_EGREP_found=false
+# Loop through the user's path and test for each of PROGNAME-LIST
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_prog in egrep; do
+  for ac_exec_ext in '' $ac_executable_extensions; do
+    ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+    { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
+    # Check for GNU ac_path_EGREP and select it if it is found.
+  # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
+*GNU*)
+  ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
+*)
+  ac_count=0
+  echo $ECHO_N "0123456789$ECHO_C" >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    echo 'EGREP' >> "conftest.nl"
+    "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    ac_count=`expr $ac_count + 1`
+    if test $ac_count -gt ${ac_path_EGREP_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_EGREP="$ac_path_EGREP"
+      ac_path_EGREP_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+
+    $ac_path_EGREP_found && break 3
+  done
+done
+
+done
+IFS=$as_save_IFS
+
+
+fi
+
+EGREP="$ac_cv_path_EGREP"
+if test -z "$EGREP"; then
+  { { echo "$as_me:$LINENO: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&5
+echo "$as_me: error: no acceptable $ac_prog_name could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+else
+  ac_cv_path_EGREP=$EGREP
+fi
+
+
+   fi
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_path_EGREP" >&5
+echo "${ECHO_T}$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
+
+
+
+    { echo "$as_me:$LINENO: checking whether we are using the GNU C Library 2 or newer" >&5
+echo $ECHO_N "checking whether we are using the GNU C Library 2 or newer... $ECHO_C" >&6; }
+if test "${ac_cv_gnu_library_2+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#include <features.h>
+#ifdef __GNU_LIBRARY__
+ #if (__GLIBC__ >= 2)
+  Lucky GNU user
+ #endif
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "Lucky GNU user" >/dev/null 2>&1; then
+  ac_cv_gnu_library_2=yes
+else
+  ac_cv_gnu_library_2=no
+fi
+rm -f conftest*
+
+
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_gnu_library_2" >&5
+echo "${ECHO_T}$ac_cv_gnu_library_2" >&6; }
+
+    GLIBC2="$ac_cv_gnu_library_2"
+
+
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_RANLIB+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$RANLIB"; then
+  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+  { echo "$as_me:$LINENO: result: $RANLIB" >&5
+echo "${ECHO_T}$RANLIB" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+  ac_ct_RANLIB=$RANLIB
+  # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_RANLIB"; then
+  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_RANLIB="ranlib"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_RANLIB" >&5
+echo "${ECHO_T}$ac_ct_RANLIB" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+  if test "x$ac_ct_RANLIB" = x; then
+    RANLIB=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf at gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf at gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    RANLIB=$ac_ct_RANLIB
+  fi
+else
+  RANLIB="$ac_cv_prog_RANLIB"
+fi
+
+
+
+  CFLAG_VISIBILITY=
+  HAVE_VISIBILITY=0
+  if test -n "$GCC"; then
+    { echo "$as_me:$LINENO: checking for simple visibility declarations" >&5
+echo $ECHO_N "checking for simple visibility declarations... $ECHO_C" >&6; }
+    if test "${gl_cv_cc_visibility+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+      gl_save_CFLAGS="$CFLAGS"
+      CFLAGS="$CFLAGS -fvisibility=hidden"
+      cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+extern __attribute__((__visibility__("hidden"))) int hiddenvar;
+         extern __attribute__((__visibility__("default"))) int exportedvar;
+         extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void);
+         extern __attribute__((__visibility__("default"))) int exportedfunc (void);
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  gl_cv_cc_visibility=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	gl_cv_cc_visibility=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+      CFLAGS="$gl_save_CFLAGS"
+fi
+
+    { echo "$as_me:$LINENO: result: $gl_cv_cc_visibility" >&5
+echo "${ECHO_T}$gl_cv_cc_visibility" >&6; }
+    if test $gl_cv_cc_visibility = yes; then
+      CFLAG_VISIBILITY="-fvisibility=hidden"
+      HAVE_VISIBILITY=1
+    fi
+  fi
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_VISIBILITY $HAVE_VISIBILITY
+_ACEOF
+
+
+{ echo "$as_me:$LINENO: checking for inline" >&5
+echo $ECHO_N "checking for inline... $ECHO_C" >&6; }
+if test "${ac_cv_c_inline+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_c_inline=no
+for ac_kw in inline __inline__ __inline; do
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifndef __cplusplus
+typedef int foo_t;
+static $ac_kw foo_t static_foo () {return 0; }
+$ac_kw foo_t foo () {return 0; }
+#endif
+
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_c_inline=$ac_kw
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  test "$ac_cv_c_inline" != no && break
+done
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5
+echo "${ECHO_T}$ac_cv_c_inline" >&6; }
+
+
+case $ac_cv_c_inline in
+  inline | yes) ;;
+  *)
+    case $ac_cv_c_inline in
+      no) ac_val=;;
+      *) ac_val=$ac_cv_c_inline;;
+    esac
+    cat >>confdefs.h <<_ACEOF
+#ifndef __cplusplus
+#define inline $ac_val
+#endif
+_ACEOF
+    ;;
+esac
+
+{ echo "$as_me:$LINENO: checking for ANSI C header files" >&5
+echo $ECHO_N "checking for ANSI C header files... $ECHO_C" >&6; }
+if test "${ac_cv_header_stdc+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_header_stdc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_header_stdc=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+if test $ac_cv_header_stdc = yes; then
+  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <string.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "memchr" >/dev/null 2>&1; then
+  :
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "free" >/dev/null 2>&1; then
+  :
+else
+  ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+  if test "$cross_compiling" = yes; then
+  :
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <ctype.h>
+#include <stdlib.h>
+#if ((' ' & 0x0FF) == 0x020)
+# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#else
+# define ISLOWER(c) \
+		   (('a' <= (c) && (c) <= 'i') \
+		     || ('j' <= (c) && (c) <= 'r') \
+		     || ('s' <= (c) && (c) <= 'z'))
+# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
+#endif
+
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int
+main ()
+{
+  int i;
+  for (i = 0; i < 256; i++)
+    if (XOR (islower (i), ISLOWER (i))
+	|| toupper (i) != TOUPPER (i))
+      return 2;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_header_stdc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_stdc" >&5
+echo "${ECHO_T}$ac_cv_header_stdc" >&6; }
+if test $ac_cv_header_stdc = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define STDC_HEADERS 1
+_ACEOF
+
+fi
+
+# On IRIX 5.3, sys/types and inttypes.h are conflicting.
+
+
+
+
+
+
+
+
+
+for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
+		  inttypes.h stdint.h unistd.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  eval "$as_ac_Header=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	eval "$as_ac_Header=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+{ echo "$as_me:$LINENO: checking for size_t" >&5
+echo $ECHO_N "checking for size_t... $ECHO_C" >&6; }
+if test "${ac_cv_type_size_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+typedef size_t ac__type_new_;
+int
+main ()
+{
+if ((ac__type_new_ *) 0)
+  return 0;
+if (sizeof (ac__type_new_))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_type_size_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_type_size_t=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5
+echo "${ECHO_T}$ac_cv_type_size_t" >&6; }
+if test $ac_cv_type_size_t = yes; then
+  :
+else
+
+cat >>confdefs.h <<_ACEOF
+#define size_t unsigned int
+_ACEOF
+
+fi
+
+
+  { echo "$as_me:$LINENO: checking for stdint.h" >&5
+echo $ECHO_N "checking for stdint.h... $ECHO_C" >&6; }
+if test "${gl_cv_header_stdint_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/types.h>
+#include <stdint.h>
+int
+main ()
+{
+uintmax_t i = (uintmax_t) -1; return !i;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  gl_cv_header_stdint_h=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	gl_cv_header_stdint_h=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $gl_cv_header_stdint_h" >&5
+echo "${ECHO_T}$gl_cv_header_stdint_h" >&6; }
+  if test $gl_cv_header_stdint_h = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STDINT_H_WITH_UINTMAX 1
+_ACEOF
+
+  fi
+
+# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
+# for constant arguments.  Useless!
+{ echo "$as_me:$LINENO: checking for working alloca.h" >&5
+echo $ECHO_N "checking for working alloca.h... $ECHO_C" >&6; }
+if test "${ac_cv_working_alloca_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <alloca.h>
+int
+main ()
+{
+char *p = (char *) alloca (2 * sizeof (int));
+			  if (p) return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_working_alloca_h=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_working_alloca_h=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_working_alloca_h" >&5
+echo "${ECHO_T}$ac_cv_working_alloca_h" >&6; }
+if test $ac_cv_working_alloca_h = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_ALLOCA_H 1
+_ACEOF
+
+fi
+
+{ echo "$as_me:$LINENO: checking for alloca" >&5
+echo $ECHO_N "checking for alloca... $ECHO_C" >&6; }
+if test "${ac_cv_func_alloca_works+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef __GNUC__
+# define alloca __builtin_alloca
+#else
+# ifdef _MSC_VER
+#  include <malloc.h>
+#  define alloca _alloca
+# else
+#  ifdef HAVE_ALLOCA_H
+#   include <alloca.h>
+#  else
+#   ifdef _AIX
+ #pragma alloca
+#   else
+#    ifndef alloca /* predefined by HP cc +Olibcalls */
+char *alloca ();
+#    endif
+#   endif
+#  endif
+# endif
+#endif
+
+int
+main ()
+{
+char *p = (char *) alloca (1);
+				    if (p) return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_func_alloca_works=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_func_alloca_works=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_func_alloca_works" >&5
+echo "${ECHO_T}$ac_cv_func_alloca_works" >&6; }
+
+if test $ac_cv_func_alloca_works = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_ALLOCA 1
+_ACEOF
+
+else
+  # The SVR3 libPW and SVR4 libucb both contain incompatible functions
+# that cause trouble.  Some versions do not even contain alloca or
+# contain a buggy version.  If you still want to use their alloca,
+# use ar to extract alloca.o from them instead of compiling alloca.c.
+
+ALLOCA=\${LIBOBJDIR}alloca.$ac_objext
+
+cat >>confdefs.h <<\_ACEOF
+#define C_ALLOCA 1
+_ACEOF
+
+
+{ echo "$as_me:$LINENO: checking whether \`alloca.c' needs Cray hooks" >&5
+echo $ECHO_N "checking whether \`alloca.c' needs Cray hooks... $ECHO_C" >&6; }
+if test "${ac_cv_os_cray+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#if defined CRAY && ! defined CRAY2
+webecray
+#else
+wenotbecray
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "webecray" >/dev/null 2>&1; then
+  ac_cv_os_cray=yes
+else
+  ac_cv_os_cray=no
+fi
+rm -f conftest*
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_os_cray" >&5
+echo "${ECHO_T}$ac_cv_os_cray" >&6; }
+if test $ac_cv_os_cray = yes; then
+  for ac_func in _getb67 GETB67 getb67; do
+    as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	eval "$as_ac_var=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_var'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define CRAY_STACKSEG_END $ac_func
+_ACEOF
+
+    break
+fi
+
+  done
+fi
+
+{ echo "$as_me:$LINENO: checking stack direction for C alloca" >&5
+echo $ECHO_N "checking stack direction for C alloca... $ECHO_C" >&6; }
+if test "${ac_cv_c_stack_direction+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$cross_compiling" = yes; then
+  ac_cv_c_stack_direction=0
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+int
+find_stack_direction ()
+{
+  static char *addr = 0;
+  auto char dummy;
+  if (addr == 0)
+    {
+      addr = &dummy;
+      return find_stack_direction ();
+    }
+  else
+    return (&dummy > addr) ? 1 : -1;
+}
+
+int
+main ()
+{
+  return find_stack_direction () < 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_c_stack_direction=1
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_c_stack_direction=-1
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_c_stack_direction" >&5
+echo "${ECHO_T}$ac_cv_c_stack_direction" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define STACK_DIRECTION $ac_cv_c_stack_direction
+_ACEOF
+
+
+fi
+
+
+
+for ac_header in stdlib.h unistd.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    ( cat <<\_ASBOX
+## -------------------------------- ##
+## Report this to triton at kumal.info ##
+## -------------------------------- ##
+_ASBOX
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+for ac_func in getpagesize
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	eval "$as_ac_var=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_var'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+{ echo "$as_me:$LINENO: checking for working mmap" >&5
+echo $ECHO_N "checking for working mmap... $ECHO_C" >&6; }
+if test "${ac_cv_func_mmap_fixed_mapped+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$cross_compiling" = yes; then
+  ac_cv_func_mmap_fixed_mapped=no
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+/* malloc might have been renamed as rpl_malloc. */
+#undef malloc
+
+/* Thanks to Mike Haertel and Jim Avera for this test.
+   Here is a matrix of mmap possibilities:
+	mmap private not fixed
+	mmap private fixed at somewhere currently unmapped
+	mmap private fixed at somewhere already mapped
+	mmap shared not fixed
+	mmap shared fixed at somewhere currently unmapped
+	mmap shared fixed at somewhere already mapped
+   For private mappings, we should verify that changes cannot be read()
+   back from the file, nor mmap's back from the file at a different
+   address.  (There have been systems where private was not correctly
+   implemented like the infamous i386 svr4.0, and systems where the
+   VM page cache was not coherent with the file system buffer cache
+   like early versions of FreeBSD and possibly contemporary NetBSD.)
+   For shared mappings, we should conversely verify that changes get
+   propagated back to all the places they're supposed to be.
+
+   Grep wants private fixed already mapped.
+   The main things grep needs to know about mmap are:
+   * does it exist and is it safe to write into the mmap'd area
+   * how to use it (BSD variants)  */
+
+#include <fcntl.h>
+#include <sys/mman.h>
+
+#if !defined STDC_HEADERS && !defined HAVE_STDLIB_H
+char *malloc ();
+#endif
+
+/* This mess was copied from the GNU getpagesize.h.  */
+#ifndef HAVE_GETPAGESIZE
+/* Assume that all systems that can run configure have sys/param.h.  */
+# ifndef HAVE_SYS_PARAM_H
+#  define HAVE_SYS_PARAM_H 1
+# endif
+
+# ifdef _SC_PAGESIZE
+#  define getpagesize() sysconf(_SC_PAGESIZE)
+# else /* no _SC_PAGESIZE */
+#  ifdef HAVE_SYS_PARAM_H
+#   include <sys/param.h>
+#   ifdef EXEC_PAGESIZE
+#    define getpagesize() EXEC_PAGESIZE
+#   else /* no EXEC_PAGESIZE */
+#    ifdef NBPG
+#     define getpagesize() NBPG * CLSIZE
+#     ifndef CLSIZE
+#      define CLSIZE 1
+#     endif /* no CLSIZE */
+#    else /* no NBPG */
+#     ifdef NBPC
+#      define getpagesize() NBPC
+#     else /* no NBPC */
+#      ifdef PAGESIZE
+#       define getpagesize() PAGESIZE
+#      endif /* PAGESIZE */
+#     endif /* no NBPC */
+#    endif /* no NBPG */
+#   endif /* no EXEC_PAGESIZE */
+#  else /* no HAVE_SYS_PARAM_H */
+#   define getpagesize() 8192	/* punt totally */
+#  endif /* no HAVE_SYS_PARAM_H */
+# endif /* no _SC_PAGESIZE */
+
+#endif /* no HAVE_GETPAGESIZE */
+
+int
+main ()
+{
+  char *data, *data2, *data3;
+  int i, pagesize;
+  int fd;
+
+  pagesize = getpagesize ();
+
+  /* First, make a file with some known garbage in it. */
+  data = (char *) malloc (pagesize);
+  if (!data)
+    return 1;
+  for (i = 0; i < pagesize; ++i)
+    *(data + i) = rand ();
+  umask (0);
+  fd = creat ("conftest.mmap", 0600);
+  if (fd < 0)
+    return 1;
+  if (write (fd, data, pagesize) != pagesize)
+    return 1;
+  close (fd);
+
+  /* Next, try to mmap the file at a fixed address which already has
+     something else allocated at it.  If we can, also make sure that
+     we see the same garbage.  */
+  fd = open ("conftest.mmap", O_RDWR);
+  if (fd < 0)
+    return 1;
+  data2 = (char *) malloc (2 * pagesize);
+  if (!data2)
+    return 1;
+  data2 += (pagesize - ((long int) data2 & (pagesize - 1))) & (pagesize - 1);
+  if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE,
+		     MAP_PRIVATE | MAP_FIXED, fd, 0L))
+    return 1;
+  for (i = 0; i < pagesize; ++i)
+    if (*(data + i) != *(data2 + i))
+      return 1;
+
+  /* Finally, make sure that changes to the mapped area do not
+     percolate back to the file as seen by read().  (This is a bug on
+     some variants of i386 svr4.0.)  */
+  for (i = 0; i < pagesize; ++i)
+    *(data2 + i) = *(data2 + i) + 1;
+  data3 = (char *) malloc (pagesize);
+  if (!data3)
+    return 1;
+  if (read (fd, data3, pagesize) != pagesize)
+    return 1;
+  for (i = 0; i < pagesize; ++i)
+    if (*(data + i) != *(data3 + i))
+      return 1;
+  close (fd);
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_func_mmap_fixed_mapped=yes
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_func_mmap_fixed_mapped=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_func_mmap_fixed_mapped" >&5
+echo "${ECHO_T}$ac_cv_func_mmap_fixed_mapped" >&6; }
+if test $ac_cv_func_mmap_fixed_mapped = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_MMAP 1
+_ACEOF
+
+fi
+rm -f conftest.mmap
+
+
+
+  { echo "$as_me:$LINENO: checking whether integer division by zero raises SIGFPE" >&5
+echo $ECHO_N "checking whether integer division by zero raises SIGFPE... $ECHO_C" >&6; }
+if test "${gt_cv_int_divbyzero_sigfpe+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+      gt_cv_int_divbyzero_sigfpe=
+      case "$host_os" in
+        macos* | darwin[6-9]* | darwin[1-9][0-9]*)
+          # On MacOS X 10.2 or newer, just assume the same as when cross-
+          # compiling. If we were to perform the real test, 1 Crash Report
+          # dialog window would pop up.
+          case "$host_cpu" in
+            i[34567]86 | x86_64)
+              gt_cv_int_divbyzero_sigfpe="guessing yes" ;;
+          esac
+          ;;
+      esac
+      if test -z "$gt_cv_int_divbyzero_sigfpe"; then
+        if test "$cross_compiling" = yes; then
+
+            # Guess based on the CPU.
+            case "$host_cpu" in
+              alpha* | i[34567]86 | x86_64 | m68k | s390*)
+                gt_cv_int_divbyzero_sigfpe="guessing yes";;
+              *)
+                gt_cv_int_divbyzero_sigfpe="guessing no";;
+            esac
+
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#include <stdlib.h>
+#include <signal.h>
+
+static void
+sigfpe_handler (int sig)
+{
+  /* Exit with code 0 if SIGFPE, with code 1 if any other signal.  */
+  exit (sig != SIGFPE);
+}
+
+int x = 1;
+int y = 0;
+int z;
+int nan;
+
+int main ()
+{
+  signal (SIGFPE, sigfpe_handler);
+/* IRIX and AIX (when "xlc -qcheck" is used) yield signal SIGTRAP.  */
+#if (defined (__sgi) || defined (_AIX)) && defined (SIGTRAP)
+  signal (SIGTRAP, sigfpe_handler);
+#endif
+/* Linux/SPARC yields signal SIGILL.  */
+#if defined (__sparc__) && defined (__linux__)
+  signal (SIGILL, sigfpe_handler);
+#endif
+
+  z = x / y;
+  nan = y / y;
+  exit (1);
+}
+
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  gt_cv_int_divbyzero_sigfpe=yes
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+gt_cv_int_divbyzero_sigfpe=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+      fi
+
+fi
+{ echo "$as_me:$LINENO: result: $gt_cv_int_divbyzero_sigfpe" >&5
+echo "${ECHO_T}$gt_cv_int_divbyzero_sigfpe" >&6; }
+  case "$gt_cv_int_divbyzero_sigfpe" in
+    *yes) value=1;;
+    *) value=0;;
+  esac
+
+cat >>confdefs.h <<_ACEOF
+#define INTDIV0_RAISES_SIGFPE $value
+_ACEOF
+
+
+
+  { echo "$as_me:$LINENO: checking for inttypes.h" >&5
+echo $ECHO_N "checking for inttypes.h... $ECHO_C" >&6; }
+if test "${gl_cv_header_inttypes_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/types.h>
+#include <inttypes.h>
+int
+main ()
+{
+uintmax_t i = (uintmax_t) -1; return !i;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  gl_cv_header_inttypes_h=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	gl_cv_header_inttypes_h=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $gl_cv_header_inttypes_h" >&5
+echo "${ECHO_T}$gl_cv_header_inttypes_h" >&6; }
+  if test $gl_cv_header_inttypes_h = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_INTTYPES_H_WITH_UINTMAX 1
+_ACEOF
+
+  fi
+
+
+  { echo "$as_me:$LINENO: checking for unsigned long long int" >&5
+echo $ECHO_N "checking for unsigned long long int... $ECHO_C" >&6; }
+if test "${ac_cv_type_unsigned_long_long_int+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+
+  /* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Test preprocessor.  */
+      #if ! (-9223372036854775807LL < 0 && 0 < 9223372036854775807ll)
+        error in preprocessor;
+      #endif
+      #if ! (18446744073709551615ULL <= -1ull)
+        error in preprocessor;
+      #endif
+      /* Test literals.  */
+      long long int ll = 9223372036854775807ll;
+      long long int nll = -9223372036854775807LL;
+      unsigned long long int ull = 18446744073709551615ULL;
+      /* Test constant expressions.   */
+      typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll)
+		     ? 1 : -1)];
+      typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1
+		     ? 1 : -1)];
+      int i = 63;
+int
+main ()
+{
+/* Test availability of runtime routines for shift and division.  */
+      long long int llmax = 9223372036854775807ll;
+      unsigned long long int ullmax = 18446744073709551615ull;
+      return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i)
+	      | (llmax / ll) | (llmax % ll)
+	      | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i)
+	      | (ullmax / ull) | (ullmax % ull));
+  ;
+  return 0;
+}
+
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_type_unsigned_long_long_int=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_type_unsigned_long_long_int=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_type_unsigned_long_long_int" >&5
+echo "${ECHO_T}$ac_cv_type_unsigned_long_long_int" >&6; }
+  if test $ac_cv_type_unsigned_long_long_int = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_UNSIGNED_LONG_LONG_INT 1
+_ACEOF
+
+  fi
+
+
+
+
+  if test $gl_cv_header_inttypes_h = no && test $gl_cv_header_stdint_h = no; then
+
+    test $ac_cv_type_unsigned_long_long_int = yes \
+      && ac_type='unsigned long long' \
+      || ac_type='unsigned long'
+
+cat >>confdefs.h <<_ACEOF
+#define uintmax_t $ac_type
+_ACEOF
+
+  else
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_UINTMAX_T 1
+_ACEOF
+
+  fi
+
+
+
+for ac_header in inttypes.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    ( cat <<\_ASBOX
+## -------------------------------- ##
+## Report this to triton at kumal.info ##
+## -------------------------------- ##
+_ASBOX
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+  if test $ac_cv_header_inttypes_h = yes; then
+    { echo "$as_me:$LINENO: checking whether the inttypes.h PRIxNN macros are broken" >&5
+echo $ECHO_N "checking whether the inttypes.h PRIxNN macros are broken... $ECHO_C" >&6; }
+if test "${gt_cv_inttypes_pri_broken+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+        cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <inttypes.h>
+#ifdef PRId32
+char *p = PRId32;
+#endif
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  gt_cv_inttypes_pri_broken=no
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	gt_cv_inttypes_pri_broken=yes
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ echo "$as_me:$LINENO: result: $gt_cv_inttypes_pri_broken" >&5
+echo "${ECHO_T}$gt_cv_inttypes_pri_broken" >&6; }
+  fi
+  if test "$gt_cv_inttypes_pri_broken" = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define PRI_MACROS_BROKEN 1
+_ACEOF
+
+    PRI_MACROS_BROKEN=1
+  else
+    PRI_MACROS_BROKEN=0
+  fi
+
+
+
+cat >>confdefs.h <<\_ACEOF
+#define _GNU_SOURCE 1
+_ACEOF
+
+
+
+{ echo "$as_me:$LINENO: checking for AIX" >&5
+echo $ECHO_N "checking for AIX... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifdef _AIX
+  yes
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "yes" >/dev/null 2>&1; then
+  { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+cat >>confdefs.h <<\_ACEOF
+#define _ALL_SOURCE 1
+_ACEOF
+
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+rm -f conftest*
+
+
+if test "${ac_cv_header_minix_config_h+set}" = set; then
+  { echo "$as_me:$LINENO: checking for minix/config.h" >&5
+echo $ECHO_N "checking for minix/config.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_minix_config_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_minix_config_h" >&5
+echo "${ECHO_T}$ac_cv_header_minix_config_h" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking minix/config.h usability" >&5
+echo $ECHO_N "checking minix/config.h usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <minix/config.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking minix/config.h presence" >&5
+echo $ECHO_N "checking minix/config.h presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <minix/config.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: minix/config.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: minix/config.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: minix/config.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: minix/config.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: minix/config.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: minix/config.h: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: minix/config.h:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: minix/config.h:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: minix/config.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: minix/config.h: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: minix/config.h:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: minix/config.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: minix/config.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: minix/config.h: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: minix/config.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: minix/config.h: in the future, the compiler will take precedence" >&2;}
+    ( cat <<\_ASBOX
+## -------------------------------- ##
+## Report this to triton at kumal.info ##
+## -------------------------------- ##
+_ASBOX
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for minix/config.h" >&5
+echo $ECHO_N "checking for minix/config.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_minix_config_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_header_minix_config_h=$ac_header_preproc
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_minix_config_h" >&5
+echo "${ECHO_T}$ac_cv_header_minix_config_h" >&6; }
+
+fi
+if test $ac_cv_header_minix_config_h = yes; then
+  MINIX=yes
+else
+  MINIX=
+fi
+
+
+if test "$MINIX" = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define _POSIX_SOURCE 1
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define _POSIX_1_SOURCE 2
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define _MINIX 1
+_ACEOF
+
+fi
+
+
+
+
+
+
+
+
+
+
+
+  { echo "$as_me:$LINENO: checking whether it is safe to define __EXTENSIONS__" >&5
+echo $ECHO_N "checking whether it is safe to define __EXTENSIONS__... $ECHO_C" >&6; }
+if test "${ac_cv_safe_to_define___extensions__+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#	  define __EXTENSIONS__ 1
+	  $ac_includes_default
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_safe_to_define___extensions__=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_safe_to_define___extensions__=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_safe_to_define___extensions__" >&5
+echo "${ECHO_T}$ac_cv_safe_to_define___extensions__" >&6; }
+  test $ac_cv_safe_to_define___extensions__ = yes &&
+    cat >>confdefs.h <<\_ACEOF
+#define __EXTENSIONS__ 1
+_ACEOF
+
+  cat >>confdefs.h <<\_ACEOF
+#define _POSIX_PTHREAD_SEMANTICS 1
+_ACEOF
+
+  cat >>confdefs.h <<\_ACEOF
+#define _TANDEM_SOURCE 1
+_ACEOF
+
+
+
+
+
+
+    # Check whether --enable-threads was given.
+if test "${enable_threads+set}" = set; then
+  enableval=$enable_threads; gl_use_threads=$enableval
+else
+  case "$host_os" in
+                            osf*) gl_use_threads=no ;;
+       *)    gl_use_threads=yes ;;
+     esac
+
+fi
+
+  if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then
+    # For using <pthread.h>:
+    case "$host_os" in
+      osf*)
+        # On OSF/1, the compiler needs the flag -D_REENTRANT so that it
+        # groks <pthread.h>. cc also understands the flag -pthread, but
+        # we don't use it because 1. gcc-2.95 doesn't understand -pthread,
+        # 2. putting a flag into CPPFLAGS that has an effect on the linker
+        # causes the AC_TRY_LINK test below to succeed unexpectedly,
+        # leading to wrong values of LIBTHREAD and LTLIBTHREAD.
+        CPPFLAGS="$CPPFLAGS -D_REENTRANT"
+        ;;
+    esac
+    # Some systems optimize for single-threaded programs by default, and
+    # need special flags to disable these optimizations. For example, the
+    # definition of 'errno' in <errno.h>.
+    case "$host_os" in
+      aix* | freebsd*) CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" ;;
+      solaris*) CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;;
+    esac
+  fi
+
+
+
+
+
+      if test "X$prefix" = "XNONE"; then
+    acl_final_prefix="$ac_default_prefix"
+  else
+    acl_final_prefix="$prefix"
+  fi
+  if test "X$exec_prefix" = "XNONE"; then
+    acl_final_exec_prefix='${prefix}'
+  else
+    acl_final_exec_prefix="$exec_prefix"
+  fi
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
+  prefix="$acl_save_prefix"
+
+
+# Check whether --with-gnu-ld was given.
+if test "${with_gnu_ld+set}" = set; then
+  withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
+else
+  with_gnu_ld=no
+fi
+
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  { echo "$as_me:$LINENO: checking for ld used by GCC" >&5
+echo $ECHO_N "checking for ld used by GCC... $ECHO_C" >&6; }
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [\\/]* | [A-Za-z]:[\\/]*)
+      re_direlt='/[^/][^/]*/\.\./'
+      # Canonicalize the path of ld
+      ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
+      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+	ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  { echo "$as_me:$LINENO: checking for GNU ld" >&5
+echo $ECHO_N "checking for GNU ld... $ECHO_C" >&6; }
+else
+  { echo "$as_me:$LINENO: checking for non-GNU ld" >&5
+echo $ECHO_N "checking for non-GNU ld... $ECHO_C" >&6; }
+fi
+if test "${acl_cv_path_LD+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -z "$LD"; then
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      acl_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some GNU ld's only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in
+      *GNU* | *'with BFD'*)
+	test "$with_gnu_ld" != no && break ;;
+      *)
+	test "$with_gnu_ld" != yes && break ;;
+      esac
+    fi
+  done
+  IFS="$ac_save_ifs"
+else
+  acl_cv_path_LD="$LD" # Let the user override the test with a path.
+fi
+fi
+
+LD="$acl_cv_path_LD"
+if test -n "$LD"; then
+  { echo "$as_me:$LINENO: result: $LD" >&5
+echo "${ECHO_T}$LD" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+test -z "$LD" && { { echo "$as_me:$LINENO: error: no acceptable ld found in \$PATH" >&5
+echo "$as_me: error: no acceptable ld found in \$PATH" >&2;}
+   { (exit 1); exit 1; }; }
+{ echo "$as_me:$LINENO: checking if the linker ($LD) is GNU ld" >&5
+echo $ECHO_N "checking if the linker ($LD) is GNU ld... $ECHO_C" >&6; }
+if test "${acl_cv_prog_gnu_ld+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  # I'd rather use --version here, but apparently some GNU ld's only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  acl_cv_prog_gnu_ld=yes ;;
+*)
+  acl_cv_prog_gnu_ld=no ;;
+esac
+fi
+{ echo "$as_me:$LINENO: result: $acl_cv_prog_gnu_ld" >&5
+echo "${ECHO_T}$acl_cv_prog_gnu_ld" >&6; }
+with_gnu_ld=$acl_cv_prog_gnu_ld
+
+
+
+
+                                                { echo "$as_me:$LINENO: checking for shared library run path origin" >&5
+echo $ECHO_N "checking for shared library run path origin... $ECHO_C" >&6; }
+if test "${acl_cv_rpath+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+    CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
+    ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
+    . ./conftest.sh
+    rm -f ./conftest.sh
+    acl_cv_rpath=done
+
+fi
+{ echo "$as_me:$LINENO: result: $acl_cv_rpath" >&5
+echo "${ECHO_T}$acl_cv_rpath" >&6; }
+  wl="$acl_cv_wl"
+  acl_libext="$acl_cv_libext"
+  acl_shlibext="$acl_cv_shlibext"
+  acl_libname_spec="$acl_cv_libname_spec"
+  acl_library_names_spec="$acl_cv_library_names_spec"
+  acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
+  acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
+  acl_hardcode_direct="$acl_cv_hardcode_direct"
+  acl_hardcode_minus_L="$acl_cv_hardcode_minus_L"
+    # Check whether --enable-rpath was given.
+if test "${enable_rpath+set}" = set; then
+  enableval=$enable_rpath; :
+else
+  enable_rpath=yes
+fi
+
+
+
+                  acl_libdirstem=lib
+  searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'`
+  if test -n "$searchpath"; then
+    acl_save_IFS="${IFS= 	}"; IFS=":"
+    for searchdir in $searchpath; do
+      if test -d "$searchdir"; then
+        case "$searchdir" in
+          */lib64/ | */lib64 ) acl_libdirstem=lib64 ;;
+          *) searchdir=`cd "$searchdir" && pwd`
+             case "$searchdir" in
+               */lib64 ) acl_libdirstem=lib64 ;;
+             esac ;;
+        esac
+      fi
+    done
+    IFS="$acl_save_IFS"
+  fi
+
+
+
+  gl_threads_api=none
+  LIBTHREAD=
+  LTLIBTHREAD=
+  LIBMULTITHREAD=
+  LTLIBMULTITHREAD=
+  if test "$gl_use_threads" != no; then
+        { echo "$as_me:$LINENO: checking whether imported symbols can be declared weak" >&5
+echo $ECHO_N "checking whether imported symbols can be declared weak... $ECHO_C" >&6; }
+    gl_have_weak=no
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+extern void xyzzy ();
+#pragma weak xyzzy
+int
+main ()
+{
+xyzzy();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  gl_have_weak=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+    { echo "$as_me:$LINENO: result: $gl_have_weak" >&5
+echo "${ECHO_T}$gl_have_weak" >&6; }
+    if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then
+      # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that
+      # it groks <pthread.h>. It's added above, in gl_LOCK_EARLY_BODY.
+      if test "${ac_cv_header_pthread_h+set}" = set; then
+  { echo "$as_me:$LINENO: checking for pthread.h" >&5
+echo $ECHO_N "checking for pthread.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_pthread_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_pthread_h" >&5
+echo "${ECHO_T}$ac_cv_header_pthread_h" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking pthread.h usability" >&5
+echo $ECHO_N "checking pthread.h usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <pthread.h>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking pthread.h presence" >&5
+echo $ECHO_N "checking pthread.h presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <pthread.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: pthread.h: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: pthread.h: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: pthread.h: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: pthread.h: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: pthread.h: present but cannot be compiled" >&5
+echo "$as_me: WARNING: pthread.h: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: pthread.h:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: pthread.h:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: pthread.h: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: pthread.h: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: pthread.h:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: pthread.h:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: pthread.h: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: pthread.h: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: pthread.h: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: pthread.h: in the future, the compiler will take precedence" >&2;}
+    ( cat <<\_ASBOX
+## -------------------------------- ##
+## Report this to triton at kumal.info ##
+## -------------------------------- ##
+_ASBOX
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for pthread.h" >&5
+echo $ECHO_N "checking for pthread.h... $ECHO_C" >&6; }
+if test "${ac_cv_header_pthread_h+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_header_pthread_h=$ac_header_preproc
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_pthread_h" >&5
+echo "${ECHO_T}$ac_cv_header_pthread_h" >&6; }
+
+fi
+if test $ac_cv_header_pthread_h = yes; then
+  gl_have_pthread_h=yes
+else
+  gl_have_pthread_h=no
+fi
+
+
+      if test "$gl_have_pthread_h" = yes; then
+        # Other possible tests:
+        #   -lpthreads (FSU threads, PCthreads)
+        #   -lgthreads
+        gl_have_pthread=
+        # Test whether both pthread_mutex_lock and pthread_mutexattr_init exist
+        # in libc. IRIX 6.5 has the first one in both libc and libpthread, but
+        # the second one only in libpthread, and lock.c needs it.
+        cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <pthread.h>
+int
+main ()
+{
+pthread_mutex_lock((pthread_mutex_t*)0);
+           pthread_mutexattr_init((pthread_mutexattr_t*)0);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  gl_have_pthread=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+        # Test for libpthread by looking for pthread_kill. (Not pthread_self,
+        # since it is defined as a macro on OSF/1.)
+        if test -n "$gl_have_pthread"; then
+          # The program links fine without libpthread. But it may actually
+          # need to link with libpthread in order to create multiple threads.
+          { echo "$as_me:$LINENO: checking for pthread_kill in -lpthread" >&5
+echo $ECHO_N "checking for pthread_kill in -lpthread... $ECHO_C" >&6; }
+if test "${ac_cv_lib_pthread_pthread_kill+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpthread  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char pthread_kill ();
+int
+main ()
+{
+return pthread_kill ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_pthread_pthread_kill=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_pthread_pthread_kill=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_pthread_pthread_kill" >&5
+echo "${ECHO_T}$ac_cv_lib_pthread_pthread_kill" >&6; }
+if test $ac_cv_lib_pthread_pthread_kill = yes; then
+  LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread
+             # On Solaris and HP-UX, most pthread functions exist also in libc.
+             # Therefore pthread_in_use() needs to actually try to create a
+             # thread: pthread_create from libc will fail, whereas
+             # pthread_create will actually create a thread.
+             case "$host_os" in
+               solaris* | hpux*)
+
+cat >>confdefs.h <<\_ACEOF
+#define PTHREAD_IN_USE_DETECTION_HARD 1
+_ACEOF
+
+             esac
+
+fi
+
+        else
+          # Some library is needed. Try libpthread and libc_r.
+          { echo "$as_me:$LINENO: checking for pthread_kill in -lpthread" >&5
+echo $ECHO_N "checking for pthread_kill in -lpthread... $ECHO_C" >&6; }
+if test "${ac_cv_lib_pthread_pthread_kill+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lpthread  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char pthread_kill ();
+int
+main ()
+{
+return pthread_kill ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_pthread_pthread_kill=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_pthread_pthread_kill=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_pthread_pthread_kill" >&5
+echo "${ECHO_T}$ac_cv_lib_pthread_pthread_kill" >&6; }
+if test $ac_cv_lib_pthread_pthread_kill = yes; then
+  gl_have_pthread=yes
+             LIBTHREAD=-lpthread LTLIBTHREAD=-lpthread
+             LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread
+fi
+
+          if test -z "$gl_have_pthread"; then
+            # For FreeBSD 4.
+            { echo "$as_me:$LINENO: checking for pthread_kill in -lc_r" >&5
+echo $ECHO_N "checking for pthread_kill in -lc_r... $ECHO_C" >&6; }
+if test "${ac_cv_lib_c_r_pthread_kill+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lc_r  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char pthread_kill ();
+int
+main ()
+{
+return pthread_kill ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_c_r_pthread_kill=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_c_r_pthread_kill=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_c_r_pthread_kill" >&5
+echo "${ECHO_T}$ac_cv_lib_c_r_pthread_kill" >&6; }
+if test $ac_cv_lib_c_r_pthread_kill = yes; then
+  gl_have_pthread=yes
+               LIBTHREAD=-lc_r LTLIBTHREAD=-lc_r
+               LIBMULTITHREAD=-lc_r LTLIBMULTITHREAD=-lc_r
+fi
+
+          fi
+        fi
+        if test -n "$gl_have_pthread"; then
+          gl_threads_api=posix
+
+cat >>confdefs.h <<\_ACEOF
+#define USE_POSIX_THREADS 1
+_ACEOF
+
+          if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then
+            if test $gl_have_weak = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define USE_POSIX_THREADS_WEAK 1
+_ACEOF
+
+              LIBTHREAD=
+              LTLIBTHREAD=
+            fi
+          fi
+          # OSF/1 4.0 and MacOS X 10.1 lack the pthread_rwlock_t type and the
+          # pthread_rwlock_* functions.
+          { echo "$as_me:$LINENO: checking for pthread_rwlock_t" >&5
+echo $ECHO_N "checking for pthread_rwlock_t... $ECHO_C" >&6; }
+if test "${ac_cv_type_pthread_rwlock_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <pthread.h>
+
+typedef pthread_rwlock_t ac__type_new_;
+int
+main ()
+{
+if ((ac__type_new_ *) 0)
+  return 0;
+if (sizeof (ac__type_new_))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_type_pthread_rwlock_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_type_pthread_rwlock_t=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_type_pthread_rwlock_t" >&5
+echo "${ECHO_T}$ac_cv_type_pthread_rwlock_t" >&6; }
+if test $ac_cv_type_pthread_rwlock_t = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_PTHREAD_RWLOCK 1
+_ACEOF
+
+fi
+
+          # glibc defines PTHREAD_MUTEX_RECURSIVE as enum, not as a macro.
+          cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <pthread.h>
+int
+main ()
+{
+#if __FreeBSD__ == 4
+error "No, in FreeBSD 4.0 recursive mutexes actually don't work."
+#else
+int x = (int)PTHREAD_MUTEX_RECURSIVE;
+return !x;
+#endif
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_PTHREAD_MUTEX_RECURSIVE 1
+_ACEOF
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+        fi
+      fi
+    fi
+    if test -z "$gl_have_pthread"; then
+      if test "$gl_use_threads" = yes || test "$gl_use_threads" = solaris; then
+        gl_have_solaristhread=
+        gl_save_LIBS="$LIBS"
+        LIBS="$LIBS -lthread"
+        cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <thread.h>
+#include <synch.h>
+int
+main ()
+{
+thr_self();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  gl_have_solaristhread=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+        LIBS="$gl_save_LIBS"
+        if test -n "$gl_have_solaristhread"; then
+          gl_threads_api=solaris
+          LIBTHREAD=-lthread
+          LTLIBTHREAD=-lthread
+          LIBMULTITHREAD="$LIBTHREAD"
+          LTLIBMULTITHREAD="$LTLIBTHREAD"
+
+cat >>confdefs.h <<\_ACEOF
+#define USE_SOLARIS_THREADS 1
+_ACEOF
+
+          if test $gl_have_weak = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define USE_SOLARIS_THREADS_WEAK 1
+_ACEOF
+
+            LIBTHREAD=
+            LTLIBTHREAD=
+          fi
+        fi
+      fi
+    fi
+    if test "$gl_use_threads" = pth; then
+      gl_save_CPPFLAGS="$CPPFLAGS"
+
+
+
+
+
+  { echo "$as_me:$LINENO: checking how to link with libpth" >&5
+echo $ECHO_N "checking how to link with libpth... $ECHO_C" >&6; }
+if test "${ac_cv_libpth_libs+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+
+
+
+
+    use_additional=yes
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+
+    eval additional_includedir=\"$includedir\"
+    eval additional_libdir=\"$libdir\"
+
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+
+# Check whether --with-libpth-prefix was given.
+if test "${with_libpth_prefix+set}" = set; then
+  withval=$with_libpth_prefix;
+    if test "X$withval" = "Xno"; then
+      use_additional=no
+    else
+      if test "X$withval" = "X"; then
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+
+          eval additional_includedir=\"$includedir\"
+          eval additional_libdir=\"$libdir\"
+
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+      else
+        additional_includedir="$withval/include"
+        additional_libdir="$withval/$acl_libdirstem"
+      fi
+    fi
+
+fi
+
+      LIBPTH=
+  LTLIBPTH=
+  INCPTH=
+  LIBPTH_PREFIX=
+  rpathdirs=
+  ltrpathdirs=
+  names_already_handled=
+  names_next_round='pth '
+  while test -n "$names_next_round"; do
+    names_this_round="$names_next_round"
+    names_next_round=
+    for name in $names_this_round; do
+      already_handled=
+      for n in $names_already_handled; do
+        if test "$n" = "$name"; then
+          already_handled=yes
+          break
+        fi
+      done
+      if test -z "$already_handled"; then
+        names_already_handled="$names_already_handled $name"
+                        uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
+        eval value=\"\$HAVE_LIB$uppername\"
+        if test -n "$value"; then
+          if test "$value" = yes; then
+            eval value=\"\$LIB$uppername\"
+            test -z "$value" || LIBPTH="${LIBPTH}${LIBPTH:+ }$value"
+            eval value=\"\$LTLIB$uppername\"
+            test -z "$value" || LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }$value"
+          else
+                                    :
+          fi
+        else
+                              found_dir=
+          found_la=
+          found_so=
+          found_a=
+          eval libname=\"$acl_libname_spec\"    # typically: libname=lib$name
+          if test -n "$acl_shlibext"; then
+            shrext=".$acl_shlibext"             # typically: shrext=.so
+          else
+            shrext=
+          fi
+          if test $use_additional = yes; then
+            dir="$additional_libdir"
+                                    if test -n "$acl_shlibext"; then
+              if test -f "$dir/$libname$shrext"; then
+                found_dir="$dir"
+                found_so="$dir/$libname$shrext"
+              else
+                if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+                  ver=`(cd "$dir" && \
+                        for f in "$libname$shrext".*; do echo "$f"; done \
+                        | sed -e "s,^$libname$shrext\\\\.,," \
+                        | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+                        | sed 1q ) 2>/dev/null`
+                  if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+                    found_dir="$dir"
+                    found_so="$dir/$libname$shrext.$ver"
+                  fi
+                else
+                  eval library_names=\"$acl_library_names_spec\"
+                  for f in $library_names; do
+                    if test -f "$dir/$f"; then
+                      found_dir="$dir"
+                      found_so="$dir/$f"
+                      break
+                    fi
+                  done
+                fi
+              fi
+            fi
+                        if test "X$found_dir" = "X"; then
+              if test -f "$dir/$libname.$acl_libext"; then
+                found_dir="$dir"
+                found_a="$dir/$libname.$acl_libext"
+              fi
+            fi
+            if test "X$found_dir" != "X"; then
+              if test -f "$dir/$libname.la"; then
+                found_la="$dir/$libname.la"
+              fi
+            fi
+          fi
+          if test "X$found_dir" = "X"; then
+            for x in $LDFLAGS $LTLIBPTH; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+              case "$x" in
+                -L*)
+                  dir=`echo "X$x" | sed -e 's/^X-L//'`
+                                    if test -n "$acl_shlibext"; then
+                    if test -f "$dir/$libname$shrext"; then
+                      found_dir="$dir"
+                      found_so="$dir/$libname$shrext"
+                    else
+                      if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+                        ver=`(cd "$dir" && \
+                              for f in "$libname$shrext".*; do echo "$f"; done \
+                              | sed -e "s,^$libname$shrext\\\\.,," \
+                              | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+                              | sed 1q ) 2>/dev/null`
+                        if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+                          found_dir="$dir"
+                          found_so="$dir/$libname$shrext.$ver"
+                        fi
+                      else
+                        eval library_names=\"$acl_library_names_spec\"
+                        for f in $library_names; do
+                          if test -f "$dir/$f"; then
+                            found_dir="$dir"
+                            found_so="$dir/$f"
+                            break
+                          fi
+                        done
+                      fi
+                    fi
+                  fi
+                                    if test "X$found_dir" = "X"; then
+                    if test -f "$dir/$libname.$acl_libext"; then
+                      found_dir="$dir"
+                      found_a="$dir/$libname.$acl_libext"
+                    fi
+                  fi
+                  if test "X$found_dir" != "X"; then
+                    if test -f "$dir/$libname.la"; then
+                      found_la="$dir/$libname.la"
+                    fi
+                  fi
+                  ;;
+              esac
+              if test "X$found_dir" != "X"; then
+                break
+              fi
+            done
+          fi
+          if test "X$found_dir" != "X"; then
+                        LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }-L$found_dir -l$name"
+            if test "X$found_so" != "X"; then
+                                                        if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/$acl_libdirstem"; then
+                                LIBPTH="${LIBPTH}${LIBPTH:+ }$found_so"
+              else
+                                                                                haveit=
+                for x in $ltrpathdirs; do
+                  if test "X$x" = "X$found_dir"; then
+                    haveit=yes
+                    break
+                  fi
+                done
+                if test -z "$haveit"; then
+                  ltrpathdirs="$ltrpathdirs $found_dir"
+                fi
+                                if test "$acl_hardcode_direct" = yes; then
+                                                      LIBPTH="${LIBPTH}${LIBPTH:+ }$found_so"
+                else
+                  if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
+                                                            LIBPTH="${LIBPTH}${LIBPTH:+ }$found_so"
+                                                            haveit=
+                    for x in $rpathdirs; do
+                      if test "X$x" = "X$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      rpathdirs="$rpathdirs $found_dir"
+                    fi
+                  else
+                                                                                haveit=
+                    for x in $LDFLAGS $LIBPTH; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                      if test "X$x" = "X-L$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      LIBPTH="${LIBPTH}${LIBPTH:+ }-L$found_dir"
+                    fi
+                    if test "$acl_hardcode_minus_L" != no; then
+                                                                                        LIBPTH="${LIBPTH}${LIBPTH:+ }$found_so"
+                    else
+                                                                                                                                                                                LIBPTH="${LIBPTH}${LIBPTH:+ }-l$name"
+                    fi
+                  fi
+                fi
+              fi
+            else
+              if test "X$found_a" != "X"; then
+                                LIBPTH="${LIBPTH}${LIBPTH:+ }$found_a"
+              else
+                                                LIBPTH="${LIBPTH}${LIBPTH:+ }-L$found_dir -l$name"
+              fi
+            fi
+                        additional_includedir=
+            case "$found_dir" in
+              */$acl_libdirstem | */$acl_libdirstem/)
+                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
+                LIBPTH_PREFIX="$basedir"
+                additional_includedir="$basedir/include"
+                ;;
+            esac
+            if test "X$additional_includedir" != "X"; then
+                                                                                                                if test "X$additional_includedir" != "X/usr/include"; then
+                haveit=
+                if test "X$additional_includedir" = "X/usr/local/include"; then
+                  if test -n "$GCC"; then
+                    case $host_os in
+                      linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+                    esac
+                  fi
+                fi
+                if test -z "$haveit"; then
+                  for x in $CPPFLAGS $INCPTH; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                    if test "X$x" = "X-I$additional_includedir"; then
+                      haveit=yes
+                      break
+                    fi
+                  done
+                  if test -z "$haveit"; then
+                    if test -d "$additional_includedir"; then
+                                            INCPTH="${INCPTH}${INCPTH:+ }-I$additional_includedir"
+                    fi
+                  fi
+                fi
+              fi
+            fi
+                        if test -n "$found_la"; then
+                                                        save_libdir="$libdir"
+              case "$found_la" in
+                */* | *\\*) . "$found_la" ;;
+                *) . "./$found_la" ;;
+              esac
+              libdir="$save_libdir"
+                            for dep in $dependency_libs; do
+                case "$dep" in
+                  -L*)
+                    additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+                                                                                                                                                                if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then
+                      haveit=
+                      if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then
+                        if test -n "$GCC"; then
+                          case $host_os in
+                            linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+                          esac
+                        fi
+                      fi
+                      if test -z "$haveit"; then
+                        haveit=
+                        for x in $LDFLAGS $LIBPTH; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                                                        LIBPTH="${LIBPTH}${LIBPTH:+ }-L$additional_libdir"
+                          fi
+                        fi
+                        haveit=
+                        for x in $LDFLAGS $LTLIBPTH; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                                                        LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }-L$additional_libdir"
+                          fi
+                        fi
+                      fi
+                    fi
+                    ;;
+                  -R*)
+                    dir=`echo "X$dep" | sed -e 's/^X-R//'`
+                    if test "$enable_rpath" != no; then
+                                                                  haveit=
+                      for x in $rpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        rpathdirs="$rpathdirs $dir"
+                      fi
+                                                                  haveit=
+                      for x in $ltrpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        ltrpathdirs="$ltrpathdirs $dir"
+                      fi
+                    fi
+                    ;;
+                  -l*)
+                                        names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+                    ;;
+                  *.la)
+                                                                                names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+                    ;;
+                  *)
+                                        LIBPTH="${LIBPTH}${LIBPTH:+ }$dep"
+                    LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }$dep"
+                    ;;
+                esac
+              done
+            fi
+          else
+                                                            LIBPTH="${LIBPTH}${LIBPTH:+ }-l$name"
+            LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }-l$name"
+          fi
+        fi
+      fi
+    done
+  done
+  if test "X$rpathdirs" != "X"; then
+    if test -n "$acl_hardcode_libdir_separator"; then
+                        alldirs=
+      for found_dir in $rpathdirs; do
+        alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir"
+      done
+            acl_save_libdir="$libdir"
+      libdir="$alldirs"
+      eval flag=\"$acl_hardcode_libdir_flag_spec\"
+      libdir="$acl_save_libdir"
+      LIBPTH="${LIBPTH}${LIBPTH:+ }$flag"
+    else
+            for found_dir in $rpathdirs; do
+        acl_save_libdir="$libdir"
+        libdir="$found_dir"
+        eval flag=\"$acl_hardcode_libdir_flag_spec\"
+        libdir="$acl_save_libdir"
+        LIBPTH="${LIBPTH}${LIBPTH:+ }$flag"
+      done
+    fi
+  fi
+  if test "X$ltrpathdirs" != "X"; then
+            for found_dir in $ltrpathdirs; do
+      LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }-R$found_dir"
+    done
+  fi
+
+    ac_cv_libpth_libs="$LIBPTH"
+    ac_cv_libpth_ltlibs="$LTLIBPTH"
+    ac_cv_libpth_cppflags="$INCPTH"
+    ac_cv_libpth_prefix="$LIBPTH_PREFIX"
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_libpth_libs" >&5
+echo "${ECHO_T}$ac_cv_libpth_libs" >&6; }
+  LIBPTH="$ac_cv_libpth_libs"
+  LTLIBPTH="$ac_cv_libpth_ltlibs"
+  INCPTH="$ac_cv_libpth_cppflags"
+  LIBPTH_PREFIX="$ac_cv_libpth_prefix"
+
+  for element in $INCPTH; do
+    haveit=
+    for x in $CPPFLAGS; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+      if test "X$x" = "X$element"; then
+        haveit=yes
+        break
+      fi
+    done
+    if test -z "$haveit"; then
+      CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element"
+    fi
+  done
+
+
+
+
+      HAVE_LIBPTH=yes
+
+
+
+      gl_have_pth=
+      gl_save_LIBS="$LIBS"
+      LIBS="$LIBS -lpth"
+      cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <pth.h>
+int
+main ()
+{
+pth_self();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  gl_have_pth=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+      LIBS="$gl_save_LIBS"
+      if test -n "$gl_have_pth"; then
+        gl_threads_api=pth
+        LIBTHREAD="$LIBPTH"
+        LTLIBTHREAD="$LTLIBPTH"
+        LIBMULTITHREAD="$LIBTHREAD"
+        LTLIBMULTITHREAD="$LTLIBTHREAD"
+
+cat >>confdefs.h <<\_ACEOF
+#define USE_PTH_THREADS 1
+_ACEOF
+
+        if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then
+          if test $gl_have_weak = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define USE_PTH_THREADS_WEAK 1
+_ACEOF
+
+            LIBTHREAD=
+            LTLIBTHREAD=
+          fi
+        fi
+      else
+        CPPFLAGS="$gl_save_CPPFLAGS"
+      fi
+    fi
+    if test -z "$gl_have_pthread"; then
+      if test "$gl_use_threads" = yes || test "$gl_use_threads" = win32; then
+        if { case "$host_os" in
+               mingw*) true;;
+               *) false;;
+             esac
+           }; then
+          gl_threads_api=win32
+
+cat >>confdefs.h <<\_ACEOF
+#define USE_WIN32_THREADS 1
+_ACEOF
+
+        fi
+      fi
+    fi
+  fi
+  { echo "$as_me:$LINENO: checking for multithread API to use" >&5
+echo $ECHO_N "checking for multithread API to use... $ECHO_C" >&6; }
+  { echo "$as_me:$LINENO: result: $gl_threads_api" >&5
+echo "${ECHO_T}$gl_threads_api" >&6; }
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    use_additional=yes
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+
+    eval additional_includedir=\"$includedir\"
+    eval additional_libdir=\"$libdir\"
+
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+
+# Check whether --with-libiconv-prefix was given.
+if test "${with_libiconv_prefix+set}" = set; then
+  withval=$with_libiconv_prefix;
+    if test "X$withval" = "Xno"; then
+      use_additional=no
+    else
+      if test "X$withval" = "X"; then
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+
+          eval additional_includedir=\"$includedir\"
+          eval additional_libdir=\"$libdir\"
+
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+      else
+        additional_includedir="$withval/include"
+        additional_libdir="$withval/$acl_libdirstem"
+      fi
+    fi
+
+fi
+
+      LIBICONV=
+  LTLIBICONV=
+  INCICONV=
+  LIBICONV_PREFIX=
+  rpathdirs=
+  ltrpathdirs=
+  names_already_handled=
+  names_next_round='iconv '
+  while test -n "$names_next_round"; do
+    names_this_round="$names_next_round"
+    names_next_round=
+    for name in $names_this_round; do
+      already_handled=
+      for n in $names_already_handled; do
+        if test "$n" = "$name"; then
+          already_handled=yes
+          break
+        fi
+      done
+      if test -z "$already_handled"; then
+        names_already_handled="$names_already_handled $name"
+                        uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
+        eval value=\"\$HAVE_LIB$uppername\"
+        if test -n "$value"; then
+          if test "$value" = yes; then
+            eval value=\"\$LIB$uppername\"
+            test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value"
+            eval value=\"\$LTLIB$uppername\"
+            test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value"
+          else
+                                    :
+          fi
+        else
+                              found_dir=
+          found_la=
+          found_so=
+          found_a=
+          eval libname=\"$acl_libname_spec\"    # typically: libname=lib$name
+          if test -n "$acl_shlibext"; then
+            shrext=".$acl_shlibext"             # typically: shrext=.so
+          else
+            shrext=
+          fi
+          if test $use_additional = yes; then
+            dir="$additional_libdir"
+                                    if test -n "$acl_shlibext"; then
+              if test -f "$dir/$libname$shrext"; then
+                found_dir="$dir"
+                found_so="$dir/$libname$shrext"
+              else
+                if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+                  ver=`(cd "$dir" && \
+                        for f in "$libname$shrext".*; do echo "$f"; done \
+                        | sed -e "s,^$libname$shrext\\\\.,," \
+                        | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+                        | sed 1q ) 2>/dev/null`
+                  if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+                    found_dir="$dir"
+                    found_so="$dir/$libname$shrext.$ver"
+                  fi
+                else
+                  eval library_names=\"$acl_library_names_spec\"
+                  for f in $library_names; do
+                    if test -f "$dir/$f"; then
+                      found_dir="$dir"
+                      found_so="$dir/$f"
+                      break
+                    fi
+                  done
+                fi
+              fi
+            fi
+                        if test "X$found_dir" = "X"; then
+              if test -f "$dir/$libname.$acl_libext"; then
+                found_dir="$dir"
+                found_a="$dir/$libname.$acl_libext"
+              fi
+            fi
+            if test "X$found_dir" != "X"; then
+              if test -f "$dir/$libname.la"; then
+                found_la="$dir/$libname.la"
+              fi
+            fi
+          fi
+          if test "X$found_dir" = "X"; then
+            for x in $LDFLAGS $LTLIBICONV; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+              case "$x" in
+                -L*)
+                  dir=`echo "X$x" | sed -e 's/^X-L//'`
+                                    if test -n "$acl_shlibext"; then
+                    if test -f "$dir/$libname$shrext"; then
+                      found_dir="$dir"
+                      found_so="$dir/$libname$shrext"
+                    else
+                      if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+                        ver=`(cd "$dir" && \
+                              for f in "$libname$shrext".*; do echo "$f"; done \
+                              | sed -e "s,^$libname$shrext\\\\.,," \
+                              | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+                              | sed 1q ) 2>/dev/null`
+                        if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+                          found_dir="$dir"
+                          found_so="$dir/$libname$shrext.$ver"
+                        fi
+                      else
+                        eval library_names=\"$acl_library_names_spec\"
+                        for f in $library_names; do
+                          if test -f "$dir/$f"; then
+                            found_dir="$dir"
+                            found_so="$dir/$f"
+                            break
+                          fi
+                        done
+                      fi
+                    fi
+                  fi
+                                    if test "X$found_dir" = "X"; then
+                    if test -f "$dir/$libname.$acl_libext"; then
+                      found_dir="$dir"
+                      found_a="$dir/$libname.$acl_libext"
+                    fi
+                  fi
+                  if test "X$found_dir" != "X"; then
+                    if test -f "$dir/$libname.la"; then
+                      found_la="$dir/$libname.la"
+                    fi
+                  fi
+                  ;;
+              esac
+              if test "X$found_dir" != "X"; then
+                break
+              fi
+            done
+          fi
+          if test "X$found_dir" != "X"; then
+                        LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name"
+            if test "X$found_so" != "X"; then
+                                                        if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/$acl_libdirstem"; then
+                                LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+              else
+                                                                                haveit=
+                for x in $ltrpathdirs; do
+                  if test "X$x" = "X$found_dir"; then
+                    haveit=yes
+                    break
+                  fi
+                done
+                if test -z "$haveit"; then
+                  ltrpathdirs="$ltrpathdirs $found_dir"
+                fi
+                                if test "$acl_hardcode_direct" = yes; then
+                                                      LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+                else
+                  if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
+                                                            LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+                                                            haveit=
+                    for x in $rpathdirs; do
+                      if test "X$x" = "X$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      rpathdirs="$rpathdirs $found_dir"
+                    fi
+                  else
+                                                                                haveit=
+                    for x in $LDFLAGS $LIBICONV; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                      if test "X$x" = "X-L$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir"
+                    fi
+                    if test "$acl_hardcode_minus_L" != no; then
+                                                                                        LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+                    else
+                                                                                                                                                                                LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name"
+                    fi
+                  fi
+                fi
+              fi
+            else
+              if test "X$found_a" != "X"; then
+                                LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a"
+              else
+                                                LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name"
+              fi
+            fi
+                        additional_includedir=
+            case "$found_dir" in
+              */$acl_libdirstem | */$acl_libdirstem/)
+                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
+                LIBICONV_PREFIX="$basedir"
+                additional_includedir="$basedir/include"
+                ;;
+            esac
+            if test "X$additional_includedir" != "X"; then
+                                                                                                                if test "X$additional_includedir" != "X/usr/include"; then
+                haveit=
+                if test "X$additional_includedir" = "X/usr/local/include"; then
+                  if test -n "$GCC"; then
+                    case $host_os in
+                      linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+                    esac
+                  fi
+                fi
+                if test -z "$haveit"; then
+                  for x in $CPPFLAGS $INCICONV; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                    if test "X$x" = "X-I$additional_includedir"; then
+                      haveit=yes
+                      break
+                    fi
+                  done
+                  if test -z "$haveit"; then
+                    if test -d "$additional_includedir"; then
+                                            INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir"
+                    fi
+                  fi
+                fi
+              fi
+            fi
+                        if test -n "$found_la"; then
+                                                        save_libdir="$libdir"
+              case "$found_la" in
+                */* | *\\*) . "$found_la" ;;
+                *) . "./$found_la" ;;
+              esac
+              libdir="$save_libdir"
+                            for dep in $dependency_libs; do
+                case "$dep" in
+                  -L*)
+                    additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+                                                                                                                                                                if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then
+                      haveit=
+                      if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then
+                        if test -n "$GCC"; then
+                          case $host_os in
+                            linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+                          esac
+                        fi
+                      fi
+                      if test -z "$haveit"; then
+                        haveit=
+                        for x in $LDFLAGS $LIBICONV; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                                                        LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir"
+                          fi
+                        fi
+                        haveit=
+                        for x in $LDFLAGS $LTLIBICONV; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                                                        LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir"
+                          fi
+                        fi
+                      fi
+                    fi
+                    ;;
+                  -R*)
+                    dir=`echo "X$dep" | sed -e 's/^X-R//'`
+                    if test "$enable_rpath" != no; then
+                                                                  haveit=
+                      for x in $rpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        rpathdirs="$rpathdirs $dir"
+                      fi
+                                                                  haveit=
+                      for x in $ltrpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        ltrpathdirs="$ltrpathdirs $dir"
+                      fi
+                    fi
+                    ;;
+                  -l*)
+                                        names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+                    ;;
+                  *.la)
+                                                                                names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+                    ;;
+                  *)
+                                        LIBICONV="${LIBICONV}${LIBICONV:+ }$dep"
+                    LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep"
+                    ;;
+                esac
+              done
+            fi
+          else
+                                                            LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name"
+            LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name"
+          fi
+        fi
+      fi
+    done
+  done
+  if test "X$rpathdirs" != "X"; then
+    if test -n "$acl_hardcode_libdir_separator"; then
+                        alldirs=
+      for found_dir in $rpathdirs; do
+        alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir"
+      done
+            acl_save_libdir="$libdir"
+      libdir="$alldirs"
+      eval flag=\"$acl_hardcode_libdir_flag_spec\"
+      libdir="$acl_save_libdir"
+      LIBICONV="${LIBICONV}${LIBICONV:+ }$flag"
+    else
+            for found_dir in $rpathdirs; do
+        acl_save_libdir="$libdir"
+        libdir="$found_dir"
+        eval flag=\"$acl_hardcode_libdir_flag_spec\"
+        libdir="$acl_save_libdir"
+        LIBICONV="${LIBICONV}${LIBICONV:+ }$flag"
+      done
+    fi
+  fi
+  if test "X$ltrpathdirs" != "X"; then
+            for found_dir in $ltrpathdirs; do
+      LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir"
+    done
+  fi
+
+
+
+
+
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+int foo (int a) { a = __builtin_expect (a, 10); return a == 10 ? 0 : 1; }
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_BUILTIN_EXPECT 1
+_ACEOF
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+
+
+
+
+
+
+for ac_header in argz.h inttypes.h limits.h unistd.h sys/param.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    ( cat <<\_ASBOX
+## -------------------------------- ##
+## Report this to triton at kumal.info ##
+## -------------------------------- ##
+_ASBOX
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+for ac_func in getcwd getegid geteuid getgid getuid mempcpy munmap \
+    stpcpy strcasecmp strdup strtoul tsearch argz_count argz_stringify \
+    argz_next __fsetlocking
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	eval "$as_ac_var=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_var'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+
+  { echo "$as_me:$LINENO: checking whether feof_unlocked is declared" >&5
+echo $ECHO_N "checking whether feof_unlocked is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_feof_unlocked+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdio.h>
+int
+main ()
+{
+
+#ifndef feof_unlocked
+  char *p = (char *) feof_unlocked;
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_decl_feof_unlocked=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_have_decl_feof_unlocked=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_feof_unlocked" >&5
+echo "${ECHO_T}$ac_cv_have_decl_feof_unlocked" >&6; }
+  if test $ac_cv_have_decl_feof_unlocked = yes; then
+    gt_value=1
+  else
+    gt_value=0
+  fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FEOF_UNLOCKED $gt_value
+_ACEOF
+
+
+
+  { echo "$as_me:$LINENO: checking whether fgets_unlocked is declared" >&5
+echo $ECHO_N "checking whether fgets_unlocked is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_fgets_unlocked+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdio.h>
+int
+main ()
+{
+
+#ifndef fgets_unlocked
+  char *p = (char *) fgets_unlocked;
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_decl_fgets_unlocked=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_have_decl_fgets_unlocked=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_fgets_unlocked" >&5
+echo "${ECHO_T}$ac_cv_have_decl_fgets_unlocked" >&6; }
+  if test $ac_cv_have_decl_fgets_unlocked = yes; then
+    gt_value=1
+  else
+    gt_value=0
+  fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_FGETS_UNLOCKED $gt_value
+_ACEOF
+
+
+
+
+
+
+
+
+          am_save_CPPFLAGS="$CPPFLAGS"
+
+  for element in $INCICONV; do
+    haveit=
+    for x in $CPPFLAGS; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+      if test "X$x" = "X$element"; then
+        haveit=yes
+        break
+      fi
+    done
+    if test -z "$haveit"; then
+      CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element"
+    fi
+  done
+
+
+  { echo "$as_me:$LINENO: checking for iconv" >&5
+echo $ECHO_N "checking for iconv... $ECHO_C" >&6; }
+if test "${am_cv_func_iconv+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+    am_cv_func_iconv="no, consider installing GNU libiconv"
+    am_cv_lib_iconv=no
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <iconv.h>
+int
+main ()
+{
+iconv_t cd = iconv_open("","");
+       iconv(cd,NULL,NULL,NULL,NULL);
+       iconv_close(cd);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  am_cv_func_iconv=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+    if test "$am_cv_func_iconv" != yes; then
+      am_save_LIBS="$LIBS"
+      LIBS="$LIBS $LIBICONV"
+      cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdlib.h>
+#include <iconv.h>
+int
+main ()
+{
+iconv_t cd = iconv_open("","");
+         iconv(cd,NULL,NULL,NULL,NULL);
+         iconv_close(cd);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  am_cv_lib_iconv=yes
+        am_cv_func_iconv=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+      LIBS="$am_save_LIBS"
+    fi
+
+fi
+{ echo "$as_me:$LINENO: result: $am_cv_func_iconv" >&5
+echo "${ECHO_T}$am_cv_func_iconv" >&6; }
+  if test "$am_cv_func_iconv" = yes; then
+    { echo "$as_me:$LINENO: checking for working iconv" >&5
+echo $ECHO_N "checking for working iconv... $ECHO_C" >&6; }
+if test "${am_cv_func_iconv_works+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+            am_save_LIBS="$LIBS"
+      if test $am_cv_lib_iconv = yes; then
+        LIBS="$LIBS $LIBICONV"
+      fi
+      if test "$cross_compiling" = yes; then
+  case "$host_os" in
+           aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
+           *)            am_cv_func_iconv_works="guessing yes" ;;
+         esac
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#include <iconv.h>
+#include <string.h>
+int main ()
+{
+  /* Test against AIX 5.1 bug: Failures are not distinguishable from successful
+     returns.  */
+  {
+    iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8");
+    if (cd_utf8_to_88591 != (iconv_t)(-1))
+      {
+        static const char input[] = "\342\202\254"; /* EURO SIGN */
+        char buf[10];
+        const char *inptr = input;
+        size_t inbytesleft = strlen (input);
+        char *outptr = buf;
+        size_t outbytesleft = sizeof (buf);
+        size_t res = iconv (cd_utf8_to_88591,
+                            (char **) &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if (res == 0)
+          return 1;
+      }
+  }
+#if 0 /* This bug could be worked around by the caller.  */
+  /* Test against HP-UX 11.11 bug: Positive return value instead of 0.  */
+  {
+    iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591");
+    if (cd_88591_to_utf8 != (iconv_t)(-1))
+      {
+        static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
+        char buf[50];
+        const char *inptr = input;
+        size_t inbytesleft = strlen (input);
+        char *outptr = buf;
+        size_t outbytesleft = sizeof (buf);
+        size_t res = iconv (cd_88591_to_utf8,
+                            (char **) &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if ((int)res > 0)
+          return 1;
+      }
+  }
+#endif
+  /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is
+     provided.  */
+  if (/* Try standardized names.  */
+      iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1)
+      /* Try IRIX, OSF/1 names.  */
+      && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1)
+      /* Try AIX names.  */
+      && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1)
+      /* Try HP-UX names.  */
+      && iconv_open ("utf8", "eucJP") == (iconv_t)(-1))
+    return 1;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  am_cv_func_iconv_works=yes
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+am_cv_func_iconv_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+      LIBS="$am_save_LIBS"
+
+fi
+{ echo "$as_me:$LINENO: result: $am_cv_func_iconv_works" >&5
+echo "${ECHO_T}$am_cv_func_iconv_works" >&6; }
+    case "$am_cv_func_iconv_works" in
+      *no) am_func_iconv=no am_cv_lib_iconv=no ;;
+      *)   am_func_iconv=yes ;;
+    esac
+  else
+    am_func_iconv=no am_cv_lib_iconv=no
+  fi
+  if test "$am_func_iconv" = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_ICONV 1
+_ACEOF
+
+  fi
+  if test "$am_cv_lib_iconv" = yes; then
+    { echo "$as_me:$LINENO: checking how to link with libiconv" >&5
+echo $ECHO_N "checking how to link with libiconv... $ECHO_C" >&6; }
+    { echo "$as_me:$LINENO: result: $LIBICONV" >&5
+echo "${ECHO_T}$LIBICONV" >&6; }
+  else
+            CPPFLAGS="$am_save_CPPFLAGS"
+    LIBICONV=
+    LTLIBICONV=
+  fi
+
+
+
+  if test "$am_cv_func_iconv" = yes; then
+    { echo "$as_me:$LINENO: checking for iconv declaration" >&5
+echo $ECHO_N "checking for iconv declaration... $ECHO_C" >&6; }
+    if test "${am_cv_proto_iconv+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+      cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#include <stdlib.h>
+#include <iconv.h>
+extern
+#ifdef __cplusplus
+"C"
+#endif
+#if defined(__STDC__) || defined(__cplusplus)
+size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
+#else
+size_t iconv();
+#endif
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  am_cv_proto_iconv_arg1=""
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	am_cv_proto_iconv_arg1="const"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+      am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"
+fi
+
+    am_cv_proto_iconv=`echo "$am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
+    { echo "$as_me:$LINENO: result: ${ac_t:-
+         }$am_cv_proto_iconv" >&5
+echo "${ECHO_T}${ac_t:-
+         }$am_cv_proto_iconv" >&6; }
+
+cat >>confdefs.h <<_ACEOF
+#define ICONV_CONST $am_cv_proto_iconv_arg1
+_ACEOF
+
+  fi
+
+
+      { echo "$as_me:$LINENO: checking for NL_LOCALE_NAME macro" >&5
+echo $ECHO_N "checking for NL_LOCALE_NAME macro... $ECHO_C" >&6; }
+if test "${gt_cv_nl_locale_name+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <langinfo.h>
+#include <locale.h>
+int
+main ()
+{
+char* cs = nl_langinfo(_NL_LOCALE_NAME(LC_MESSAGES));
+       return !cs;
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  gt_cv_nl_locale_name=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	gt_cv_nl_locale_name=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ echo "$as_me:$LINENO: result: $gt_cv_nl_locale_name" >&5
+echo "${ECHO_T}$gt_cv_nl_locale_name" >&6; }
+  if test $gt_cv_nl_locale_name = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_NL_LOCALE_NAME 1
+_ACEOF
+
+  fi
+
+                      for ac_prog in bison
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_INTLBISON+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$INTLBISON"; then
+  ac_cv_prog_INTLBISON="$INTLBISON" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_INTLBISON="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+INTLBISON=$ac_cv_prog_INTLBISON
+if test -n "$INTLBISON"; then
+  { echo "$as_me:$LINENO: result: $INTLBISON" >&5
+echo "${ECHO_T}$INTLBISON" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+  test -n "$INTLBISON" && break
+done
+
+  if test -z "$INTLBISON"; then
+    ac_verc_fail=yes
+  else
+        { echo "$as_me:$LINENO: checking version of bison" >&5
+echo $ECHO_N "checking version of bison... $ECHO_C" >&6; }
+    ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
+    case $ac_prog_version in
+      '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
+      1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*)
+         ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
+      *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
+    esac
+    { echo "$as_me:$LINENO: result: $ac_prog_version" >&5
+echo "${ECHO_T}$ac_prog_version" >&6; }
+  fi
+  if test $ac_verc_fail = yes; then
+    INTLBISON=:
+  fi
+
+
+  { echo "$as_me:$LINENO: checking for long long int" >&5
+echo $ECHO_N "checking for long long int... $ECHO_C" >&6; }
+if test "${ac_cv_type_long_long_int+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+
+  /* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Test preprocessor.  */
+      #if ! (-9223372036854775807LL < 0 && 0 < 9223372036854775807ll)
+        error in preprocessor;
+      #endif
+      #if ! (18446744073709551615ULL <= -1ull)
+        error in preprocessor;
+      #endif
+      /* Test literals.  */
+      long long int ll = 9223372036854775807ll;
+      long long int nll = -9223372036854775807LL;
+      unsigned long long int ull = 18446744073709551615ULL;
+      /* Test constant expressions.   */
+      typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll)
+		     ? 1 : -1)];
+      typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1
+		     ? 1 : -1)];
+      int i = 63;
+int
+main ()
+{
+/* Test availability of runtime routines for shift and division.  */
+      long long int llmax = 9223372036854775807ll;
+      unsigned long long int ullmax = 18446744073709551615ull;
+      return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i)
+	      | (llmax / ll) | (llmax % ll)
+	      | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i)
+	      | (ullmax / ull) | (ullmax % ull));
+  ;
+  return 0;
+}
+
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  			if test "$cross_compiling" = yes; then
+  ac_cv_type_long_long_int=yes
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <limits.h>
+	       #ifndef LLONG_MAX
+	       # define HALF \
+			(1LL << (sizeof (long long int) * CHAR_BIT - 2))
+	       # define LLONG_MAX (HALF - 1 + HALF)
+	       #endif
+int
+main ()
+{
+long long int n = 1;
+	       int i;
+	       for (i = 0; ; i++)
+		 {
+		   long long int m = n << i;
+		   if (m >> i != n)
+		     return 1;
+		   if (LLONG_MAX / 2 < m)
+		     break;
+		 }
+	       return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_type_long_long_int=yes
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+ac_cv_type_long_long_int=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_type_long_long_int=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_type_long_long_int" >&5
+echo "${ECHO_T}$ac_cv_type_long_long_int" >&6; }
+  if test $ac_cv_type_long_long_int = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_LONG_LONG_INT 1
+_ACEOF
+
+  fi
+
+
+  { echo "$as_me:$LINENO: checking for wchar_t" >&5
+echo $ECHO_N "checking for wchar_t... $ECHO_C" >&6; }
+if test "${gt_cv_c_wchar_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stddef.h>
+       wchar_t foo = (wchar_t)'\0';
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  gt_cv_c_wchar_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	gt_cv_c_wchar_t=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $gt_cv_c_wchar_t" >&5
+echo "${ECHO_T}$gt_cv_c_wchar_t" >&6; }
+  if test $gt_cv_c_wchar_t = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_WCHAR_T 1
+_ACEOF
+
+  fi
+
+
+  { echo "$as_me:$LINENO: checking for wint_t" >&5
+echo $ECHO_N "checking for wint_t... $ECHO_C" >&6; }
+if test "${gt_cv_c_wint_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included
+   before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+       wint_t foo = (wchar_t)'\0';
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  gt_cv_c_wint_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	gt_cv_c_wint_t=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $gt_cv_c_wint_t" >&5
+echo "${ECHO_T}$gt_cv_c_wint_t" >&6; }
+  if test $gt_cv_c_wint_t = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_WINT_T 1
+_ACEOF
+
+  fi
+
+
+
+
+  { echo "$as_me:$LINENO: checking for intmax_t" >&5
+echo $ECHO_N "checking for intmax_t... $ECHO_C" >&6; }
+if test "${gt_cv_c_intmax_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#include <stddef.h>
+#include <stdlib.h>
+#if HAVE_STDINT_H_WITH_UINTMAX
+#include <stdint.h>
+#endif
+#if HAVE_INTTYPES_H_WITH_UINTMAX
+#include <inttypes.h>
+#endif
+
+int
+main ()
+{
+intmax_t x = -1;
+        return !x;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  gt_cv_c_intmax_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	gt_cv_c_intmax_t=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $gt_cv_c_intmax_t" >&5
+echo "${ECHO_T}$gt_cv_c_intmax_t" >&6; }
+  if test $gt_cv_c_intmax_t = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_INTMAX_T 1
+_ACEOF
+
+  fi
+
+
+
+  { echo "$as_me:$LINENO: checking whether printf() supports POSIX/XSI format strings" >&5
+echo $ECHO_N "checking whether printf() supports POSIX/XSI format strings... $ECHO_C" >&6; }
+if test "${gt_cv_func_printf_posix+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+      if test "$cross_compiling" = yes; then
+
+        cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#if defined __NetBSD__ || defined __BEOS__ || defined _MSC_VER || defined __MINGW32__ || defined __CYGWIN__
+  notposix
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "notposix" >/dev/null 2>&1; then
+  gt_cv_func_printf_posix="guessing no"
+else
+  gt_cv_func_printf_posix="guessing yes"
+fi
+rm -f conftest*
+
+
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#include <stdio.h>
+#include <string.h>
+/* The string "%2$d %1$d", with dollar characters protected from the shell's
+   dollar expansion (possibly an autoconf bug).  */
+static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' };
+static char buf[100];
+int main ()
+{
+  sprintf (buf, format, 33, 55);
+  return (strcmp (buf, "55 33") != 0);
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  gt_cv_func_printf_posix=yes
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+gt_cv_func_printf_posix=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+
+
+fi
+{ echo "$as_me:$LINENO: result: $gt_cv_func_printf_posix" >&5
+echo "${ECHO_T}$gt_cv_func_printf_posix" >&6; }
+  case $gt_cv_func_printf_posix in
+    *yes)
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_POSIX_PRINTF 1
+_ACEOF
+
+      ;;
+  esac
+
+
+    { echo "$as_me:$LINENO: checking whether we are using the GNU C Library 2.1 or newer" >&5
+echo $ECHO_N "checking whether we are using the GNU C Library 2.1 or newer... $ECHO_C" >&6; }
+if test "${ac_cv_gnu_library_2_1+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#include <features.h>
+#ifdef __GNU_LIBRARY__
+ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2)
+  Lucky GNU user
+ #endif
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "Lucky GNU user" >/dev/null 2>&1; then
+  ac_cv_gnu_library_2_1=yes
+else
+  ac_cv_gnu_library_2_1=no
+fi
+rm -f conftest*
+
+
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_gnu_library_2_1" >&5
+echo "${ECHO_T}$ac_cv_gnu_library_2_1" >&6; }
+
+    GLIBC21="$ac_cv_gnu_library_2_1"
+
+
+
+
+for ac_header in stdint.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    ( cat <<\_ASBOX
+## -------------------------------- ##
+## Report this to triton at kumal.info ##
+## -------------------------------- ##
+_ASBOX
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+    { echo "$as_me:$LINENO: checking for SIZE_MAX" >&5
+echo $ECHO_N "checking for SIZE_MAX... $ECHO_C" >&6; }
+  if test "${gl_cv_size_max+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+    gl_cv_size_max=
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#include <limits.h>
+#if HAVE_STDINT_H
+#include <stdint.h>
+#endif
+#ifdef SIZE_MAX
+Found it
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "Found it" >/dev/null 2>&1; then
+  gl_cv_size_max=yes
+fi
+rm -f conftest*
+
+    if test -z "$gl_cv_size_max"; then
+                        if test "$cross_compiling" = yes; then
+  # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stddef.h>
+#include <limits.h>
+int
+main ()
+{
+static int test_array [1 - 2 * !((sizeof (size_t) * CHAR_BIT - 1) >= 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stddef.h>
+#include <limits.h>
+int
+main ()
+{
+static int test_array [1 - 2 * !((sizeof (size_t) * CHAR_BIT - 1) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_hi=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_lo=`expr $ac_mid + 1`
+			if test $ac_lo -le $ac_mid; then
+			  ac_lo= ac_hi=
+			  break
+			fi
+			ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stddef.h>
+#include <limits.h>
+int
+main ()
+{
+static int test_array [1 - 2 * !((sizeof (size_t) * CHAR_BIT - 1) < 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stddef.h>
+#include <limits.h>
+int
+main ()
+{
+static int test_array [1 - 2 * !((sizeof (size_t) * CHAR_BIT - 1) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_lo=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_hi=`expr '(' $ac_mid ')' - 1`
+			if test $ac_mid -le $ac_hi; then
+			  ac_lo= ac_hi=
+			  break
+			fi
+			ac_mid=`expr 2 '*' $ac_mid`
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_lo= ac_hi=
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stddef.h>
+#include <limits.h>
+int
+main ()
+{
+static int test_array [1 - 2 * !((sizeof (size_t) * CHAR_BIT - 1) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_hi=$ac_mid
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) size_t_bits_minus_1=$ac_lo;;
+'') size_t_bits_minus_1= ;;
+esac
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stddef.h>
+#include <limits.h>
+static long int longval () { return sizeof (size_t) * CHAR_BIT - 1; }
+static unsigned long int ulongval () { return sizeof (size_t) * CHAR_BIT - 1; }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    return 1;
+  if ((sizeof (size_t) * CHAR_BIT - 1) < 0)
+    {
+      long int i = longval ();
+      if (i != (sizeof (size_t) * CHAR_BIT - 1))
+	return 1;
+      fprintf (f, "%ld\n", i);
+    }
+  else
+    {
+      unsigned long int i = ulongval ();
+      if (i != (sizeof (size_t) * CHAR_BIT - 1))
+	return 1;
+      fprintf (f, "%lu\n", i);
+    }
+  return ferror (f) || fclose (f) != 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  size_t_bits_minus_1=`cat conftest.val`
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+size_t_bits_minus_1=
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.val
+      if test "$cross_compiling" = yes; then
+  # Depending upon the size, compute the lo and hi bounds.
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stddef.h>
+int
+main ()
+{
+static int test_array [1 - 2 * !((sizeof (size_t) <= sizeof (unsigned int)) >= 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stddef.h>
+int
+main ()
+{
+static int test_array [1 - 2 * !((sizeof (size_t) <= sizeof (unsigned int)) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_hi=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_lo=`expr $ac_mid + 1`
+			if test $ac_lo -le $ac_mid; then
+			  ac_lo= ac_hi=
+			  break
+			fi
+			ac_mid=`expr 2 '*' $ac_mid + 1`
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stddef.h>
+int
+main ()
+{
+static int test_array [1 - 2 * !((sizeof (size_t) <= sizeof (unsigned int)) < 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stddef.h>
+int
+main ()
+{
+static int test_array [1 - 2 * !((sizeof (size_t) <= sizeof (unsigned int)) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_lo=$ac_mid; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_hi=`expr '(' $ac_mid ')' - 1`
+			if test $ac_mid -le $ac_hi; then
+			  ac_lo= ac_hi=
+			  break
+			fi
+			ac_mid=`expr 2 '*' $ac_mid`
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_lo= ac_hi=
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  ac_mid=`expr '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo`
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stddef.h>
+int
+main ()
+{
+static int test_array [1 - 2 * !((sizeof (size_t) <= sizeof (unsigned int)) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_hi=$ac_mid
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_lo=`expr '(' $ac_mid ')' + 1`
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) fits_in_uint=$ac_lo;;
+'') fits_in_uint= ;;
+esac
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stddef.h>
+static long int longval () { return sizeof (size_t) <= sizeof (unsigned int); }
+static unsigned long int ulongval () { return sizeof (size_t) <= sizeof (unsigned int); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    return 1;
+  if ((sizeof (size_t) <= sizeof (unsigned int)) < 0)
+    {
+      long int i = longval ();
+      if (i != (sizeof (size_t) <= sizeof (unsigned int)))
+	return 1;
+      fprintf (f, "%ld\n", i);
+    }
+  else
+    {
+      unsigned long int i = ulongval ();
+      if (i != (sizeof (size_t) <= sizeof (unsigned int)))
+	return 1;
+      fprintf (f, "%lu\n", i);
+    }
+  return ferror (f) || fclose (f) != 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  fits_in_uint=`cat conftest.val`
+else
+  echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+fits_in_uint=
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f conftest.val
+      if test -n "$size_t_bits_minus_1" && test -n "$fits_in_uint"; then
+        if test $fits_in_uint = 1; then
+                              cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stddef.h>
+            extern size_t foo;
+            extern unsigned long foo;
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  fits_in_uint=0
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+        fi
+                                if test $fits_in_uint = 1; then
+          gl_cv_size_max="(((1U << $size_t_bits_minus_1) - 1) * 2 + 1)"
+        else
+          gl_cv_size_max="(((1UL << $size_t_bits_minus_1) - 1) * 2 + 1)"
+        fi
+      else
+                gl_cv_size_max='((size_t)~(size_t)0)'
+      fi
+    fi
+
+fi
+
+  { echo "$as_me:$LINENO: result: $gl_cv_size_max" >&5
+echo "${ECHO_T}$gl_cv_size_max" >&6; }
+  if test "$gl_cv_size_max" != yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define SIZE_MAX $gl_cv_size_max
+_ACEOF
+
+  fi
+
+
+
+
+
+for ac_header in stdint.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    ( cat <<\_ASBOX
+## -------------------------------- ##
+## Report this to triton at kumal.info ##
+## -------------------------------- ##
+_ASBOX
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+    { echo "$as_me:$LINENO: checking for CFPreferencesCopyAppValue" >&5
+echo $ECHO_N "checking for CFPreferencesCopyAppValue... $ECHO_C" >&6; }
+if test "${gt_cv_func_CFPreferencesCopyAppValue+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  gt_save_LIBS="$LIBS"
+     LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+     cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <CoreFoundation/CFPreferences.h>
+int
+main ()
+{
+CFPreferencesCopyAppValue(NULL, NULL)
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  gt_cv_func_CFPreferencesCopyAppValue=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	gt_cv_func_CFPreferencesCopyAppValue=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+     LIBS="$gt_save_LIBS"
+fi
+{ echo "$as_me:$LINENO: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5
+echo "${ECHO_T}$gt_cv_func_CFPreferencesCopyAppValue" >&6; }
+  if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_CFPREFERENCESCOPYAPPVALUE 1
+_ACEOF
+
+  fi
+    { echo "$as_me:$LINENO: checking for CFLocaleCopyCurrent" >&5
+echo $ECHO_N "checking for CFLocaleCopyCurrent... $ECHO_C" >&6; }
+if test "${gt_cv_func_CFLocaleCopyCurrent+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  gt_save_LIBS="$LIBS"
+     LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+     cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <CoreFoundation/CFLocale.h>
+int
+main ()
+{
+CFLocaleCopyCurrent();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  gt_cv_func_CFLocaleCopyCurrent=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	gt_cv_func_CFLocaleCopyCurrent=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+     LIBS="$gt_save_LIBS"
+fi
+{ echo "$as_me:$LINENO: result: $gt_cv_func_CFLocaleCopyCurrent" >&5
+echo "${ECHO_T}$gt_cv_func_CFLocaleCopyCurrent" >&6; }
+  if test $gt_cv_func_CFLocaleCopyCurrent = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_CFLOCALECOPYCURRENT 1
+_ACEOF
+
+  fi
+  INTL_MACOSX_LIBS=
+  if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then
+    INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation"
+  fi
+
+
+
+
+
+
+
+  { echo "$as_me:$LINENO: checking for ptrdiff_t" >&5
+echo $ECHO_N "checking for ptrdiff_t... $ECHO_C" >&6; }
+if test "${ac_cv_type_ptrdiff_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+typedef ptrdiff_t ac__type_new_;
+int
+main ()
+{
+if ((ac__type_new_ *) 0)
+  return 0;
+if (sizeof (ac__type_new_))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_type_ptrdiff_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_type_ptrdiff_t=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_type_ptrdiff_t" >&5
+echo "${ECHO_T}$ac_cv_type_ptrdiff_t" >&6; }
+if test $ac_cv_type_ptrdiff_t = yes; then
+  :
+else
+
+cat >>confdefs.h <<\_ACEOF
+#define ptrdiff_t long
+_ACEOF
+
+
+fi
+
+
+
+
+for ac_header in stddef.h stdlib.h string.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    ( cat <<\_ASBOX
+## -------------------------------- ##
+## Report this to triton at kumal.info ##
+## -------------------------------- ##
+_ASBOX
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+
+
+
+
+
+for ac_func in asprintf fwprintf putenv setenv setlocale snprintf wcslen
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	eval "$as_ac_var=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_var'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+
+  { echo "$as_me:$LINENO: checking whether _snprintf is declared" >&5
+echo $ECHO_N "checking whether _snprintf is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl__snprintf+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdio.h>
+int
+main ()
+{
+
+#ifndef _snprintf
+  char *p = (char *) _snprintf;
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_decl__snprintf=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_have_decl__snprintf=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl__snprintf" >&5
+echo "${ECHO_T}$ac_cv_have_decl__snprintf" >&6; }
+  if test $ac_cv_have_decl__snprintf = yes; then
+    gt_value=1
+  else
+    gt_value=0
+  fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL__SNPRINTF $gt_value
+_ACEOF
+
+
+
+  { echo "$as_me:$LINENO: checking whether _snwprintf is declared" >&5
+echo $ECHO_N "checking whether _snwprintf is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl__snwprintf+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdio.h>
+int
+main ()
+{
+
+#ifndef _snwprintf
+  char *p = (char *) _snwprintf;
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_decl__snwprintf=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_have_decl__snwprintf=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl__snwprintf" >&5
+echo "${ECHO_T}$ac_cv_have_decl__snwprintf" >&6; }
+  if test $ac_cv_have_decl__snwprintf = yes; then
+    gt_value=1
+  else
+    gt_value=0
+  fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL__SNWPRINTF $gt_value
+_ACEOF
+
+
+
+
+  { echo "$as_me:$LINENO: checking whether getc_unlocked is declared" >&5
+echo $ECHO_N "checking whether getc_unlocked is declared... $ECHO_C" >&6; }
+if test "${ac_cv_have_decl_getc_unlocked+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdio.h>
+int
+main ()
+{
+
+#ifndef getc_unlocked
+  char *p = (char *) getc_unlocked;
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_have_decl_getc_unlocked=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_have_decl_getc_unlocked=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_decl_getc_unlocked" >&5
+echo "${ECHO_T}$ac_cv_have_decl_getc_unlocked" >&6; }
+  if test $ac_cv_have_decl_getc_unlocked = yes; then
+    gt_value=1
+  else
+    gt_value=0
+  fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_GETC_UNLOCKED $gt_value
+_ACEOF
+
+
+
+  case $gt_cv_func_printf_posix in
+    *yes) HAVE_POSIX_PRINTF=1 ;;
+    *) HAVE_POSIX_PRINTF=0 ;;
+  esac
+
+  if test "$ac_cv_func_asprintf" = yes; then
+    HAVE_ASPRINTF=1
+  else
+    HAVE_ASPRINTF=0
+  fi
+
+  if test "$ac_cv_func_snprintf" = yes; then
+    HAVE_SNPRINTF=1
+  else
+    HAVE_SNPRINTF=0
+  fi
+
+  if test "$ac_cv_func_wprintf" = yes; then
+    HAVE_WPRINTF=1
+  else
+    HAVE_WPRINTF=0
+  fi
+
+
+
+  { echo "$as_me:$LINENO: checking for nl_langinfo and CODESET" >&5
+echo $ECHO_N "checking for nl_langinfo and CODESET... $ECHO_C" >&6; }
+if test "${am_cv_langinfo_codeset+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <langinfo.h>
+int
+main ()
+{
+char* cs = nl_langinfo(CODESET); return !cs;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  am_cv_langinfo_codeset=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	am_cv_langinfo_codeset=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ echo "$as_me:$LINENO: result: $am_cv_langinfo_codeset" >&5
+echo "${ECHO_T}$am_cv_langinfo_codeset" >&6; }
+  if test $am_cv_langinfo_codeset = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_LANGINFO_CODESET 1
+_ACEOF
+
+  fi
+
+
+  { echo "$as_me:$LINENO: checking for LC_MESSAGES" >&5
+echo $ECHO_N "checking for LC_MESSAGES... $ECHO_C" >&6; }
+if test "${gt_cv_val_LC_MESSAGES+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <locale.h>
+int
+main ()
+{
+return LC_MESSAGES
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  gt_cv_val_LC_MESSAGES=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	gt_cv_val_LC_MESSAGES=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $gt_cv_val_LC_MESSAGES" >&5
+echo "${ECHO_T}$gt_cv_val_LC_MESSAGES" >&6; }
+  if test $gt_cv_val_LC_MESSAGES = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_LC_MESSAGES 1
+_ACEOF
+
+  fi
+
+
+                if test "$enable_shared" = yes; then
+    case "$host_os" in
+      mingw* | cygwin*) is_woe32dll=yes ;;
+      *) is_woe32dll=no ;;
+    esac
+  else
+    is_woe32dll=no
+  fi
+  WOE32DLL=$is_woe32dll
+
+
+      case "$host_os" in
+    mingw* | cygwin*) is_woe32=yes ;;
+    *) is_woe32=no ;;
+  esac
+  WOE32=$is_woe32
+
+  if test $WOE32 = yes; then
+        if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args.
+set dummy ${ac_tool_prefix}windres; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_WINDRES+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$WINDRES"; then
+  ac_cv_prog_WINDRES="$WINDRES" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_WINDRES="${ac_tool_prefix}windres"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+WINDRES=$ac_cv_prog_WINDRES
+if test -n "$WINDRES"; then
+  { echo "$as_me:$LINENO: result: $WINDRES" >&5
+echo "${ECHO_T}$WINDRES" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_WINDRES"; then
+  ac_ct_WINDRES=$WINDRES
+  # Extract the first word of "windres", so it can be a program name with args.
+set dummy windres; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_WINDRES+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_WINDRES"; then
+  ac_cv_prog_ac_ct_WINDRES="$ac_ct_WINDRES" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_WINDRES="windres"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_WINDRES=$ac_cv_prog_ac_ct_WINDRES
+if test -n "$ac_ct_WINDRES"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_WINDRES" >&5
+echo "${ECHO_T}$ac_ct_WINDRES" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+  if test "x$ac_ct_WINDRES" = x; then
+    WINDRES=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf at gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf at gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    WINDRES=$ac_ct_WINDRES
+  fi
+else
+  WINDRES="$ac_cv_prog_WINDRES"
+fi
+
+  fi
+
+              case "$host_os" in
+    hpux*) LTLIBC="" ;;
+    *)     LTLIBC="-lc" ;;
+  esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+    { echo "$as_me:$LINENO: checking for CFPreferencesCopyAppValue" >&5
+echo $ECHO_N "checking for CFPreferencesCopyAppValue... $ECHO_C" >&6; }
+if test "${gt_cv_func_CFPreferencesCopyAppValue+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  gt_save_LIBS="$LIBS"
+     LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+     cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <CoreFoundation/CFPreferences.h>
+int
+main ()
+{
+CFPreferencesCopyAppValue(NULL, NULL)
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  gt_cv_func_CFPreferencesCopyAppValue=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	gt_cv_func_CFPreferencesCopyAppValue=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+     LIBS="$gt_save_LIBS"
+fi
+{ echo "$as_me:$LINENO: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5
+echo "${ECHO_T}$gt_cv_func_CFPreferencesCopyAppValue" >&6; }
+  if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_CFPREFERENCESCOPYAPPVALUE 1
+_ACEOF
+
+  fi
+    { echo "$as_me:$LINENO: checking for CFLocaleCopyCurrent" >&5
+echo $ECHO_N "checking for CFLocaleCopyCurrent... $ECHO_C" >&6; }
+if test "${gt_cv_func_CFLocaleCopyCurrent+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  gt_save_LIBS="$LIBS"
+     LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+     cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <CoreFoundation/CFLocale.h>
+int
+main ()
+{
+CFLocaleCopyCurrent();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  gt_cv_func_CFLocaleCopyCurrent=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	gt_cv_func_CFLocaleCopyCurrent=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+     LIBS="$gt_save_LIBS"
+fi
+{ echo "$as_me:$LINENO: result: $gt_cv_func_CFLocaleCopyCurrent" >&5
+echo "${ECHO_T}$gt_cv_func_CFLocaleCopyCurrent" >&6; }
+  if test $gt_cv_func_CFLocaleCopyCurrent = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_CFLOCALECOPYCURRENT 1
+_ACEOF
+
+  fi
+  INTL_MACOSX_LIBS=
+  if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then
+    INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation"
+  fi
+
+
+
+
+
+
+    BUILD_INCLUDED_LIBINTL=no
+    USE_INCLUDED_LIBINTL=no
+
+  LIBINTL=
+  LTLIBINTL=
+  POSUB=
+
+    case " $gt_needs " in
+    *" need-formatstring-macros "*) gt_api_version=3 ;;
+    *" need-ngettext "*) gt_api_version=2 ;;
+    *) gt_api_version=1 ;;
+  esac
+  gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc"
+  gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl"
+
+    if test "$USE_NLS" = "yes"; then
+    gt_use_preinstalled_gnugettext=no
+
+      { echo "$as_me:$LINENO: checking whether included gettext is requested" >&5
+echo $ECHO_N "checking whether included gettext is requested... $ECHO_C" >&6; }
+
+# Check whether --with-included-gettext was given.
+if test "${with_included_gettext+set}" = set; then
+  withval=$with_included_gettext; nls_cv_force_use_gnu_gettext=$withval
+else
+  nls_cv_force_use_gnu_gettext=no
+fi
+
+      { echo "$as_me:$LINENO: result: $nls_cv_force_use_gnu_gettext" >&5
+echo "${ECHO_T}$nls_cv_force_use_gnu_gettext" >&6; }
+
+      nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
+      if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
+
+
+        if test $gt_api_version -ge 3; then
+          gt_revision_test_code='
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
+#endif
+typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
+'
+        else
+          gt_revision_test_code=
+        fi
+        if test $gt_api_version -ge 2; then
+          gt_expression_test_code=' + * ngettext ("", "", 0)'
+        else
+          gt_expression_test_code=
+        fi
+
+        { echo "$as_me:$LINENO: checking for GNU gettext in libc" >&5
+echo $ECHO_N "checking for GNU gettext in libc... $ECHO_C" >&6; }
+if { as_var=$gt_func_gnugettext_libc; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern int *_nl_domain_bindings;
+int
+main ()
+{
+bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  eval "$gt_func_gnugettext_libc=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	eval "$gt_func_gnugettext_libc=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$gt_func_gnugettext_libc'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+
+        if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
+
+
+
+
+
+    use_additional=yes
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+
+    eval additional_includedir=\"$includedir\"
+    eval additional_libdir=\"$libdir\"
+
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+
+# Check whether --with-libintl-prefix was given.
+if test "${with_libintl_prefix+set}" = set; then
+  withval=$with_libintl_prefix;
+    if test "X$withval" = "Xno"; then
+      use_additional=no
+    else
+      if test "X$withval" = "X"; then
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+
+          eval additional_includedir=\"$includedir\"
+          eval additional_libdir=\"$libdir\"
+
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+      else
+        additional_includedir="$withval/include"
+        additional_libdir="$withval/$acl_libdirstem"
+      fi
+    fi
+
+fi
+
+      LIBINTL=
+  LTLIBINTL=
+  INCINTL=
+  LIBINTL_PREFIX=
+  rpathdirs=
+  ltrpathdirs=
+  names_already_handled=
+  names_next_round='intl '
+  while test -n "$names_next_round"; do
+    names_this_round="$names_next_round"
+    names_next_round=
+    for name in $names_this_round; do
+      already_handled=
+      for n in $names_already_handled; do
+        if test "$n" = "$name"; then
+          already_handled=yes
+          break
+        fi
+      done
+      if test -z "$already_handled"; then
+        names_already_handled="$names_already_handled $name"
+                        uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
+        eval value=\"\$HAVE_LIB$uppername\"
+        if test -n "$value"; then
+          if test "$value" = yes; then
+            eval value=\"\$LIB$uppername\"
+            test -z "$value" || LIBINTL="${LIBINTL}${LIBINTL:+ }$value"
+            eval value=\"\$LTLIB$uppername\"
+            test -z "$value" || LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$value"
+          else
+                                    :
+          fi
+        else
+                              found_dir=
+          found_la=
+          found_so=
+          found_a=
+          eval libname=\"$acl_libname_spec\"    # typically: libname=lib$name
+          if test -n "$acl_shlibext"; then
+            shrext=".$acl_shlibext"             # typically: shrext=.so
+          else
+            shrext=
+          fi
+          if test $use_additional = yes; then
+            dir="$additional_libdir"
+                                    if test -n "$acl_shlibext"; then
+              if test -f "$dir/$libname$shrext"; then
+                found_dir="$dir"
+                found_so="$dir/$libname$shrext"
+              else
+                if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+                  ver=`(cd "$dir" && \
+                        for f in "$libname$shrext".*; do echo "$f"; done \
+                        | sed -e "s,^$libname$shrext\\\\.,," \
+                        | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+                        | sed 1q ) 2>/dev/null`
+                  if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+                    found_dir="$dir"
+                    found_so="$dir/$libname$shrext.$ver"
+                  fi
+                else
+                  eval library_names=\"$acl_library_names_spec\"
+                  for f in $library_names; do
+                    if test -f "$dir/$f"; then
+                      found_dir="$dir"
+                      found_so="$dir/$f"
+                      break
+                    fi
+                  done
+                fi
+              fi
+            fi
+                        if test "X$found_dir" = "X"; then
+              if test -f "$dir/$libname.$acl_libext"; then
+                found_dir="$dir"
+                found_a="$dir/$libname.$acl_libext"
+              fi
+            fi
+            if test "X$found_dir" != "X"; then
+              if test -f "$dir/$libname.la"; then
+                found_la="$dir/$libname.la"
+              fi
+            fi
+          fi
+          if test "X$found_dir" = "X"; then
+            for x in $LDFLAGS $LTLIBINTL; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+              case "$x" in
+                -L*)
+                  dir=`echo "X$x" | sed -e 's/^X-L//'`
+                                    if test -n "$acl_shlibext"; then
+                    if test -f "$dir/$libname$shrext"; then
+                      found_dir="$dir"
+                      found_so="$dir/$libname$shrext"
+                    else
+                      if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+                        ver=`(cd "$dir" && \
+                              for f in "$libname$shrext".*; do echo "$f"; done \
+                              | sed -e "s,^$libname$shrext\\\\.,," \
+                              | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+                              | sed 1q ) 2>/dev/null`
+                        if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+                          found_dir="$dir"
+                          found_so="$dir/$libname$shrext.$ver"
+                        fi
+                      else
+                        eval library_names=\"$acl_library_names_spec\"
+                        for f in $library_names; do
+                          if test -f "$dir/$f"; then
+                            found_dir="$dir"
+                            found_so="$dir/$f"
+                            break
+                          fi
+                        done
+                      fi
+                    fi
+                  fi
+                                    if test "X$found_dir" = "X"; then
+                    if test -f "$dir/$libname.$acl_libext"; then
+                      found_dir="$dir"
+                      found_a="$dir/$libname.$acl_libext"
+                    fi
+                  fi
+                  if test "X$found_dir" != "X"; then
+                    if test -f "$dir/$libname.la"; then
+                      found_la="$dir/$libname.la"
+                    fi
+                  fi
+                  ;;
+              esac
+              if test "X$found_dir" != "X"; then
+                break
+              fi
+            done
+          fi
+          if test "X$found_dir" != "X"; then
+                        LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$found_dir -l$name"
+            if test "X$found_so" != "X"; then
+                                                        if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/$acl_libdirstem"; then
+                                LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
+              else
+                                                                                haveit=
+                for x in $ltrpathdirs; do
+                  if test "X$x" = "X$found_dir"; then
+                    haveit=yes
+                    break
+                  fi
+                done
+                if test -z "$haveit"; then
+                  ltrpathdirs="$ltrpathdirs $found_dir"
+                fi
+                                if test "$acl_hardcode_direct" = yes; then
+                                                      LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
+                else
+                  if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
+                                                            LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
+                                                            haveit=
+                    for x in $rpathdirs; do
+                      if test "X$x" = "X$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      rpathdirs="$rpathdirs $found_dir"
+                    fi
+                  else
+                                                                                haveit=
+                    for x in $LDFLAGS $LIBINTL; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                      if test "X$x" = "X-L$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir"
+                    fi
+                    if test "$acl_hardcode_minus_L" != no; then
+                                                                                        LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
+                    else
+                                                                                                                                                                                LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name"
+                    fi
+                  fi
+                fi
+              fi
+            else
+              if test "X$found_a" != "X"; then
+                                LIBINTL="${LIBINTL}${LIBINTL:+ }$found_a"
+              else
+                                                LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir -l$name"
+              fi
+            fi
+                        additional_includedir=
+            case "$found_dir" in
+              */$acl_libdirstem | */$acl_libdirstem/)
+                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
+                LIBINTL_PREFIX="$basedir"
+                additional_includedir="$basedir/include"
+                ;;
+            esac
+            if test "X$additional_includedir" != "X"; then
+                                                                                                                if test "X$additional_includedir" != "X/usr/include"; then
+                haveit=
+                if test "X$additional_includedir" = "X/usr/local/include"; then
+                  if test -n "$GCC"; then
+                    case $host_os in
+                      linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+                    esac
+                  fi
+                fi
+                if test -z "$haveit"; then
+                  for x in $CPPFLAGS $INCINTL; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                    if test "X$x" = "X-I$additional_includedir"; then
+                      haveit=yes
+                      break
+                    fi
+                  done
+                  if test -z "$haveit"; then
+                    if test -d "$additional_includedir"; then
+                                            INCINTL="${INCINTL}${INCINTL:+ }-I$additional_includedir"
+                    fi
+                  fi
+                fi
+              fi
+            fi
+                        if test -n "$found_la"; then
+                                                        save_libdir="$libdir"
+              case "$found_la" in
+                */* | *\\*) . "$found_la" ;;
+                *) . "./$found_la" ;;
+              esac
+              libdir="$save_libdir"
+                            for dep in $dependency_libs; do
+                case "$dep" in
+                  -L*)
+                    additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+                                                                                                                                                                if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then
+                      haveit=
+                      if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then
+                        if test -n "$GCC"; then
+                          case $host_os in
+                            linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+                          esac
+                        fi
+                      fi
+                      if test -z "$haveit"; then
+                        haveit=
+                        for x in $LDFLAGS $LIBINTL; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                                                        LIBINTL="${LIBINTL}${LIBINTL:+ }-L$additional_libdir"
+                          fi
+                        fi
+                        haveit=
+                        for x in $LDFLAGS $LTLIBINTL; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                                                        LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$additional_libdir"
+                          fi
+                        fi
+                      fi
+                    fi
+                    ;;
+                  -R*)
+                    dir=`echo "X$dep" | sed -e 's/^X-R//'`
+                    if test "$enable_rpath" != no; then
+                                                                  haveit=
+                      for x in $rpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        rpathdirs="$rpathdirs $dir"
+                      fi
+                                                                  haveit=
+                      for x in $ltrpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        ltrpathdirs="$ltrpathdirs $dir"
+                      fi
+                    fi
+                    ;;
+                  -l*)
+                                        names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+                    ;;
+                  *.la)
+                                                                                names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+                    ;;
+                  *)
+                                        LIBINTL="${LIBINTL}${LIBINTL:+ }$dep"
+                    LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$dep"
+                    ;;
+                esac
+              done
+            fi
+          else
+                                                            LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name"
+            LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-l$name"
+          fi
+        fi
+      fi
+    done
+  done
+  if test "X$rpathdirs" != "X"; then
+    if test -n "$acl_hardcode_libdir_separator"; then
+                        alldirs=
+      for found_dir in $rpathdirs; do
+        alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir"
+      done
+            acl_save_libdir="$libdir"
+      libdir="$alldirs"
+      eval flag=\"$acl_hardcode_libdir_flag_spec\"
+      libdir="$acl_save_libdir"
+      LIBINTL="${LIBINTL}${LIBINTL:+ }$flag"
+    else
+            for found_dir in $rpathdirs; do
+        acl_save_libdir="$libdir"
+        libdir="$found_dir"
+        eval flag=\"$acl_hardcode_libdir_flag_spec\"
+        libdir="$acl_save_libdir"
+        LIBINTL="${LIBINTL}${LIBINTL:+ }$flag"
+      done
+    fi
+  fi
+  if test "X$ltrpathdirs" != "X"; then
+            for found_dir in $ltrpathdirs; do
+      LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-R$found_dir"
+    done
+  fi
+
+          { echo "$as_me:$LINENO: checking for GNU gettext in libintl" >&5
+echo $ECHO_N "checking for GNU gettext in libintl... $ECHO_C" >&6; }
+if { as_var=$gt_func_gnugettext_libintl; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  gt_save_CPPFLAGS="$CPPFLAGS"
+            CPPFLAGS="$CPPFLAGS $INCINTL"
+            gt_save_LIBS="$LIBS"
+            LIBS="$LIBS $LIBINTL"
+                        cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);
+int
+main ()
+{
+bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  eval "$gt_func_gnugettext_libintl=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	eval "$gt_func_gnugettext_libintl=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+                        if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then
+              LIBS="$LIBS $LIBICONV"
+              cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);
+int
+main ()
+{
+bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  LIBINTL="$LIBINTL $LIBICONV"
+                LTLIBINTL="$LTLIBINTL $LTLIBICONV"
+                eval "$gt_func_gnugettext_libintl=yes"
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+            fi
+            CPPFLAGS="$gt_save_CPPFLAGS"
+            LIBS="$gt_save_LIBS"
+fi
+ac_res=`eval echo '${'$gt_func_gnugettext_libintl'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+        fi
+
+                                        if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \
+           || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \
+                && test "$PACKAGE" != gettext-runtime \
+                && test "$PACKAGE" != gettext-tools; }; then
+          gt_use_preinstalled_gnugettext=yes
+        else
+                    LIBINTL=
+          LTLIBINTL=
+          INCINTL=
+        fi
+
+
+        if test "$gt_use_preinstalled_gnugettext" != "yes"; then
+                              nls_cv_use_gnu_gettext=yes
+        fi
+      fi
+
+      if test "$nls_cv_use_gnu_gettext" = "yes"; then
+                BUILD_INCLUDED_LIBINTL=yes
+        USE_INCLUDED_LIBINTL=yes
+        LIBINTL="\${top_builddir}/intl/libintl.a $LIBICONV $LIBTHREAD"
+        LTLIBINTL="\${top_builddir}/intl/libintl.a $LTLIBICONV $LTLIBTHREAD"
+        LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
+      fi
+
+      CATOBJEXT=
+      if test "$gt_use_preinstalled_gnugettext" = "yes" \
+         || test "$nls_cv_use_gnu_gettext" = "yes"; then
+                CATOBJEXT=.gmo
+      fi
+
+
+    if test -n "$INTL_MACOSX_LIBS"; then
+      if test "$gt_use_preinstalled_gnugettext" = "yes" \
+         || test "$nls_cv_use_gnu_gettext" = "yes"; then
+                LIBINTL="$LIBINTL $INTL_MACOSX_LIBS"
+        LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS"
+      fi
+    fi
+
+    if test "$gt_use_preinstalled_gnugettext" = "yes" \
+       || test "$nls_cv_use_gnu_gettext" = "yes"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define ENABLE_NLS 1
+_ACEOF
+
+    else
+      USE_NLS=no
+    fi
+  fi
+
+  { echo "$as_me:$LINENO: checking whether to use NLS" >&5
+echo $ECHO_N "checking whether to use NLS... $ECHO_C" >&6; }
+  { echo "$as_me:$LINENO: result: $USE_NLS" >&5
+echo "${ECHO_T}$USE_NLS" >&6; }
+  if test "$USE_NLS" = "yes"; then
+    { echo "$as_me:$LINENO: checking where the gettext function comes from" >&5
+echo $ECHO_N "checking where the gettext function comes from... $ECHO_C" >&6; }
+    if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+      if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
+        gt_source="external libintl"
+      else
+        gt_source="libc"
+      fi
+    else
+      gt_source="included intl directory"
+    fi
+    { echo "$as_me:$LINENO: result: $gt_source" >&5
+echo "${ECHO_T}$gt_source" >&6; }
+  fi
+
+  if test "$USE_NLS" = "yes"; then
+
+    if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+      if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
+        { echo "$as_me:$LINENO: checking how to link with libintl" >&5
+echo $ECHO_N "checking how to link with libintl... $ECHO_C" >&6; }
+        { echo "$as_me:$LINENO: result: $LIBINTL" >&5
+echo "${ECHO_T}$LIBINTL" >&6; }
+
+  for element in $INCINTL; do
+    haveit=
+    for x in $CPPFLAGS; do
+
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  eval x=\"$x\"
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+
+      if test "X$x" = "X$element"; then
+        haveit=yes
+        break
+      fi
+    done
+    if test -z "$haveit"; then
+      CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element"
+    fi
+  done
+
+      fi
+
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_GETTEXT 1
+_ACEOF
+
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_DCGETTEXT 1
+_ACEOF
+
+    fi
+
+        POSUB=po
+  fi
+
+
+            if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then
+      BUILD_INCLUDED_LIBINTL=yes
+    fi
+
+
+
+
+
+        nls_cv_header_intl=
+    nls_cv_header_libgt=
+
+        DATADIRNAME=share
+
+
+        INSTOBJEXT=.mo
+
+
+        GENCAT=gencat
+
+
+        INTLOBJS=
+    if test "$USE_INCLUDED_LIBINTL" = yes; then
+      INTLOBJS="\$(GETTOBJS)"
+    fi
+
+
+        INTL_LIBTOOL_SUFFIX_PREFIX=
+
+
+
+    INTLLIBS="$LIBINTL"
+
+
+
+
+
+
+
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="${ac_tool_prefix}gcc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_prog_CC"; then
+  ac_ct_CC=$CC
+  # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CC="gcc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf at gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf at gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+else
+  CC="$ac_cv_prog_CC"
+fi
+
+if test -z "$CC"; then
+          if test -n "$ac_tool_prefix"; then
+    # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="${ac_tool_prefix}cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+  fi
+fi
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+       ac_prog_rejected=yes
+       continue
+     fi
+    ac_cv_prog_CC="cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# != 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+  fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in cl.exe
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { echo "$as_me:$LINENO: result: $CC" >&5
+echo "${ECHO_T}$CC" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  for ac_prog in cl.exe
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_ac_ct_CC+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_ac_ct_CC="$ac_prog"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { echo "$as_me:$LINENO: result: $ac_ct_CC" >&5
+echo "${ECHO_T}$ac_ct_CC" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CC" && break
+done
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf at gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf at gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+fi
+
+fi
+
+
+test -z "$CC" && { { echo "$as_me:$LINENO: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&5
+echo "$as_me: error: no acceptable C compiler found in \$PATH
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+
+# Provide some information about the compiler.
+echo "$as_me:$LINENO: checking for C compiler version" >&5
+ac_compiler=`set X $ac_compile; echo $2`
+{ (ac_try="$ac_compiler --version >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler --version >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (ac_try="$ac_compiler -v >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler -v >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (ac_try="$ac_compiler -V >&5"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compiler -V >&5") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+
+{ echo "$as_me:$LINENO: checking whether we are using the GNU C compiler" >&5
+echo $ECHO_N "checking whether we are using the GNU C compiler... $ECHO_C" >&6; }
+if test "${ac_cv_c_compiler_gnu+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+#ifndef __GNUC__
+       choke me
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_compiler_gnu=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_compiler_gnu=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+ac_cv_c_compiler_gnu=$ac_compiler_gnu
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_c_compiler_gnu" >&5
+echo "${ECHO_T}$ac_cv_c_compiler_gnu" >&6; }
+GCC=`test $ac_compiler_gnu = yes && echo yes`
+ac_test_CFLAGS=${CFLAGS+set}
+ac_save_CFLAGS=$CFLAGS
+{ echo "$as_me:$LINENO: checking whether $CC accepts -g" >&5
+echo $ECHO_N "checking whether $CC accepts -g... $ECHO_C" >&6; }
+if test "${ac_cv_prog_cc_g+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_save_c_werror_flag=$ac_c_werror_flag
+   ac_c_werror_flag=yes
+   ac_cv_prog_cc_g=no
+   CFLAGS="-g"
+   cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_cc_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	CFLAGS=""
+      cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_c_werror_flag=$ac_save_c_werror_flag
+	 CFLAGS="-g"
+	 cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_cc_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+   ac_c_werror_flag=$ac_save_c_werror_flag
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_prog_cc_g" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_g" >&6; }
+if test "$ac_test_CFLAGS" = set; then
+  CFLAGS=$ac_save_CFLAGS
+elif test $ac_cv_prog_cc_g = yes; then
+  if test "$GCC" = yes; then
+    CFLAGS="-g -O2"
+  else
+    CFLAGS="-g"
+  fi
+else
+  if test "$GCC" = yes; then
+    CFLAGS="-O2"
+  else
+    CFLAGS=
+  fi
+fi
+{ echo "$as_me:$LINENO: checking for $CC option to accept ISO C89" >&5
+echo $ECHO_N "checking for $CC option to accept ISO C89... $ECHO_C" >&6; }
+if test "${ac_cv_prog_cc_c89+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_prog_cc_c89=no
+ac_save_CC=$CC
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <stdarg.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
+struct buf { int x; };
+FILE * (*rcsopen) (struct buf *, struct stat *, int);
+static char *e (p, i)
+     char **p;
+     int i;
+{
+  return p[i];
+}
+static char *f (char * (*g) (char **, int), char **p, ...)
+{
+  char *s;
+  va_list v;
+  va_start (v,p);
+  s = g (p, va_arg (v,int));
+  va_end (v);
+  return s;
+}
+
+/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
+   function prototypes and stuff, but not '\xHH' hex character constants.
+   These don't provoke an error unfortunately, instead are silently treated
+   as 'x'.  The following induces an error, until -std is added to get
+   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
+   array size at least.  It's necessary to write '\x00'==0 to get something
+   that's true only with -std.  */
+int osf4_cc_array ['\x00' == 0 ? 1 : -1];
+
+/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
+   inside strings and character constants.  */
+#define FOO(x) 'x'
+int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
+
+int test (int i, double x);
+struct s1 {int (*f) (int a);};
+struct s2 {int (*f) (double a);};
+int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
+int argc;
+char **argv;
+int
+main ()
+{
+return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
+  ;
+  return 0;
+}
+_ACEOF
+for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
+	-Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_prog_cc_c89=$ac_arg
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext
+  test "x$ac_cv_prog_cc_c89" != "xno" && break
+done
+rm -f conftest.$ac_ext
+CC=$ac_save_CC
+
+fi
+# AC_CACHE_VAL
+case "x$ac_cv_prog_cc_c89" in
+  x)
+    { echo "$as_me:$LINENO: result: none needed" >&5
+echo "${ECHO_T}none needed" >&6; } ;;
+  xno)
+    { echo "$as_me:$LINENO: result: unsupported" >&5
+echo "${ECHO_T}unsupported" >&6; } ;;
+  *)
+    CC="$CC $ac_cv_prog_cc_c89"
+    { echo "$as_me:$LINENO: result: $ac_cv_prog_cc_c89" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_c89" >&6; } ;;
+esac
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+depcc="$CC"   am_compiler_list=
+
+{ echo "$as_me:$LINENO: checking dependency style of $depcc" >&5
+echo $ECHO_N "checking dependency style of $depcc... $ECHO_C" >&6; }
+if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named `D' -- because `-MD' means `put the output
+  # in D'.
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CC_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
+      # Solaris 8's {/usr,}/bin/sh.
+      touch sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    case $depmode in
+    nosideeffect)
+      # after this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested
+      if test "x$enable_dependency_tracking" = xyes; then
+	continue
+      else
+	break
+      fi
+      ;;
+    none) break ;;
+    esac
+    # We check with `-c' and `-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle `-M -o', and we need to detect this.
+    if depmode=$depmode \
+       source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CC_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ echo "$as_me:$LINENO: result: $am_cv_CC_dependencies_compiler_type" >&5
+echo "${ECHO_T}$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+  am__fastdepCC_TRUE=
+  am__fastdepCC_FALSE='#'
+else
+  am__fastdepCC_TRUE='#'
+  am__fastdepCC_FALSE=
+fi
+
+
+
+        { echo "$as_me:$LINENO: checking for strerror in -lcposix" >&5
+echo $ECHO_N "checking for strerror in -lcposix... $ECHO_C" >&6; }
+if test "${ac_cv_lib_cposix_strerror+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lcposix  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char strerror ();
+int
+main ()
+{
+return strerror ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_cposix_strerror=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_cposix_strerror=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_cposix_strerror" >&5
+echo "${ECHO_T}$ac_cv_lib_cposix_strerror" >&6; }
+if test $ac_cv_lib_cposix_strerror = yes; then
+  LIBS="$LIBS -lcposix"
+fi
+
+
+
+
+
+
+
+
+
+
+if test x$GCC = xyes; then
+  CFLAGS="$CFLAGS -Wall -W -fsigned-char";
+  { echo "$as_me:$LINENO: checking whether ${CC} accepts -rdynamic " >&5
+echo $ECHO_N "checking whether ${CC} accepts -rdynamic ... $ECHO_C" >&6; }
+
+echo 'int main(){}' > conftest.c
+if test -z "`${CC} -rdynamic -o conftest conftest.c 2>&1`"; then
+  LDFLAGS="${LDFLAGS} -rdynamic"
+  echo "yes"
+else
+  echo "no"
+fi
+rm -f conftest*
+
+  { echo "$as_me:$LINENO: checking whether ${CC} accepts -Wno-pointer-sign " >&5
+echo $ECHO_N "checking whether ${CC} accepts -Wno-pointer-sign ... $ECHO_C" >&6; }
+
+echo 'int main(){}' > conftest.c
+if test -z "`${CC} -Wno-pointer-sign -o conftest conftest.c 2>&1`"; then
+  CFLAGS="${CFLAGS} -Wno-pointer-sign"
+  echo "yes"
+else
+  echo "no"
+fi
+rm -f conftest*
+
+else
+          echo "Vous n'utilisez pas gcc .. attention coincoin peut avoir quelque bugs si les char ne sont pas sign�s"
+fi
+
+YELLOW="\\033\\1331;33m"
+RESET="\\033\\1330m"
+
+
+{ echo "$as_me:$LINENO: checking for X" >&5
+echo $ECHO_N "checking for X... $ECHO_C" >&6; }
+
+
+# Check whether --with-x was given.
+if test "${with_x+set}" = set; then
+  withval=$with_x;
+fi
+
+# $have_x is `yes', `no', `disabled', or empty when we do not yet know.
+if test "x$with_x" = xno; then
+  # The user explicitly disabled X.
+  have_x=disabled
+else
+  case $x_includes,$x_libraries in #(
+    *\'*) { { echo "$as_me:$LINENO: error: Cannot use X directory names containing '" >&5
+echo "$as_me: error: Cannot use X directory names containing '" >&2;}
+   { (exit 1); exit 1; }; };; #(
+    *,NONE | NONE,*) if test "${ac_cv_have_x+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  # One or both of the vars are not set, and there is no cached value.
+ac_x_includes=no ac_x_libraries=no
+rm -f -r conftest.dir
+if mkdir conftest.dir; then
+  cd conftest.dir
+  cat >Imakefile <<'_ACEOF'
+incroot:
+	@echo incroot='${INCROOT}'
+usrlibdir:
+	@echo usrlibdir='${USRLIBDIR}'
+libdir:
+	@echo libdir='${LIBDIR}'
+_ACEOF
+  if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then
+    # GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+    for ac_var in incroot usrlibdir libdir; do
+      eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`"
+    done
+    # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR.
+    for ac_extension in a so sl; do
+      if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" &&
+	 test -f "$ac_im_libdir/libX11.$ac_extension"; then
+	ac_im_usrlibdir=$ac_im_libdir; break
+      fi
+    done
+    # Screen out bogus values from the imake configuration.  They are
+    # bogus both because they are the default anyway, and because
+    # using them would break gcc on systems where it needs fixed includes.
+    case $ac_im_incroot in
+	/usr/include) ac_x_includes= ;;
+	*) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;;
+    esac
+    case $ac_im_usrlibdir in
+	/usr/lib | /lib) ;;
+	*) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;;
+    esac
+  fi
+  cd ..
+  rm -f -r conftest.dir
+fi
+
+# Standard set of common directories for X headers.
+# Check X11 before X11Rn because it is often a symlink to the current release.
+ac_x_header_dirs='
+/usr/X11/include
+/usr/X11R6/include
+/usr/X11R5/include
+/usr/X11R4/include
+
+/usr/include/X11
+/usr/include/X11R6
+/usr/include/X11R5
+/usr/include/X11R4
+
+/usr/local/X11/include
+/usr/local/X11R6/include
+/usr/local/X11R5/include
+/usr/local/X11R4/include
+
+/usr/local/include/X11
+/usr/local/include/X11R6
+/usr/local/include/X11R5
+/usr/local/include/X11R4
+
+/usr/X386/include
+/usr/x386/include
+/usr/XFree86/include/X11
+
+/usr/include
+/usr/local/include
+/usr/unsupported/include
+/usr/athena/include
+/usr/local/x11r5/include
+/usr/lpp/Xamples/include
+
+/usr/openwin/include
+/usr/openwin/share/include'
+
+if test "$ac_x_includes" = no; then
+  # Guess where to find include files, by looking for Xlib.h.
+  # First, try using that file with no special directory specified.
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <X11/Xlib.h>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  # We can compile using X headers with no special include directory.
+ac_x_includes=
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  for ac_dir in $ac_x_header_dirs; do
+  if test -r "$ac_dir/X11/Xlib.h"; then
+    ac_x_includes=$ac_dir
+    break
+  fi
+done
+fi
+
+rm -f conftest.err conftest.$ac_ext
+fi # $ac_x_includes = no
+
+if test "$ac_x_libraries" = no; then
+  # Check for the libraries.
+  # See if we find them without any special options.
+  # Don't add to $LIBS permanently.
+  ac_save_LIBS=$LIBS
+  LIBS="-lX11 $LIBS"
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <X11/Xlib.h>
+int
+main ()
+{
+XrmInitialize ()
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  LIBS=$ac_save_LIBS
+# We can link X programs with no special library path.
+ac_x_libraries=
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	LIBS=$ac_save_LIBS
+for ac_dir in `echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g`
+do
+  # Don't even attempt the hair of trying to link an X program!
+  for ac_extension in a so sl; do
+    if test -r "$ac_dir/libX11.$ac_extension"; then
+      ac_x_libraries=$ac_dir
+      break 2
+    fi
+  done
+done
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi # $ac_x_libraries = no
+
+case $ac_x_includes,$ac_x_libraries in #(
+  no,* | *,no | *\'*)
+    # Didn't find X, or a directory has "'" in its name.
+    ac_cv_have_x="have_x=no";; #(
+  *)
+    # Record where we found X for the cache.
+    ac_cv_have_x="have_x=yes\
+	ac_x_includes='$ac_x_includes'\
+	ac_x_libraries='$ac_x_libraries'"
+esac
+fi
+;; #(
+    *) have_x=yes;;
+  esac
+  eval "$ac_cv_have_x"
+fi # $with_x != no
+
+if test "$have_x" != yes; then
+  { echo "$as_me:$LINENO: result: $have_x" >&5
+echo "${ECHO_T}$have_x" >&6; }
+  no_x=yes
+else
+  # If each of the values was on the command line, it overrides each guess.
+  test "x$x_includes" = xNONE && x_includes=$ac_x_includes
+  test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries
+  # Update the cache value to reflect the command line values.
+  ac_cv_have_x="have_x=yes\
+	ac_x_includes='$x_includes'\
+	ac_x_libraries='$x_libraries'"
+  { echo "$as_me:$LINENO: result: libraries $x_libraries, headers $x_includes" >&5
+echo "${ECHO_T}libraries $x_libraries, headers $x_includes" >&6; }
+fi
+
+if test "$no_x" = yes; then
+  # Not all programs may use this symbol, but it does not hurt to define it.
+
+cat >>confdefs.h <<\_ACEOF
+#define X_DISPLAY_MISSING 1
+_ACEOF
+
+  X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS=
+else
+  if test -n "$x_includes"; then
+    X_CFLAGS="$X_CFLAGS -I$x_includes"
+  fi
+
+  # It would also be nice to do this for all -L options, not just this one.
+  if test -n "$x_libraries"; then
+    X_LIBS="$X_LIBS -L$x_libraries"
+    # For Solaris; some versions of Sun CC require a space after -R and
+    # others require no space.  Words are not sufficient . . . .
+    { echo "$as_me:$LINENO: checking whether -R must be followed by a space" >&5
+echo $ECHO_N "checking whether -R must be followed by a space... $ECHO_C" >&6; }
+    ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries"
+    ac_xsave_c_werror_flag=$ac_c_werror_flag
+    ac_c_werror_flag=yes
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+       X_LIBS="$X_LIBS -R$x_libraries"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	LIBS="$ac_xsave_LIBS -R $x_libraries"
+       cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+	  X_LIBS="$X_LIBS -R $x_libraries"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	{ echo "$as_me:$LINENO: result: neither works" >&5
+echo "${ECHO_T}neither works" >&6; }
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+    ac_c_werror_flag=$ac_xsave_c_werror_flag
+    LIBS=$ac_xsave_LIBS
+  fi
+
+  # Check for system-dependent libraries X programs must link with.
+  # Do this before checking for the system-independent R6 libraries
+  # (-lICE), since we may need -lsocket or whatever for X linking.
+
+  if test "$ISC" = yes; then
+    X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet"
+  else
+    # Martyn Johnson says this is needed for Ultrix, if the X
+    # libraries were built with DECnet support.  And Karl Berry says
+    # the Alpha needs dnet_stub (dnet does not exist).
+    ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11"
+    cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char XOpenDisplay ();
+int
+main ()
+{
+return XOpenDisplay ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	{ echo "$as_me:$LINENO: checking for dnet_ntoa in -ldnet" >&5
+echo $ECHO_N "checking for dnet_ntoa in -ldnet... $ECHO_C" >&6; }
+if test "${ac_cv_lib_dnet_dnet_ntoa+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldnet  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dnet_ntoa ();
+int
+main ()
+{
+return dnet_ntoa ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_dnet_dnet_ntoa=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_dnet_dnet_ntoa=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_dnet_dnet_ntoa" >&5
+echo "${ECHO_T}$ac_cv_lib_dnet_dnet_ntoa" >&6; }
+if test $ac_cv_lib_dnet_dnet_ntoa = yes; then
+  X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet"
+fi
+
+    if test $ac_cv_lib_dnet_dnet_ntoa = no; then
+      { echo "$as_me:$LINENO: checking for dnet_ntoa in -ldnet_stub" >&5
+echo $ECHO_N "checking for dnet_ntoa in -ldnet_stub... $ECHO_C" >&6; }
+if test "${ac_cv_lib_dnet_stub_dnet_ntoa+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldnet_stub  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dnet_ntoa ();
+int
+main ()
+{
+return dnet_ntoa ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_dnet_stub_dnet_ntoa=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_dnet_stub_dnet_ntoa=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5
+echo "${ECHO_T}$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; }
+if test $ac_cv_lib_dnet_stub_dnet_ntoa = yes; then
+  X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"
+fi
+
+    fi
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+    LIBS="$ac_xsave_LIBS"
+
+    # msh at cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT,
+    # to get the SysV transport functions.
+    # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4)
+    # needs -lnsl.
+    # The nsl library prevents programs from opening the X display
+    # on Irix 5.2, according to T.E. Dickey.
+    # The functions gethostbyname, getservbyname, and inet_addr are
+    # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking.
+    { echo "$as_me:$LINENO: checking for gethostbyname" >&5
+echo $ECHO_N "checking for gethostbyname... $ECHO_C" >&6; }
+if test "${ac_cv_func_gethostbyname+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define gethostbyname to an innocuous variant, in case <limits.h> declares gethostbyname.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define gethostbyname innocuous_gethostbyname
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char gethostbyname (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef gethostbyname
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char gethostbyname ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_gethostbyname || defined __stub___gethostbyname
+choke me
+#endif
+
+int
+main ()
+{
+return gethostbyname ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_func_gethostbyname=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_func_gethostbyname=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_func_gethostbyname" >&5
+echo "${ECHO_T}$ac_cv_func_gethostbyname" >&6; }
+
+    if test $ac_cv_func_gethostbyname = no; then
+      { echo "$as_me:$LINENO: checking for gethostbyname in -lnsl" >&5
+echo $ECHO_N "checking for gethostbyname in -lnsl... $ECHO_C" >&6; }
+if test "${ac_cv_lib_nsl_gethostbyname+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lnsl  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char gethostbyname ();
+int
+main ()
+{
+return gethostbyname ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_nsl_gethostbyname=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_nsl_gethostbyname=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_nsl_gethostbyname" >&5
+echo "${ECHO_T}$ac_cv_lib_nsl_gethostbyname" >&6; }
+if test $ac_cv_lib_nsl_gethostbyname = yes; then
+  X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl"
+fi
+
+      if test $ac_cv_lib_nsl_gethostbyname = no; then
+	{ echo "$as_me:$LINENO: checking for gethostbyname in -lbsd" >&5
+echo $ECHO_N "checking for gethostbyname in -lbsd... $ECHO_C" >&6; }
+if test "${ac_cv_lib_bsd_gethostbyname+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lbsd  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char gethostbyname ();
+int
+main ()
+{
+return gethostbyname ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_bsd_gethostbyname=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_bsd_gethostbyname=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_bsd_gethostbyname" >&5
+echo "${ECHO_T}$ac_cv_lib_bsd_gethostbyname" >&6; }
+if test $ac_cv_lib_bsd_gethostbyname = yes; then
+  X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd"
+fi
+
+      fi
+    fi
+
+    # lieder at skyler.mavd.honeywell.com says without -lsocket,
+    # socket/setsockopt and other routines are undefined under SCO ODT
+    # 2.0.  But -lsocket is broken on IRIX 5.2 (and is not necessary
+    # on later versions), says Simon Leinen: it contains gethostby*
+    # variants that don't use the name server (or something).  -lsocket
+    # must be given before -lnsl if both are needed.  We assume that
+    # if connect needs -lnsl, so does gethostbyname.
+    { echo "$as_me:$LINENO: checking for connect" >&5
+echo $ECHO_N "checking for connect... $ECHO_C" >&6; }
+if test "${ac_cv_func_connect+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define connect to an innocuous variant, in case <limits.h> declares connect.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define connect innocuous_connect
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char connect (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef connect
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char connect ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_connect || defined __stub___connect
+choke me
+#endif
+
+int
+main ()
+{
+return connect ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_func_connect=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_func_connect=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_func_connect" >&5
+echo "${ECHO_T}$ac_cv_func_connect" >&6; }
+
+    if test $ac_cv_func_connect = no; then
+      { echo "$as_me:$LINENO: checking for connect in -lsocket" >&5
+echo $ECHO_N "checking for connect in -lsocket... $ECHO_C" >&6; }
+if test "${ac_cv_lib_socket_connect+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsocket $X_EXTRA_LIBS $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char connect ();
+int
+main ()
+{
+return connect ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_socket_connect=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_socket_connect=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_socket_connect" >&5
+echo "${ECHO_T}$ac_cv_lib_socket_connect" >&6; }
+if test $ac_cv_lib_socket_connect = yes; then
+  X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS"
+fi
+
+    fi
+
+    # Guillermo Gomez says -lposix is necessary on A/UX.
+    { echo "$as_me:$LINENO: checking for remove" >&5
+echo $ECHO_N "checking for remove... $ECHO_C" >&6; }
+if test "${ac_cv_func_remove+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define remove to an innocuous variant, in case <limits.h> declares remove.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define remove innocuous_remove
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char remove (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef remove
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char remove ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_remove || defined __stub___remove
+choke me
+#endif
+
+int
+main ()
+{
+return remove ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_func_remove=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_func_remove=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_func_remove" >&5
+echo "${ECHO_T}$ac_cv_func_remove" >&6; }
+
+    if test $ac_cv_func_remove = no; then
+      { echo "$as_me:$LINENO: checking for remove in -lposix" >&5
+echo $ECHO_N "checking for remove in -lposix... $ECHO_C" >&6; }
+if test "${ac_cv_lib_posix_remove+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lposix  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char remove ();
+int
+main ()
+{
+return remove ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_posix_remove=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_posix_remove=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_posix_remove" >&5
+echo "${ECHO_T}$ac_cv_lib_posix_remove" >&6; }
+if test $ac_cv_lib_posix_remove = yes; then
+  X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix"
+fi
+
+    fi
+
+    # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
+    { echo "$as_me:$LINENO: checking for shmat" >&5
+echo $ECHO_N "checking for shmat... $ECHO_C" >&6; }
+if test "${ac_cv_func_shmat+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define shmat to an innocuous variant, in case <limits.h> declares shmat.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define shmat innocuous_shmat
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char shmat (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef shmat
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char shmat ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_shmat || defined __stub___shmat
+choke me
+#endif
+
+int
+main ()
+{
+return shmat ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_func_shmat=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_func_shmat=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_func_shmat" >&5
+echo "${ECHO_T}$ac_cv_func_shmat" >&6; }
+
+    if test $ac_cv_func_shmat = no; then
+      { echo "$as_me:$LINENO: checking for shmat in -lipc" >&5
+echo $ECHO_N "checking for shmat in -lipc... $ECHO_C" >&6; }
+if test "${ac_cv_lib_ipc_shmat+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lipc  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char shmat ();
+int
+main ()
+{
+return shmat ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_ipc_shmat=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_ipc_shmat=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_ipc_shmat" >&5
+echo "${ECHO_T}$ac_cv_lib_ipc_shmat" >&6; }
+if test $ac_cv_lib_ipc_shmat = yes; then
+  X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc"
+fi
+
+    fi
+  fi
+
+  # Check for libraries that X11R6 Xt/Xaw programs need.
+  ac_save_LDFLAGS=$LDFLAGS
+  test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries"
+  # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to
+  # check for ICE first), but we must link in the order -lSM -lICE or
+  # we get undefined symbols.  So assume we have SM if we have ICE.
+  # These have to be linked with before -lX11, unlike the other
+  # libraries we check for below, so use a different variable.
+  # John Interrante, Karl Berry
+  { echo "$as_me:$LINENO: checking for IceConnectionNumber in -lICE" >&5
+echo $ECHO_N "checking for IceConnectionNumber in -lICE... $ECHO_C" >&6; }
+if test "${ac_cv_lib_ICE_IceConnectionNumber+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lICE $X_EXTRA_LIBS $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char IceConnectionNumber ();
+int
+main ()
+{
+return IceConnectionNumber ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_ICE_IceConnectionNumber=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_ICE_IceConnectionNumber=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5
+echo "${ECHO_T}$ac_cv_lib_ICE_IceConnectionNumber" >&6; }
+if test $ac_cv_lib_ICE_IceConnectionNumber = yes; then
+  X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE"
+fi
+
+  LDFLAGS=$ac_save_LDFLAGS
+
+fi
+
+echo x_cflags=$X_CFLAGS libs=$LIBS pre_lib=$X_PRE_LIBS x_libs=$X_LIBS x_extra=$X_EXTRA_LIBS
+
+if test x$no_x = xyes; then
+  echo "You need to supply the path to the X headers and libraries with --x-includes=dir and --x-libraries=dir";
+  exit 1;
+fi;
+
+
+
+LIBS="${X_PRE_LIBS} ${X_LIBS} -lX11 -lXext -lXmu ${LIBS} ${X_EXTRA_LIBS} -lfreetype"
+CFLAGS="$CFLAGS $X_CFLAGS"
+
+export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/X11R6/lib/pkgconfig
+
+
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+	if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
+set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_path_PKG_CONFIG+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+if test -n "$PKG_CONFIG"; then
+  { echo "$as_me:$LINENO: result: $PKG_CONFIG" >&5
+echo "${ECHO_T}$PKG_CONFIG" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+fi
+if test -z "$ac_cv_path_PKG_CONFIG"; then
+  ac_pt_PKG_CONFIG=$PKG_CONFIG
+  # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  case $ac_pt_PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
+if test -n "$ac_pt_PKG_CONFIG"; then
+  { echo "$as_me:$LINENO: result: $ac_pt_PKG_CONFIG" >&5
+echo "${ECHO_T}$ac_pt_PKG_CONFIG" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+  if test "x$ac_pt_PKG_CONFIG" = x; then
+    PKG_CONFIG=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ echo "$as_me:$LINENO: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf at gnu.org." >&5
+echo "$as_me: WARNING: In the future, Autoconf will not detect cross-tools
+whose name does not start with the host triplet.  If you think this
+configuration is useful to you, please write to autoconf at gnu.org." >&2;}
+ac_tool_warned=yes ;;
+esac
+    PKG_CONFIG=$ac_pt_PKG_CONFIG
+  fi
+else
+  PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
+fi
+
+fi
+if test -n "$PKG_CONFIG"; then
+	_pkg_min_version=0.9.0
+	{ echo "$as_me:$LINENO: checking pkg-config is at least version $_pkg_min_version" >&5
+echo $ECHO_N "checking pkg-config is at least version $_pkg_min_version... $ECHO_C" >&6; }
+	if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+		{ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+	else
+		{ echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+		PKG_CONFIG=""
+	fi
+
+fi
+
+pkg_failed=no
+{ echo "$as_me:$LINENO: checking for XFT" >&5
+echo $ECHO_N "checking for XFT... $ECHO_C" >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$XFT_CFLAGS"; then
+        pkg_cv_XFT_CFLAGS="$XFT_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"xft\"") >&5
+  ($PKG_CONFIG --exists --print-errors "xft") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_XFT_CFLAGS=`$PKG_CONFIG --cflags "xft" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$XFT_LIBS"; then
+        pkg_cv_XFT_LIBS="$XFT_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"xft\"") >&5
+  ($PKG_CONFIG --exists --print-errors "xft") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_XFT_LIBS=`$PKG_CONFIG --libs "xft" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        XFT_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "xft"`
+        else
+	        XFT_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "xft"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$XFT_PKG_ERRORS" >&5
+
+	{ { echo "$as_me:$LINENO: error: Package requirements (xft) were not met:
+
+$XFT_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables XFT_CFLAGS
+and XFT_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+" >&5
+echo "$as_me: error: Package requirements (xft) were not met:
+
+$XFT_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables XFT_CFLAGS
+and XFT_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+" >&2;}
+   { (exit 1); exit 1; }; }
+elif test $pkg_failed = untried; then
+	{ { echo "$as_me:$LINENO: error: The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables XFT_CFLAGS
+and XFT_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details." >&5
+echo "$as_me: error: The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables XFT_CFLAGS
+and XFT_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+	XFT_CFLAGS=$pkg_cv_XFT_CFLAGS
+	XFT_LIBS=$pkg_cv_XFT_LIBS
+        { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+	:
+fi
+
+
+
+xinerama=yes
+# Check whether --enable-xinerama was given.
+if test "${enable_xinerama+set}" = set; then
+  enableval=$enable_xinerama; xinerama=$enableval
+else
+  xinerama=yes
+fi
+
+if test x$xinerama = xyes; then
+	{ echo "$as_me:$LINENO: checking for XineramaQueryScreens in -lXinerama" >&5
+echo $ECHO_N "checking for XineramaQueryScreens in -lXinerama... $ECHO_C" >&6; }
+if test "${ac_cv_lib_Xinerama_XineramaQueryScreens+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lXinerama  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char XineramaQueryScreens ();
+int
+main ()
+{
+return XineramaQueryScreens ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_Xinerama_XineramaQueryScreens=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_Xinerama_XineramaQueryScreens=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_Xinerama_XineramaQueryScreens" >&5
+echo "${ECHO_T}$ac_cv_lib_Xinerama_XineramaQueryScreens" >&6; }
+if test $ac_cv_lib_Xinerama_XineramaQueryScreens = yes; then
+  LIBS="-lXinerama $LIBS"
+
+cat >>confdefs.h <<\_ACEOF
+#define XINERAMA 1
+_ACEOF
+
+else
+  xinerama=no
+fi
+
+fi
+
+
+
+
+build_wmccc="yes"
+# Check whether --enable-wmccc was given.
+if test "${enable_wmccc+set}" = set; then
+  enableval=$enable_wmccc;  if   test "x$enableval" = "xno" ; then
+	build_wmccc="no"
+	echo you disabled wmccc
+   fi
+
+else
+  build_wmccc="yes"
+fi
+
+
+build_wmcc_player="yes"
+# Check whether --enable-wmcoincoin_player was given.
+if test "${enable_wmcoincoin_player+set}" = set; then
+  enableval=$enable_wmcoincoin_player;  if   test "x$enableval" = "xno" ; then
+	build_wmcc_player="no"
+	echo you disabled wmcoincoin_player
+   fi
+
+else
+  build_wmcc_player="yes"
+fi
+
+
+if test "x$build_wmccc" = "xno"; then
+  echo wmccc disabled...
+  WMCCC=""
+else
+  echo building with WMCCC, checking for gtk..
+  pkg_modules="gtk+-2.0 >= 2.0.0"
+
+pkg_failed=no
+{ echo "$as_me:$LINENO: checking for PACKAGE" >&5
+echo $ECHO_N "checking for PACKAGE... $ECHO_C" >&6; }
+
+if test -n "$PKG_CONFIG"; then
+    if test -n "$PACKAGE_CFLAGS"; then
+        pkg_cv_PACKAGE_CFLAGS="$PACKAGE_CFLAGS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"\$pkg_modules\"") >&5
+  ($PKG_CONFIG --exists --print-errors "$pkg_modules") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_PACKAGE_CFLAGS=`$PKG_CONFIG --cflags "$pkg_modules" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+    if test -n "$PACKAGE_LIBS"; then
+        pkg_cv_PACKAGE_LIBS="$PACKAGE_LIBS"
+    else
+        if test -n "$PKG_CONFIG" && \
+    { (echo "$as_me:$LINENO: \$PKG_CONFIG --exists --print-errors \"\$pkg_modules\"") >&5
+  ($PKG_CONFIG --exists --print-errors "$pkg_modules") 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  pkg_cv_PACKAGE_LIBS=`$PKG_CONFIG --libs "$pkg_modules" 2>/dev/null`
+else
+  pkg_failed=yes
+fi
+    fi
+else
+	pkg_failed=untried
+fi
+
+
+
+if test $pkg_failed = yes; then
+
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+	        PACKAGE_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$pkg_modules"`
+        else
+	        PACKAGE_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$pkg_modules"`
+        fi
+	# Put the nasty error message in config.log where it belongs
+	echo "$PACKAGE_PKG_ERRORS" >&5
+
+	{ { echo "$as_me:$LINENO: error: Package requirements ($pkg_modules) were not met:
+
+$PACKAGE_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables PACKAGE_CFLAGS
+and PACKAGE_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+" >&5
+echo "$as_me: error: Package requirements ($pkg_modules) were not met:
+
+$PACKAGE_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively, you may set the environment variables PACKAGE_CFLAGS
+and PACKAGE_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+" >&2;}
+   { (exit 1); exit 1; }; }
+elif test $pkg_failed = untried; then
+	{ { echo "$as_me:$LINENO: error: The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables PACKAGE_CFLAGS
+and PACKAGE_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details." >&5
+echo "$as_me: error: The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+Alternatively, you may set the environment variables PACKAGE_CFLAGS
+and PACKAGE_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.
+See \`config.log' for more details." >&2;}
+   { (exit 1); exit 1; }; }
+else
+	PACKAGE_CFLAGS=$pkg_cv_PACKAGE_CFLAGS
+	PACKAGE_LIBS=$pkg_cv_PACKAGE_LIBS
+        { echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6; }
+	:
+fi
+
+  GTK_CFLAGS=$PACKAGE_CFLAGS;
+  GTK_LIBS=$PACKAGE_LIBS;
+
+
+
+
+    WMCCC="wmccc$EXEEXT"
+fi
+
+
+
+
+
+for ac_func in vprintf
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	eval "$as_ac_var=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_var'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+{ echo "$as_me:$LINENO: checking for _doprnt" >&5
+echo $ECHO_N "checking for _doprnt... $ECHO_C" >&6; }
+if test "${ac_cv_func__doprnt+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define _doprnt to an innocuous variant, in case <limits.h> declares _doprnt.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define _doprnt innocuous__doprnt
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char _doprnt (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef _doprnt
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char _doprnt ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub__doprnt || defined __stub____doprnt
+choke me
+#endif
+
+int
+main ()
+{
+return _doprnt ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_func__doprnt=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_func__doprnt=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_func__doprnt" >&5
+echo "${ECHO_T}$ac_cv_func__doprnt" >&6; }
+if test $ac_cv_func__doprnt = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_DOPRNT 1
+_ACEOF
+
+fi
+
+fi
+done
+
+
+
+
+
+
+
+
+for ac_header in string.h stdarg.h unistd.h sys/time.h utime.h sys/utime.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    ( cat <<\_ASBOX
+## -------------------------------- ##
+## Report this to triton at kumal.info ##
+## -------------------------------- ##
+_ASBOX
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+
+
+
+for ac_header in sys/select.h sys/utsname.h pwd.h signal.h windows.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    ( cat <<\_ASBOX
+## -------------------------------- ##
+## Report this to triton at kumal.info ##
+## -------------------------------- ##
+_ASBOX
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+for ac_header in inttypes.h unistd.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  { echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+else
+  # Is the header compilable?
+{ echo "$as_me:$LINENO: checking $ac_header usability" >&5
+echo $ECHO_N "checking $ac_header usability... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+#include <$ac_header>
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_header_compiler=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_header_compiler=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_compiler" >&5
+echo "${ECHO_T}$ac_header_compiler" >&6; }
+
+# Is the header present?
+{ echo "$as_me:$LINENO: checking $ac_header presence" >&5
+echo $ECHO_N "checking $ac_header presence... $ECHO_C" >&6; }
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <$ac_header>
+_ACEOF
+if { (ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } >/dev/null && {
+	 test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       }; then
+  ac_header_preproc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+  ac_header_preproc=no
+fi
+
+rm -f conftest.err conftest.$ac_ext
+{ echo "$as_me:$LINENO: result: $ac_header_preproc" >&5
+echo "${ECHO_T}$ac_header_preproc" >&6; }
+
+# So?  What about this header?
+case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in
+  yes:no: )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&5
+echo "$as_me: WARNING: $ac_header: accepted by the compiler, rejected by the preprocessor!" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the compiler's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the compiler's result" >&2;}
+    ac_header_preproc=yes
+    ;;
+  no:yes:* )
+    { echo "$as_me:$LINENO: WARNING: $ac_header: present but cannot be compiled" >&5
+echo "$as_me: WARNING: $ac_header: present but cannot be compiled" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     check for missing prerequisite headers?" >&5
+echo "$as_me: WARNING: $ac_header:     check for missing prerequisite headers?" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: see the Autoconf documentation" >&5
+echo "$as_me: WARNING: $ac_header: see the Autoconf documentation" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&5
+echo "$as_me: WARNING: $ac_header:     section \"Present But Cannot Be Compiled\"" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: proceeding with the preprocessor's result" >&5
+echo "$as_me: WARNING: $ac_header: proceeding with the preprocessor's result" >&2;}
+    { echo "$as_me:$LINENO: WARNING: $ac_header: in the future, the compiler will take precedence" >&5
+echo "$as_me: WARNING: $ac_header: in the future, the compiler will take precedence" >&2;}
+    ( cat <<\_ASBOX
+## -------------------------------- ##
+## Report this to triton at kumal.info ##
+## -------------------------------- ##
+_ASBOX
+     ) | sed "s/^/$as_me: WARNING:     /" >&2
+    ;;
+esac
+{ echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6; }
+if { as_var=$as_ac_Header; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+ac_res=`eval echo '${'$as_ac_Header'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+
+fi
+if test `eval echo '${'$as_ac_Header'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+{ echo "$as_me:$LINENO: checking whether time.h and sys/time.h may both be included" >&5
+echo $ECHO_N "checking whether time.h and sys/time.h may both be included... $ECHO_C" >&6; }
+if test "${ac_cv_header_time+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/types.h>
+#include <sys/time.h>
+#include <time.h>
+
+int
+main ()
+{
+if ((struct tm *) 0)
+return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_header_time=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_header_time=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_time" >&5
+echo "${ECHO_T}$ac_cv_header_time" >&6; }
+if test $ac_cv_header_time = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define TIME_WITH_SYS_TIME 1
+_ACEOF
+
+fi
+
+
+
+
+
+for ac_func in strdup strstr strcasecmp strncasecmp
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	eval "$as_ac_var=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_var'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+
+
+
+
+for ac_func in strerror snprintf vsnprintf select signal
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	eval "$as_ac_var=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_var'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+for ac_func in uname
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	eval "$as_ac_var=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_var'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+
+
+
+
+
+
+
+
+for ac_func in getaddrinfo freeaddrinfo gai_strerror getnameinfo inet_aton
+do
+as_ac_var=`echo "ac_cv_func_$ac_func" | $as_tr_sh`
+{ echo "$as_me:$LINENO: checking for $ac_func" >&5
+echo $ECHO_N "checking for $ac_func... $ECHO_C" >&6; }
+if { as_var=$as_ac_var; eval "test \"\${$as_var+set}\" = set"; }; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+/* Define $ac_func to an innocuous variant, in case <limits.h> declares $ac_func.
+   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
+#define $ac_func innocuous_$ac_func
+
+/* System header to define __stub macros and hopefully few prototypes,
+    which can conflict with char $ac_func (); below.
+    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
+    <limits.h> exists even on freestanding compilers.  */
+
+#ifdef __STDC__
+# include <limits.h>
+#else
+# include <assert.h>
+#endif
+
+#undef $ac_func
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char $ac_func ();
+/* The GNU C library defines this for functions which it implements
+    to always fail with ENOSYS.  Some functions are actually named
+    something starting with __ and the normal name is an alias.  */
+#if defined __stub_$ac_func || defined __stub___$ac_func
+choke me
+#endif
+
+int
+main ()
+{
+return $ac_func ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  eval "$as_ac_var=yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	eval "$as_ac_var=no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+ac_res=`eval echo '${'$as_ac_var'}'`
+	       { echo "$as_me:$LINENO: result: $ac_res" >&5
+echo "${ECHO_T}$ac_res" >&6; }
+if test `eval echo '${'$as_ac_var'}'` = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define `echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+{ echo "$as_me:$LINENO: checking for an ANSI C-conforming const" >&5
+echo $ECHO_N "checking for an ANSI C-conforming const... $ECHO_C" >&6; }
+if test "${ac_cv_c_const+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+int
+main ()
+{
+/* FIXME: Include the comments suggested by Paul. */
+#ifndef __cplusplus
+  /* Ultrix mips cc rejects this.  */
+  typedef int charset[2];
+  const charset cs;
+  /* SunOS 4.1.1 cc rejects this.  */
+  char const *const *pcpcc;
+  char **ppc;
+  /* NEC SVR4.0.2 mips cc rejects this.  */
+  struct point {int x, y;};
+  static struct point const zero = {0,0};
+  /* AIX XL C 1.02.0.0 rejects this.
+     It does not let you subtract one const X* pointer from another in
+     an arm of an if-expression whose if-part is not a constant
+     expression */
+  const char *g = "string";
+  pcpcc = &g + (g ? g-g : 0);
+  /* HPUX 7.0 cc rejects these. */
+  ++pcpcc;
+  ppc = (char**) pcpcc;
+  pcpcc = (char const *const *) ppc;
+  { /* SCO 3.2v4 cc rejects this.  */
+    char *t;
+    char const *s = 0 ? (char *) 0 : (char const *) 0;
+
+    *t++ = 0;
+    if (s) return 0;
+  }
+  { /* Someone thinks the Sun supposedly-ANSI compiler will reject this.  */
+    int x[] = {25, 17};
+    const int *foo = &x[0];
+    ++foo;
+  }
+  { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */
+    typedef const int *iptr;
+    iptr p = 0;
+    ++p;
+  }
+  { /* AIX XL C 1.02.0.0 rejects this saying
+       "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */
+    struct s { int j; const int *ap[3]; };
+    struct s *b; b->j = 5;
+  }
+  { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */
+    const int foo = 10;
+    if (!foo) return 0;
+  }
+  return !cs[0] && !zero.x;
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_c_const=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_c_const=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_c_const" >&5
+echo "${ECHO_T}$ac_cv_c_const" >&6; }
+if test $ac_cv_c_const = no; then
+
+cat >>confdefs.h <<\_ACEOF
+#define const
+_ACEOF
+
+fi
+
+{ echo "$as_me:$LINENO: checking for inline" >&5
+echo $ECHO_N "checking for inline... $ECHO_C" >&6; }
+if test "${ac_cv_c_inline+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_c_inline=no
+for ac_kw in inline __inline__ __inline; do
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#ifndef __cplusplus
+typedef int foo_t;
+static $ac_kw foo_t static_foo () {return 0; }
+$ac_kw foo_t foo () {return 0; }
+#endif
+
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_c_inline=$ac_kw
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  test "$ac_cv_c_inline" != no && break
+done
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_c_inline" >&5
+echo "${ECHO_T}$ac_cv_c_inline" >&6; }
+
+
+case $ac_cv_c_inline in
+  inline | yes) ;;
+  *)
+    case $ac_cv_c_inline in
+      no) ac_val=;;
+      *) ac_val=$ac_cv_c_inline;;
+    esac
+    cat >>confdefs.h <<_ACEOF
+#ifndef __cplusplus
+#define inline $ac_val
+#endif
+_ACEOF
+    ;;
+esac
+
+{ echo "$as_me:$LINENO: checking for pid_t" >&5
+echo $ECHO_N "checking for pid_t... $ECHO_C" >&6; }
+if test "${ac_cv_type_pid_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+typedef pid_t ac__type_new_;
+int
+main ()
+{
+if ((ac__type_new_ *) 0)
+  return 0;
+if (sizeof (ac__type_new_))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_type_pid_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_type_pid_t=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_type_pid_t" >&5
+echo "${ECHO_T}$ac_cv_type_pid_t" >&6; }
+if test $ac_cv_type_pid_t = yes; then
+  :
+else
+
+cat >>confdefs.h <<_ACEOF
+#define pid_t int
+_ACEOF
+
+fi
+
+{ echo "$as_me:$LINENO: checking for size_t" >&5
+echo $ECHO_N "checking for size_t... $ECHO_C" >&6; }
+if test "${ac_cv_type_size_t+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_includes_default
+typedef size_t ac__type_new_;
+int
+main ()
+{
+if ((ac__type_new_ *) 0)
+  return 0;
+if (sizeof (ac__type_new_))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_type_size_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_type_size_t=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_type_size_t" >&5
+echo "${ECHO_T}$ac_cv_type_size_t" >&6; }
+if test $ac_cv_type_size_t = yes; then
+  :
+else
+
+cat >>confdefs.h <<_ACEOF
+#define size_t unsigned int
+_ACEOF
+
+fi
+
+{ echo "$as_me:$LINENO: checking whether time.h and sys/time.h may both be included" >&5
+echo $ECHO_N "checking whether time.h and sys/time.h may both be included... $ECHO_C" >&6; }
+if test "${ac_cv_header_time+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/types.h>
+#include <sys/time.h>
+#include <time.h>
+
+int
+main ()
+{
+if ((struct tm *) 0)
+return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_header_time=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_header_time=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_header_time" >&5
+echo "${ECHO_T}$ac_cv_header_time" >&6; }
+if test $ac_cv_header_time = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define TIME_WITH_SYS_TIME 1
+_ACEOF
+
+fi
+
+{ echo "$as_me:$LINENO: checking whether struct tm is in sys/time.h or time.h" >&5
+echo $ECHO_N "checking whether struct tm is in sys/time.h or time.h... $ECHO_C" >&6; }
+if test "${ac_cv_struct_tm+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <sys/types.h>
+#include <time.h>
+
+int
+main ()
+{
+struct tm tm;
+				     int *p = &tm.tm_sec;
+ 				     return !p;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+  ac_cv_struct_tm=time.h
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_struct_tm=sys/time.h
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_struct_tm" >&5
+echo "${ECHO_T}$ac_cv_struct_tm" >&6; }
+if test $ac_cv_struct_tm = sys/time.h; then
+
+cat >>confdefs.h <<\_ACEOF
+#define TM_IN_SYS_TIME 1
+_ACEOF
+
+fi
+
+
+
+{ echo "$as_me:$LINENO: checking for struct sockaddr_storage" >&5
+echo $ECHO_N "checking for struct sockaddr_storage... $ECHO_C" >&6; }
+if test "${ac_cv_have_struct_sockaddr_storage+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+	cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#ifdef HAVE_WINDOWS_H
+#include <winsock2.h>
+#else
+#include <sys/types.h>
+#include <sys/socket.h>
+#endif
+
+int
+main ()
+{
+ struct sockaddr_storage s;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+   ac_cv_have_struct_sockaddr_storage="yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	 ac_cv_have_struct_sockaddr_storage="no"
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_struct_sockaddr_storage" >&5
+echo "${ECHO_T}$ac_cv_have_struct_sockaddr_storage" >&6; }
+if test "x$ac_cv_have_struct_sockaddr_storage" = "xyes" ; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_STRUCT_SOCKADDR_STORAGE 1
+_ACEOF
+
+fi
+{ echo "$as_me:$LINENO: checking for struct addrinfo" >&5
+echo $ECHO_N "checking for struct addrinfo... $ECHO_C" >&6; }
+if test "${ac_cv_have_struct_addrinfo+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+	cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+#ifdef HAVE_WINDOWS_H
+#include <winsock2.h>
+#else
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netdb.h>
+#endif
+
+int
+main ()
+{
+ struct addrinfo s; s.ai_flags = AI_PASSIVE;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+   ac_cv_have_struct_addrinfo="yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	 ac_cv_have_struct_addrinfo="no"
+
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_have_struct_addrinfo" >&5
+echo "${ECHO_T}$ac_cv_have_struct_addrinfo" >&6; }
+if test "x$ac_cv_have_struct_addrinfo" = "xyes" ; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_STRUCT_ADDRINFO 1
+_ACEOF
+
+fi
+
+{ echo "$as_me:$LINENO: checking for execinfo.h and backtrace" >&5
+echo $ECHO_N "checking for execinfo.h and backtrace... $ECHO_C" >&6; }
+if test "${ac_have_backtrace+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+
+        cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+ #include <execinfo.h>
+
+int
+main ()
+{
+ void* trace[256]; int n = backtrace(trace, 256);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (ac_try="$ac_compile"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_compile") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest.$ac_objext; then
+   ac_have_backtrace="yes"
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	 ac_have_backtrace="no"
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ echo "$as_me:$LINENO: result: $ac_have_backtrace" >&5
+echo "${ECHO_T}$ac_have_backtrace" >&6; }
+if test "x$ac_have_backtrace" = "xyes"; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_BACKTRACE 1
+_ACEOF
+
+fi;
+
+WMCOINCOIN_PLAYER=""
+if test "x$build_wmcc_player" = "xyes"; then
+  # Extract the first word of "imlib2-config", so it can be a program name with args.
+set dummy imlib2-config; ac_word=$2
+{ echo "$as_me:$LINENO: checking for $ac_word" >&5
+echo $ECHO_N "checking for $ac_word... $ECHO_C" >&6; }
+if test "${ac_cv_prog_IMLIB2_CONFIG_IN_PATH+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test -n "$IMLIB2_CONFIG_IN_PATH"; then
+  ac_cv_prog_IMLIB2_CONFIG_IN_PATH="$IMLIB2_CONFIG_IN_PATH" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for ac_exec_ext in '' $ac_executable_extensions; do
+  if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
+    ac_cv_prog_IMLIB2_CONFIG_IN_PATH="yes"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_prog_IMLIB2_CONFIG_IN_PATH" && ac_cv_prog_IMLIB2_CONFIG_IN_PATH="no"
+fi
+fi
+IMLIB2_CONFIG_IN_PATH=$ac_cv_prog_IMLIB2_CONFIG_IN_PATH
+if test -n "$IMLIB2_CONFIG_IN_PATH"; then
+  { echo "$as_me:$LINENO: result: $IMLIB2_CONFIG_IN_PATH" >&5
+echo "${ECHO_T}$IMLIB2_CONFIG_IN_PATH" >&6; }
+else
+  { echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6; }
+fi
+
+
+  if test "x$IMLIB2_CONFIG_IN_PATH" = "xno"; then
+        echo " *********************** YOU ARE NOT READY FOR THE DESKTOP ***********************"
+        echo " * no arms                              ==> no chocolate                         *"
+        echo " * imlib2-config was not found in path  ==> wmcoincoin_player will not be built. *"
+        echo " ************************* Thank you for your attention **************************"
+        build_wmcc_player="no"
+  else
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_IMLIB2 1
+_ACEOF
+
+        WMCOINCOIN_PLAYER="wmcoincoin_player${EXEEXT}"
+        build_wmcc_player="yes"
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_WMCOINCOIN_PLAYER 1
+_ACEOF
+
+  fi
+fi
+
+
+YELLOW="\\033\\1331;33m"
+RESET="\\033\\1330m"
+
+case "$host" in
+    *-linux-*)
+          echo -e "\n${YELLOW}you are using GNU/linux, it's Good(c)(tm) !${RESET}\n"
+          ;;
+    *-solaris*)
+          echo -e "\noh oh !! wmcc runs quite well on solaris (even solaris 7 which stinks from the back), good luck !\n"
+          ;;
+    *bsd*)
+          echo -e "\nbsd detected!\n"
+	  ;;
+    *-cygwin*)
+	  echo -e "\n${YELLOW}cygwin detected !, may the force be with you, young mussel${RESET}\n"
+
+{ echo "$as_me:$LINENO: checking for select in -lwsock32" >&5
+echo $ECHO_N "checking for select in -lwsock32... $ECHO_C" >&6; }
+if test "${ac_cv_lib_wsock32_select+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lwsock32  $LIBS"
+cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char select ();
+int
+main ()
+{
+return select ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval "echo \"\$as_me:$LINENO: $ac_try_echo\"") >&5
+  (eval "$ac_link") 2>conftest.er1
+  ac_status=$?
+  grep -v '^ *+' conftest.er1 >conftest.err
+  rm -f conftest.er1
+  cat conftest.err >&5
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && {
+	 test -z "$ac_c_werror_flag" ||
+	 test ! -s conftest.err
+       } && test -s conftest$ac_exeext &&
+       $as_test_x conftest$ac_exeext; then
+  ac_cv_lib_wsock32_select=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+	ac_cv_lib_wsock32_select=no
+fi
+
+rm -f core conftest.err conftest.$ac_objext conftest_ipa8_conftest.oo \
+      conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ echo "$as_me:$LINENO: result: $ac_cv_lib_wsock32_select" >&5
+echo "${ECHO_T}$ac_cv_lib_wsock32_select" >&6; }
+if test $ac_cv_lib_wsock32_select = yes; then
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_LIBWSOCK32 1
+_ACEOF
+
+  LIBS="-lwsock32 $LIBS"
+
+fi
+
+	  	  LIBS="`echo ${LIBS} | sed -e 's/-lm//'`"
+	  LIBS="${LIBS} -liconv -lm"
+	  ;;
+    *-darwin*)
+          echo -e "\n${YELLOW}darwin detected, vilain macounet !${RESET}\n"
+	            ;;
+    *GNU*)
+	  echo -e "\n${YELLOW}GNU/Hurd ! you need to shave yourself${RESET}\n"
+	  ;;
+    *hpux*)
+          echo "HPUX detected !! you are hairy"
+          ;;
+    *)
+	  echo -e "\n${YELLOW}you are compiling on $host , it's original${RESET}\n"
+         ;;
+esac
+
+ac_config_files="$ac_config_files Makefile intl/Makefile po/Makefile.in m4/Makefile src/Makefile scripts/Makefile platypus/Makefile"
+
+ac_config_commands="$ac_config_commands default"
+
+cat >confcache <<\_ACEOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs, see configure's option --config-cache.
+# It is not useful on other systems.  If it contains results you don't
+# want to keep, you may remove or edit it.
+#
+# config.status only pays attention to the cache file if you give it
+# the --recheck option to rerun configure.
+#
+# `ac_cv_env_foo' variables (set or unset) will be overridden when
+# loading this file, other *unset* `ac_cv_foo' will be assigned the
+# following values.
+
+_ACEOF
+
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, we kill variables containing newlines.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(
+  for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
+    eval ac_val=\$$ac_var
+    case $ac_val in #(
+    *${as_nl}*)
+      case $ac_var in #(
+      *_cv_*) { echo "$as_me:$LINENO: WARNING: Cache variable $ac_var contains a newline." >&5
+echo "$as_me: WARNING: Cache variable $ac_var contains a newline." >&2;} ;;
+      esac
+      case $ac_var in #(
+      _ | IFS | as_nl) ;; #(
+      *) $as_unset $ac_var ;;
+      esac ;;
+    esac
+  done
+
+  (set) 2>&1 |
+    case $as_nl`(ac_space=' '; set) 2>&1` in #(
+    *${as_nl}ac_space=\ *)
+      # `set' does not quote correctly, so add quotes (double-quote
+      # substitution turns \\\\ into \\, and sed turns \\ into \).
+      sed -n \
+	"s/'/'\\\\''/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
+      ;; #(
+    *)
+      # `set' quotes correctly as required by POSIX, so do not add quotes.
+      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
+      ;;
+    esac |
+    sort
+) |
+  sed '
+     /^ac_cv_env_/b end
+     t clear
+     :clear
+     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+     t end
+     s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
+     :end' >>confcache
+if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
+  if test -w "$cache_file"; then
+    test "x$cache_file" != "x/dev/null" &&
+      { echo "$as_me:$LINENO: updating cache $cache_file" >&5
+echo "$as_me: updating cache $cache_file" >&6;}
+    cat confcache >$cache_file
+  else
+    { echo "$as_me:$LINENO: not updating unwritable cache $cache_file" >&5
+echo "$as_me: not updating unwritable cache $cache_file" >&6;}
+  fi
+fi
+rm -f confcache
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+DEFS=-DHAVE_CONFIG_H
+
+ac_libobjs=
+ac_ltlibobjs=
+for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
+  # 1. Remove the extension, and $U if already installed.
+  ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
+  ac_i=`echo "$ac_i" | sed "$ac_script"`
+  # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
+  #    will be set to the directory where LIBOBJS objects are built.
+  ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext"
+  ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo'
+done
+LIBOBJS=$ac_libobjs
+
+LTLIBOBJS=$ac_ltlibobjs
+
+
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+  { { echo "$as_me:$LINENO: error: conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&5
+echo "$as_me: error: conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." >&2;}
+   { (exit 1); exit 1; }; }
+fi
+
+: ${CONFIG_STATUS=./config.status}
+ac_clean_files_save=$ac_clean_files
+ac_clean_files="$ac_clean_files $CONFIG_STATUS"
+{ echo "$as_me:$LINENO: creating $CONFIG_STATUS" >&5
+echo "$as_me: creating $CONFIG_STATUS" >&6;}
+cat >$CONFIG_STATUS <<_ACEOF
+#! $SHELL
+# Generated by $as_me.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+SHELL=\${CONFIG_SHELL-$SHELL}
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+## --------------------- ##
+## M4sh Initialization.  ##
+## --------------------- ##
+
+# Be more Bourne compatible
+DUALCASE=1; export DUALCASE # for MKS sh
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+  setopt NO_GLOB_SUBST
+else
+  case `(set -o) 2>/dev/null` in
+  *posix*) set -o posix ;;
+esac
+
+fi
+
+
+
+
+# PATH needs CR
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+fi
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent editors from complaining about space-tab.
+# (If _AS_PATH_WALK were called with IFS unset, it would disable word
+# splitting by setting IFS to empty value.)
+as_nl='
+'
+IFS=" ""	$as_nl"
+
+# Find who we are.  Look in the path if we contain no directory separator.
+case $0 in
+  *[\\/]* ) as_myself=$0 ;;
+  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+IFS=$as_save_IFS
+
+     ;;
+esac
+# We did not find ourselves, most probably we were run as `sh COMMAND'
+# in which case we are not to be found in the path.
+if test "x$as_myself" = x; then
+  as_myself=$0
+fi
+if test ! -f "$as_myself"; then
+  echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
+  { (exit 1); exit 1; }
+fi
+
+# Work around bugs in pre-3.0 UWIN ksh.
+for as_var in ENV MAIL MAILPATH
+do ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+done
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+  LC_TELEPHONE LC_TIME
+do
+  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+    eval $as_var=C; export $as_var
+  else
+    ($as_unset $as_var) >/dev/null 2>&1 && $as_unset $as_var
+  fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename -- "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
+echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\/\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+
+# CDPATH.
+$as_unset CDPATH
+
+
+
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x`expr $as_lineno_1 + 1`" = "x$as_lineno_2" || {
+
+  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+  # uniformly replaced by the line number.  The first 'sed' inserts a
+  # line-number line after each line using $LINENO; the second 'sed'
+  # does the real work.  The second script uses 'N' to pair each
+  # line-number line with the line containing $LINENO, and appends
+  # trailing '-' during substitution so that $LINENO is not a special
+  # case at line end.
+  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+  # scripts with optimization help from Paolo Bonzini.  Blame Lee
+  # E. McMahon (1931-1989) for sed's syntax.  :-)
+  sed -n '
+    p
+    /[$]LINENO/=
+  ' <$as_myself |
+    sed '
+      s/[$]LINENO.*/&-/
+      t lineno
+      b
+      :lineno
+      N
+      :loop
+      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
+      t loop
+      s/-\n.*//
+    ' >$as_me.lineno &&
+  chmod +x "$as_me.lineno" ||
+    { echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2
+   { (exit 1); exit 1; }; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensitive to this).
+  . "./$as_me.lineno"
+  # Exit status is that of the last command.
+  exit
+}
+
+
+if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
+  as_dirname=dirname
+else
+  as_dirname=false
+fi
+
+ECHO_C= ECHO_N= ECHO_T=
+case `echo -n x` in
+-n*)
+  case `echo 'x\c'` in
+  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
+  *)   ECHO_C='\c';;
+  esac;;
+*)
+  ECHO_N='-n';;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1 &&
+   test "X`expr 00001 : '.*\(...\)'`" = X001; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+if test -d conf$$.dir; then
+  rm -f conf$$.dir/conf$$.file
+else
+  rm -f conf$$.dir
+  mkdir conf$$.dir
+fi
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s='ln -s'
+  # ... but there are two gotchas:
+  # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
+  # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
+  # In both cases, we have to default to `cp -p'.
+  ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
+    as_ln_s='cp -p'
+elif ln conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s=ln
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
+rmdir conf$$.dir 2>/dev/null
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p=:
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+if test -x / >/dev/null 2>&1; then
+  as_test_x='test -x'
+else
+  if ls -dL / >/dev/null 2>&1; then
+    as_ls_L_option=L
+  else
+    as_ls_L_option=
+  fi
+  as_test_x='
+    eval sh -c '\''
+      if test -d "$1"; then
+        test -d "$1/.";
+      else
+	case $1 in
+        -*)set "./$1";;
+	esac;
+	case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in
+	???[sx]*):;;*)false;;esac;fi
+    '\'' sh
+  '
+fi
+as_executable_p=$as_test_x
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+exec 6>&1
+
+# Save the log message, to keep $[0] and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.
+ac_log="
+This file was extended by wmcoincoin $as_me 2.6.1, which was
+generated by GNU Autoconf 2.61.  Invocation command line was
+
+  CONFIG_FILES    = $CONFIG_FILES
+  CONFIG_HEADERS  = $CONFIG_HEADERS
+  CONFIG_LINKS    = $CONFIG_LINKS
+  CONFIG_COMMANDS = $CONFIG_COMMANDS
+  $ $0 $@
+
+on `(hostname || uname -n) 2>/dev/null | sed 1q`
+"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+# Files that config.status was made for.
+config_files="$ac_config_files"
+config_headers="$ac_config_headers"
+config_commands="$ac_config_commands"
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+ac_cs_usage="\
+\`$as_me' instantiates files from templates according to the
+current configuration.
+
+Usage: $0 [OPTIONS] [FILE]...
+
+  -h, --help       print this help, then exit
+  -V, --version    print version number and configuration settings, then exit
+  -q, --quiet      do not print progress messages
+  -d, --debug      don't remove temporary files
+      --recheck    update $as_me by reconfiguring in the same conditions
+  --file=FILE[:TEMPLATE]
+		   instantiate the configuration file FILE
+  --header=FILE[:TEMPLATE]
+		   instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Configuration commands:
+$config_commands
+
+Report bugs to <bug-autoconf at gnu.org>."
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+ac_cs_version="\\
+wmcoincoin config.status 2.6.1
+configured by $0, generated by GNU Autoconf 2.61,
+  with options \\"`echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
+
+Copyright (C) 2006 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+
+ac_pwd='$ac_pwd'
+srcdir='$srcdir'
+INSTALL='$INSTALL'
+MKDIR_P='$MKDIR_P'
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+# If no file are specified by the user, then we need to provide default
+# value.  By we need to know if files were specified by the user.
+ac_need_defaults=:
+while test $# != 0
+do
+  case $1 in
+  --*=*)
+    ac_option=`expr "X$1" : 'X\([^=]*\)='`
+    ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
+    ac_shift=:
+    ;;
+  *)
+    ac_option=$1
+    ac_optarg=$2
+    ac_shift=shift
+    ;;
+  esac
+
+  case $ac_option in
+  # Handling of the options.
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    ac_cs_recheck=: ;;
+  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
+    echo "$ac_cs_version"; exit ;;
+  --debug | --debu | --deb | --de | --d | -d )
+    debug=: ;;
+  --file | --fil | --fi | --f )
+    $ac_shift
+    CONFIG_FILES="$CONFIG_FILES $ac_optarg"
+    ac_need_defaults=false;;
+  --header | --heade | --head | --hea )
+    $ac_shift
+    CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
+    ac_need_defaults=false;;
+  --he | --h)
+    # Conflict between --help and --header
+    { echo "$as_me: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&2
+   { (exit 1); exit 1; }; };;
+  --help | --hel | -h )
+    echo "$ac_cs_usage"; exit ;;
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil | --si | --s)
+    ac_cs_silent=: ;;
+
+  # This is an error.
+  -*) { echo "$as_me: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&2
+   { (exit 1); exit 1; }; } ;;
+
+  *) ac_config_targets="$ac_config_targets $1"
+     ac_need_defaults=false ;;
+
+  esac
+  shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+  exec 6>/dev/null
+  ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+if \$ac_cs_recheck; then
+  echo "running CONFIG_SHELL=$SHELL $SHELL $0 "$ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
+  CONFIG_SHELL=$SHELL
+  export CONFIG_SHELL
+  exec $SHELL "$0"$ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+fi
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+exec 5>>config.log
+{
+  echo
+  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+  echo "$ac_log"
+} >&5
+
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+#
+# INIT-COMMANDS
+#
+# Capture the value of obsolete ALL_LINGUAS because we need it to compute
+    # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it
+    # from automake < 1.5.
+    eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"'
+    # Capture the value of LINGUAS because we need it to compute CATALOGS.
+    LINGUAS="${LINGUAS-%UNSET%}"
+
+AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
+
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+# Handling of arguments.
+for ac_config_target in $ac_config_targets
+do
+  case $ac_config_target in
+    "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
+    "po-directories") CONFIG_COMMANDS="$CONFIG_COMMANDS po-directories" ;;
+    "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+    "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
+    "intl/Makefile") CONFIG_FILES="$CONFIG_FILES intl/Makefile" ;;
+    "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;;
+    "m4/Makefile") CONFIG_FILES="$CONFIG_FILES m4/Makefile" ;;
+    "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
+    "scripts/Makefile") CONFIG_FILES="$CONFIG_FILES scripts/Makefile" ;;
+    "platypus/Makefile") CONFIG_FILES="$CONFIG_FILES platypus/Makefile" ;;
+    "default") CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;;
+
+  *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+   { (exit 1); exit 1; }; };;
+  esac
+done
+
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used.  Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
+fi
+
+# Have a temporary directory for convenience.  Make it in the build tree
+# simply because there is no reason against having it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Hook for its removal unless debugging.
+# Note that there is a small window in which the directory will not be cleaned:
+# after its creation but before its name has been assigned to `$tmp'.
+$debug ||
+{
+  tmp=
+  trap 'exit_status=$?
+  { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
+' 0
+  trap '{ (exit 1); exit 1; }' 1 2 13 15
+}
+# Create a (secure) tmp directory for tmp files.
+
+{
+  tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
+  test -n "$tmp" && test -d "$tmp"
+}  ||
+{
+  tmp=./conf$$-$RANDOM
+  (umask 077 && mkdir "$tmp")
+} ||
+{
+   echo "$me: cannot create a temporary directory in ." >&2
+   { (exit 1); exit 1; }
+}
+
+#
+# Set up the sed scripts for CONFIG_FILES section.
+#
+
+# No need to generate the scripts if there are no CONFIG_FILES.
+# This happens for instance when ./config.status config.h
+if test -n "$CONFIG_FILES"; then
+
+_ACEOF
+
+
+
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+  cat >conf$$subs.sed <<_ACEOF
+SHELL!$SHELL$ac_delim
+PATH_SEPARATOR!$PATH_SEPARATOR$ac_delim
+PACKAGE_NAME!$PACKAGE_NAME$ac_delim
+PACKAGE_TARNAME!$PACKAGE_TARNAME$ac_delim
+PACKAGE_VERSION!$PACKAGE_VERSION$ac_delim
+PACKAGE_STRING!$PACKAGE_STRING$ac_delim
+PACKAGE_BUGREPORT!$PACKAGE_BUGREPORT$ac_delim
+exec_prefix!$exec_prefix$ac_delim
+prefix!$prefix$ac_delim
+program_transform_name!$program_transform_name$ac_delim
+bindir!$bindir$ac_delim
+sbindir!$sbindir$ac_delim
+libexecdir!$libexecdir$ac_delim
+datarootdir!$datarootdir$ac_delim
+datadir!$datadir$ac_delim
+sysconfdir!$sysconfdir$ac_delim
+sharedstatedir!$sharedstatedir$ac_delim
+localstatedir!$localstatedir$ac_delim
+includedir!$includedir$ac_delim
+oldincludedir!$oldincludedir$ac_delim
+docdir!$docdir$ac_delim
+infodir!$infodir$ac_delim
+htmldir!$htmldir$ac_delim
+dvidir!$dvidir$ac_delim
+pdfdir!$pdfdir$ac_delim
+psdir!$psdir$ac_delim
+libdir!$libdir$ac_delim
+localedir!$localedir$ac_delim
+mandir!$mandir$ac_delim
+DEFS!$DEFS$ac_delim
+ECHO_C!$ECHO_C$ac_delim
+ECHO_N!$ECHO_N$ac_delim
+ECHO_T!$ECHO_T$ac_delim
+LIBS!$LIBS$ac_delim
+build_alias!$build_alias$ac_delim
+host_alias!$host_alias$ac_delim
+target_alias!$target_alias$ac_delim
+INSTALL_PROGRAM!$INSTALL_PROGRAM$ac_delim
+INSTALL_SCRIPT!$INSTALL_SCRIPT$ac_delim
+INSTALL_DATA!$INSTALL_DATA$ac_delim
+am__isrc!$am__isrc$ac_delim
+CYGPATH_W!$CYGPATH_W$ac_delim
+PACKAGE!$PACKAGE$ac_delim
+VERSION!$VERSION$ac_delim
+ACLOCAL!$ACLOCAL$ac_delim
+AUTOCONF!$AUTOCONF$ac_delim
+AUTOMAKE!$AUTOMAKE$ac_delim
+AUTOHEADER!$AUTOHEADER$ac_delim
+MAKEINFO!$MAKEINFO$ac_delim
+install_sh!$install_sh$ac_delim
+STRIP!$STRIP$ac_delim
+INSTALL_STRIP_PROGRAM!$INSTALL_STRIP_PROGRAM$ac_delim
+mkdir_p!$mkdir_p$ac_delim
+AWK!$AWK$ac_delim
+SET_MAKE!$SET_MAKE$ac_delim
+am__leading_dot!$am__leading_dot$ac_delim
+AMTAR!$AMTAR$ac_delim
+am__tar!$am__tar$ac_delim
+am__untar!$am__untar$ac_delim
+build!$build$ac_delim
+build_cpu!$build_cpu$ac_delim
+build_vendor!$build_vendor$ac_delim
+build_os!$build_os$ac_delim
+host!$host$ac_delim
+host_cpu!$host_cpu$ac_delim
+host_vendor!$host_vendor$ac_delim
+host_os!$host_os$ac_delim
+COIN_ARCH!$COIN_ARCH$ac_delim
+USE_NLS!$USE_NLS$ac_delim
+GETTEXT_MACRO_VERSION!$GETTEXT_MACRO_VERSION$ac_delim
+MSGFMT!$MSGFMT$ac_delim
+GMSGFMT!$GMSGFMT$ac_delim
+MSGFMT_015!$MSGFMT_015$ac_delim
+GMSGFMT_015!$GMSGFMT_015$ac_delim
+XGETTEXT!$XGETTEXT$ac_delim
+XGETTEXT_015!$XGETTEXT_015$ac_delim
+MSGMERGE!$MSGMERGE$ac_delim
+XGETTEXT_EXTRA_OPTIONS!$XGETTEXT_EXTRA_OPTIONS$ac_delim
+CC!$CC$ac_delim
+CFLAGS!$CFLAGS$ac_delim
+LDFLAGS!$LDFLAGS$ac_delim
+CPPFLAGS!$CPPFLAGS$ac_delim
+ac_ct_CC!$ac_ct_CC$ac_delim
+EXEEXT!$EXEEXT$ac_delim
+OBJEXT!$OBJEXT$ac_delim
+DEPDIR!$DEPDIR$ac_delim
+am__include!$am__include$ac_delim
+am__quote!$am__quote$ac_delim
+AMDEP_TRUE!$AMDEP_TRUE$ac_delim
+AMDEP_FALSE!$AMDEP_FALSE$ac_delim
+AMDEPBACKSLASH!$AMDEPBACKSLASH$ac_delim
+CCDEPMODE!$CCDEPMODE$ac_delim
+am__fastdepCC_TRUE!$am__fastdepCC_TRUE$ac_delim
+am__fastdepCC_FALSE!$am__fastdepCC_FALSE$ac_delim
+CPP!$CPP$ac_delim
+GREP!$GREP$ac_delim
+EGREP!$EGREP$ac_delim
+_ACEOF
+
+  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 97; then
+    break
+  elif $ac_last_try; then
+    { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
+   { (exit 1); exit 1; }; }
+  else
+    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+  fi
+done
+
+ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed`
+if test -n "$ac_eof"; then
+  ac_eof=`echo "$ac_eof" | sort -nru | sed 1q`
+  ac_eof=`expr $ac_eof + 1`
+fi
+
+cat >>$CONFIG_STATUS <<_ACEOF
+cat >"\$tmp/subs-1.sed" <<\CEOF$ac_eof
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+_ACEOF
+sed '
+s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g
+s/^/s,@/; s/!/@,|#_!!_#|/
+:n
+t n
+s/'"$ac_delim"'$/,g/; t
+s/$/\\/; p
+N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n
+' >>$CONFIG_STATUS <conf$$subs.sed
+rm -f conf$$subs.sed
+cat >>$CONFIG_STATUS <<_ACEOF
+CEOF$ac_eof
+_ACEOF
+
+
+ac_delim='%!_!# '
+for ac_last_try in false false false false false :; do
+  cat >conf$$subs.sed <<_ACEOF
+GLIBC2!$GLIBC2$ac_delim
+RANLIB!$RANLIB$ac_delim
+CFLAG_VISIBILITY!$CFLAG_VISIBILITY$ac_delim
+HAVE_VISIBILITY!$HAVE_VISIBILITY$ac_delim
+ALLOCA!$ALLOCA$ac_delim
+PRI_MACROS_BROKEN!$PRI_MACROS_BROKEN$ac_delim
+LIBPTH!$LIBPTH$ac_delim
+LTLIBPTH!$LTLIBPTH$ac_delim
+LIBPTH_PREFIX!$LIBPTH_PREFIX$ac_delim
+LIBTHREAD!$LIBTHREAD$ac_delim
+LTLIBTHREAD!$LTLIBTHREAD$ac_delim
+LIBMULTITHREAD!$LIBMULTITHREAD$ac_delim
+LTLIBMULTITHREAD!$LTLIBMULTITHREAD$ac_delim
+LIBICONV!$LIBICONV$ac_delim
+LTLIBICONV!$LTLIBICONV$ac_delim
+INTLBISON!$INTLBISON$ac_delim
+GLIBC21!$GLIBC21$ac_delim
+INTL_MACOSX_LIBS!$INTL_MACOSX_LIBS$ac_delim
+HAVE_POSIX_PRINTF!$HAVE_POSIX_PRINTF$ac_delim
+HAVE_ASPRINTF!$HAVE_ASPRINTF$ac_delim
+HAVE_SNPRINTF!$HAVE_SNPRINTF$ac_delim
+HAVE_WPRINTF!$HAVE_WPRINTF$ac_delim
+WOE32DLL!$WOE32DLL$ac_delim
+WOE32!$WOE32$ac_delim
+WINDRES!$WINDRES$ac_delim
+LTLIBC!$LTLIBC$ac_delim
+BUILD_INCLUDED_LIBINTL!$BUILD_INCLUDED_LIBINTL$ac_delim
+USE_INCLUDED_LIBINTL!$USE_INCLUDED_LIBINTL$ac_delim
+CATOBJEXT!$CATOBJEXT$ac_delim
+DATADIRNAME!$DATADIRNAME$ac_delim
+INSTOBJEXT!$INSTOBJEXT$ac_delim
+GENCAT!$GENCAT$ac_delim
+INTLOBJS!$INTLOBJS$ac_delim
+INTL_LIBTOOL_SUFFIX_PREFIX!$INTL_LIBTOOL_SUFFIX_PREFIX$ac_delim
+INTLLIBS!$INTLLIBS$ac_delim
+LIBINTL!$LIBINTL$ac_delim
+LTLIBINTL!$LTLIBINTL$ac_delim
+POSUB!$POSUB$ac_delim
+XMKMF!$XMKMF$ac_delim
+X_CFLAGS!$X_CFLAGS$ac_delim
+X_PRE_LIBS!$X_PRE_LIBS$ac_delim
+X_LIBS!$X_LIBS$ac_delim
+X_EXTRA_LIBS!$X_EXTRA_LIBS$ac_delim
+PKG_CONFIG!$PKG_CONFIG$ac_delim
+XFT_CFLAGS!$XFT_CFLAGS$ac_delim
+XFT_LIBS!$XFT_LIBS$ac_delim
+PACKAGE_CFLAGS!$PACKAGE_CFLAGS$ac_delim
+PACKAGE_LIBS!$PACKAGE_LIBS$ac_delim
+GTK_CFLAGS!$GTK_CFLAGS$ac_delim
+GTK_LIBS!$GTK_LIBS$ac_delim
+WMCCC!$WMCCC$ac_delim
+IMLIB2_CONFIG_IN_PATH!$IMLIB2_CONFIG_IN_PATH$ac_delim
+WMCOINCOIN_PLAYER!$WMCOINCOIN_PLAYER$ac_delim
+LIBOBJS!$LIBOBJS$ac_delim
+LTLIBOBJS!$LTLIBOBJS$ac_delim
+_ACEOF
+
+  if test `sed -n "s/.*$ac_delim\$/X/p" conf$$subs.sed | grep -c X` = 55; then
+    break
+  elif $ac_last_try; then
+    { { echo "$as_me:$LINENO: error: could not make $CONFIG_STATUS" >&5
+echo "$as_me: error: could not make $CONFIG_STATUS" >&2;}
+   { (exit 1); exit 1; }; }
+  else
+    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
+  fi
+done
+
+ac_eof=`sed -n '/^CEOF[0-9]*$/s/CEOF/0/p' conf$$subs.sed`
+if test -n "$ac_eof"; then
+  ac_eof=`echo "$ac_eof" | sort -nru | sed 1q`
+  ac_eof=`expr $ac_eof + 1`
+fi
+
+cat >>$CONFIG_STATUS <<_ACEOF
+cat >"\$tmp/subs-2.sed" <<\CEOF$ac_eof
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b end
+_ACEOF
+sed '
+s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g
+s/^/s,@/; s/!/@,|#_!!_#|/
+:n
+t n
+s/'"$ac_delim"'$/,g/; t
+s/$/\\/; p
+N; s/^.*\n//; s/[,\\&]/\\&/g; s/@/@|#_!!_#|/g; b n
+' >>$CONFIG_STATUS <conf$$subs.sed
+rm -f conf$$subs.sed
+cat >>$CONFIG_STATUS <<_ACEOF
+:end
+s/|#_!!_#|//g
+CEOF$ac_eof
+_ACEOF
+
+
+# VPATH may cause trouble with some makes, so we remove $(srcdir),
+# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
+# trailing colons and then remove the whole line if VPATH becomes empty
+# (actually we leave an empty line to preserve line numbers).
+if test "x$srcdir" = x.; then
+  ac_vpsub='/^[	 ]*VPATH[	 ]*=/{
+s/:*\$(srcdir):*/:/
+s/:*\${srcdir}:*/:/
+s/:*@srcdir@:*/:/
+s/^\([^=]*=[	 ]*\):*/\1/
+s/:*$//
+s/^[^=]*=[	 ]*$//
+}'
+fi
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+fi # test -n "$CONFIG_FILES"
+
+
+for ac_tag in  :F $CONFIG_FILES  :H $CONFIG_HEADERS    :C $CONFIG_COMMANDS
+do
+  case $ac_tag in
+  :[FHLC]) ac_mode=$ac_tag; continue;;
+  esac
+  case $ac_mode$ac_tag in
+  :[FHL]*:*);;
+  :L* | :C*:*) { { echo "$as_me:$LINENO: error: Invalid tag $ac_tag." >&5
+echo "$as_me: error: Invalid tag $ac_tag." >&2;}
+   { (exit 1); exit 1; }; };;
+  :[FH]-) ac_tag=-:-;;
+  :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
+  esac
+  ac_save_IFS=$IFS
+  IFS=:
+  set x $ac_tag
+  IFS=$ac_save_IFS
+  shift
+  ac_file=$1
+  shift
+
+  case $ac_mode in
+  :L) ac_source=$1;;
+  :[FH])
+    ac_file_inputs=
+    for ac_f
+    do
+      case $ac_f in
+      -) ac_f="$tmp/stdin";;
+      *) # Look for the file first in the build tree, then in the source tree
+	 # (if the path is not absolute).  The absolute path cannot be DOS-style,
+	 # because $ac_f cannot contain `:'.
+	 test -f "$ac_f" ||
+	   case $ac_f in
+	   [\\/$]*) false;;
+	   *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
+	   esac ||
+	   { { echo "$as_me:$LINENO: error: cannot find input file: $ac_f" >&5
+echo "$as_me: error: cannot find input file: $ac_f" >&2;}
+   { (exit 1); exit 1; }; };;
+      esac
+      ac_file_inputs="$ac_file_inputs $ac_f"
+    done
+
+    # Let's still pretend it is `configure' which instantiates (i.e., don't
+    # use $as_me), people would be surprised to read:
+    #    /* config.h.  Generated by config.status.  */
+    configure_input="Generated from "`IFS=:
+	  echo $* | sed 's|^[^:]*/||;s|:[^:]*/|, |g'`" by configure."
+    if test x"$ac_file" != x-; then
+      configure_input="$ac_file.  $configure_input"
+      { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+    fi
+
+    case $ac_tag in
+    *:-:* | *:-) cat >"$tmp/stdin";;
+    esac
+    ;;
+  esac
+
+  ac_dir=`$as_dirname -- "$ac_file" ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$ac_file" : 'X\(//\)[^/]' \| \
+	 X"$ac_file" : 'X\(//\)$' \| \
+	 X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
+echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+  { as_dir="$ac_dir"
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
+echo "$as_me: error: cannot create directory $as_dir" >&2;}
+   { (exit 1); exit 1; }; }; }
+  ac_builddir=.
+
+case "$ac_dir" in
+.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
+*)
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A ".." for each directory in $ac_dir_suffix.
+  ac_top_builddir_sub=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,/..,g;s,/,,'`
+  case $ac_top_builddir_sub in
+  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
+  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
+  esac ;;
+esac
+ac_abs_top_builddir=$ac_pwd
+ac_abs_builddir=$ac_pwd$ac_dir_suffix
+# for backward compatibility:
+ac_top_builddir=$ac_top_build_prefix
+
+case $srcdir in
+  .)  # We are building in place.
+    ac_srcdir=.
+    ac_top_srcdir=$ac_top_builddir_sub
+    ac_abs_top_srcdir=$ac_pwd ;;
+  [\\/]* | ?:[\\/]* )  # Absolute name.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir
+    ac_abs_top_srcdir=$srcdir ;;
+  *) # Relative name.
+    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_build_prefix$srcdir
+    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
+esac
+ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
+
+
+  case $ac_mode in
+  :F)
+  #
+  # CONFIG_FILE
+  #
+
+  case $INSTALL in
+  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+  *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
+  esac
+  ac_MKDIR_P=$MKDIR_P
+  case $MKDIR_P in
+  [\\/$]* | ?:[\\/]* ) ;;
+  */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
+  esac
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+# If the template does not know about datarootdir, expand it.
+# FIXME: This hack should be removed a few years after 2.60.
+ac_datarootdir_hack=; ac_datarootdir_seen=
+
+case `sed -n '/datarootdir/ {
+  p
+  q
+}
+/@datadir@/p
+/@docdir@/p
+/@infodir@/p
+/@localedir@/p
+/@mandir@/p
+' $ac_file_inputs` in
+*datarootdir*) ac_datarootdir_seen=yes;;
+*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
+  { echo "$as_me:$LINENO: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
+echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+  ac_datarootdir_hack='
+  s&@datadir@&$datadir&g
+  s&@docdir@&$docdir&g
+  s&@infodir@&$infodir&g
+  s&@localedir@&$localedir&g
+  s&@mandir@&$mandir&g
+    s&\\\${datarootdir}&$datarootdir&g' ;;
+esac
+_ACEOF
+
+# Neutralize VPATH when `$srcdir' = `.'.
+# Shell code in configure.ac might set extrasub.
+# FIXME: do we really want to maintain this feature?
+cat >>$CONFIG_STATUS <<_ACEOF
+  sed "$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s&@configure_input@&$configure_input&;t t
+s&@top_builddir@&$ac_top_builddir_sub&;t t
+s&@srcdir@&$ac_srcdir&;t t
+s&@abs_srcdir@&$ac_abs_srcdir&;t t
+s&@top_srcdir@&$ac_top_srcdir&;t t
+s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
+s&@builddir@&$ac_builddir&;t t
+s&@abs_builddir@&$ac_abs_builddir&;t t
+s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
+s&@INSTALL@&$ac_INSTALL&;t t
+s&@MKDIR_P@&$ac_MKDIR_P&;t t
+$ac_datarootdir_hack
+" $ac_file_inputs | sed -f "$tmp/subs-1.sed" | sed -f "$tmp/subs-2.sed" >$tmp/out
+
+test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
+  { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
+  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
+  { echo "$as_me:$LINENO: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined." >&5
+echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
+which seems to be undefined.  Please make sure it is defined." >&2;}
+
+  rm -f "$tmp/stdin"
+  case $ac_file in
+  -) cat "$tmp/out"; rm -f "$tmp/out";;
+  *) rm -f "$ac_file"; mv "$tmp/out" $ac_file;;
+  esac
+ ;;
+  :H)
+  #
+  # CONFIG_HEADER
+  #
+_ACEOF
+
+# Transform confdefs.h into a sed script `conftest.defines', that
+# substitutes the proper values into config.h.in to produce config.h.
+rm -f conftest.defines conftest.tail
+# First, append a space to every undef/define line, to ease matching.
+echo 's/$/ /' >conftest.defines
+# Then, protect against being on the right side of a sed subst, or in
+# an unquoted here document, in config.status.  If some macros were
+# called several times there might be several #defines for the same
+# symbol, which is useless.  But do not sort them, since the last
+# AC_DEFINE must be honored.
+ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
+# These sed commands are passed to sed as "A NAME B PARAMS C VALUE D", where
+# NAME is the cpp macro being defined, VALUE is the value it is being given.
+# PARAMS is the parameter list in the macro definition--in most cases, it's
+# just an empty string.
+ac_dA='s,^\\([	 #]*\\)[^	 ]*\\([	 ]*'
+ac_dB='\\)[	 (].*,\\1define\\2'
+ac_dC=' '
+ac_dD=' ,'
+
+uniq confdefs.h |
+  sed -n '
+	t rset
+	:rset
+	s/^[	 ]*#[	 ]*define[	 ][	 ]*//
+	t ok
+	d
+	:ok
+	s/[\\&,]/\\&/g
+	s/^\('"$ac_word_re"'\)\(([^()]*)\)[	 ]*\(.*\)/ '"$ac_dA"'\1'"$ac_dB"'\2'"${ac_dC}"'\3'"$ac_dD"'/p
+	s/^\('"$ac_word_re"'\)[	 ]*\(.*\)/'"$ac_dA"'\1'"$ac_dB$ac_dC"'\2'"$ac_dD"'/p
+  ' >>conftest.defines
+
+# Remove the space that was appended to ease matching.
+# Then replace #undef with comments.  This is necessary, for
+# example, in the case of _POSIX_SOURCE, which is predefined and required
+# on some systems where configure will not decide to define it.
+# (The regexp can be short, since the line contains either #define or #undef.)
+echo 's/ $//
+s,^[	 #]*u.*,/* & */,' >>conftest.defines
+
+# Break up conftest.defines:
+ac_max_sed_lines=50
+
+# First sed command is:	 sed -f defines.sed $ac_file_inputs >"$tmp/out1"
+# Second one is:	 sed -f defines.sed "$tmp/out1" >"$tmp/out2"
+# Third one will be:	 sed -f defines.sed "$tmp/out2" >"$tmp/out1"
+# et cetera.
+ac_in='$ac_file_inputs'
+ac_out='"$tmp/out1"'
+ac_nxt='"$tmp/out2"'
+
+while :
+do
+  # Write a here document:
+    cat >>$CONFIG_STATUS <<_ACEOF
+    # First, check the format of the line:
+    cat >"\$tmp/defines.sed" <<\\CEOF
+/^[	 ]*#[	 ]*undef[	 ][	 ]*$ac_word_re[	 ]*\$/b def
+/^[	 ]*#[	 ]*define[	 ][	 ]*$ac_word_re[(	 ]/b def
+b
+:def
+_ACEOF
+  sed ${ac_max_sed_lines}q conftest.defines >>$CONFIG_STATUS
+  echo 'CEOF
+    sed -f "$tmp/defines.sed"' "$ac_in >$ac_out" >>$CONFIG_STATUS
+  ac_in=$ac_out; ac_out=$ac_nxt; ac_nxt=$ac_in
+  sed 1,${ac_max_sed_lines}d conftest.defines >conftest.tail
+  grep . conftest.tail >/dev/null || break
+  rm -f conftest.defines
+  mv conftest.tail conftest.defines
+done
+rm -f conftest.defines conftest.tail
+
+echo "ac_result=$ac_in" >>$CONFIG_STATUS
+cat >>$CONFIG_STATUS <<\_ACEOF
+  if test x"$ac_file" != x-; then
+    echo "/* $configure_input  */" >"$tmp/config.h"
+    cat "$ac_result" >>"$tmp/config.h"
+    if diff $ac_file "$tmp/config.h" >/dev/null 2>&1; then
+      { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
+echo "$as_me: $ac_file is unchanged" >&6;}
+    else
+      rm -f $ac_file
+      mv "$tmp/config.h" $ac_file
+    fi
+  else
+    echo "/* $configure_input  */"
+    cat "$ac_result"
+  fi
+  rm -f "$tmp/out12"
+# Compute $ac_file's index in $config_headers.
+_am_arg=$ac_file
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $_am_arg | $_am_arg:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" ||
+$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$_am_arg" : 'X\(//\)[^/]' \| \
+	 X"$_am_arg" : 'X\(//\)$' \| \
+	 X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null ||
+echo X"$_am_arg" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`/stamp-h$_am_stamp_count
+ ;;
+
+  :C)  { echo "$as_me:$LINENO: executing $ac_file commands" >&5
+echo "$as_me: executing $ac_file commands" >&6;}
+ ;;
+  esac
+
+
+  case $ac_file$ac_mode in
+    "po-directories":C)
+    for ac_file in $CONFIG_FILES; do
+      # Support "outfile[:infile[:infile...]]"
+      case "$ac_file" in
+        *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+      esac
+      # PO directories have a Makefile.in generated from Makefile.in.in.
+      case "$ac_file" in */Makefile.in)
+        # Adjust a relative srcdir.
+        ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+        ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
+        ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+        # In autoconf-2.13 it is called $ac_given_srcdir.
+        # In autoconf-2.50 it is called $srcdir.
+        test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+        case "$ac_given_srcdir" in
+          .)  top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+          /*) top_srcdir="$ac_given_srcdir" ;;
+          *)  top_srcdir="$ac_dots$ac_given_srcdir" ;;
+        esac
+        # Treat a directory as a PO directory if and only if it has a
+        # POTFILES.in file. This allows packages to have multiple PO
+        # directories under different names or in different locations.
+        if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
+          rm -f "$ac_dir/POTFILES"
+          test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
+          cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ 	]*\$/d" -e "s,.*,     $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
+          POMAKEFILEDEPS="POTFILES.in"
+          # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend
+          # on $ac_dir but don't depend on user-specified configuration
+          # parameters.
+          if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+            # The LINGUAS file contains the set of available languages.
+            if test -n "$OBSOLETE_ALL_LINGUAS"; then
+              test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
+            fi
+            ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+            # Hide the ALL_LINGUAS assigment from automake < 1.5.
+            eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+            POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+          else
+            # The set of available languages was given in configure.in.
+            # Hide the ALL_LINGUAS assigment from automake < 1.5.
+            eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
+          fi
+          # Compute POFILES
+          # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
+          # Compute UPDATEPOFILES
+          # as      $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
+          # Compute DUMMYPOFILES
+          # as      $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
+          # Compute GMOFILES
+          # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
+          case "$ac_given_srcdir" in
+            .) srcdirpre= ;;
+            *) srcdirpre='$(srcdir)/' ;;
+          esac
+          POFILES=
+          UPDATEPOFILES=
+          DUMMYPOFILES=
+          GMOFILES=
+          for lang in $ALL_LINGUAS; do
+            POFILES="$POFILES $srcdirpre$lang.po"
+            UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+            DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+            GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+          done
+          # CATALOGS depends on both $ac_dir and the user's LINGUAS
+          # environment variable.
+          INST_LINGUAS=
+          if test -n "$ALL_LINGUAS"; then
+            for presentlang in $ALL_LINGUAS; do
+              useit=no
+              if test "%UNSET%" != "$LINGUAS"; then
+                desiredlanguages="$LINGUAS"
+              else
+                desiredlanguages="$ALL_LINGUAS"
+              fi
+              for desiredlang in $desiredlanguages; do
+                # Use the presentlang catalog if desiredlang is
+                #   a. equal to presentlang, or
+                #   b. a variant of presentlang (because in this case,
+                #      presentlang can be used as a fallback for messages
+                #      which are not translated in the desiredlang catalog).
+                case "$desiredlang" in
+                  "$presentlang"*) useit=yes;;
+                esac
+              done
+              if test $useit = yes; then
+                INST_LINGUAS="$INST_LINGUAS $presentlang"
+              fi
+            done
+          fi
+          CATALOGS=
+          if test -n "$INST_LINGUAS"; then
+            for lang in $INST_LINGUAS; do
+              CATALOGS="$CATALOGS $lang.gmo"
+            done
+          fi
+          test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
+          sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
+          for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do
+            if test -f "$f"; then
+              case "$f" in
+                *.orig | *.bak | *~) ;;
+                *) cat "$f" >> "$ac_dir/Makefile" ;;
+              esac
+            fi
+          done
+        fi
+        ;;
+      esac
+    done ;;
+    "depfiles":C) test x"$AMDEP_TRUE" != x"" || for mf in $CONFIG_FILES; do
+  # Strip MF so we end up with the name of the file.
+  mf=`echo "$mf" | sed -e 's/:.*$//'`
+  # Check whether this is an Automake generated Makefile or not.
+  # We used to match only the files named `Makefile.in', but
+  # some people rename them; so instead we look at the file content.
+  # Grep'ing the first line is not enough: some people post-process
+  # each Makefile.in and add a new line on top of each file to say so.
+  # Grep'ing the whole file is not good either: AIX grep has a line
+  # limit of 2048, but all sed's we know have understand at least 4000.
+  if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
+    dirpart=`$as_dirname -- "$mf" ||
+$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$mf" : 'X\(//\)[^/]' \| \
+	 X"$mf" : 'X\(//\)$' \| \
+	 X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
+echo X"$mf" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+  else
+    continue
+  fi
+  # Extract the definition of DEPDIR, am__include, and am__quote
+  # from the Makefile without running `make'.
+  DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
+  test -z "$DEPDIR" && continue
+  am__include=`sed -n 's/^am__include = //p' < "$mf"`
+  test -z "am__include" && continue
+  am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
+  # When using ansi2knr, U may be empty or an underscore; expand it
+  U=`sed -n 's/^U = //p' < "$mf"`
+  # Find all dependency output files, they are included files with
+  # $(DEPDIR) in their names.  We invoke sed twice because it is the
+  # simplest approach to changing $(DEPDIR) to its actual value in the
+  # expansion.
+  for file in `sed -n "
+    s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
+       sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
+    # Make sure the directory exists.
+    test -f "$dirpart/$file" && continue
+    fdir=`$as_dirname -- "$file" ||
+$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$file" : 'X\(//\)[^/]' \| \
+	 X"$file" : 'X\(//\)$' \| \
+	 X"$file" : 'X\(/\)' \| . 2>/dev/null ||
+echo X"$file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+    { as_dir=$dirpart/$fdir
+  case $as_dir in #(
+  -*) as_dir=./$as_dir;;
+  esac
+  test -d "$as_dir" || { $as_mkdir_p && mkdir -p "$as_dir"; } || {
+    as_dirs=
+    while :; do
+      case $as_dir in #(
+      *\'*) as_qdir=`echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #(
+      *) as_qdir=$as_dir;;
+      esac
+      as_dirs="'$as_qdir' $as_dirs"
+      as_dir=`$as_dirname -- "$as_dir" ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)[^/].*/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\/\)$/{
+	    s//\1/
+	    q
+	  }
+	  /^X\(\/\).*/{
+	    s//\1/
+	    q
+	  }
+	  s/.*/./; q'`
+      test -d "$as_dir" && break
+    done
+    test -z "$as_dirs" || eval "mkdir $as_dirs"
+  } || test -d "$as_dir" || { { echo "$as_me:$LINENO: error: cannot create directory $as_dir" >&5
+echo "$as_me: error: cannot create directory $as_dir" >&2;}
+   { (exit 1); exit 1; }; }; }
+    # echo "creating $dirpart/$file"
+    echo '# dummy' > "$dirpart/$file"
+  done
+done
+ ;;
+    "default":C)  echo timestamp > stamp-h  ;;
+
+  esac
+done # for ac_tag
+
+
+{ (exit 0); exit 0; }
+_ACEOF
+chmod +x $CONFIG_STATUS
+ac_clean_files=$ac_clean_files_save
+
+
+# configure is writing to config.log, and then calls config.status.
+# config.status does its own redirection, appending to config.log.
+# Unfortunately, on DOS this fails, as config.log is still kept open
+# by configure, so config.status won't be able to write to it; its
+# output is simply discarded.  So we exec the FD to /dev/null,
+# effectively closing config.log, so it can be properly (re)opened and
+# appended to by config.status.  When coming back to configure, we
+# need to make the FD available again.
+if test "$no_create" != yes; then
+  ac_cs_success=:
+  ac_config_status_args=
+  test "$silent" = yes &&
+    ac_config_status_args="$ac_config_status_args --quiet"
+  exec 5>/dev/null
+  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
+  exec 5>>config.log
+  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
+  # would make configure fail if this is the last instruction.
+  $ac_cs_success || { (exit 1); exit 1; }
+fi
+
+
+if test "x$build_wmccc" = "xno"; then
+  echo "    **** I recall you that you choosed to disable wmccc ****"
+else
+  echo "    wmcc will be built with wmccc"
+fi
+if test "x$build_wmcc_player" = "xno"; then
+  echo "    **** I recall you that wmcoincoin_player won't be built ****"
+else
+  echo "    wmcc will be built with wmcoincoin_player"
+fi
diff --git a/configure.ac b/configure.ac
new file mode 100644
index 0000000..04336cf
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,552 @@
+dnl
+dnl autoconf input for wmCoinCoin
+dnl rcsid=$id$
+dnl ChangeLog: 
+dnl   $Log: configure.ac,v $
+dnl   Revision 1.45  2005/09/27 16:59:13  pouaite
+dnl   2.5.1c
+dnl
+dnl   Revision 1.44  2005/09/26 21:40:24  pouaite
+dnl   v 2.5.1b
+dnl
+dnl   Revision 1.43  2005/09/25 12:08:55  pouaite
+dnl   ca marche encore ca ?
+dnl
+dnl   Revision 1.42  2005/06/11 22:47:39  pouaite
+dnl   prout?
+dnl
+dnl   Revision 1.41  2005/02/22 18:44:43  pouaite
+dnl   *** empty log message ***
+dnl
+dnl   Revision 1.40  2004/05/16 12:54:28  pouaite
+dnl   250c
+dnl
+dnl   Revision 1.39  2004/04/28 22:18:57  pouaite
+dnl   bugfixes dae + des trucs que j'ai oublie
+dnl
+dnl   Revision 1.38  2004/04/26 20:32:15  pouaite
+dnl   roger demande le commit
+dnl
+dnl   Revision 1.37  2004/04/18 15:37:27  pouaite
+dnl   un deux un deux
+dnl
+dnl   Revision 1.36  2004/03/07 13:51:11  pouaite
+dnl   commit du dimanche
+dnl
+dnl   Revision 1.35  2004/02/29 19:01:26  pouaite
+dnl   et hop
+dnl
+dnl   Revision 1.34  2004/02/29 15:01:18  pouaite
+dnl   May the charles bronson spirit be with you
+dnl
+dnl   Revision 1.33  2003/08/26 21:50:47  pouaite
+dnl   2.6.4b au mastic
+dnl
+dnl   Revision 1.32  2003/07/20 22:22:27  pouaite
+dnl   ce commit est dedie a Pierre Tramo
+dnl
+dnl   Revision 1.31  2003/06/29 23:58:35  pouaite
+dnl   suppression de l'overrideredirect du palmi et ajout de pinnipede_totoz.c et wmcoincoin-totoz-get etc
+dnl
+dnl   Revision 1.30  2003/06/25 20:18:21  pouaite
+dnl   support xinerama qui marche
+dnl
+dnl   Revision 1.29  2003/06/23 22:43:46  pouaite
+dnl   shift-enter pour le post anonyme + fix ouinouin
+dnl
+dnl   Revision 1.28  2003/06/22 12:17:17  pouaite
+dnl   2.4.5a a la piscine
+dnl
+dnl   Revision 1.27  2003/06/21 14:48:44  pouaite
+dnl   g cho
+dnl
+dnl   Revision 1.26  2003/05/07 18:44:55  pouaite
+dnl   bugfix divers+solaris7
+dnl
+dnl   Revision 1.25  2003/03/12 21:09:35  pouaite
+dnl   mega patch de gle + micro fix du referer
+dnl
+dnl   Revision 1.24  2003/03/11 23:40:32  pouaite
+dnl   rajout fake-getaddrinfo .. si �a compile alors cygwin remarche (pas test�)
+dnl
+dnl   Revision 1.23  2003/03/06 20:24:08  pouaite
+dnl   cygwin remarche, ou pas
+dnl
+dnl   Revision 1.22  2003/03/02 17:56:25  pouaite
+dnl   wmcoincoin-2.4.4a.tar.gz is ready for distribution
+dnl
+dnl   Revision 1.21  2003/03/02 16:45:22  pouaite
+dnl   autoconferies
+dnl
+dnl   Revision 1.20  2003/03/02 14:41:21  pouaite
+dnl   ce commit est d�di� � la m�moire de jacques martin
+dnl
+dnl   Revision 1.19  2003/02/28 19:08:42  pouaite
+dnl   trucs divers
+dnl
+dnl   Revision 1.18  2003/01/19 18:52:20  pouaite
+dnl   patch gle (couleur de fond du palmi)
+dnl
+dnl   Revision 1.17  2003/01/12 18:42:17  pouaite
+dnl   et une baguette bien cuite pour le monsieur avec l'ornythorinque
+dnl
+dnl   Revision 1.16  2003/01/11 17:44:10  pouaite
+dnl   ajout de stats/coinping sur les sites
+dnl
+dnl   Revision 1.15  2003/01/11 14:10:06  pouaite
+dnl   fix du palmi pour xf 4.3
+dnl
+dnl   Revision 1.14  2002/12/20 17:40:48  pouaite
+dnl   ornythorinque en gel�e
+dnl
+dnl   Revision 1.13  2002/12/20 15:49:51  pouaite
+dnl   prout 2.4.2b ?
+dnl
+dnl   Revision 1.12  2002/12/20 11:26:35  pouaite
+dnl   deux trois conneries
+dnl
+dnl   Revision 1.11  2002/11/30 00:10:38  pouaite
+dnl   2.4.2a
+dnl
+dnl   Revision 1.10  2002/10/16 20:41:44  pouaite
+dnl   killall toto
+dnl
+dnl   Revision 1.9  2002/10/05 18:08:13  pouaite
+dnl   ajout menu contextuel + fix de la coloration des boutons du wmccc
+dnl
+dnl   Revision 1.8  2002/09/22 23:16:33  pouaite
+dnl   i had a friend, but he does not move anymore
+dnl
+dnl   Revision 1.7  2002/09/08 18:44:07  pouaite
+dnl   mouaissssss
+dnl
+dnl   Revision 1.6  2002/09/08 18:21:25  pouaite
+dnl   microfix pou cygwin + compil
+dnl
+dnl   Revision 1.5  2002/09/08 14:28:44  pouaite
+dnl   bugfixes salutaires
+dnl
+dnl   Revision 1.4  2002/09/07 16:21:15  pouaite
+dnl   �a va releaser en douce
+dnl
+dnl   Revision 1.3  2002/09/03 22:42:17  pouaite
+dnl   coin
+dnl
+dnl   Revision 1.2  2002/08/31 21:26:46  pouaite
+dnl   ajout du wmccc
+dnl
+dnl   Revision 1.1  2002/08/22 20:04:16  pouaite
+dnl   fin de la premiere manche contre gettextize
+dnl
+dnl   Revision 1.30  2002/08/18 19:00:27  pouaite
+dnl   plop
+dnl
+dnl   Revision 1.29  2002/08/17 18:33:37  pouaite
+dnl   grosse commition
+dnl
+dnl   Revision 1.28  2002/06/26 22:19:48  pouaite
+dnl   ptit fix pour la tribune de f-cpu + patch de lordoric
+dnl
+dnl   Revision 1.27  2002/06/23 14:01:36  pouaite
+dnl   ouups, j'avais flingu� les modifs depuis la v2.3.8b
+dnl
+dnl   Revision 1.26  2002/06/23 10:44:05  pouaite
+dnl   i18n-isation of the coincoin(kwakkwak), thanks to the incredible jjb !
+dnl
+dnl   Revision 1.24  2002/06/02 12:37:36  pouaite
+dnl   fix gethostbyname --> version 2.3.8b
+dnl
+dnl   Revision 1.23  2002/06/01 20:21:18  pouaite
+dnl   version 2.3.8a
+dnl
+dnl   Revision 1.22  2002/06/01 17:54:04  pouaite
+dnl   nettoyage
+dnl
+dnl   Revision 1.21  2002/05/29 22:38:12  pouaite
+dnl   bidouilles dans configure.in et cie
+dnl
+dnl   Revision 1.20  2002/05/13 10:51:46  pouaite
+dnl   bugfix lecture xpm
+dnl
+dnl   Revision 1.19  2002/04/26 23:25:38  pouaite
+dnl   v2.3.7b
+dnl
+dnl   Revision 1.18  2002/04/23 23:16:29  pouaite
+dnl   \o/ j'ai enfin r�ussi � chopper le bug mysterieux de l'autoscroll du pinni \o/
+dnl
+dnl   Revision 1.17  2002/04/14 23:24:21  pouaite
+dnl   re-fix pour kde ..
+dnl
+dnl   Revision 1.16  2002/04/09 00:28:19  pouaite
+dnl   quelques modifs faites dans un �tat d'h�b�tude avanc� /!\ travaux en cours /!\
+dnl
+dnl   Revision 1.15  2002/03/18 22:46:49  pouaite
+dnl   1 ou 2 bugfix mineurs, et surtout suppression de la dependance avec la libXpm .. un premier pas vers wmc� en 8bits
+dnl
+dnl   Revision 1.14  2002/03/10 16:07:10  pouaite
+dnl   pseudo transp basique dans le pinnipede (en cours..)
+dnl
+dnl   Revision 1.13  2002/03/09 19:45:52  pouaite
+dnl   microbugfix du plopifieur et ajout d'une macro PATCH_LEVEL
+dnl
+dnl   Revision 1.12  2002/03/08 23:53:40  pouaite
+dnl   derniers bugfixes pour la v2.3.6
+dnl
+dnl   Revision 1.11  2002/03/05 21:04:28  pouaite
+dnl   bugfixes suite � l'upgrade de dlfp [et retour au comportement � l'ancienne du clic sur les horloges pour les moules ronchonnes]
+dnl
+dnl   Revision 1.10  2002/02/24 22:13:56  pouaite
+dnl   modifs pour la v2.3.5 (selection, scrollcoin, plopification, bugfixes)
+dnl
+dnl   Revision 1.9  2002/01/30 21:03:45  pouaite
+dnl   correction du bug du au signe des char, et d'un petit bug dans les reference d'horloges
+dnl
+dnl   Revision 1.8  2002/01/20 20:53:22  pouaite
+dnl   bugfix configure.in && http_win.c pour cygwin + 2-3 petis trucs
+dnl
+dnl   Revision 1.7  2002/01/13 20:38:31  pouaite
+dnl   fix du configure.in qui detecte cygwin a tors et � travers avec les v. recentes de autoconf
+dnl
+dnl   Revision 1.6  2002/01/10 09:03:07  pouaite
+dnl   integration du patch de glandium (requetes http/1.1 avec header 'If-Modified-Since' --> coincoin plus gentil avec dacode)
+dnl
+dnl   Revision 1.5  2002/01/03 22:15:31  pouaite
+dnl   patch top moumoute de glandium pour la gestion du wiki
+dnl
+dnl   Revision 1.4  2001/12/17 18:11:07  pouaite
+dnl   attention ch�rie �a va releaser
+dnl
+dnl   Revision 1.3  2001/12/16 01:43:33  pouaite
+dnl   filtrage des posts, meilleure gestion des posts multiples
+dnl
+dnl   Revision 1.2  2001/12/02 18:32:05  pouaite
+dnl   update suite � la modif sur http.c et a la generation automatique de src/default*.h
+dnl
+
+AC_INIT(wmcoincoin, 2.6.1, triton at kumal.info)
+AC_CONFIG_SRCDIR([src/wmcoincoin.c])
+
+AC_PREREQ(2.52)
+AM_INIT_AUTOMAKE
+AM_CONFIG_HEADER(config.h)
+
+dnl Checks for host/os name
+dnl =======================
+AC_CANONICAL_HOST
+COIN_ARCH="${host_cpu}-${host_vendor}-${host_os}"
+AC_SUBST(COIN_ARCH)
+case $host_os in
+  *cygwin* ) CYGWIN=yes; EXEEXT=".exe";;
+         * ) CYGWIN=no; EXEEXT="";;
+esac
+
+dnl internationalization macros
+ALL_LINGUAS="fr"
+AM_GNU_GETTEXT
+AM_GNU_GETTEXT_VERSION([0.17])
+
+
+
+dnl Checks for programs.
+dnl ===================
+AC_PROG_CC
+AC_ISC_POSIX
+
+
+dnl don't want the -g flag
+dnl update: jjb< do want the -g flag
+dnl CFLAGS=`echo "x $CFLAGS"|sed 's/^x //; s/\(^\| \)-g\($\| \)/ /g'`
+
+
+dnl based on http://www.gnu.org/software/ac-archive/htmldoc/ac_check_cc_opt.html
+dnl from Guido Draheim <guidod at gmx.de>
+AC_DEFUN([AC_CHECK_CC_FLAG],
+[AC_MSG_CHECKING([whether ${CC} accepts [$1] ])
+
+echo 'int main(){}' > conftest.c
+if test -z "`${CC} $1 -o conftest conftest.c 2>&1`"; then
+  $2="${$2} $1"
+  echo "yes"
+else
+  echo "no"
+fi
+dnl echo "$2=${$2}"
+rm -f conftest*
+])
+      
+
+dnl additional compile flags when using gcc
+if test x$GCC = xyes; then
+  CFLAGS="$CFLAGS -Wall -W -fsigned-char";
+dnl  if test x$CYGWIN = xno; then
+dnl    LDFLAGS="$LDFLAGS -rdynamic"; dnl juste pour avoir les noms de fonction dans le backtrace /o\
+dnl  fi
+  AC_CHECK_CC_FLAG([-rdynamic],LDFLAGS)
+  AC_CHECK_CC_FLAG([-Wno-pointer-sign],CFLAGS)
+else
+          echo "Vous n'utilisez pas gcc .. attention coincoin peut avoir quelque bugs si les char ne sont pas sign�s"
+fi
+
+YELLOW="\\033\\1331;33m"
+RESET="\\033\\1330m"
+
+
+AC_PATH_X
+AC_PATH_XTRA
+echo x_cflags=$X_CFLAGS libs=$LIBS pre_lib=$X_PRE_LIBS x_libs=$X_LIBS x_extra=$X_EXTRA_LIBS
+
+if test x$no_x = xyes; then
+  echo "You need to supply the path to the X headers and libraries with --x-includes=dir and --x-libraries=dir";
+  exit 1;
+fi;
+
+dnl AC_CHECK_LIB(Xpm, XpmCreatePixmapFromData,,
+dnl  AC_MSG_ERROR(The XPM library is required but wasn't found.),
+dnl  $X_LIBS -lX11 -lXext)
+
+
+LIBS="${X_PRE_LIBS} ${X_LIBS} -lX11 -lXext -lXmu ${LIBS} ${X_EXTRA_LIBS} -lfreetype"
+CFLAGS="$CFLAGS $X_CFLAGS"
+dnl  -I/usr/include/X11/Xft -I/usr/include/freetype2"
+
+dnl le PKG_CONFIG_PATH pour cygwin qui est un peu con
+export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/X11R6/lib/pkgconfig
+PKG_CHECK_MODULES(XFT, [xft])
+AC_SUBST(XFT_CFLAGS)
+AC_SUBST(XFT_LIBS)
+
+dnl XINERAMA support (stolen from wmaker)
+dnl ================
+xinerama=yes
+AC_ARG_ENABLE(xinerama, 
+[  --disable-xinerama	  disable XInerama extension support],
+		xinerama=$enableval, xinerama=yes)
+if test x$xinerama = xyes; then
+	AC_CHECK_LIB(Xinerama, XineramaQueryScreens, [LIBS="-lXinerama $LIBS"
+                AC_DEFINE([XINERAMA],1,[define if xinerama API is supported])], xinerama=no)
+fi
+
+
+
+
+build_wmccc="yes"
+AC_ARG_ENABLE(wmccc,
+ [  --enable-wmccc        Builds the wmccc (requires gtk2), the graphical wmcoincoin configuration tool (Default is yes)
+  --disable-wmccc         Do not build wmccc],
+ [ if   test "x$enableval" = "xno" ; then
+	build_wmccc="no"
+	echo you disabled wmccc
+   fi
+ ], [build_wmccc="yes"])
+
+build_wmcc_player="yes"
+AC_ARG_ENABLE(wmcoincoin_player,
+ [  --enable-wmcoincoin_player Builds the wmcoincoin_player (requires imlib2) (viewer for totoz.eu pictures)
+  --disable-wmcoincoin_player  Do not build wmcoincoin_player],
+ [ if   test "x$enableval" = "xno" ; then
+	build_wmcc_player="no"
+	echo you disabled wmcoincoin_player
+   fi
+ ], [build_wmcc_player="yes"])
+
+if test "x$build_wmccc" = "xno"; then
+  echo wmccc disabled...
+  WMCCC=""
+else
+  echo building with WMCCC, checking for gtk..
+dnl si le test sur gtk ne passe pas (solaris... ?), il suffit de comment la ligne am_path_gtk et de decommenter les 4 lignes suivantes
+dnl GTK_CFLAGS="`gtk-config --cflags`"
+dnl GTK_LIBS="`gtk-config --libs`"
+dnl AC_SUBST(GTK_CFLAGS)
+dnl AC_SUBST(GTK_LIBS)
+  pkg_modules="gtk+-2.0 >= 2.0.0"
+  PKG_CHECK_MODULES(PACKAGE, [$pkg_modules])
+
+  GTK_CFLAGS=$PACKAGE_CFLAGS;
+  GTK_LIBS=$PACKAGE_LIBS;
+  AC_SUBST(GTK_CFLAGS)
+  AC_SUBST(GTK_LIBS)
+
+  dnl Add the languages which your application supports here.
+        dnl  ALL_LINGUAS=""
+        dnl  AM_GLIB_GNU_GETTEXT
+
+  dnl AM_PATH_GTK(1.2.0, , AC_MSG_ERROR(Cannot find GTK: Is gtk-config in path? If you dont have gtk you wont be able to build the wmccc try running configure with --disable-wmccc))
+  WMCCC="wmccc$EXEEXT"
+fi
+AC_SUBST(WMCCC)
+
+dnl AC_DEFINE([PACKAGE_DATA_DIR], [], [data directory for wmcc])
+dnl AC_DEFINE([PACKAGE_SOURCE_DIR], [], [source directory for wmcc])
+
+dnl Set PACKAGE_DATA_DIR in config.h.
+dnl if test "x${datadir}" = 'x${prefix}/share'; then
+dnl  if test "x${prefix}" = "xNONE"; then
+dnl    AC_DEFINE_UNQUOTED(PACKAGE_DATA_DIR, "${ac_default_prefix}/share/${PACKAGE}")
+dnl  else
+dnl    AC_DEFINE_UNQUOTED(PACKAGE_DATA_DIR, "${prefix}/share/${PACKAGE}")
+dnl  fi
+dnl else
+dnl  AC_DEFINE_UNQUOTED(PACKAGE_DATA_DIR, "${datadir}/${PACKAGE}")
+dnl fi
+
+dnl Checks for library functions.
+dnl ============================
+AC_FUNC_VPRINTF
+AC_CHECK_HEADERS(string.h stdarg.h unistd.h sys/time.h utime.h sys/utime.h)
+AC_CHECK_HEADERS(sys/select.h sys/utsname.h pwd.h signal.h windows.h)
+AC_CHECK_HEADERS(inttypes.h unistd.h)
+AC_HEADER_TIME
+AC_CHECK_FUNCS(strdup strstr strcasecmp strncasecmp)
+AC_CHECK_FUNCS(strerror snprintf vsnprintf select signal)
+AC_CHECK_FUNCS(uname)
+
+
+dnl NOTE POUR PLUS TARD:
+dnl en l'an de grace 2005, le 23 mai, je, soussign� pouaite, ai pris
+dnl la decision de commenter les quatre AC_DEFINE du dessous, sur le 
+dnl conseil de la moule nommee "twolife" (qui est un macqueux tiger-ophile).
+
+dnl AC_DEFINE_UNQUOTED(uint8_t, unsigned char,[unsigned 8 bits integers])
+dnl AC_DEFINE_UNQUOTED(uint16_t, unsigned short,[unsigned 16 bits integers])
+dnl AC_DEFINE_UNQUOTED(uint32_t, unsigned int, [unsigned 32 bits integers])
+dnl AC_DEFINE_UNQUOTED(int32_t, int, [signed 32 bits integers])
+
+dnl les fonctions bidon pour cygouin
+dnl AC_CHECK_LIB(ws2_32, getaddrinfo, LIBS="-lws2_32 $LIBS")
+AC_CHECK_FUNCS(getaddrinfo freeaddrinfo gai_strerror getnameinfo inet_aton)
+
+AC_C_CONST
+AC_C_INLINE
+AC_TYPE_PID_T
+AC_TYPE_SIZE_T
+AC_HEADER_TIME
+AC_STRUCT_TM
+
+
+dnl those two tests were taken from openssh-3.5p1
+AC_CACHE_CHECK([for struct sockaddr_storage], ac_cv_have_struct_sockaddr_storage, [
+	AC_TRY_COMPILE(
+		[
+#ifdef HAVE_WINDOWS_H
+#include <winsock2.h>
+#else
+#include <sys/types.h>
+#include <sys/socket.h>
+#endif
+		],
+		[ struct sockaddr_storage s; ],
+		[ ac_cv_have_struct_sockaddr_storage="yes" ],
+		[ ac_cv_have_struct_sockaddr_storage="no" ]
+	)
+])
+if test "x$ac_cv_have_struct_sockaddr_storage" = "xyes" ; then
+	AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE,1,[struct sockaddr])
+fi
+AC_CACHE_CHECK([for struct addrinfo], ac_cv_have_struct_addrinfo, [
+	AC_TRY_COMPILE(
+		[
+#ifdef HAVE_WINDOWS_H
+#include <winsock2.h>
+#else
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netdb.h>
+#endif
+	],
+		[ struct addrinfo s; s.ai_flags = AI_PASSIVE; ],
+		[ ac_cv_have_struct_addrinfo="yes" ],
+		[ ac_cv_have_struct_addrinfo="no" ]
+	)
+])
+if test "x$ac_cv_have_struct_addrinfo" = "xyes" ; then
+	AC_DEFINE(HAVE_STRUCT_ADDRINFO,1,[struct addrinfo])
+fi
+
+AC_CACHE_CHECK([for execinfo.h and backtrace], ac_have_backtrace, [
+        AC_TRY_COMPILE(
+                [ #include <execinfo.h>       
+                ],
+                [ void* trace[256]; int n = backtrace(trace, 256); ],
+                [ ac_have_backtrace="yes" ],
+                [ ac_have_backtrace="no"  ])])
+if test "x$ac_have_backtrace" = "xyes"; then
+        AC_DEFINE(HAVE_BACKTRACE,1,[glibc backtrace function])
+fi;     
+
+WMCOINCOIN_PLAYER=""
+if test "x$build_wmcc_player" = "xyes"; then
+  AC_CHECK_PROG([IMLIB2_CONFIG_IN_PATH],[imlib2-config],[yes],[no])
+  if test "x$IMLIB2_CONFIG_IN_PATH" = "xno"; then
+        echo " *********************** YOU ARE NOT READY FOR THE DESKTOP ***********************"
+        echo " * no arms                              ==> no chocolate                         *"
+        echo " * imlib2-config was not found in path  ==> wmcoincoin_player will not be built. *"
+        echo " ************************* Thank you for your attention **************************"
+        build_wmcc_player="no"
+  else
+        AC_DEFINE(HAVE_IMLIB2,1,[use imlib2 for the player])
+        WMCOINCOIN_PLAYER="wmcoincoin_player${EXEEXT}"
+        build_wmcc_player="yes"
+        AC_DEFINE(HAVE_WMCOINCOIN_PLAYER,1,[wmcoincoin_player is supported])
+  fi
+dnl  AC_CHECK_PROG([CURL_IN_PATH],[curl],[yes],[no])
+dnl  if test "x$CURL_IN_PATH" = "xno"; then
+dnl         echo " *********************** YOU ARE NOT READY FOR THE DESKTOP ***********************"
+dnl         echo " * no arms                     ==> no chocolate                                  *"
+dnl         echo " * curl was not found in path  ==> wmcoincoin-totoz-get won't work               *"
+dnl         echo " *                             ==> wmcoincoin_player will not be built.          *"
+dnl         echo " ************************* Thank you for your attention **************************"
+dnl         build_wmcc_player="no"
+dnl   fi
+fi
+AC_SUBST([WMCOINCOIN_PLAYER])
+
+YELLOW="\\033\\1331;33m"
+RESET="\\033\\1330m"
+
+case "$host" in
+    *-linux-*)
+          echo -e "\n${YELLOW}you are using GNU/linux, it's Good(c)(tm) !${RESET}\n"
+          ;;
+    *-solaris*)
+          echo -e "\noh oh !! wmcc runs quite well on solaris (even solaris 7 which stinks from the back), good luck !\n"
+          ;;
+    *bsd*)
+          echo -e "\nbsd detected!\n"
+	  ;;
+    *-cygwin*)
+	  echo -e "\n${YELLOW}cygwin detected !, may the force be with you, young mussel${RESET}\n"
+     	  AC_CHECK_LIB(wsock32,select)
+	  dnl correct a bug in cygwin: incorrect regex included in -lm
+	  LIBS="`echo ${LIBS} | sed -e 's/-lm//'`"
+	  LIBS="${LIBS} -liconv -lm"        
+	  ;;
+    *-darwin*)
+          echo -e "\n${YELLOW}darwin detected, vilain macounet !${RESET}\n"
+	  dnl LDFLAGS="`echo ${LDFLAGS} | sed -e 's/-rdynamic//'`"
+          ;;
+    *GNU*)
+	  echo -e "\n${YELLOW}GNU/Hurd ! you need to shave yourself${RESET}\n"
+	  ;;
+    *hpux*)
+          echo "HPUX detected !! you are hairy"
+          ;;
+    *)
+	  echo -e "\n${YELLOW}you are compiling on $host , it's original${RESET}\n"
+         ;;
+esac
+
+AC_CONFIG_FILES([Makefile intl/Makefile po/Makefile.in m4/Makefile src/Makefile scripts/Makefile platypus/Makefile])
+AC_CONFIG_COMMANDS([default],[[ echo timestamp > stamp-h ]],[[]])
+AC_OUTPUT
+
+if test "x$build_wmccc" = "xno"; then
+  echo "    **** I recall you that you choosed to disable wmccc ****"
+else
+  echo "    wmcc will be built with wmccc"
+fi
+if test "x$build_wmcc_player" = "xno"; then
+  echo "    **** I recall you that wmcoincoin_player won't be built ****"
+else
+  echo "    wmcc will be built with wmcoincoin_player"
+fi
diff --git a/depcomp b/depcomp
new file mode 100755
index 0000000..edb5d38
--- /dev/null
+++ b/depcomp
@@ -0,0 +1,479 @@
+#! /bin/sh
+
+# depcomp - compile a program generating dependencies as side-effects
+# Copyright 1999, 2000, 2003 Free Software Foundation, Inc.
+
+# 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, 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., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Originally written by Alexandre Oliva <oliva at dcc.unicamp.br>.
+
+if test -z "$depmode" || test -z "$source" || test -z "$object"; then
+  echo "depcomp: Variables source, object and depmode must be set" 1>&2
+  exit 1
+fi
+# `libtool' can also be set to `yes' or `no'.
+
+if test -z "$depfile"; then
+   base=`echo "$object" | sed -e 's,^.*/,,' -e 's,\.\([^.]*\)$,.P\1,'`
+   dir=`echo "$object" | sed 's,/.*$,/,'`
+   if test "$dir" = "$object"; then
+      dir=
+   fi
+   # FIXME: should be _deps on DOS.
+   depfile="$dir.deps/$base"
+fi
+
+tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
+
+rm -f "$tmpdepfile"
+
+# Some modes work just like other modes, but use different flags.  We
+# parameterize here, but still list the modes in the big case below,
+# to make depend.m4 easier to write.  Note that we *cannot* use a case
+# here, because this file can only contain one case statement.
+if test "$depmode" = hp; then
+  # HP compiler uses -M and no extra arg.
+  gccflag=-M
+  depmode=gcc
+fi
+
+if test "$depmode" = dashXmstdout; then
+   # This is just like dashmstdout with a different argument.
+   dashmflag=-xM
+   depmode=dashmstdout
+fi
+
+case "$depmode" in
+gcc3)
+## gcc 3 implements dependency tracking that does exactly what
+## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
+## it if -MD -MP comes after the -MF stuff.  Hmm.
+  "$@" -MT "$object" -MD -MP -MF "$tmpdepfile"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  mv "$tmpdepfile" "$depfile"
+  ;;
+
+gcc)
+## There are various ways to get dependency output from gcc.  Here's
+## why we pick this rather obscure method:
+## - Don't want to use -MD because we'd like the dependencies to end
+##   up in a subdir.  Having to rename by hand is ugly.
+##   (We might end up doing this anyway to support other compilers.)
+## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
+##   -MM, not -M (despite what the docs say).
+## - Using -M directly means running the compiler twice (even worse
+##   than renaming).
+  if test -z "$gccflag"; then
+    gccflag=-MD,
+  fi
+  "$@" -Wp,"$gccflag$tmpdepfile"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
+## The second -e expression handles DOS-style file names with drive letters.
+  sed -e 's/^[^:]*: / /' \
+      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
+## This next piece of magic avoids the `deleted header file' problem.
+## The problem is that when a header file which appears in a .P file
+## is deleted, the dependency causes make to die (because there is
+## typically no way to rebuild the header).  We avoid this by adding
+## dummy dependencies for each header file.  Too bad gcc doesn't do
+## this for us directly.
+  tr ' ' '
+' < "$tmpdepfile" |
+## Some versions of gcc put a space before the `:'.  On the theory
+## that the space means something, we add a space to the output as
+## well.
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+hp)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
+sgi)
+  if test "$libtool" = yes; then
+    "$@" "-Wp,-MDupdate,$tmpdepfile"
+  else
+    "$@" -MDupdate "$tmpdepfile"
+  fi
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+
+  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
+    echo "$object : \\" > "$depfile"
+
+    # Clip off the initial element (the dependent).  Don't try to be
+    # clever and replace this with sed code, as IRIX sed won't handle
+    # lines with more than a fixed number of characters (4096 in
+    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
+    # the IRIX cc adds comments like `#:fec' to the end of the
+    # dependency line.
+    tr ' ' '
+' < "$tmpdepfile" \
+    | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
+    tr '
+' ' ' >> $depfile
+    echo >> $depfile
+
+    # The second pass generates a dummy entry for each header file.
+    tr ' ' '
+' < "$tmpdepfile" \
+   | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+   >> $depfile
+  else
+    # The sourcefile does not contain any dependencies, so just
+    # store a dummy comment line, to avoid errors with the Makefile
+    # "include basename.Plo" scheme.
+    echo "#dummy" > "$depfile"
+  fi
+  rm -f "$tmpdepfile"
+  ;;
+
+aix)
+  # The C for AIX Compiler uses -M and outputs the dependencies
+  # in a .u file.  In older versions, this file always lives in the
+  # current directory.  Also, the AIX compiler puts `$object:' at the
+  # start of each line; $object doesn't have directory information.
+  # Version 6 uses the directory in both cases.
+  stripped=`echo "$object" | sed 's/\(.*\)\..*$/\1/'`
+  tmpdepfile="$stripped.u"
+  if test "$libtool" = yes; then
+    "$@" -Wc,-M
+  else
+    "$@" -M
+  fi
+  stat=$?
+
+  if test -f "$tmpdepfile"; then :
+  else
+    stripped=`echo "$stripped" | sed 's,^.*/,,'`
+    tmpdepfile="$stripped.u"
+  fi
+
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+
+  if test -f "$tmpdepfile"; then
+    outname="$stripped.o"
+    # Each line is of the form `foo.o: dependent.h'.
+    # Do two passes, one to just change these to
+    # `$object: dependent.h' and one to simply `dependent.h:'.
+    sed -e "s,^$outname:,$object :," < "$tmpdepfile" > "$depfile"
+    sed -e "s,^$outname: \(.*\)$,\1:," < "$tmpdepfile" >> "$depfile"
+  else
+    # The sourcefile does not contain any dependencies, so just
+    # store a dummy comment line, to avoid errors with the Makefile
+    # "include basename.Plo" scheme.
+    echo "#dummy" > "$depfile"
+  fi
+  rm -f "$tmpdepfile"
+  ;;
+
+icc)
+  # Intel's C compiler understands `-MD -MF file'.  However on
+  #    icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
+  # ICC 7.0 will fill foo.d with something like
+  #    foo.o: sub/foo.c
+  #    foo.o: sub/foo.h
+  # which is wrong.  We want:
+  #    sub/foo.o: sub/foo.c
+  #    sub/foo.o: sub/foo.h
+  #    sub/foo.c:
+  #    sub/foo.h:
+  # ICC 7.1 will output
+  #    foo.o: sub/foo.c sub/foo.h
+  # and will wrap long lines using \ :
+  #    foo.o: sub/foo.c ... \
+  #     sub/foo.h ... \
+  #     ...
+
+  "$@" -MD -MF "$tmpdepfile"
+  stat=$?
+  if test $stat -eq 0; then :
+  else
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  # Each line is of the form `foo.o: dependent.h',
+  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
+  # Do two passes, one to just change these to
+  # `$object: dependent.h' and one to simply `dependent.h:'.
+  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
+  # Some versions of the HPUX 10.20 sed can't process this invocation
+  # correctly.  Breaking it into two sed invocations is a workaround.
+  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
+    sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+tru64)
+   # The Tru64 compiler uses -MD to generate dependencies as a side
+   # effect.  `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
+   # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
+   # dependencies in `foo.d' instead, so we check for that too.
+   # Subdirectories are respected.
+   dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
+   test "x$dir" = "x$object" && dir=
+   base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
+
+   if test "$libtool" = yes; then
+      tmpdepfile1="$dir.libs/$base.lo.d"
+      tmpdepfile2="$dir.libs/$base.d"
+      "$@" -Wc,-MD
+   else
+      tmpdepfile1="$dir$base.o.d"
+      tmpdepfile2="$dir$base.d"
+      "$@" -MD
+   fi
+
+   stat=$?
+   if test $stat -eq 0; then :
+   else
+      rm -f "$tmpdepfile1" "$tmpdepfile2"
+      exit $stat
+   fi
+
+   if test -f "$tmpdepfile1"; then
+      tmpdepfile="$tmpdepfile1"
+   else
+      tmpdepfile="$tmpdepfile2"
+   fi
+   if test -f "$tmpdepfile"; then
+      sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
+      # That's a tab and a space in the [].
+      sed -e 's,^.*\.[a-z]*:[	 ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
+   else
+      echo "#dummy" > "$depfile"
+   fi
+   rm -f "$tmpdepfile"
+   ;;
+
+#nosideeffect)
+  # This comment above is used by automake to tell side-effect
+  # dependency tracking mechanisms from slower ones.
+
+dashmstdout)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout, regardless of -o.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test $1 != '--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  # Remove `-o $object'.
+  IFS=" "
+  for arg
+  do
+    case $arg in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    *)
+      set fnord "$@" "$arg"
+      shift # fnord
+      shift # $arg
+      ;;
+    esac
+  done
+
+  test -z "$dashmflag" && dashmflag=-M
+  # Require at least two characters before searching for `:'
+  # in the target name.  This is to cope with DOS-style filenames:
+  # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
+  "$@" $dashmflag |
+    sed 's:^[  ]*[^: ][^:][^:]*\:[    ]*:'"$object"'\: :' > "$tmpdepfile"
+  rm -f "$depfile"
+  cat < "$tmpdepfile" > "$depfile"
+  tr ' ' '
+' < "$tmpdepfile" | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+dashXmstdout)
+  # This case only exists to satisfy depend.m4.  It is never actually
+  # run, as this mode is specially recognized in the preamble.
+  exit 1
+  ;;
+
+makedepend)
+  "$@" || exit $?
+  # Remove any Libtool call
+  if test "$libtool" = yes; then
+    while test $1 != '--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+  # X makedepend
+  shift
+  cleared=no
+  for arg in "$@"; do
+    case $cleared in
+    no)
+      set ""; shift
+      cleared=yes ;;
+    esac
+    case "$arg" in
+    -D*|-I*)
+      set fnord "$@" "$arg"; shift ;;
+    # Strip any option that makedepend may not understand.  Remove
+    # the object too, otherwise makedepend will parse it as a source file.
+    -*|$object)
+      ;;
+    *)
+      set fnord "$@" "$arg"; shift ;;
+    esac
+  done
+  obj_suffix="`echo $object | sed 's/^.*\././'`"
+  touch "$tmpdepfile"
+  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
+  rm -f "$depfile"
+  cat < "$tmpdepfile" > "$depfile"
+  sed '1,2d' "$tmpdepfile" | tr ' ' '
+' | \
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+    sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile" "$tmpdepfile".bak
+  ;;
+
+cpp)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test $1 != '--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  # Remove `-o $object'.
+  IFS=" "
+  for arg
+  do
+    case $arg in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    *)
+      set fnord "$@" "$arg"
+      shift # fnord
+      shift # $arg
+      ;;
+    esac
+  done
+
+  "$@" -E |
+    sed -n '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
+    sed '$ s: \\$::' > "$tmpdepfile"
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  cat < "$tmpdepfile" >> "$depfile"
+  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+msvisualcpp)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout, regardless of -o,
+  # because we must use -o when running libtool.
+  "$@" || exit $?
+  IFS=" "
+  for arg
+  do
+    case "$arg" in
+    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
+	set fnord "$@"
+	shift
+	shift
+	;;
+    *)
+	set fnord "$@" "$arg"
+	shift
+	shift
+	;;
+    esac
+  done
+  "$@" -E |
+  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile"
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::	\1 \\:p' >> "$depfile"
+  echo "	" >> "$depfile"
+  . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+none)
+  exec "$@"
+  ;;
+
+*)
+  echo "Unknown depmode $depmode" 1>&2
+  exit 1
+  ;;
+esac
+
+exit 0
diff --git a/genoptlst.sh b/genoptlst.sh
new file mode 100755
index 0000000..a79f29f
--- /dev/null
+++ b/genoptlst.sh
@@ -0,0 +1,34 @@
+#!/bin/sh
+echo '/* ce fichier est genere autmatiquement � partir du fichier "options"' > src/options_list.h
+echo '   par le script "genoptlst.sh" NE PAS EDITER !!! */' >> src/options_list.h
+echo -e '#ifndef OPTIONS_LIST_H\n' >> src/options_list.h
+echo -e '#define OPTIONS_LIST_H\n\n' >> src/options_list.h
+echo 'typedef enum {' >> src/options_list.h
+
+#options basiques
+sed -e 's/#[^a-zA-Z].*//' options | sed -e 's/#%.*//'| grep ':' | sed -e 's/:.*//' | sed -e 's/\./_/g' | sed -e 's/#*/OPT_/' -e 's/^OPT_OBSOLETE#/OBSOLETE_OPT_/'  | sed -e 's/$/,/'  | uniq >> src/options_list.h
+
+#options dependant du site
+grep '#\.[a-z]' options | sed -e 's/#%.*//' | grep ':' | sed -e 's/:.*//' | sed -e 's/\./_/g' | sed -e 's/#_/OPTS_/' | sed -e 's/$/,/' -e 's/#OBSOLETE/OBSOLETE_/' | uniq >> src/options_list.h
+
+#options dependant du site ou changement des valeurs par defaut
+grep '#\[\.\][a-z]' options | sed -e 's/#%.*//' | grep ':' | sed -e 's/:.*//' | sed -e 's/\./_/g' | sed -e 's/#\[_\]/OPTSG_/' | sed -e 's/$/,/' -e 's/#OBSOLETE/OBSOLETE_/' | uniq >> src/options_list.h
+
+echo 'NB_WMCC_OPTIONS' >> src/options_list.h
+echo -e '} wmcc_options_id;\n' >> src/options_list.h
+echo -e '\n#if defined(PREFS_C)\n' >> src/options_list.h
+
+#generation des chaines de caracteres de noms d'options
+echo 'char *wmcc_options_strings[NB_WMCC_OPTIONS+1] = {' >> src/options_list.h
+
+#options basiques
+sed -e 's/#OBSOLETE//' -e 's/#[^a-z].*//' options | sed -e 's/#%.*//' | grep ':' | sed -e 's/:.*//' | sed -e 's/^#*/\"/' | sed -e 's/$/\",/' | uniq >> src/options_list.h
+
+#options dependantes du site
+grep '#\.[a-z]' options | sed -e 's/#OBSOLETE//' -e 's/#%.*//' | grep ':' | sed -e 's/:.*//' | sed -e 's/#/\"/' | sed -e 's/$/\",/' | uniq >> src/options_list.h
+
+#options dependantes du site, mais pouvant etre d�finies de mani�re globale
+grep '#\[\.\][a-z]' options | sed -e 's/#OBSOLETE//' -e 's/#%.*//' | grep ':' | sed -e 's/:.*//' | sed -e 's/#\[\.\]/!/' | uniq | awk '{ print "\""$0"\","}' >> src/options_list.h
+
+
+echo -e 'NULL};\n#else\nextern char *wmcc_options_strings[];\n#endif\n#endif' >> src/options_list.h
diff --git a/install-sh b/install-sh
new file mode 100755
index 0000000..6ce63b9
--- /dev/null
+++ b/install-sh
@@ -0,0 +1,294 @@
+#!/bin/sh
+#
+# install - install a program, script, or datafile
+#
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
+#
+# Copyright (C) 1994 X Consortium
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# 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
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# `make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.  It can only install one file at a time, a restriction
+# shared with many OS's install programs.
+
+
+# set DOITPROG to echo to test this script
+
+# Don't use :- since 4.3BSD and earlier shells don't like it.
+doit="${DOITPROG-}"
+
+
+# put in absolute paths if you don't have them in your path; or use env. vars.
+
+mvprog="${MVPROG-mv}"
+cpprog="${CPPROG-cp}"
+chmodprog="${CHMODPROG-chmod}"
+chownprog="${CHOWNPROG-chown}"
+chgrpprog="${CHGRPPROG-chgrp}"
+stripprog="${STRIPPROG-strip}"
+rmprog="${RMPROG-rm}"
+mkdirprog="${MKDIRPROG-mkdir}"
+
+transformbasename=""
+transform_arg=""
+instcmd="$mvprog"
+chmodcmd="$chmodprog 0755"
+chowncmd=""
+chgrpcmd=""
+stripcmd=""
+rmcmd="$rmprog -f"
+mvcmd="$mvprog"
+src=""
+dst=""
+dir_arg=""
+
+while [ x"$1" != x ]; do
+    case $1 in
+	-c) instcmd=$cpprog
+	    shift
+	    continue;;
+
+	-d) dir_arg=true
+	    shift
+	    continue;;
+
+	-m) chmodcmd="$chmodprog $2"
+	    shift
+	    shift
+	    continue;;
+
+	-o) chowncmd="$chownprog $2"
+	    shift
+	    shift
+	    continue;;
+
+	-g) chgrpcmd="$chgrpprog $2"
+	    shift
+	    shift
+	    continue;;
+
+	-s) stripcmd=$stripprog
+	    shift
+	    continue;;
+
+	-t=*) transformarg=`echo $1 | sed 's/-t=//'`
+	    shift
+	    continue;;
+
+	-b=*) transformbasename=`echo $1 | sed 's/-b=//'`
+	    shift
+	    continue;;
+
+	*)  if [ x"$src" = x ]
+	    then
+		src=$1
+	    else
+		# this colon is to work around a 386BSD /bin/sh bug
+		:
+		dst=$1
+	    fi
+	    shift
+	    continue;;
+    esac
+done
+
+if [ x"$src" = x ]
+then
+	echo "$0: no input file specified" >&2
+	exit 1
+else
+	:
+fi
+
+if [ x"$dir_arg" != x ]; then
+	dst=$src
+	src=""
+
+	if [ -d "$dst" ]; then
+		instcmd=:
+		chmodcmd=""
+	else
+		instcmd=$mkdirprog
+	fi
+else
+
+# Waiting for this to be detected by the "$instcmd $src $dsttmp" command
+# might cause directories to be created, which would be especially bad
+# if $src (and thus $dsttmp) contains '*'.
+
+	if [ -f "$src" ] || [ -d "$src" ]
+	then
+		:
+	else
+		echo "$0: $src does not exist" >&2
+		exit 1
+	fi
+
+	if [ x"$dst" = x ]
+	then
+		echo "$0: no destination specified" >&2
+		exit 1
+	else
+		:
+	fi
+
+# If destination is a directory, append the input filename; if your system
+# does not like double slashes in filenames, you may need to add some logic
+
+	if [ -d "$dst" ]
+	then
+		dst=$dst/`basename "$src"`
+	else
+		:
+	fi
+fi
+
+## this sed command emulates the dirname command
+dstdir=`echo "$dst" | sed -e 's,[^/]*$,,;s,/$,,;s,^$,.,'`
+
+# Make sure that the destination directory exists.
+#  this part is taken from Noah Friedman's mkinstalldirs script
+
+# Skip lots of stat calls in the usual case.
+if [ ! -d "$dstdir" ]; then
+defaultIFS='
+	'
+IFS="${IFS-$defaultIFS}"
+
+oIFS=$IFS
+# Some sh's can't handle IFS=/ for some reason.
+IFS='%'
+set - `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
+IFS=$oIFS
+
+pathcomp=''
+
+while [ $# -ne 0 ] ; do
+	pathcomp=$pathcomp$1
+	shift
+
+	if [ ! -d "$pathcomp" ] ;
+        then
+		$mkdirprog "$pathcomp"
+	else
+		:
+	fi
+
+	pathcomp=$pathcomp/
+done
+fi
+
+if [ x"$dir_arg" != x ]
+then
+	$doit $instcmd "$dst" &&
+
+	if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dst"; else : ; fi &&
+	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dst"; else : ; fi &&
+	if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dst"; else : ; fi &&
+	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dst"; else : ; fi
+else
+
+# If we're going to rename the final executable, determine the name now.
+
+	if [ x"$transformarg" = x ]
+	then
+		dstfile=`basename "$dst"`
+	else
+		dstfile=`basename "$dst" $transformbasename |
+			sed $transformarg`$transformbasename
+	fi
+
+# don't allow the sed command to completely eliminate the filename
+
+	if [ x"$dstfile" = x ]
+	then
+		dstfile=`basename "$dst"`
+	else
+		:
+	fi
+
+# Make a couple of temp file names in the proper directory.
+
+	dsttmp=$dstdir/_inst.$$_
+	rmtmp=$dstdir/_rm.$$_
+
+# Trap to clean up temp files at exit.
+
+	trap 'status=$?; rm -f "$dsttmp" "$rmtmp" && exit $status' 0
+	trap '(exit $?); exit' 1 2 13 15
+
+# Move or copy the file name to the temp name
+
+	$doit $instcmd "$src" "$dsttmp" &&
+
+# and set any options; do chmod last to preserve setuid bits
+
+# If any of these fail, we abort the whole thing.  If we want to
+# ignore errors from any of these, just make sure not to ignore
+# errors from the above "$doit $instcmd $src $dsttmp" command.
+
+	if [ x"$chowncmd" != x ]; then $doit $chowncmd "$dsttmp"; else :;fi &&
+	if [ x"$chgrpcmd" != x ]; then $doit $chgrpcmd "$dsttmp"; else :;fi &&
+	if [ x"$stripcmd" != x ]; then $doit $stripcmd "$dsttmp"; else :;fi &&
+	if [ x"$chmodcmd" != x ]; then $doit $chmodcmd "$dsttmp"; else :;fi &&
+
+# Now remove or move aside any old file at destination location.  We try this
+# two ways since rm can't unlink itself on some systems and the destination
+# file might be busy for other reasons.  In this case, the final cleanup
+# might fail but the new file should still install successfully.
+
+{
+	if [ -f "$dstdir/$dstfile" ]
+	then
+		$doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null ||
+		$doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null ||
+		{
+		  echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
+		  (exit 1); exit
+		}
+	else
+		:
+	fi
+} &&
+
+# Now rename the file to the real destination.
+
+	$doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
+
+fi &&
+
+# The final little trick to "correctly" pass the exit status to the exit trap.
+
+{
+	(exit 0); exit
+}
diff --git a/intl/ChangeLog b/intl/ChangeLog
new file mode 100644
index 0000000..3ec9081
--- /dev/null
+++ b/intl/ChangeLog
@@ -0,0 +1,4 @@
+2007-11-07  GNU  <bug-gnu-gettext at gnu.org>
+
+	* Version 0.17 released.
+
diff --git a/intl/Makefile.in b/intl/Makefile.in
new file mode 100644
index 0000000..cfed085
--- /dev/null
+++ b/intl/Makefile.in
@@ -0,0 +1,587 @@
+# Makefile for directory with message catalog handling library of GNU gettext
+# Copyright (C) 1995-1998, 2000-2007 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Library General Public License as published
+# by the Free Software Foundation; either version 2, 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
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+# USA.
+
+PACKAGE = @PACKAGE@
+VERSION = @VERSION@
+
+SHELL = /bin/sh
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+top_builddir = ..
+
+# The VPATH variables allows builds with $builddir != $srcdir, assuming a
+# 'make' program that supports VPATH (such as GNU make). This line is removed
+# by autoconf automatically when "$(srcdir)" = ".".
+# In this directory, the VPATH handling is particular:
+# 1. If INTL_LIBTOOL_SUFFIX_PREFIX is 'l' (indicating a build with libtool),
+#    the .c -> .lo rules carefully use $(srcdir), so that VPATH can be omitted.
+# 2. If PACKAGE = gettext-tools, VPATH _must_ be omitted, because otherwise
+#    'make' does the wrong thing if GNU gettext was configured with
+#    "./configure --srcdir=`pwd`", namely it gets confused by the .lo and .la
+#    files it finds in srcdir = ../../gettext-runtime/intl.
+VPATH = $(srcdir)
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+transform = @program_transform_name@
+libdir = @libdir@
+includedir = @includedir@
+datarootdir = @datarootdir@
+datadir = @datadir@
+localedir = $(datadir)/locale
+gettextsrcdir = $(datadir)/gettext/intl
+aliaspath = $(localedir)
+subdir = intl
+
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+
+# We use $(mkdir_p).
+# In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as
+# "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions,
+# @install_sh@ does not start with $(SHELL), so we add it.
+# In automake >= 1.10, @mkdir_p@ is derived from ${MKDIR_P}, which is defined
+# either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake
+# versions, $(mkinstalldirs) and $(install_sh) are unused.
+mkinstalldirs = $(SHELL) @install_sh@ -d
+install_sh = $(SHELL) @install_sh@
+MKDIR_P = @MKDIR_P@
+mkdir_p = @mkdir_p@
+
+l = @INTL_LIBTOOL_SUFFIX_PREFIX@
+
+AR = ar
+CC = @CC@
+LIBTOOL = @LIBTOOL@
+RANLIB = @RANLIB@
+YACC = @INTLBISON@ -y -d
+YFLAGS = --name-prefix=__gettext
+WINDRES = @WINDRES@
+
+# -DBUILDING_LIBINTL: Change expansion of LIBINTL_DLL_EXPORTED macro.
+# -DBUILDING_DLL: Change expansion of RELOCATABLE_DLL_EXPORTED macro.
+DEFS = -DLOCALEDIR=\"$(localedir)\" -DLOCALE_ALIAS_PATH=\"$(aliaspath)\" \
+-DLIBDIR=\"$(libdir)\" -DBUILDING_LIBINTL -DBUILDING_DLL -DIN_LIBINTL \
+-DENABLE_RELOCATABLE=1 -DIN_LIBRARY -DINSTALLDIR=\"$(libdir)\" -DNO_XMALLOC \
+-Dset_relocation_prefix=libintl_set_relocation_prefix \
+-Drelocate=libintl_relocate \
+-DDEPENDS_ON_LIBICONV=1 @DEFS@
+CPPFLAGS = @CPPFLAGS@
+CFLAGS = @CFLAGS@ @CFLAG_VISIBILITY@
+LDFLAGS = @LDFLAGS@ $(LDFLAGS_ at WOE32DLL@)
+LDFLAGS_yes = -Wl,--export-all-symbols
+LDFLAGS_no =
+LIBS = @LIBS@
+
+COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS)
+
+HEADERS = \
+  gmo.h \
+  gettextP.h \
+  hash-string.h \
+  loadinfo.h \
+  plural-exp.h \
+  eval-plural.h \
+  localcharset.h \
+  lock.h \
+  relocatable.h \
+  tsearch.h tsearch.c \
+  xsize.h \
+  printf-args.h printf-args.c \
+  printf-parse.h wprintf-parse.h printf-parse.c \
+  vasnprintf.h vasnwprintf.h vasnprintf.c \
+  os2compat.h \
+  libgnuintl.h.in
+SOURCES = \
+  bindtextdom.c \
+  dcgettext.c \
+  dgettext.c \
+  gettext.c \
+  finddomain.c \
+  hash-string.c \
+  loadmsgcat.c \
+  localealias.c \
+  textdomain.c \
+  l10nflist.c \
+  explodename.c \
+  dcigettext.c \
+  dcngettext.c \
+  dngettext.c \
+  ngettext.c \
+  plural.y \
+  plural-exp.c \
+  localcharset.c \
+  lock.c \
+  relocatable.c \
+  langprefs.c \
+  localename.c \
+  log.c \
+  printf.c \
+  version.c \
+  osdep.c \
+  os2compat.c \
+  intl-exports.c \
+  intl-compat.c
+OBJECTS = \
+  bindtextdom.$lo \
+  dcgettext.$lo \
+  dgettext.$lo \
+  gettext.$lo \
+  finddomain.$lo \
+  hash-string.$lo \
+  loadmsgcat.$lo \
+  localealias.$lo \
+  textdomain.$lo \
+  l10nflist.$lo \
+  explodename.$lo \
+  dcigettext.$lo \
+  dcngettext.$lo \
+  dngettext.$lo \
+  ngettext.$lo \
+  plural.$lo \
+  plural-exp.$lo \
+  localcharset.$lo \
+  lock.$lo \
+  relocatable.$lo \
+  langprefs.$lo \
+  localename.$lo \
+  log.$lo \
+  printf.$lo \
+  version.$lo \
+  osdep.$lo \
+  intl-compat.$lo
+OBJECTS_RES_yes = libintl.res
+OBJECTS_RES_no =
+DISTFILES.common = Makefile.in \
+config.charset locale.alias ref-add.sin ref-del.sin export.h libintl.rc \
+$(HEADERS) $(SOURCES)
+DISTFILES.generated = plural.c
+DISTFILES.normal = VERSION
+DISTFILES.gettext = COPYING.LIB-2.0 COPYING.LIB-2.1 libintl.glibc README.woe32
+DISTFILES.obsolete = xopen-msg.sed linux-msg.sed po2tbl.sed.in cat-compat.c \
+COPYING.LIB-2 gettext.h libgettext.h plural-eval.c libgnuintl.h \
+libgnuintl.h_vms Makefile.vms libgnuintl.h.msvc-static \
+libgnuintl.h.msvc-shared Makefile.msvc
+
+all: all- at USE_INCLUDED_LIBINTL@
+all-yes: libintl.$la libintl.h charset.alias ref-add.sed ref-del.sed
+all-no: all-no- at BUILD_INCLUDED_LIBINTL@
+all-no-yes: libgnuintl.$la
+all-no-no:
+
+libintl.a libgnuintl.a: $(OBJECTS)
+	rm -f $@
+	$(AR) cru $@ $(OBJECTS)
+	$(RANLIB) $@
+
+libintl.la libgnuintl.la: $(OBJECTS) $(OBJECTS_RES_ at WOE32@)
+	$(LIBTOOL) --mode=link \
+	  $(CC) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) $(LDFLAGS) -o $@ \
+	  $(OBJECTS) @LTLIBICONV@ @INTL_MACOSX_LIBS@ $(LIBS) @LTLIBTHREAD@ @LTLIBC@ \
+	  $(OBJECTS_RES_ at WOE32@) \
+	  -version-info $(LTV_CURRENT):$(LTV_REVISION):$(LTV_AGE) \
+	  -rpath $(libdir) \
+	  -no-undefined
+
+# Libtool's library version information for libintl.
+# Before making a gettext release, the gettext maintainer must change this
+# according to the libtool documentation, section "Library interface versions".
+# Maintainers of other packages that include the intl directory must *not*
+# change these values.
+LTV_CURRENT=8
+LTV_REVISION=2
+LTV_AGE=0
+
+.SUFFIXES:
+.SUFFIXES: .c .y .o .lo .sin .sed
+
+.c.o:
+	$(COMPILE) $<
+
+.y.c:
+	$(YACC) $(YFLAGS) --output $@ $<
+	rm -f $*.h
+
+bindtextdom.lo: $(srcdir)/bindtextdom.c
+	$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/bindtextdom.c
+dcgettext.lo: $(srcdir)/dcgettext.c
+	$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dcgettext.c
+dgettext.lo: $(srcdir)/dgettext.c
+	$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dgettext.c
+gettext.lo: $(srcdir)/gettext.c
+	$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/gettext.c
+finddomain.lo: $(srcdir)/finddomain.c
+	$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/finddomain.c
+hash-string.lo: $(srcdir)/hash-string.c
+	$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/hash-string.c
+loadmsgcat.lo: $(srcdir)/loadmsgcat.c
+	$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/loadmsgcat.c
+localealias.lo: $(srcdir)/localealias.c
+	$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/localealias.c
+textdomain.lo: $(srcdir)/textdomain.c
+	$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/textdomain.c
+l10nflist.lo: $(srcdir)/l10nflist.c
+	$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/l10nflist.c
+explodename.lo: $(srcdir)/explodename.c
+	$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/explodename.c
+dcigettext.lo: $(srcdir)/dcigettext.c
+	$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dcigettext.c
+dcngettext.lo: $(srcdir)/dcngettext.c
+	$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dcngettext.c
+dngettext.lo: $(srcdir)/dngettext.c
+	$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dngettext.c
+ngettext.lo: $(srcdir)/ngettext.c
+	$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/ngettext.c
+plural.lo: $(srcdir)/plural.c
+	$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/plural.c
+plural-exp.lo: $(srcdir)/plural-exp.c
+	$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/plural-exp.c
+localcharset.lo: $(srcdir)/localcharset.c
+	$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/localcharset.c
+lock.lo: $(srcdir)/lock.c
+	$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/lock.c
+relocatable.lo: $(srcdir)/relocatable.c
+	$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/relocatable.c
+langprefs.lo: $(srcdir)/langprefs.c
+	$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/langprefs.c
+localename.lo: $(srcdir)/localename.c
+	$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/localename.c
+log.lo: $(srcdir)/log.c
+	$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/log.c
+printf.lo: $(srcdir)/printf.c
+	$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/printf.c
+version.lo: $(srcdir)/version.c
+	$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/version.c
+osdep.lo: $(srcdir)/osdep.c
+	$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/osdep.c
+intl-compat.lo: $(srcdir)/intl-compat.c
+	$(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/intl-compat.c
+
+# This rule is executed only on Woe32 systems.
+# The following sed expressions come from the windres-options script. They are
+# inlined here, so that they can be written in a Makefile without requiring a
+# temporary file. They must contain literal newlines rather than semicolons,
+# so that they work with the sed-3.02 that is shipped with MSYS. We can use
+# GNU bash's $'\n' syntax to obtain such a newline.
+libintl.res: $(srcdir)/libintl.rc
+	nl=$$'\n'; \
+	sed_extract_major='/^[0-9]/{'$${nl}'s/^\([0-9]*\).*/\1/p'$${nl}q$${nl}'}'$${nl}'c\'$${nl}0$${nl}q; \
+	sed_extract_minor='/^[0-9][0-9]*[.][0-9]/{'$${nl}'s/^[0-9]*[.]\([0-9]*\).*/\1/p'$${nl}q$${nl}'}'$${nl}'c\'$${nl}0$${nl}q; \
+	sed_extract_subminor='/^[0-9][0-9]*[.][0-9][0-9]*[.][0-9]/{'$${nl}'s/^[0-9]*[.][0-9]*[.]\([0-9]*\).*/\1/p'$${nl}q$${nl}'}'$${nl}'c\'$${nl}0$${nl}q; \
+	$(WINDRES) \
+	  "-DPACKAGE_VERSION_STRING=\\\"$(VERSION)\\\"" \
+	  "-DPACKAGE_VERSION_MAJOR="`echo '$(VERSION)' | sed -n -e "$$sed_extract_major"` \
+	  "-DPACKAGE_VERSION_MINOR="`echo '$(VERSION)' | sed -n -e "$$sed_extract_minor"` \
+	  "-DPACKAGE_VERSION_SUBMINOR="`echo '$(VERSION)' | sed -n -e "$$sed_extract_subminor"` \
+	  -i $(srcdir)/libintl.rc -o libintl.res --output-format=coff
+
+ref-add.sed: $(srcdir)/ref-add.sin
+	sed -e '/^#/d' -e 's/@''PACKAGE''@/@PACKAGE@/g' $(srcdir)/ref-add.sin > t-ref-add.sed
+	mv t-ref-add.sed ref-add.sed
+ref-del.sed: $(srcdir)/ref-del.sin
+	sed -e '/^#/d' -e 's/@''PACKAGE''@/@PACKAGE@/g' $(srcdir)/ref-del.sin > t-ref-del.sed
+	mv t-ref-del.sed ref-del.sed
+
+INCLUDES = -I. -I$(srcdir) -I..
+
+libgnuintl.h: $(srcdir)/libgnuintl.h.in
+	sed -e '/IN_LIBGLOCALE/d' \
+	    -e 's,@''HAVE_POSIX_PRINTF''@, at HAVE_POSIX_PRINTF@,g' \
+	    -e 's,@''HAVE_ASPRINTF''@, at HAVE_ASPRINTF@,g' \
+	    -e 's,@''HAVE_SNPRINTF''@, at HAVE_SNPRINTF@,g' \
+	    -e 's,@''HAVE_WPRINTF''@, at HAVE_WPRINTF@,g' \
+	  < $(srcdir)/libgnuintl.h.in \
+	| if test '@WOE32DLL@' = yes; then \
+	    sed -e 's/extern \([^()]*\);/extern __declspec (dllimport) \1;/'; \
+	  else \
+	    cat; \
+	  fi \
+	| sed -e 's/extern \([^"]\)/extern LIBINTL_DLL_EXPORTED \1/' \
+	      -e "/#define _LIBINTL_H/r $(srcdir)/export.h" \
+	| sed -e 's,@''HAVE_VISIBILITY''@, at HAVE_VISIBILITY@,g' \
+	  > libgnuintl.h
+
+libintl.h: $(srcdir)/libgnuintl.h.in
+	sed -e '/IN_LIBGLOCALE/d' \
+	    -e 's,@''HAVE_POSIX_PRINTF''@, at HAVE_POSIX_PRINTF@,g' \
+	    -e 's,@''HAVE_ASPRINTF''@, at HAVE_ASPRINTF@,g' \
+	    -e 's,@''HAVE_SNPRINTF''@, at HAVE_SNPRINTF@,g' \
+	    -e 's,@''HAVE_WPRINTF''@, at HAVE_WPRINTF@,g' \
+	  < $(srcdir)/libgnuintl.h.in > libintl.h
+
+charset.alias: $(srcdir)/config.charset
+	$(SHELL) $(srcdir)/config.charset '@host@' > t-$@
+	mv t-$@ $@
+
+check: all
+
+# We must not install the libintl.h/libintl.a files if we are on a
+# system which has the GNU gettext() function in its C library or in a
+# separate library.
+# If you want to use the one which comes with this version of the
+# package, you have to use `configure --with-included-gettext'.
+install: install-exec install-data
+install-exec: all
+	if { test "$(PACKAGE)" = "gettext-runtime" || test "$(PACKAGE)" = "gettext-tools"; } \
+	   && test '@USE_INCLUDED_LIBINTL@' = yes; then \
+	  $(mkdir_p) $(DESTDIR)$(libdir) $(DESTDIR)$(includedir); \
+	  $(INSTALL_DATA) libintl.h $(DESTDIR)$(includedir)/libintl.h; \
+	  $(LIBTOOL) --mode=install \
+	    $(INSTALL_DATA) libintl.$la $(DESTDIR)$(libdir)/libintl.$la; \
+	  if test "@RELOCATABLE@" = yes; then \
+	    dependencies=`sed -n -e 's,^dependency_libs=\(.*\),\1,p' < $(DESTDIR)$(libdir)/libintl.la | sed -e "s,^',," -e "s,'\$$,,"`; \
+	    if test -n "$$dependencies"; then \
+	      rm -f $(DESTDIR)$(libdir)/libintl.la; \
+	    fi; \
+	  fi; \
+	else \
+	  : ; \
+	fi
+	if test "$(PACKAGE)" = "gettext-tools" \
+	   && test '@USE_INCLUDED_LIBINTL@' = no \
+	   && test @GLIBC2@ != no; then \
+	  $(mkdir_p) $(DESTDIR)$(libdir); \
+	  $(LIBTOOL) --mode=install \
+	    $(INSTALL_DATA) libgnuintl.$la $(DESTDIR)$(libdir)/libgnuintl.$la; \
+	  rm -f $(DESTDIR)$(libdir)/preloadable_libintl.so; \
+	  $(INSTALL_DATA) $(DESTDIR)$(libdir)/libgnuintl.so $(DESTDIR)$(libdir)/preloadable_libintl.so; \
+	  $(LIBTOOL) --mode=uninstall \
+	    rm -f $(DESTDIR)$(libdir)/libgnuintl.$la; \
+	else \
+	  : ; \
+	fi
+	if test '@USE_INCLUDED_LIBINTL@' = yes; then \
+	  test @GLIBC21@ != no || $(mkdir_p) $(DESTDIR)$(libdir); \
+	  temp=$(DESTDIR)$(libdir)/t-charset.alias; \
+	  dest=$(DESTDIR)$(libdir)/charset.alias; \
+	  if test -f $(DESTDIR)$(libdir)/charset.alias; then \
+	    orig=$(DESTDIR)$(libdir)/charset.alias; \
+	    sed -f ref-add.sed $$orig > $$temp; \
+	    $(INSTALL_DATA) $$temp $$dest; \
+	    rm -f $$temp; \
+	  else \
+	    if test @GLIBC21@ = no; then \
+	      orig=charset.alias; \
+	      sed -f ref-add.sed $$orig > $$temp; \
+	      $(INSTALL_DATA) $$temp $$dest; \
+	      rm -f $$temp; \
+	    fi; \
+	  fi; \
+	  $(mkdir_p) $(DESTDIR)$(localedir); \
+	  test -f $(DESTDIR)$(localedir)/locale.alias \
+	    && orig=$(DESTDIR)$(localedir)/locale.alias \
+	    || orig=$(srcdir)/locale.alias; \
+	  temp=$(DESTDIR)$(localedir)/t-locale.alias; \
+	  dest=$(DESTDIR)$(localedir)/locale.alias; \
+	  sed -f ref-add.sed $$orig > $$temp; \
+	  $(INSTALL_DATA) $$temp $$dest; \
+	  rm -f $$temp; \
+	else \
+	  : ; \
+	fi
+install-data: all
+	if test "$(PACKAGE)" = "gettext-tools"; then \
+	  $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
+	  $(INSTALL_DATA) VERSION $(DESTDIR)$(gettextsrcdir)/VERSION; \
+	  $(INSTALL_DATA) ChangeLog.inst $(DESTDIR)$(gettextsrcdir)/ChangeLog; \
+	  dists="COPYING.LIB-2.0 COPYING.LIB-2.1 $(DISTFILES.common)"; \
+	  for file in $$dists; do \
+	    $(INSTALL_DATA) $(srcdir)/$$file \
+			    $(DESTDIR)$(gettextsrcdir)/$$file; \
+	  done; \
+	  chmod a+x $(DESTDIR)$(gettextsrcdir)/config.charset; \
+	  dists="$(DISTFILES.generated)"; \
+	  for file in $$dists; do \
+	    if test -f $$file; then dir=.; else dir=$(srcdir); fi; \
+	    $(INSTALL_DATA) $$dir/$$file \
+			    $(DESTDIR)$(gettextsrcdir)/$$file; \
+	  done; \
+	  dists="$(DISTFILES.obsolete)"; \
+	  for file in $$dists; do \
+	    rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
+	  done; \
+	else \
+	  : ; \
+	fi
+
+install-strip: install
+
+install-dvi install-html install-info install-ps install-pdf:
+
+installdirs:
+	if { test "$(PACKAGE)" = "gettext-runtime" || test "$(PACKAGE)" = "gettext-tools"; } \
+	   && test '@USE_INCLUDED_LIBINTL@' = yes; then \
+	  $(mkdir_p) $(DESTDIR)$(libdir) $(DESTDIR)$(includedir); \
+	else \
+	  : ; \
+	fi
+	if test "$(PACKAGE)" = "gettext-tools" \
+	   && test '@USE_INCLUDED_LIBINTL@' = no \
+	   && test @GLIBC2@ != no; then \
+	  $(mkdir_p) $(DESTDIR)$(libdir); \
+	else \
+	  : ; \
+	fi
+	if test '@USE_INCLUDED_LIBINTL@' = yes; then \
+	  test @GLIBC21@ != no || $(mkdir_p) $(DESTDIR)$(libdir); \
+	  $(mkdir_p) $(DESTDIR)$(localedir); \
+	else \
+	  : ; \
+	fi
+	if test "$(PACKAGE)" = "gettext-tools"; then \
+	  $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
+	else \
+	  : ; \
+	fi
+
+# Define this as empty until I found a useful application.
+installcheck:
+
+uninstall:
+	if { test "$(PACKAGE)" = "gettext-runtime" || test "$(PACKAGE)" = "gettext-tools"; } \
+	   && test '@USE_INCLUDED_LIBINTL@' = yes; then \
+	  rm -f $(DESTDIR)$(includedir)/libintl.h; \
+	  $(LIBTOOL) --mode=uninstall \
+	    rm -f $(DESTDIR)$(libdir)/libintl.$la; \
+	else \
+	  : ; \
+	fi
+	if test "$(PACKAGE)" = "gettext-tools" \
+	   && test '@USE_INCLUDED_LIBINTL@' = no \
+	   && test @GLIBC2@ != no; then \
+	  rm -f $(DESTDIR)$(libdir)/preloadable_libintl.so; \
+	else \
+	  : ; \
+	fi
+	if test '@USE_INCLUDED_LIBINTL@' = yes; then \
+	  if test -f $(DESTDIR)$(libdir)/charset.alias; then \
+	    temp=$(DESTDIR)$(libdir)/t-charset.alias; \
+	    dest=$(DESTDIR)$(libdir)/charset.alias; \
+	    sed -f ref-del.sed $$dest > $$temp; \
+	    if grep '^# Packages using this file: $$' $$temp > /dev/null; then \
+	      rm -f $$dest; \
+	    else \
+	      $(INSTALL_DATA) $$temp $$dest; \
+	    fi; \
+	    rm -f $$temp; \
+	  fi; \
+	  if test -f $(DESTDIR)$(localedir)/locale.alias; then \
+	    temp=$(DESTDIR)$(localedir)/t-locale.alias; \
+	    dest=$(DESTDIR)$(localedir)/locale.alias; \
+	    sed -f ref-del.sed $$dest > $$temp; \
+	    if grep '^# Packages using this file: $$' $$temp > /dev/null; then \
+	      rm -f $$dest; \
+	    else \
+	      $(INSTALL_DATA) $$temp $$dest; \
+	    fi; \
+	    rm -f $$temp; \
+	  fi; \
+	else \
+	  : ; \
+	fi
+	if test "$(PACKAGE)" = "gettext-tools"; then \
+	  for file in VERSION ChangeLog COPYING.LIB-2.0 COPYING.LIB-2.1 $(DISTFILES.common) $(DISTFILES.generated); do \
+	    rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
+	  done; \
+	else \
+	  : ; \
+	fi
+
+info dvi ps pdf html:
+
+$(OBJECTS): ../config.h libgnuintl.h
+bindtextdom.$lo dcgettext.$lo dcigettext.$lo dcngettext.$lo dgettext.$lo dngettext.$lo finddomain.$lo gettext.$lo intl-compat.$lo loadmsgcat.$lo localealias.$lo ngettext.$lo textdomain.$lo: $(srcdir)/gettextP.h $(srcdir)/gmo.h $(srcdir)/loadinfo.h
+hash-string.$lo dcigettext.$lo loadmsgcat.$lo: $(srcdir)/hash-string.h
+explodename.$lo l10nflist.$lo: $(srcdir)/loadinfo.h
+dcigettext.$lo loadmsgcat.$lo plural.$lo plural-exp.$lo: $(srcdir)/plural-exp.h
+dcigettext.$lo: $(srcdir)/eval-plural.h
+localcharset.$lo: $(srcdir)/localcharset.h
+bindtextdom.$lo dcigettext.$lo finddomain.$lo loadmsgcat.$lo localealias.$lo lock.$lo log.$lo: $(srcdir)/lock.h
+localealias.$lo localcharset.$lo relocatable.$lo: $(srcdir)/relocatable.h
+printf.$lo: $(srcdir)/printf-args.h $(srcdir)/printf-args.c $(srcdir)/printf-parse.h $(srcdir)/wprintf-parse.h $(srcdir)/xsize.h $(srcdir)/printf-parse.c $(srcdir)/vasnprintf.h $(srcdir)/vasnwprintf.h $(srcdir)/vasnprintf.c
+
+# A bison-2.1 generated plural.c includes <libintl.h> if ENABLE_NLS.
+PLURAL_DEPS_yes = libintl.h
+PLURAL_DEPS_no =
+plural.$lo: $(PLURAL_DEPS_ at USE_INCLUDED_LIBINTL@)
+
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES)
+	here=`pwd`; cd $(srcdir) && etags -o $$here/TAGS $(HEADERS) $(SOURCES)
+
+ctags: CTAGS
+
+CTAGS: $(HEADERS) $(SOURCES)
+	here=`pwd`; cd $(srcdir) && ctags -o $$here/CTAGS $(HEADERS) $(SOURCES)
+
+id: ID
+
+ID: $(HEADERS) $(SOURCES)
+	here=`pwd`; cd $(srcdir) && mkid -f$$here/ID $(HEADERS) $(SOURCES)
+
+
+mostlyclean:
+	rm -f *.a *.la *.o *.obj *.lo libintl.res core core.*
+	rm -f libgnuintl.h libintl.h charset.alias ref-add.sed ref-del.sed
+	rm -f -r .libs _libs
+
+clean: mostlyclean
+
+distclean: clean
+	rm -f Makefile ID TAGS
+	if test "$(PACKAGE)" = "gettext-runtime" || test "$(PACKAGE)" = "gettext-tools"; then \
+	  rm -f ChangeLog.inst $(DISTFILES.normal); \
+	else \
+	  : ; \
+	fi
+
+maintainer-clean: distclean
+	@echo "This command is intended for maintainers to use;"
+	@echo "it deletes files that may require special tools to rebuild."
+
+
+# GNU gettext needs not contain the file `VERSION' but contains some
+# other files which should not be distributed in other packages.
+distdir = ../$(PACKAGE)-$(VERSION)/$(subdir)
+dist distdir: Makefile
+	if test "$(PACKAGE)" = "gettext-tools"; then \
+	  : ; \
+	else \
+	  if test "$(PACKAGE)" = "gettext-runtime"; then \
+	    additional="$(DISTFILES.gettext)"; \
+	  else \
+	    additional="$(DISTFILES.normal)"; \
+	  fi; \
+	  $(MAKE) $(DISTFILES.common) $(DISTFILES.generated) $$additional; \
+	  for file in ChangeLog $(DISTFILES.common) $(DISTFILES.generated) $$additional; do \
+	    if test -f $$file; then dir=.; else dir=$(srcdir); fi; \
+	    cp -p $$dir/$$file $(distdir) || test $$file = Makefile.in || exit 1; \
+	  done; \
+	fi
+
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	cd $(top_builddir) && $(SHELL) ./config.status
+# This would be more efficient, but doesn't work any more with autoconf-2.57,
+# when AC_CONFIG_FILES([intl/Makefile:somedir/Makefile.in]) is used.
+#	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@
+
+# Tell versions [3.59,3.63) of GNU make not to export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/intl/VERSION b/intl/VERSION
new file mode 100644
index 0000000..889d4e9
--- /dev/null
+++ b/intl/VERSION
@@ -0,0 +1 @@
+GNU gettext library from gettext-0.17
diff --git a/intl/bindtextdom.c b/intl/bindtextdom.c
new file mode 100644
index 0000000..dab5d4f
--- /dev/null
+++ b/intl/bindtextdom.c
@@ -0,0 +1,340 @@
+/* Implementation of the bindtextdomain(3) function
+   Copyright (C) 1995-1998, 2000-2003, 2005-2006 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "gettextP.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+
+/* Handle multi-threaded applications.  */
+#ifdef _LIBC
+# include <bits/libc-lock.h>
+# define gl_rwlock_define __libc_rwlock_define
+# define gl_rwlock_wrlock __libc_rwlock_wrlock
+# define gl_rwlock_unlock __libc_rwlock_unlock
+#else
+# include "lock.h"
+#endif
+
+/* Some compilers, like SunOS4 cc, don't have offsetof in <stddef.h>.  */
+#ifndef offsetof
+# define offsetof(type,ident) ((size_t)&(((type*)0)->ident))
+#endif
+
+/* @@ end of prolog @@ */
+
+/* Lock variable to protect the global data in the gettext implementation.  */
+gl_rwlock_define (extern, _nl_state_lock attribute_hidden)
+
+
+/* Names for the libintl functions are a problem.  They must not clash
+   with existing names and they should follow ANSI C.  But this source
+   code is also used in GNU C Library where the names have a __
+   prefix.  So we have to make a difference here.  */
+#ifdef _LIBC
+# define BINDTEXTDOMAIN __bindtextdomain
+# define BIND_TEXTDOMAIN_CODESET __bind_textdomain_codeset
+# ifndef strdup
+#  define strdup(str) __strdup (str)
+# endif
+#else
+# define BINDTEXTDOMAIN libintl_bindtextdomain
+# define BIND_TEXTDOMAIN_CODESET libintl_bind_textdomain_codeset
+#endif
+
+/* Specifies the directory name *DIRNAMEP and the output codeset *CODESETP
+   to be used for the DOMAINNAME message catalog.
+   If *DIRNAMEP or *CODESETP is NULL, the corresponding attribute is not
+   modified, only the current value is returned.
+   If DIRNAMEP or CODESETP is NULL, the corresponding attribute is neither
+   modified nor returned.  */
+static void
+set_binding_values (const char *domainname,
+		    const char **dirnamep, const char **codesetp)
+{
+  struct binding *binding;
+  int modified;
+
+  /* Some sanity checks.  */
+  if (domainname == NULL || domainname[0] == '\0')
+    {
+      if (dirnamep)
+	*dirnamep = NULL;
+      if (codesetp)
+	*codesetp = NULL;
+      return;
+    }
+
+  gl_rwlock_wrlock (_nl_state_lock);
+
+  modified = 0;
+
+  for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next)
+    {
+      int compare = strcmp (domainname, binding->domainname);
+      if (compare == 0)
+	/* We found it!  */
+	break;
+      if (compare < 0)
+	{
+	  /* It is not in the list.  */
+	  binding = NULL;
+	  break;
+	}
+    }
+
+  if (binding != NULL)
+    {
+      if (dirnamep)
+	{
+	  const char *dirname = *dirnamep;
+
+	  if (dirname == NULL)
+	    /* The current binding has be to returned.  */
+	    *dirnamep = binding->dirname;
+	  else
+	    {
+	      /* The domain is already bound.  If the new value and the old
+		 one are equal we simply do nothing.  Otherwise replace the
+		 old binding.  */
+	      char *result = binding->dirname;
+	      if (strcmp (dirname, result) != 0)
+		{
+		  if (strcmp (dirname, _nl_default_dirname) == 0)
+		    result = (char *) _nl_default_dirname;
+		  else
+		    {
+#if defined _LIBC || defined HAVE_STRDUP
+		      result = strdup (dirname);
+#else
+		      size_t len = strlen (dirname) + 1;
+		      result = (char *) malloc (len);
+		      if (__builtin_expect (result != NULL, 1))
+			memcpy (result, dirname, len);
+#endif
+		    }
+
+		  if (__builtin_expect (result != NULL, 1))
+		    {
+		      if (binding->dirname != _nl_default_dirname)
+			free (binding->dirname);
+
+		      binding->dirname = result;
+		      modified = 1;
+		    }
+		}
+	      *dirnamep = result;
+	    }
+	}
+
+      if (codesetp)
+	{
+	  const char *codeset = *codesetp;
+
+	  if (codeset == NULL)
+	    /* The current binding has be to returned.  */
+	    *codesetp = binding->codeset;
+	  else
+	    {
+	      /* The domain is already bound.  If the new value and the old
+		 one are equal we simply do nothing.  Otherwise replace the
+		 old binding.  */
+	      char *result = binding->codeset;
+	      if (result == NULL || strcmp (codeset, result) != 0)
+		{
+#if defined _LIBC || defined HAVE_STRDUP
+		  result = strdup (codeset);
+#else
+		  size_t len = strlen (codeset) + 1;
+		  result = (char *) malloc (len);
+		  if (__builtin_expect (result != NULL, 1))
+		    memcpy (result, codeset, len);
+#endif
+
+		  if (__builtin_expect (result != NULL, 1))
+		    {
+		      if (binding->codeset != NULL)
+			free (binding->codeset);
+
+		      binding->codeset = result;
+		      modified = 1;
+		    }
+		}
+	      *codesetp = result;
+	    }
+	}
+    }
+  else if ((dirnamep == NULL || *dirnamep == NULL)
+	   && (codesetp == NULL || *codesetp == NULL))
+    {
+      /* Simply return the default values.  */
+      if (dirnamep)
+	*dirnamep = _nl_default_dirname;
+      if (codesetp)
+	*codesetp = NULL;
+    }
+  else
+    {
+      /* We have to create a new binding.  */
+      size_t len = strlen (domainname) + 1;
+      struct binding *new_binding =
+	(struct binding *) malloc (offsetof (struct binding, domainname) + len);
+
+      if (__builtin_expect (new_binding == NULL, 0))
+	goto failed;
+
+      memcpy (new_binding->domainname, domainname, len);
+
+      if (dirnamep)
+	{
+	  const char *dirname = *dirnamep;
+
+	  if (dirname == NULL)
+	    /* The default value.  */
+	    dirname = _nl_default_dirname;
+	  else
+	    {
+	      if (strcmp (dirname, _nl_default_dirname) == 0)
+		dirname = _nl_default_dirname;
+	      else
+		{
+		  char *result;
+#if defined _LIBC || defined HAVE_STRDUP
+		  result = strdup (dirname);
+		  if (__builtin_expect (result == NULL, 0))
+		    goto failed_dirname;
+#else
+		  size_t len = strlen (dirname) + 1;
+		  result = (char *) malloc (len);
+		  if (__builtin_expect (result == NULL, 0))
+		    goto failed_dirname;
+		  memcpy (result, dirname, len);
+#endif
+		  dirname = result;
+		}
+	    }
+	  *dirnamep = dirname;
+	  new_binding->dirname = (char *) dirname;
+	}
+      else
+	/* The default value.  */
+	new_binding->dirname = (char *) _nl_default_dirname;
+
+      if (codesetp)
+	{
+	  const char *codeset = *codesetp;
+
+	  if (codeset != NULL)
+	    {
+	      char *result;
+
+#if defined _LIBC || defined HAVE_STRDUP
+	      result = strdup (codeset);
+	      if (__builtin_expect (result == NULL, 0))
+		goto failed_codeset;
+#else
+	      size_t len = strlen (codeset) + 1;
+	      result = (char *) malloc (len);
+	      if (__builtin_expect (result == NULL, 0))
+		goto failed_codeset;
+	      memcpy (result, codeset, len);
+#endif
+	      codeset = result;
+	    }
+	  *codesetp = codeset;
+	  new_binding->codeset = (char *) codeset;
+	}
+      else
+	new_binding->codeset = NULL;
+
+      /* Now enqueue it.  */
+      if (_nl_domain_bindings == NULL
+	  || strcmp (domainname, _nl_domain_bindings->domainname) < 0)
+	{
+	  new_binding->next = _nl_domain_bindings;
+	  _nl_domain_bindings = new_binding;
+	}
+      else
+	{
+	  binding = _nl_domain_bindings;
+	  while (binding->next != NULL
+		 && strcmp (domainname, binding->next->domainname) > 0)
+	    binding = binding->next;
+
+	  new_binding->next = binding->next;
+	  binding->next = new_binding;
+	}
+
+      modified = 1;
+
+      /* Here we deal with memory allocation failures.  */
+      if (0)
+	{
+	failed_codeset:
+	  if (new_binding->dirname != _nl_default_dirname)
+	    free (new_binding->dirname);
+	failed_dirname:
+	  free (new_binding);
+	failed:
+	  if (dirnamep)
+	    *dirnamep = NULL;
+	  if (codesetp)
+	    *codesetp = NULL;
+	}
+    }
+
+  /* If we modified any binding, we flush the caches.  */
+  if (modified)
+    ++_nl_msg_cat_cntr;
+
+  gl_rwlock_unlock (_nl_state_lock);
+}
+
+/* Specify that the DOMAINNAME message catalog will be found
+   in DIRNAME rather than in the system locale data base.  */
+char *
+BINDTEXTDOMAIN (const char *domainname, const char *dirname)
+{
+  set_binding_values (domainname, &dirname, NULL);
+  return (char *) dirname;
+}
+
+/* Specify the character encoding in which the messages from the
+   DOMAINNAME message catalog will be returned.  */
+char *
+BIND_TEXTDOMAIN_CODESET (const char *domainname, const char *codeset)
+{
+  set_binding_values (domainname, NULL, &codeset);
+  return (char *) codeset;
+}
+
+#ifdef _LIBC
+/* Aliases for function names in GNU C Library.  */
+weak_alias (__bindtextdomain, bindtextdomain);
+weak_alias (__bind_textdomain_codeset, bind_textdomain_codeset);
+#endif
diff --git a/intl/config.charset b/intl/config.charset
new file mode 100755
index 0000000..e8c258b
--- /dev/null
+++ b/intl/config.charset
@@ -0,0 +1,640 @@
+#! /bin/sh
+# Output a system dependent table of character encoding aliases.
+#
+#   Copyright (C) 2000-2004, 2006 Free Software Foundation, Inc.
+#
+#   This program is free software; you can redistribute it and/or modify it
+#   under the terms of the GNU Library General Public License as published
+#   by the Free Software Foundation; either version 2, 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
+#   Library General Public License for more details.
+#
+#   You should have received a copy of the GNU Library General Public
+#   License along with this program; if not, write to the Free Software
+#   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+#   USA.
+#
+# The table consists of lines of the form
+#    ALIAS  CANONICAL
+#
+# ALIAS is the (system dependent) result of "nl_langinfo (CODESET)".
+# ALIAS is compared in a case sensitive way.
+#
+# CANONICAL is the GNU canonical name for this character encoding.
+# It must be an encoding supported by libiconv. Support by GNU libc is
+# also desirable. CANONICAL is case insensitive. Usually an upper case
+# MIME charset name is preferred.
+# The current list of GNU canonical charset names is as follows.
+#
+#       name              MIME?             used by which systems
+#   ASCII, ANSI_X3.4-1968       glibc solaris freebsd netbsd darwin
+#   ISO-8859-1              Y   glibc aix hpux irix osf solaris freebsd netbsd darwin
+#   ISO-8859-2              Y   glibc aix hpux irix osf solaris freebsd netbsd darwin
+#   ISO-8859-3              Y   glibc solaris
+#   ISO-8859-4              Y   osf solaris freebsd netbsd darwin
+#   ISO-8859-5              Y   glibc aix hpux irix osf solaris freebsd netbsd darwin
+#   ISO-8859-6              Y   glibc aix hpux solaris
+#   ISO-8859-7              Y   glibc aix hpux irix osf solaris netbsd darwin
+#   ISO-8859-8              Y   glibc aix hpux osf solaris
+#   ISO-8859-9              Y   glibc aix hpux irix osf solaris darwin
+#   ISO-8859-13                 glibc netbsd darwin
+#   ISO-8859-14                 glibc
+#   ISO-8859-15                 glibc aix osf solaris freebsd darwin
+#   KOI8-R                  Y   glibc solaris freebsd netbsd darwin
+#   KOI8-U                  Y   glibc freebsd netbsd darwin
+#   KOI8-T                      glibc
+#   CP437                       dos
+#   CP775                       dos
+#   CP850                       aix osf dos
+#   CP852                       dos
+#   CP855                       dos
+#   CP856                       aix
+#   CP857                       dos
+#   CP861                       dos
+#   CP862                       dos
+#   CP864                       dos
+#   CP865                       dos
+#   CP866                       freebsd netbsd darwin dos
+#   CP869                       dos
+#   CP874                       woe32 dos
+#   CP922                       aix
+#   CP932                       aix woe32 dos
+#   CP943                       aix
+#   CP949                       osf woe32 dos
+#   CP950                       woe32 dos
+#   CP1046                      aix
+#   CP1124                      aix
+#   CP1125                      dos
+#   CP1129                      aix
+#   CP1250                      woe32
+#   CP1251                      glibc solaris netbsd darwin woe32
+#   CP1252                      aix woe32
+#   CP1253                      woe32
+#   CP1254                      woe32
+#   CP1255                      glibc woe32
+#   CP1256                      woe32
+#   CP1257                      woe32
+#   GB2312                  Y   glibc aix hpux irix solaris freebsd netbsd darwin
+#   EUC-JP                  Y   glibc aix hpux irix osf solaris freebsd netbsd darwin
+#   EUC-KR                  Y   glibc aix hpux irix osf solaris freebsd netbsd darwin
+#   EUC-TW                      glibc aix hpux irix osf solaris netbsd
+#   BIG5                    Y   glibc aix hpux osf solaris freebsd netbsd darwin
+#   BIG5-HKSCS                  glibc solaris
+#   GBK                         glibc aix osf solaris woe32 dos
+#   GB18030                     glibc solaris netbsd
+#   SHIFT_JIS               Y   hpux osf solaris freebsd netbsd darwin
+#   JOHAB                       glibc solaris woe32
+#   TIS-620                     glibc aix hpux osf solaris
+#   VISCII                  Y   glibc
+#   TCVN5712-1                  glibc
+#   GEORGIAN-PS                 glibc
+#   HP-ROMAN8                   hpux
+#   HP-ARABIC8                  hpux
+#   HP-GREEK8                   hpux
+#   HP-HEBREW8                  hpux
+#   HP-TURKISH8                 hpux
+#   HP-KANA8                    hpux
+#   DEC-KANJI                   osf
+#   DEC-HANYU                   osf
+#   UTF-8                   Y   glibc aix hpux osf solaris netbsd darwin
+#
+# Note: Names which are not marked as being a MIME name should not be used in
+# Internet protocols for information interchange (mail, news, etc.).
+#
+# Note: ASCII and ANSI_X3.4-1968 are synonymous canonical names. Applications
+# must understand both names and treat them as equivalent.
+#
+# The first argument passed to this file is the canonical host specification,
+#    CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or
+#    CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+
+host="$1"
+os=`echo "$host" | sed -e 's/^[^-]*-[^-]*-\(.*\)$/\1/'`
+echo "# This file contains a table of character encoding aliases,"
+echo "# suitable for operating system '${os}'."
+echo "# It was automatically generated from config.charset."
+# List of references, updated during installation:
+echo "# Packages using this file: "
+case "$os" in
+    linux-gnulibc1*)
+	# Linux libc5 doesn't have nl_langinfo(CODESET); therefore
+	# localcharset.c falls back to using the full locale name
+	# from the environment variables.
+	echo "C ASCII"
+	echo "POSIX ASCII"
+	for l in af af_ZA ca ca_ES da da_DK de de_AT de_BE de_CH de_DE de_LU \
+	         en en_AU en_BW en_CA en_DK en_GB en_IE en_NZ en_US en_ZA \
+	         en_ZW es es_AR es_BO es_CL es_CO es_DO es_EC es_ES es_GT \
+	         es_HN es_MX es_PA es_PE es_PY es_SV es_US es_UY es_VE et \
+	         et_EE eu eu_ES fi fi_FI fo fo_FO fr fr_BE fr_CA fr_CH fr_FR \
+	         fr_LU ga ga_IE gl gl_ES id id_ID in in_ID is is_IS it it_CH \
+	         it_IT kl kl_GL nl nl_BE nl_NL no no_NO pt pt_BR pt_PT sv \
+	         sv_FI sv_SE; do
+	  echo "$l ISO-8859-1"
+	  echo "$l.iso-8859-1 ISO-8859-1"
+	  echo "$l.iso-8859-15 ISO-8859-15"
+	  echo "$l.iso-8859-15 at euro ISO-8859-15"
+	  echo "$l at euro ISO-8859-15"
+	  echo "$l.cp-437 CP437"
+	  echo "$l.cp-850 CP850"
+	  echo "$l.cp-1252 CP1252"
+	  echo "$l.cp-1252 at euro CP1252"
+	  #echo "$l.atari-st ATARI-ST" # not a commonly used encoding
+	  echo "$l.utf-8 UTF-8"
+	  echo "$l.utf-8 at euro UTF-8"
+	done
+	for l in cs cs_CZ hr hr_HR hu hu_HU pl pl_PL ro ro_RO sk sk_SK sl \
+	         sl_SI sr sr_CS sr_YU; do
+	  echo "$l ISO-8859-2"
+	  echo "$l.iso-8859-2 ISO-8859-2"
+	  echo "$l.cp-852 CP852"
+	  echo "$l.cp-1250 CP1250"
+	  echo "$l.utf-8 UTF-8"
+	done
+	for l in mk mk_MK ru ru_RU; do
+	  echo "$l ISO-8859-5"
+	  echo "$l.iso-8859-5 ISO-8859-5"
+	  echo "$l.koi8-r KOI8-R"
+	  echo "$l.cp-866 CP866"
+	  echo "$l.cp-1251 CP1251"
+	  echo "$l.utf-8 UTF-8"
+	done
+	for l in ar ar_SA; do
+	  echo "$l ISO-8859-6"
+	  echo "$l.iso-8859-6 ISO-8859-6"
+	  echo "$l.cp-864 CP864"
+	  #echo "$l.cp-868 CP868" # not a commonly used encoding
+	  echo "$l.cp-1256 CP1256"
+	  echo "$l.utf-8 UTF-8"
+	done
+	for l in el el_GR gr gr_GR; do
+	  echo "$l ISO-8859-7"
+	  echo "$l.iso-8859-7 ISO-8859-7"
+	  echo "$l.cp-869 CP869"
+	  echo "$l.cp-1253 CP1253"
+	  echo "$l.cp-1253 at euro CP1253"
+	  echo "$l.utf-8 UTF-8"
+	  echo "$l.utf-8 at euro UTF-8"
+	done
+	for l in he he_IL iw iw_IL; do
+	  echo "$l ISO-8859-8"
+	  echo "$l.iso-8859-8 ISO-8859-8"
+	  echo "$l.cp-862 CP862"
+	  echo "$l.cp-1255 CP1255"
+	  echo "$l.utf-8 UTF-8"
+	done
+	for l in tr tr_TR; do
+	  echo "$l ISO-8859-9"
+	  echo "$l.iso-8859-9 ISO-8859-9"
+	  echo "$l.cp-857 CP857"
+	  echo "$l.cp-1254 CP1254"
+	  echo "$l.utf-8 UTF-8"
+	done
+	for l in lt lt_LT lv lv_LV; do
+	  #echo "$l BALTIC" # not a commonly used encoding, wrong encoding name
+	  echo "$l ISO-8859-13"
+	done
+	for l in ru_UA uk uk_UA; do
+	  echo "$l KOI8-U"
+	done
+	for l in zh zh_CN; do
+	  #echo "$l GB_2312-80" # not a commonly used encoding, wrong encoding name
+	  echo "$l GB2312"
+	done
+	for l in ja ja_JP ja_JP.EUC; do
+	  echo "$l EUC-JP"
+	done
+	for l in ko ko_KR; do
+	  echo "$l EUC-KR"
+	done
+	for l in th th_TH; do
+	  echo "$l TIS-620"
+	done
+	for l in fa fa_IR; do
+	  #echo "$l ISIRI-3342" # a broken encoding
+	  echo "$l.utf-8 UTF-8"
+	done
+	;;
+    linux* | *-gnu*)
+	# With glibc-2.1 or newer, we don't need any canonicalization,
+	# because glibc has iconv and both glibc and libiconv support all
+	# GNU canonical names directly. Therefore, the Makefile does not
+	# need to install the alias file at all.
+	# The following applies only to glibc-2.0.x and older libcs.
+	echo "ISO_646.IRV:1983 ASCII"
+	;;
+    aix*)
+	echo "ISO8859-1 ISO-8859-1"
+	echo "ISO8859-2 ISO-8859-2"
+	echo "ISO8859-5 ISO-8859-5"
+	echo "ISO8859-6 ISO-8859-6"
+	echo "ISO8859-7 ISO-8859-7"
+	echo "ISO8859-8 ISO-8859-8"
+	echo "ISO8859-9 ISO-8859-9"
+	echo "ISO8859-15 ISO-8859-15"
+	echo "IBM-850 CP850"
+	echo "IBM-856 CP856"
+	echo "IBM-921 ISO-8859-13"
+	echo "IBM-922 CP922"
+	echo "IBM-932 CP932"
+	echo "IBM-943 CP943"
+	echo "IBM-1046 CP1046"
+	echo "IBM-1124 CP1124"
+	echo "IBM-1129 CP1129"
+	echo "IBM-1252 CP1252"
+	echo "IBM-eucCN GB2312"
+	echo "IBM-eucJP EUC-JP"
+	echo "IBM-eucKR EUC-KR"
+	echo "IBM-eucTW EUC-TW"
+	echo "big5 BIG5"
+	echo "GBK GBK"
+	echo "TIS-620 TIS-620"
+	echo "UTF-8 UTF-8"
+	;;
+    hpux*)
+	echo "iso88591 ISO-8859-1"
+	echo "iso88592 ISO-8859-2"
+	echo "iso88595 ISO-8859-5"
+	echo "iso88596 ISO-8859-6"
+	echo "iso88597 ISO-8859-7"
+	echo "iso88598 ISO-8859-8"
+	echo "iso88599 ISO-8859-9"
+	echo "iso885915 ISO-8859-15"
+	echo "roman8 HP-ROMAN8"
+	echo "arabic8 HP-ARABIC8"
+	echo "greek8 HP-GREEK8"
+	echo "hebrew8 HP-HEBREW8"
+	echo "turkish8 HP-TURKISH8"
+	echo "kana8 HP-KANA8"
+	echo "tis620 TIS-620"
+	echo "big5 BIG5"
+	echo "eucJP EUC-JP"
+	echo "eucKR EUC-KR"
+	echo "eucTW EUC-TW"
+	echo "hp15CN GB2312"
+	#echo "ccdc ?" # what is this?
+	echo "SJIS SHIFT_JIS"
+	echo "utf8 UTF-8"
+	;;
+    irix*)
+	echo "ISO8859-1 ISO-8859-1"
+	echo "ISO8859-2 ISO-8859-2"
+	echo "ISO8859-5 ISO-8859-5"
+	echo "ISO8859-7 ISO-8859-7"
+	echo "ISO8859-9 ISO-8859-9"
+	echo "eucCN GB2312"
+	echo "eucJP EUC-JP"
+	echo "eucKR EUC-KR"
+	echo "eucTW EUC-TW"
+	;;
+    osf*)
+	echo "ISO8859-1 ISO-8859-1"
+	echo "ISO8859-2 ISO-8859-2"
+	echo "ISO8859-4 ISO-8859-4"
+	echo "ISO8859-5 ISO-8859-5"
+	echo "ISO8859-7 ISO-8859-7"
+	echo "ISO8859-8 ISO-8859-8"
+	echo "ISO8859-9 ISO-8859-9"
+	echo "ISO8859-15 ISO-8859-15"
+	echo "cp850 CP850"
+	echo "big5 BIG5"
+	echo "dechanyu DEC-HANYU"
+	echo "dechanzi GB2312"
+	echo "deckanji DEC-KANJI"
+	echo "deckorean EUC-KR"
+	echo "eucJP EUC-JP"
+	echo "eucKR EUC-KR"
+	echo "eucTW EUC-TW"
+	echo "GBK GBK"
+	echo "KSC5601 CP949"
+	echo "sdeckanji EUC-JP"
+	echo "SJIS SHIFT_JIS"
+	echo "TACTIS TIS-620"
+	echo "UTF-8 UTF-8"
+	;;
+    solaris*)
+	echo "646 ASCII"
+	echo "ISO8859-1 ISO-8859-1"
+	echo "ISO8859-2 ISO-8859-2"
+	echo "ISO8859-3 ISO-8859-3"
+	echo "ISO8859-4 ISO-8859-4"
+	echo "ISO8859-5 ISO-8859-5"
+	echo "ISO8859-6 ISO-8859-6"
+	echo "ISO8859-7 ISO-8859-7"
+	echo "ISO8859-8 ISO-8859-8"
+	echo "ISO8859-9 ISO-8859-9"
+	echo "ISO8859-15 ISO-8859-15"
+	echo "koi8-r KOI8-R"
+	echo "ansi-1251 CP1251"
+	echo "BIG5 BIG5"
+	echo "Big5-HKSCS BIG5-HKSCS"
+	echo "gb2312 GB2312"
+	echo "GBK GBK"
+	echo "GB18030 GB18030"
+	echo "cns11643 EUC-TW"
+	echo "5601 EUC-KR"
+	echo "ko_KR.johap92 JOHAB"
+	echo "eucJP EUC-JP"
+	echo "PCK SHIFT_JIS"
+	echo "TIS620.2533 TIS-620"
+	#echo "sun_eu_greek ?" # what is this?
+	echo "UTF-8 UTF-8"
+	;;
+    freebsd* | os2*)
+	# FreeBSD 4.2 doesn't have nl_langinfo(CODESET); therefore
+	# localcharset.c falls back to using the full locale name
+	# from the environment variables.
+	# Likewise for OS/2. OS/2 has XFree86 just like FreeBSD. Just
+	# reuse FreeBSD's locale data for OS/2.
+	echo "C ASCII"
+	echo "US-ASCII ASCII"
+	for l in la_LN lt_LN; do
+	  echo "$l.ASCII ASCII"
+	done
+	for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \
+	         fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT la_LN \
+	         lt_LN nl_BE nl_NL no_NO pt_PT sv_SE; do
+	  echo "$l.ISO_8859-1 ISO-8859-1"
+	  echo "$l.DIS_8859-15 ISO-8859-15"
+	done
+	for l in cs_CZ hr_HR hu_HU la_LN lt_LN pl_PL sl_SI; do
+	  echo "$l.ISO_8859-2 ISO-8859-2"
+	done
+	for l in la_LN lt_LT; do
+	  echo "$l.ISO_8859-4 ISO-8859-4"
+	done
+	for l in ru_RU ru_SU; do
+	  echo "$l.KOI8-R KOI8-R"
+	  echo "$l.ISO_8859-5 ISO-8859-5"
+	  echo "$l.CP866 CP866"
+	done
+	echo "uk_UA.KOI8-U KOI8-U"
+	echo "zh_TW.BIG5 BIG5"
+	echo "zh_TW.Big5 BIG5"
+	echo "zh_CN.EUC GB2312"
+	echo "ja_JP.EUC EUC-JP"
+	echo "ja_JP.SJIS SHIFT_JIS"
+	echo "ja_JP.Shift_JIS SHIFT_JIS"
+	echo "ko_KR.EUC EUC-KR"
+	;;
+    netbsd*)
+	echo "646 ASCII"
+	echo "ISO8859-1 ISO-8859-1"
+	echo "ISO8859-2 ISO-8859-2"
+	echo "ISO8859-4 ISO-8859-4"
+	echo "ISO8859-5 ISO-8859-5"
+	echo "ISO8859-7 ISO-8859-7"
+	echo "ISO8859-13 ISO-8859-13"
+	echo "ISO8859-15 ISO-8859-15"
+	echo "eucCN GB2312"
+	echo "eucJP EUC-JP"
+	echo "eucKR EUC-KR"
+	echo "eucTW EUC-TW"
+	echo "BIG5 BIG5"
+	echo "SJIS SHIFT_JIS"
+	;;
+    darwin[56]*)
+	# Darwin 6.8 doesn't have nl_langinfo(CODESET); therefore
+	# localcharset.c falls back to using the full locale name
+	# from the environment variables.
+	echo "C ASCII"
+	for l in en_AU en_CA en_GB en_US la_LN; do
+	  echo "$l.US-ASCII ASCII"
+	done
+	for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \
+	         fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT nl_BE \
+	         nl_NL no_NO pt_PT sv_SE; do
+	  echo "$l ISO-8859-1"
+	  echo "$l.ISO8859-1 ISO-8859-1"
+	  echo "$l.ISO8859-15 ISO-8859-15"
+	done
+	for l in la_LN; do
+	  echo "$l.ISO8859-1 ISO-8859-1"
+	  echo "$l.ISO8859-15 ISO-8859-15"
+	done
+	for l in cs_CZ hr_HR hu_HU la_LN pl_PL sl_SI; do
+	  echo "$l.ISO8859-2 ISO-8859-2"
+	done
+	for l in la_LN lt_LT; do
+	  echo "$l.ISO8859-4 ISO-8859-4"
+	done
+	for l in ru_RU; do
+	  echo "$l.KOI8-R KOI8-R"
+	  echo "$l.ISO8859-5 ISO-8859-5"
+	  echo "$l.CP866 CP866"
+	done
+	for l in bg_BG; do
+	  echo "$l.CP1251 CP1251"
+	done
+	echo "uk_UA.KOI8-U KOI8-U"
+	echo "zh_TW.BIG5 BIG5"
+	echo "zh_TW.Big5 BIG5"
+	echo "zh_CN.EUC GB2312"
+	echo "ja_JP.EUC EUC-JP"
+	echo "ja_JP.SJIS SHIFT_JIS"
+	echo "ko_KR.EUC EUC-KR"
+	;;
+    darwin*)
+	# Darwin 7.5 has nl_langinfo(CODESET), but it is useless:
+	# - It returns the empty string when LANG is set to a locale of the
+	#   form ll_CC, although ll_CC/LC_CTYPE is a symlink to an UTF-8
+	#   LC_CTYPE file.
+	# - The environment variables LANG, LC_CTYPE, LC_ALL are not set by
+	#   the system; nl_langinfo(CODESET) returns "US-ASCII" in this case.
+	# - The documentation says:
+	#     "... all code that calls BSD system routines should ensure
+	#      that the const *char parameters of these routines are in UTF-8
+	#      encoding. All BSD system functions expect their string
+	#      parameters to be in UTF-8 encoding and nothing else."
+	#   It also says
+	#     "An additional caveat is that string parameters for files,
+	#      paths, and other file-system entities must be in canonical
+	#      UTF-8. In a canonical UTF-8 Unicode string, all decomposable
+	#      characters are decomposed ..."
+	#   but this is not true: You can pass non-decomposed UTF-8 strings
+	#   to file system functions, and it is the OS which will convert
+	#   them to decomposed UTF-8 before accessing the file system.
+	# - The Apple Terminal application displays UTF-8 by default.
+	# - However, other applications are free to use different encodings:
+	#   - xterm uses ISO-8859-1 by default.
+	#   - TextEdit uses MacRoman by default.
+	# We prefer UTF-8 over decomposed UTF-8-MAC because one should
+	# minimize the use of decomposed Unicode. Unfortunately, through the
+	# Darwin file system, decomposed UTF-8 strings are leaked into user
+	# space nevertheless.
+	echo "* UTF-8"
+	;;
+    beos*)
+	# BeOS has a single locale, and it has UTF-8 encoding.
+	echo "* UTF-8"
+	;;
+    msdosdjgpp*)
+	# DJGPP 2.03 doesn't have nl_langinfo(CODESET); therefore
+	# localcharset.c falls back to using the full locale name
+	# from the environment variables.
+	echo "#"
+	echo "# The encodings given here may not all be correct."
+	echo "# If you find that the encoding given for your language and"
+	echo "# country is not the one your DOS machine actually uses, just"
+	echo "# correct it in this file, and send a mail to"
+	echo "# Juan Manuel Guerrero <juan.guerrero at gmx.de>"
+	echo "# and Bruno Haible <bruno at clisp.org>."
+	echo "#"
+	echo "C ASCII"
+	# ISO-8859-1 languages
+	echo "ca CP850"
+	echo "ca_ES CP850"
+	echo "da CP865"    # not CP850 ??
+	echo "da_DK CP865" # not CP850 ??
+	echo "de CP850"
+	echo "de_AT CP850"
+	echo "de_CH CP850"
+	echo "de_DE CP850"
+	echo "en CP850"
+	echo "en_AU CP850" # not CP437 ??
+	echo "en_CA CP850"
+	echo "en_GB CP850"
+	echo "en_NZ CP437"
+	echo "en_US CP437"
+	echo "en_ZA CP850" # not CP437 ??
+	echo "es CP850"
+	echo "es_AR CP850"
+	echo "es_BO CP850"
+	echo "es_CL CP850"
+	echo "es_CO CP850"
+	echo "es_CR CP850"
+	echo "es_CU CP850"
+	echo "es_DO CP850"
+	echo "es_EC CP850"
+	echo "es_ES CP850"
+	echo "es_GT CP850"
+	echo "es_HN CP850"
+	echo "es_MX CP850"
+	echo "es_NI CP850"
+	echo "es_PA CP850"
+	echo "es_PY CP850"
+	echo "es_PE CP850"
+	echo "es_SV CP850"
+	echo "es_UY CP850"
+	echo "es_VE CP850"
+	echo "et CP850"
+	echo "et_EE CP850"
+	echo "eu CP850"
+	echo "eu_ES CP850"
+	echo "fi CP850"
+	echo "fi_FI CP850"
+	echo "fr CP850"
+	echo "fr_BE CP850"
+	echo "fr_CA CP850"
+	echo "fr_CH CP850"
+	echo "fr_FR CP850"
+	echo "ga CP850"
+	echo "ga_IE CP850"
+	echo "gd CP850"
+	echo "gd_GB CP850"
+	echo "gl CP850"
+	echo "gl_ES CP850"
+	echo "id CP850"    # not CP437 ??
+	echo "id_ID CP850" # not CP437 ??
+	echo "is CP861"    # not CP850 ??
+	echo "is_IS CP861" # not CP850 ??
+	echo "it CP850"
+	echo "it_CH CP850"
+	echo "it_IT CP850"
+	echo "lt CP775"
+	echo "lt_LT CP775"
+	echo "lv CP775"
+	echo "lv_LV CP775"
+	echo "nb CP865"    # not CP850 ??
+	echo "nb_NO CP865" # not CP850 ??
+	echo "nl CP850"
+	echo "nl_BE CP850"
+	echo "nl_NL CP850"
+	echo "nn CP865"    # not CP850 ??
+	echo "nn_NO CP865" # not CP850 ??
+	echo "no CP865"    # not CP850 ??
+	echo "no_NO CP865" # not CP850 ??
+	echo "pt CP850"
+	echo "pt_BR CP850"
+	echo "pt_PT CP850"
+	echo "sv CP850"
+	echo "sv_SE CP850"
+	# ISO-8859-2 languages
+	echo "cs CP852"
+	echo "cs_CZ CP852"
+	echo "hr CP852"
+	echo "hr_HR CP852"
+	echo "hu CP852"
+	echo "hu_HU CP852"
+	echo "pl CP852"
+	echo "pl_PL CP852"
+	echo "ro CP852"
+	echo "ro_RO CP852"
+	echo "sk CP852"
+	echo "sk_SK CP852"
+	echo "sl CP852"
+	echo "sl_SI CP852"
+	echo "sq CP852"
+	echo "sq_AL CP852"
+	echo "sr CP852"    # CP852 or CP866 or CP855 ??
+	echo "sr_CS CP852" # CP852 or CP866 or CP855 ??
+	echo "sr_YU CP852" # CP852 or CP866 or CP855 ??
+	# ISO-8859-3 languages
+	echo "mt CP850"
+	echo "mt_MT CP850"
+	# ISO-8859-5 languages
+	echo "be CP866"
+	echo "be_BE CP866"
+	echo "bg CP866"    # not CP855 ??
+	echo "bg_BG CP866" # not CP855 ??
+	echo "mk CP866"    # not CP855 ??
+	echo "mk_MK CP866" # not CP855 ??
+	echo "ru CP866"
+	echo "ru_RU CP866"
+	echo "uk CP1125"
+	echo "uk_UA CP1125"
+	# ISO-8859-6 languages
+	echo "ar CP864"
+	echo "ar_AE CP864"
+	echo "ar_DZ CP864"
+	echo "ar_EG CP864"
+	echo "ar_IQ CP864"
+	echo "ar_IR CP864"
+	echo "ar_JO CP864"
+	echo "ar_KW CP864"
+	echo "ar_MA CP864"
+	echo "ar_OM CP864"
+	echo "ar_QA CP864"
+	echo "ar_SA CP864"
+	echo "ar_SY CP864"
+	# ISO-8859-7 languages
+	echo "el CP869"
+	echo "el_GR CP869"
+	# ISO-8859-8 languages
+	echo "he CP862"
+	echo "he_IL CP862"
+	# ISO-8859-9 languages
+	echo "tr CP857"
+	echo "tr_TR CP857"
+	# Japanese
+	echo "ja CP932"
+	echo "ja_JP CP932"
+	# Chinese
+	echo "zh_CN GBK"
+	echo "zh_TW CP950" # not CP938 ??
+	# Korean
+	echo "kr CP949"    # not CP934 ??
+	echo "kr_KR CP949" # not CP934 ??
+	# Thai
+	echo "th CP874"
+	echo "th_TH CP874"
+	# Other
+	echo "eo CP850"
+	echo "eo_EO CP850"
+	;;
+esac
diff --git a/intl/dcgettext.c b/intl/dcgettext.c
new file mode 100644
index 0000000..c2a63f0
--- /dev/null
+++ b/intl/dcgettext.c
@@ -0,0 +1,56 @@
+/* Implementation of the dcgettext(3) function.
+   Copyright (C) 1995-1999, 2000-2003 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "gettextP.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+
+/* @@ end of prolog @@ */
+
+/* Names for the libintl functions are a problem.  They must not clash
+   with existing names and they should follow ANSI C.  But this source
+   code is also used in GNU C Library where the names have a __
+   prefix.  So we have to make a difference here.  */
+#ifdef _LIBC
+# define DCGETTEXT __dcgettext
+# define DCIGETTEXT __dcigettext
+#else
+# define DCGETTEXT libintl_dcgettext
+# define DCIGETTEXT libintl_dcigettext
+#endif
+
+/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
+   locale.  */
+char *
+DCGETTEXT (const char *domainname, const char *msgid, int category)
+{
+  return DCIGETTEXT (domainname, msgid, NULL, 0, 0, category);
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library.  */
+INTDEF(__dcgettext)
+weak_alias (__dcgettext, dcgettext);
+#endif
diff --git a/intl/dcigettext.c b/intl/dcigettext.c
new file mode 100644
index 0000000..623e51d
--- /dev/null
+++ b/intl/dcigettext.c
@@ -0,0 +1,1689 @@
+/* Implementation of the internal dcigettext function.
+   Copyright (C) 1995-1999, 2000-2007 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+/* Tell glibc's <string.h> to provide a prototype for mempcpy().
+   This must come before <config.h> because <config.h> may include
+   <features.h>, and once <features.h> has been included, it's too late.  */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE	1
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+/* NL_LOCALE_NAME does not work in glibc-2.4.  Ignore it.  */
+#undef HAVE_NL_LOCALE_NAME
+
+#include <sys/types.h>
+
+#ifdef __GNUC__
+# define alloca __builtin_alloca
+# define HAVE_ALLOCA 1
+#else
+# ifdef _MSC_VER
+#  include <malloc.h>
+#  define alloca _alloca
+# else
+#  if defined HAVE_ALLOCA_H || defined _LIBC
+#   include <alloca.h>
+#  else
+#   ifdef _AIX
+ #pragma alloca
+#   else
+#    ifndef alloca
+char *alloca ();
+#    endif
+#   endif
+#  endif
+# endif
+#endif
+
+#include <errno.h>
+#ifndef errno
+extern int errno;
+#endif
+#ifndef __set_errno
+# define __set_errno(val) errno = (val)
+#endif
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
+
+#if defined HAVE_UNISTD_H || defined _LIBC
+# include <unistd.h>
+#endif
+
+#include <locale.h>
+
+#ifdef _LIBC
+  /* Guess whether integer division by zero raises signal SIGFPE.
+     Set to 1 only if you know for sure.  In case of doubt, set to 0.  */
+# if defined __alpha__ || defined __arm__ || defined __i386__ \
+     || defined __m68k__ || defined __s390__
+#  define INTDIV0_RAISES_SIGFPE 1
+# else
+#  define INTDIV0_RAISES_SIGFPE 0
+# endif
+#endif
+#if !INTDIV0_RAISES_SIGFPE
+# include <signal.h>
+#endif
+
+#if defined HAVE_SYS_PARAM_H || defined _LIBC
+# include <sys/param.h>
+#endif
+
+#if !defined _LIBC
+# if HAVE_NL_LOCALE_NAME
+#  include <langinfo.h>
+# endif
+# include "localcharset.h"
+#endif
+
+#include "gettextP.h"
+#include "plural-exp.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# ifdef IN_LIBGLOCALE
+#  include <libintl.h>
+# endif
+# include "libgnuintl.h"
+#endif
+#include "hash-string.h"
+
+/* Handle multi-threaded applications.  */
+#ifdef _LIBC
+# include <bits/libc-lock.h>
+# define gl_rwlock_define_initialized __libc_rwlock_define_initialized
+# define gl_rwlock_rdlock __libc_rwlock_rdlock
+# define gl_rwlock_wrlock __libc_rwlock_wrlock
+# define gl_rwlock_unlock __libc_rwlock_unlock
+#else
+# include "lock.h"
+#endif
+
+/* Alignment of types.  */
+#if defined __GNUC__ && __GNUC__ >= 2
+# define alignof(TYPE) __alignof__ (TYPE)
+#else
+# define alignof(TYPE) \
+    ((int) &((struct { char dummy1; TYPE dummy2; } *) 0)->dummy2)
+#endif
+
+/* Some compilers, like SunOS4 cc, don't have offsetof in <stddef.h>.  */
+#ifndef offsetof
+# define offsetof(type,ident) ((size_t)&(((type*)0)->ident))
+#endif
+
+/* @@ end of prolog @@ */
+
+#ifdef _LIBC
+/* Rename the non ANSI C functions.  This is required by the standard
+   because some ANSI C functions will require linking with this object
+   file and the name space must not be polluted.  */
+# define getcwd __getcwd
+# ifndef stpcpy
+#  define stpcpy __stpcpy
+# endif
+# define tfind __tfind
+#else
+# if !defined HAVE_GETCWD
+char *getwd ();
+#  define getcwd(buf, max) getwd (buf)
+# else
+#  if VMS
+#   define getcwd(buf, max) (getcwd) (buf, max, 0)
+#  else
+char *getcwd ();
+#  endif
+# endif
+# ifndef HAVE_STPCPY
+static char *stpcpy (char *dest, const char *src);
+# endif
+# ifndef HAVE_MEMPCPY
+static void *mempcpy (void *dest, const void *src, size_t n);
+# endif
+#endif
+
+/* Use a replacement if the system does not provide the `tsearch' function
+   family.  */
+#if HAVE_TSEARCH || defined _LIBC
+# include <search.h>
+#else
+# define tsearch libintl_tsearch
+# define tfind libintl_tfind
+# define tdelete libintl_tdelete
+# define twalk libintl_twalk
+# include "tsearch.h"
+#endif
+
+#ifdef _LIBC
+# define tsearch __tsearch
+#endif
+
+/* Amount to increase buffer size by in each try.  */
+#define PATH_INCR 32
+
+/* The following is from pathmax.h.  */
+/* Non-POSIX BSD systems might have gcc's limits.h, which doesn't define
+   PATH_MAX but might cause redefinition warnings when sys/param.h is
+   later included (as on MORE/BSD 4.3).  */
+#if defined _POSIX_VERSION || (defined HAVE_LIMITS_H && !defined __GNUC__)
+# include <limits.h>
+#endif
+
+#ifndef _POSIX_PATH_MAX
+# define _POSIX_PATH_MAX 255
+#endif
+
+#if !defined PATH_MAX && defined _PC_PATH_MAX
+# define PATH_MAX (pathconf ("/", _PC_PATH_MAX) < 1 ? 1024 : pathconf ("/", _PC_PATH_MAX))
+#endif
+
+/* Don't include sys/param.h if it already has been.  */
+#if defined HAVE_SYS_PARAM_H && !defined PATH_MAX && !defined MAXPATHLEN
+# include <sys/param.h>
+#endif
+
+#if !defined PATH_MAX && defined MAXPATHLEN
+# define PATH_MAX MAXPATHLEN
+#endif
+
+#ifndef PATH_MAX
+# define PATH_MAX _POSIX_PATH_MAX
+#endif
+
+/* Pathname support.
+   ISSLASH(C)           tests whether C is a directory separator character.
+   IS_ABSOLUTE_PATH(P)  tests whether P is an absolute path.  If it is not,
+                        it may be concatenated to a directory pathname.
+   IS_PATH_WITH_DIR(P)  tests whether P contains a directory specification.
+ */
+#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__
+  /* Win32, Cygwin, OS/2, DOS */
+# define ISSLASH(C) ((C) == '/' || (C) == '\\')
+# define HAS_DEVICE(P) \
+    ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \
+     && (P)[1] == ':')
+# define IS_ABSOLUTE_PATH(P) (ISSLASH ((P)[0]) || HAS_DEVICE (P))
+# define IS_PATH_WITH_DIR(P) \
+    (strchr (P, '/') != NULL || strchr (P, '\\') != NULL || HAS_DEVICE (P))
+#else
+  /* Unix */
+# define ISSLASH(C) ((C) == '/')
+# define IS_ABSOLUTE_PATH(P) ISSLASH ((P)[0])
+# define IS_PATH_WITH_DIR(P) (strchr (P, '/') != NULL)
+#endif
+
+/* Whether to support different locales in different threads.  */
+#if defined _LIBC || HAVE_NL_LOCALE_NAME || (HAVE_STRUCT___LOCALE_STRUCT___NAMES && defined USE_IN_GETTEXT_TESTS) || defined IN_LIBGLOCALE
+# define HAVE_PER_THREAD_LOCALE
+#endif
+
+/* This is the type used for the search tree where known translations
+   are stored.  */
+struct known_translation_t
+{
+  /* Domain in which to search.  */
+  const char *domainname;
+
+  /* The category.  */
+  int category;
+
+#ifdef HAVE_PER_THREAD_LOCALE
+  /* Name of the relevant locale category, or "" for the global locale.  */
+  const char *localename;
+#endif
+
+#ifdef IN_LIBGLOCALE
+  /* The character encoding.  */
+  const char *encoding;
+#endif
+
+  /* State of the catalog counter at the point the string was found.  */
+  int counter;
+
+  /* Catalog where the string was found.  */
+  struct loaded_l10nfile *domain;
+
+  /* And finally the translation.  */
+  const char *translation;
+  size_t translation_length;
+
+  /* Pointer to the string in question.  */
+  char msgid[ZERO];
+};
+
+gl_rwlock_define_initialized (static, tree_lock)
+
+/* Root of the search tree with known translations.  */
+static void *root;
+
+/* Function to compare two entries in the table of known translations.  */
+static int
+transcmp (const void *p1, const void *p2)
+{
+  const struct known_translation_t *s1;
+  const struct known_translation_t *s2;
+  int result;
+
+  s1 = (const struct known_translation_t *) p1;
+  s2 = (const struct known_translation_t *) p2;
+
+  result = strcmp (s1->msgid, s2->msgid);
+  if (result == 0)
+    {
+      result = strcmp (s1->domainname, s2->domainname);
+      if (result == 0)
+	{
+#ifdef HAVE_PER_THREAD_LOCALE
+	  result = strcmp (s1->localename, s2->localename);
+	  if (result == 0)
+#endif
+	    {
+#ifdef IN_LIBGLOCALE
+	      result = strcmp (s1->encoding, s2->encoding);
+	      if (result == 0)
+#endif
+		/* We compare the category last (though this is the cheapest
+		   operation) since it is hopefully always the same (namely
+		   LC_MESSAGES).  */
+		result = s1->category - s2->category;
+	    }
+	}
+    }
+
+  return result;
+}
+
+/* Name of the default domain used for gettext(3) prior any call to
+   textdomain(3).  The default value for this is "messages".  */
+const char _nl_default_default_domain[] attribute_hidden = "messages";
+
+#ifndef IN_LIBGLOCALE
+/* Value used as the default domain for gettext(3).  */
+const char *_nl_current_default_domain attribute_hidden
+     = _nl_default_default_domain;
+#endif
+
+/* Contains the default location of the message catalogs.  */
+#if defined __EMX__
+extern const char _nl_default_dirname[];
+#else
+# ifdef _LIBC
+extern const char _nl_default_dirname[];
+libc_hidden_proto (_nl_default_dirname)
+# endif
+const char _nl_default_dirname[] = LOCALEDIR;
+# ifdef _LIBC
+libc_hidden_data_def (_nl_default_dirname)
+# endif
+#endif
+
+#ifndef IN_LIBGLOCALE
+/* List with bindings of specific domains created by bindtextdomain()
+   calls.  */
+struct binding *_nl_domain_bindings;
+#endif
+
+/* Prototypes for local functions.  */
+static char *plural_lookup (struct loaded_l10nfile *domain,
+			    unsigned long int n,
+			    const char *translation, size_t translation_len)
+     internal_function;
+
+#ifdef IN_LIBGLOCALE
+static const char *guess_category_value (int category,
+					 const char *categoryname,
+					 const char *localename)
+     internal_function;
+#else
+static const char *guess_category_value (int category,
+					 const char *categoryname)
+     internal_function;
+#endif
+
+#ifdef _LIBC
+# include "../locale/localeinfo.h"
+# define category_to_name(category) \
+  _nl_category_names.str + _nl_category_name_idxs[category]
+#else
+static const char *category_to_name (int category) internal_function;
+#endif
+#if (defined _LIBC || HAVE_ICONV) && !defined IN_LIBGLOCALE
+static const char *get_output_charset (struct binding *domainbinding)
+     internal_function;
+#endif
+
+
+/* For those loosing systems which don't have `alloca' we have to add
+   some additional code emulating it.  */
+#ifdef HAVE_ALLOCA
+/* Nothing has to be done.  */
+# define freea(p) /* nothing */
+# define ADD_BLOCK(list, address) /* nothing */
+# define FREE_BLOCKS(list) /* nothing */
+#else
+struct block_list
+{
+  void *address;
+  struct block_list *next;
+};
+# define ADD_BLOCK(list, addr)						      \
+  do {									      \
+    struct block_list *newp = (struct block_list *) malloc (sizeof (*newp));  \
+    /* If we cannot get a free block we cannot add the new element to	      \
+       the list.  */							      \
+    if (newp != NULL) {							      \
+      newp->address = (addr);						      \
+      newp->next = (list);						      \
+      (list) = newp;							      \
+    }									      \
+  } while (0)
+# define FREE_BLOCKS(list)						      \
+  do {									      \
+    while (list != NULL) {						      \
+      struct block_list *old = list;					      \
+      list = list->next;						      \
+      free (old->address);						      \
+      free (old);							      \
+    }									      \
+  } while (0)
+# undef alloca
+# define alloca(size) (malloc (size))
+# define freea(p) free (p)
+#endif	/* have alloca */
+
+
+#ifdef _LIBC
+/* List of blocks allocated for translations.  */
+typedef struct transmem_list
+{
+  struct transmem_list *next;
+  char data[ZERO];
+} transmem_block_t;
+static struct transmem_list *transmem_list;
+#else
+typedef unsigned char transmem_block_t;
+#endif
+
+
+/* Names for the libintl functions are a problem.  They must not clash
+   with existing names and they should follow ANSI C.  But this source
+   code is also used in GNU C Library where the names have a __
+   prefix.  So we have to make a difference here.  */
+#ifdef _LIBC
+# define DCIGETTEXT __dcigettext
+#else
+# define DCIGETTEXT libintl_dcigettext
+#endif
+
+/* Lock variable to protect the global data in the gettext implementation.  */
+gl_rwlock_define_initialized (, _nl_state_lock attribute_hidden)
+
+/* Checking whether the binaries runs SUID must be done and glibc provides
+   easier methods therefore we make a difference here.  */
+#ifdef _LIBC
+# define ENABLE_SECURE __libc_enable_secure
+# define DETERMINE_SECURE
+#else
+# ifndef HAVE_GETUID
+#  define getuid() 0
+# endif
+# ifndef HAVE_GETGID
+#  define getgid() 0
+# endif
+# ifndef HAVE_GETEUID
+#  define geteuid() getuid()
+# endif
+# ifndef HAVE_GETEGID
+#  define getegid() getgid()
+# endif
+static int enable_secure;
+# define ENABLE_SECURE (enable_secure == 1)
+# define DETERMINE_SECURE \
+  if (enable_secure == 0)						      \
+    {									      \
+      if (getuid () != geteuid () || getgid () != getegid ())		      \
+	enable_secure = 1;						      \
+      else								      \
+	enable_secure = -1;						      \
+    }
+#endif
+
+/* Get the function to evaluate the plural expression.  */
+#include "eval-plural.h"
+
+/* Look up MSGID in the DOMAINNAME message catalog for the current
+   CATEGORY locale and, if PLURAL is nonzero, search over string
+   depending on the plural form determined by N.  */
+#ifdef IN_LIBGLOCALE
+char *
+gl_dcigettext (const char *domainname,
+	       const char *msgid1, const char *msgid2,
+	       int plural, unsigned long int n,
+	       int category,
+	       const char *localename, const char *encoding)
+#else
+char *
+DCIGETTEXT (const char *domainname, const char *msgid1, const char *msgid2,
+	    int plural, unsigned long int n, int category)
+#endif
+{
+#ifndef HAVE_ALLOCA
+  struct block_list *block_list = NULL;
+#endif
+  struct loaded_l10nfile *domain;
+  struct binding *binding;
+  const char *categoryname;
+  const char *categoryvalue;
+  const char *dirname;
+  char *xdomainname;
+  char *single_locale;
+  char *retval;
+  size_t retlen;
+  int saved_errno;
+  struct known_translation_t *search;
+  struct known_translation_t **foundp = NULL;
+  size_t msgid_len;
+#if defined HAVE_PER_THREAD_LOCALE && !defined IN_LIBGLOCALE
+  const char *localename;
+#endif
+  size_t domainname_len;
+
+  /* If no real MSGID is given return NULL.  */
+  if (msgid1 == NULL)
+    return NULL;
+
+#ifdef _LIBC
+  if (category < 0 || category >= __LC_LAST || category == LC_ALL)
+    /* Bogus.  */
+    return (plural == 0
+	    ? (char *) msgid1
+	    /* Use the Germanic plural rule.  */
+	    : n == 1 ? (char *) msgid1 : (char *) msgid2);
+#endif
+
+  /* Preserve the `errno' value.  */
+  saved_errno = errno;
+
+  gl_rwlock_rdlock (_nl_state_lock);
+
+  /* If DOMAINNAME is NULL, we are interested in the default domain.  If
+     CATEGORY is not LC_MESSAGES this might not make much sense but the
+     definition left this undefined.  */
+  if (domainname == NULL)
+    domainname = _nl_current_default_domain;
+
+  /* OS/2 specific: backward compatibility with older libintl versions  */
+#ifdef LC_MESSAGES_COMPAT
+  if (category == LC_MESSAGES_COMPAT)
+    category = LC_MESSAGES;
+#endif
+
+  msgid_len = strlen (msgid1) + 1;
+
+  /* Try to find the translation among those which we found at
+     some time.  */
+  search = (struct known_translation_t *)
+	   alloca (offsetof (struct known_translation_t, msgid) + msgid_len);
+  memcpy (search->msgid, msgid1, msgid_len);
+  search->domainname = domainname;
+  search->category = category;
+#ifdef HAVE_PER_THREAD_LOCALE
+# ifndef IN_LIBGLOCALE
+#  ifdef _LIBC
+  localename = __current_locale_name (category);
+#  else
+#   if HAVE_NL_LOCALE_NAME
+  /* NL_LOCALE_NAME is public glibc API introduced in glibc-2.4.  */
+  localename = nl_langinfo (NL_LOCALE_NAME (category));
+#   else
+#    if HAVE_STRUCT___LOCALE_STRUCT___NAMES && defined USE_IN_GETTEXT_TESTS
+  /* The __names field is not public glibc API and must therefore not be used
+     in code that is installed in public locations.  */
+  {
+    locale_t thread_locale = uselocale (NULL);
+    if (thread_locale != LC_GLOBAL_LOCALE)
+      localename = thread_locale->__names[category];
+    else
+      localename = "";
+  }
+#    endif
+#   endif
+#  endif
+# endif
+  search->localename = localename;
+# ifdef IN_LIBGLOCALE
+  search->encoding = encoding;
+# endif
+
+  /* Since tfind/tsearch manage a balanced tree, concurrent tfind and
+     tsearch calls can be fatal.  */
+  gl_rwlock_rdlock (tree_lock);
+
+  foundp = (struct known_translation_t **) tfind (search, &root, transcmp);
+
+  gl_rwlock_unlock (tree_lock);
+
+  freea (search);
+  if (foundp != NULL && (*foundp)->counter == _nl_msg_cat_cntr)
+    {
+      /* Now deal with plural.  */
+      if (plural)
+	retval = plural_lookup ((*foundp)->domain, n, (*foundp)->translation,
+				(*foundp)->translation_length);
+      else
+	retval = (char *) (*foundp)->translation;
+
+      gl_rwlock_unlock (_nl_state_lock);
+      __set_errno (saved_errno);
+      return retval;
+    }
+#endif
+
+  /* See whether this is a SUID binary or not.  */
+  DETERMINE_SECURE;
+
+  /* First find matching binding.  */
+#ifdef IN_LIBGLOCALE
+  /* We can use a trivial binding, since _nl_find_msg will ignore it anyway,
+     and _nl_load_domain and _nl_find_domain just pass it through.  */
+  binding = NULL;
+  dirname = bindtextdomain (domainname, NULL);
+#else
+  for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next)
+    {
+      int compare = strcmp (domainname, binding->domainname);
+      if (compare == 0)
+	/* We found it!  */
+	break;
+      if (compare < 0)
+	{
+	  /* It is not in the list.  */
+	  binding = NULL;
+	  break;
+	}
+    }
+
+  if (binding == NULL)
+    dirname = _nl_default_dirname;
+  else
+    {
+      dirname = binding->dirname;
+#endif
+      if (!IS_ABSOLUTE_PATH (dirname))
+	{
+	  /* We have a relative path.  Make it absolute now.  */
+	  size_t dirname_len = strlen (dirname) + 1;
+	  size_t path_max;
+	  char *resolved_dirname;
+	  char *ret;
+
+	  path_max = (unsigned int) PATH_MAX;
+	  path_max += 2;		/* The getcwd docs say to do this.  */
+
+	  for (;;)
+	    {
+	      resolved_dirname = (char *) alloca (path_max + dirname_len);
+	      ADD_BLOCK (block_list, tmp_dirname);
+
+	      __set_errno (0);
+	      ret = getcwd (resolved_dirname, path_max);
+	      if (ret != NULL || errno != ERANGE)
+		break;
+
+	      path_max += path_max / 2;
+	      path_max += PATH_INCR;
+	    }
+
+	  if (ret == NULL)
+	    /* We cannot get the current working directory.  Don't signal an
+	       error but simply return the default string.  */
+	    goto return_untranslated;
+
+	  stpcpy (stpcpy (strchr (resolved_dirname, '\0'), "/"), dirname);
+	  dirname = resolved_dirname;
+	}
+#ifndef IN_LIBGLOCALE
+    }
+#endif
+
+  /* Now determine the symbolic name of CATEGORY and its value.  */
+  categoryname = category_to_name (category);
+#ifdef IN_LIBGLOCALE
+  categoryvalue = guess_category_value (category, categoryname, localename);
+#else
+  categoryvalue = guess_category_value (category, categoryname);
+#endif
+
+  domainname_len = strlen (domainname);
+  xdomainname = (char *) alloca (strlen (categoryname)
+				 + domainname_len + 5);
+  ADD_BLOCK (block_list, xdomainname);
+
+  stpcpy ((char *) mempcpy (stpcpy (stpcpy (xdomainname, categoryname), "/"),
+			    domainname, domainname_len),
+	  ".mo");
+
+  /* Creating working area.  */
+  single_locale = (char *) alloca (strlen (categoryvalue) + 1);
+  ADD_BLOCK (block_list, single_locale);
+
+
+  /* Search for the given string.  This is a loop because we perhaps
+     got an ordered list of languages to consider for the translation.  */
+  while (1)
+    {
+      /* Make CATEGORYVALUE point to the next element of the list.  */
+      while (categoryvalue[0] != '\0' && categoryvalue[0] == ':')
+	++categoryvalue;
+      if (categoryvalue[0] == '\0')
+	{
+	  /* The whole contents of CATEGORYVALUE has been searched but
+	     no valid entry has been found.  We solve this situation
+	     by implicitly appending a "C" entry, i.e. no translation
+	     will take place.  */
+	  single_locale[0] = 'C';
+	  single_locale[1] = '\0';
+	}
+      else
+	{
+	  char *cp = single_locale;
+	  while (categoryvalue[0] != '\0' && categoryvalue[0] != ':')
+	    *cp++ = *categoryvalue++;
+	  *cp = '\0';
+
+	  /* When this is a SUID binary we must not allow accessing files
+	     outside the dedicated directories.  */
+	  if (ENABLE_SECURE && IS_PATH_WITH_DIR (single_locale))
+	    /* Ingore this entry.  */
+	    continue;
+	}
+
+      /* If the current locale value is C (or POSIX) we don't load a
+	 domain.  Return the MSGID.  */
+      if (strcmp (single_locale, "C") == 0
+	  || strcmp (single_locale, "POSIX") == 0)
+	break;
+
+      /* Find structure describing the message catalog matching the
+	 DOMAINNAME and CATEGORY.  */
+      domain = _nl_find_domain (dirname, single_locale, xdomainname, binding);
+
+      if (domain != NULL)
+	{
+#if defined IN_LIBGLOCALE
+	  retval = _nl_find_msg (domain, binding, encoding, msgid1, &retlen);
+#else
+	  retval = _nl_find_msg (domain, binding, msgid1, 1, &retlen);
+#endif
+
+	  if (retval == NULL)
+	    {
+	      int cnt;
+
+	      for (cnt = 0; domain->successor[cnt] != NULL; ++cnt)
+		{
+#if defined IN_LIBGLOCALE
+		  retval = _nl_find_msg (domain->successor[cnt], binding,
+					 encoding, msgid1, &retlen);
+#else
+		  retval = _nl_find_msg (domain->successor[cnt], binding,
+					 msgid1, 1, &retlen);
+#endif
+
+		  if (retval != NULL)
+		    {
+		      domain = domain->successor[cnt];
+		      break;
+		    }
+		}
+	    }
+
+	  /* Returning -1 means that some resource problem exists
+	     (likely memory) and that the strings could not be
+	     converted.  Return the original strings.  */
+	  if (__builtin_expect (retval == (char *) -1, 0))
+	    break;
+
+	  if (retval != NULL)
+	    {
+	      /* Found the translation of MSGID1 in domain DOMAIN:
+		 starting at RETVAL, RETLEN bytes.  */
+	      FREE_BLOCKS (block_list);
+	      if (foundp == NULL)
+		{
+		  /* Create a new entry and add it to the search tree.  */
+		  size_t size;
+		  struct known_translation_t *newp;
+
+		  size = offsetof (struct known_translation_t, msgid)
+			 + msgid_len + domainname_len + 1;
+#ifdef HAVE_PER_THREAD_LOCALE
+		  size += strlen (localename) + 1;
+#endif
+		  newp = (struct known_translation_t *) malloc (size);
+		  if (newp != NULL)
+		    {
+		      char *new_domainname;
+#ifdef HAVE_PER_THREAD_LOCALE
+		      char *new_localename;
+#endif
+
+		      new_domainname =
+			(char *) mempcpy (newp->msgid, msgid1, msgid_len);
+		      memcpy (new_domainname, domainname, domainname_len + 1);
+#ifdef HAVE_PER_THREAD_LOCALE
+		      new_localename = new_domainname + domainname_len + 1;
+		      strcpy (new_localename, localename);
+#endif
+		      newp->domainname = new_domainname;
+		      newp->category = category;
+#ifdef HAVE_PER_THREAD_LOCALE
+		      newp->localename = new_localename;
+#endif
+#ifdef IN_LIBGLOCALE
+		      newp->encoding = encoding;
+#endif
+		      newp->counter = _nl_msg_cat_cntr;
+		      newp->domain = domain;
+		      newp->translation = retval;
+		      newp->translation_length = retlen;
+
+		      gl_rwlock_wrlock (tree_lock);
+
+		      /* Insert the entry in the search tree.  */
+		      foundp = (struct known_translation_t **)
+			tsearch (newp, &root, transcmp);
+
+		      gl_rwlock_unlock (tree_lock);
+
+		      if (foundp == NULL
+			  || __builtin_expect (*foundp != newp, 0))
+			/* The insert failed.  */
+			free (newp);
+		    }
+		}
+	      else
+		{
+		  /* We can update the existing entry.  */
+		  (*foundp)->counter = _nl_msg_cat_cntr;
+		  (*foundp)->domain = domain;
+		  (*foundp)->translation = retval;
+		  (*foundp)->translation_length = retlen;
+		}
+
+	      __set_errno (saved_errno);
+
+	      /* Now deal with plural.  */
+	      if (plural)
+		retval = plural_lookup (domain, n, retval, retlen);
+
+	      gl_rwlock_unlock (_nl_state_lock);
+	      return retval;
+	    }
+	}
+    }
+
+ return_untranslated:
+  /* Return the untranslated MSGID.  */
+  FREE_BLOCKS (block_list);
+  gl_rwlock_unlock (_nl_state_lock);
+#ifndef _LIBC
+  if (!ENABLE_SECURE)
+    {
+      extern void _nl_log_untranslated (const char *logfilename,
+					const char *domainname,
+					const char *msgid1, const char *msgid2,
+					int plural);
+      const char *logfilename = getenv ("GETTEXT_LOG_UNTRANSLATED");
+
+      if (logfilename != NULL && logfilename[0] != '\0')
+	_nl_log_untranslated (logfilename, domainname, msgid1, msgid2, plural);
+    }
+#endif
+  __set_errno (saved_errno);
+  return (plural == 0
+	  ? (char *) msgid1
+	  /* Use the Germanic plural rule.  */
+	  : n == 1 ? (char *) msgid1 : (char *) msgid2);
+}
+
+
+/* Look up the translation of msgid within DOMAIN_FILE and DOMAINBINDING.
+   Return it if found.  Return NULL if not found or in case of a conversion
+   failure (problem in the particular message catalog).  Return (char *) -1
+   in case of a memory allocation failure during conversion (only if
+   ENCODING != NULL resp. CONVERT == true).  */
+char *
+internal_function
+#ifdef IN_LIBGLOCALE
+_nl_find_msg (struct loaded_l10nfile *domain_file,
+	      struct binding *domainbinding, const char *encoding,
+	      const char *msgid,
+	      size_t *lengthp)
+#else
+_nl_find_msg (struct loaded_l10nfile *domain_file,
+	      struct binding *domainbinding,
+	      const char *msgid, int convert,
+	      size_t *lengthp)
+#endif
+{
+  struct loaded_domain *domain;
+  nls_uint32 nstrings;
+  size_t act;
+  char *result;
+  size_t resultlen;
+
+  if (domain_file->decided <= 0)
+    _nl_load_domain (domain_file, domainbinding);
+
+  if (domain_file->data == NULL)
+    return NULL;
+
+  domain = (struct loaded_domain *) domain_file->data;
+
+  nstrings = domain->nstrings;
+
+  /* Locate the MSGID and its translation.  */
+  if (domain->hash_tab != NULL)
+    {
+      /* Use the hashing table.  */
+      nls_uint32 len = strlen (msgid);
+      nls_uint32 hash_val = __hash_string (msgid);
+      nls_uint32 idx = hash_val % domain->hash_size;
+      nls_uint32 incr = 1 + (hash_val % (domain->hash_size - 2));
+
+      while (1)
+	{
+	  nls_uint32 nstr =
+	    W (domain->must_swap_hash_tab, domain->hash_tab[idx]);
+
+	  if (nstr == 0)
+	    /* Hash table entry is empty.  */
+	    return NULL;
+
+	  nstr--;
+
+	  /* Compare msgid with the original string at index nstr.
+	     We compare the lengths with >=, not ==, because plural entries
+	     are represented by strings with an embedded NUL.  */
+	  if (nstr < nstrings
+	      ? W (domain->must_swap, domain->orig_tab[nstr].length) >= len
+		&& (strcmp (msgid,
+			    domain->data + W (domain->must_swap,
+					      domain->orig_tab[nstr].offset))
+		    == 0)
+	      : domain->orig_sysdep_tab[nstr - nstrings].length > len
+		&& (strcmp (msgid,
+			    domain->orig_sysdep_tab[nstr - nstrings].pointer)
+		    == 0))
+	    {
+	      act = nstr;
+	      goto found;
+	    }
+
+	  if (idx >= domain->hash_size - incr)
+	    idx -= domain->hash_size - incr;
+	  else
+	    idx += incr;
+	}
+      /* NOTREACHED */
+    }
+  else
+    {
+      /* Try the default method:  binary search in the sorted array of
+	 messages.  */
+      size_t top, bottom;
+
+      bottom = 0;
+      top = nstrings;
+      while (bottom < top)
+	{
+	  int cmp_val;
+
+	  act = (bottom + top) / 2;
+	  cmp_val = strcmp (msgid, (domain->data
+				    + W (domain->must_swap,
+					 domain->orig_tab[act].offset)));
+	  if (cmp_val < 0)
+	    top = act;
+	  else if (cmp_val > 0)
+	    bottom = act + 1;
+	  else
+	    goto found;
+	}
+      /* No translation was found.  */
+      return NULL;
+    }
+
+ found:
+  /* The translation was found at index ACT.  If we have to convert the
+     string to use a different character set, this is the time.  */
+  if (act < nstrings)
+    {
+      result = (char *)
+	(domain->data + W (domain->must_swap, domain->trans_tab[act].offset));
+      resultlen = W (domain->must_swap, domain->trans_tab[act].length) + 1;
+    }
+  else
+    {
+      result = (char *) domain->trans_sysdep_tab[act - nstrings].pointer;
+      resultlen = domain->trans_sysdep_tab[act - nstrings].length;
+    }
+
+#if defined _LIBC || HAVE_ICONV
+# ifdef IN_LIBGLOCALE
+  if (encoding != NULL)
+# else
+  if (convert)
+# endif
+    {
+      /* We are supposed to do a conversion.  */
+# ifndef IN_LIBGLOCALE
+      const char *encoding = get_output_charset (domainbinding);
+# endif
+      size_t nconversions;
+      struct converted_domain *convd;
+      size_t i;
+
+      /* Protect against reallocation of the table.  */
+      gl_rwlock_rdlock (domain->conversions_lock);
+
+      /* Search whether a table with converted translations for this
+	 encoding has already been allocated.  */
+      nconversions = domain->nconversions;
+      convd = NULL;
+
+      for (i = nconversions; i > 0; )
+	{
+	  i--;
+	  if (strcmp (domain->conversions[i].encoding, encoding) == 0)
+	    {
+	      convd = &domain->conversions[i];
+	      break;
+	    }
+	}
+
+      gl_rwlock_unlock (domain->conversions_lock);
+
+      if (convd == NULL)
+	{
+	  /* We have to allocate a new conversions table.  */
+	  gl_rwlock_wrlock (domain->conversions_lock);
+
+	  /* Maybe in the meantime somebody added the translation.
+	     Recheck.  */
+	  for (i = nconversions; i > 0; )
+	    {
+	      i--;
+	      if (strcmp (domain->conversions[i].encoding, encoding) == 0)
+		{
+		  convd = &domain->conversions[i];
+		  goto found_convd;
+		}
+	    }
+
+	  {
+	    /* Allocate a table for the converted translations for this
+	       encoding.  */
+	    struct converted_domain *new_conversions =
+	      (struct converted_domain *)
+	      (domain->conversions != NULL
+	       ? realloc (domain->conversions,
+			  (nconversions + 1) * sizeof (struct converted_domain))
+	       : malloc ((nconversions + 1) * sizeof (struct converted_domain)));
+
+	    if (__builtin_expect (new_conversions == NULL, 0))
+	      {
+		/* Nothing we can do, no more memory.  We cannot use the
+		   translation because it might be encoded incorrectly.  */
+	      unlock_fail:
+		gl_rwlock_unlock (domain->conversions_lock);
+		return (char *) -1;
+	      }
+
+	    domain->conversions = new_conversions;
+
+	    /* Copy the 'encoding' string to permanent storage.  */
+	    encoding = strdup (encoding);
+	    if (__builtin_expect (encoding == NULL, 0))
+	      /* Nothing we can do, no more memory.  We cannot use the
+		 translation because it might be encoded incorrectly.  */
+	      goto unlock_fail;
+
+	    convd = &new_conversions[nconversions];
+	    convd->encoding = encoding;
+
+	    /* Find out about the character set the file is encoded with.
+	       This can be found (in textual form) in the entry "".  If this
+	       entry does not exist or if this does not contain the 'charset='
+	       information, we will assume the charset matches the one the
+	       current locale and we don't have to perform any conversion.  */
+# ifdef _LIBC
+	    convd->conv = (__gconv_t) -1;
+# else
+#  if HAVE_ICONV
+	    convd->conv = (iconv_t) -1;
+#  endif
+# endif
+	    {
+	      char *nullentry;
+	      size_t nullentrylen;
+
+	      /* Get the header entry.  This is a recursion, but it doesn't
+		 reallocate domain->conversions because we pass
+		 encoding = NULL or convert = 0, respectively.  */
+	      nullentry =
+# ifdef IN_LIBGLOCALE
+		_nl_find_msg (domain_file, domainbinding, NULL, "",
+			      &nullentrylen);
+# else
+		_nl_find_msg (domain_file, domainbinding, "", 0, &nullentrylen);
+# endif
+
+	      if (nullentry != NULL)
+		{
+		  const char *charsetstr;
+
+		  charsetstr = strstr (nullentry, "charset=");
+		  if (charsetstr != NULL)
+		    {
+		      size_t len;
+		      char *charset;
+		      const char *outcharset;
+
+		      charsetstr += strlen ("charset=");
+		      len = strcspn (charsetstr, " \t\n");
+
+		      charset = (char *) alloca (len + 1);
+# if defined _LIBC || HAVE_MEMPCPY
+		      *((char *) mempcpy (charset, charsetstr, len)) = '\0';
+# else
+		      memcpy (charset, charsetstr, len);
+		      charset[len] = '\0';
+# endif
+
+		      outcharset = encoding;
+
+# ifdef _LIBC
+		      /* We always want to use transliteration.  */
+		      outcharset = norm_add_slashes (outcharset, "TRANSLIT");
+		      charset = norm_add_slashes (charset, "");
+		      int r = __gconv_open (outcharset, charset, &convd->conv,
+					    GCONV_AVOID_NOCONV);
+		      if (__builtin_expect (r != __GCONV_OK, 0))
+			{
+			  /* If the output encoding is the same there is
+			     nothing to do.  Otherwise do not use the
+			     translation at all.  */
+			  if (__builtin_expect (r != __GCONV_NULCONV, 1))
+			    {
+			      gl_rwlock_unlock (domain->conversions_lock);
+			      free ((char *) encoding);
+			      return NULL;
+			    }
+
+			  convd->conv = (__gconv_t) -1;
+			}
+# else
+#  if HAVE_ICONV
+		      /* When using GNU libc >= 2.2 or GNU libiconv >= 1.5,
+			 we want to use transliteration.  */
+#   if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) || __GLIBC__ > 2 \
+       || _LIBICONV_VERSION >= 0x0105
+		      if (strchr (outcharset, '/') == NULL)
+			{
+			  char *tmp;
+
+			  len = strlen (outcharset);
+			  tmp = (char *) alloca (len + 10 + 1);
+			  memcpy (tmp, outcharset, len);
+			  memcpy (tmp + len, "//TRANSLIT", 10 + 1);
+			  outcharset = tmp;
+
+			  convd->conv = iconv_open (outcharset, charset);
+
+			  freea (outcharset);
+			}
+		      else
+#   endif
+			convd->conv = iconv_open (outcharset, charset);
+#  endif
+# endif
+
+		      freea (charset);
+		    }
+		}
+	    }
+	    convd->conv_tab = NULL;
+	    /* Here domain->conversions is still == new_conversions.  */
+	    domain->nconversions++;
+	  }
+
+	found_convd:
+	  gl_rwlock_unlock (domain->conversions_lock);
+	}
+
+      if (
+# ifdef _LIBC
+	  convd->conv != (__gconv_t) -1
+# else
+#  if HAVE_ICONV
+	  convd->conv != (iconv_t) -1
+#  endif
+# endif
+	  )
+	{
+	  /* We are supposed to do a conversion.  First allocate an
+	     appropriate table with the same structure as the table
+	     of translations in the file, where we can put the pointers
+	     to the converted strings in.
+	     There is a slight complication with plural entries.  They
+	     are represented by consecutive NUL terminated strings.  We
+	     handle this case by converting RESULTLEN bytes, including
+	     NULs.  */
+
+	  if (convd->conv_tab == NULL
+	      && ((convd->conv_tab =
+		    (char **) calloc (nstrings + domain->n_sysdep_strings,
+				      sizeof (char *)))
+		  == NULL))
+	    /* Mark that we didn't succeed allocating a table.  */
+	    convd->conv_tab = (char **) -1;
+
+	  if (__builtin_expect (convd->conv_tab == (char **) -1, 0))
+	    /* Nothing we can do, no more memory.  We cannot use the
+	       translation because it might be encoded incorrectly.  */
+	    return (char *) -1;
+
+	  if (convd->conv_tab[act] == NULL)
+	    {
+	      /* We haven't used this string so far, so it is not
+		 translated yet.  Do this now.  */
+	      /* We use a bit more efficient memory handling.
+		 We allocate always larger blocks which get used over
+		 time.  This is faster than many small allocations.   */
+	      __libc_lock_define_initialized (static, lock)
+# define INITIAL_BLOCK_SIZE	4080
+	      static unsigned char *freemem;
+	      static size_t freemem_size;
+
+	      const unsigned char *inbuf;
+	      unsigned char *outbuf;
+	      int malloc_count;
+# ifndef _LIBC
+	      transmem_block_t *transmem_list = NULL;
+# endif
+
+	      __libc_lock_lock (lock);
+
+	      inbuf = (const unsigned char *) result;
+	      outbuf = freemem + sizeof (size_t);
+
+	      malloc_count = 0;
+	      while (1)
+		{
+		  transmem_block_t *newmem;
+# ifdef _LIBC
+		  size_t non_reversible;
+		  int res;
+
+		  if (freemem_size < sizeof (size_t))
+		    goto resize_freemem;
+
+		  res = __gconv (convd->conv,
+				 &inbuf, inbuf + resultlen,
+				 &outbuf,
+				 outbuf + freemem_size - sizeof (size_t),
+				 &non_reversible);
+
+		  if (res == __GCONV_OK || res == __GCONV_EMPTY_INPUT)
+		    break;
+
+		  if (res != __GCONV_FULL_OUTPUT)
+		    {
+		      /* We should not use the translation at all, it
+			 is incorrectly encoded.  */
+		      __libc_lock_unlock (lock);
+		      return NULL;
+		    }
+
+		  inbuf = (const unsigned char *) result;
+# else
+#  if HAVE_ICONV
+		  const char *inptr = (const char *) inbuf;
+		  size_t inleft = resultlen;
+		  char *outptr = (char *) outbuf;
+		  size_t outleft;
+
+		  if (freemem_size < sizeof (size_t))
+		    goto resize_freemem;
+
+		  outleft = freemem_size - sizeof (size_t);
+		  if (iconv (convd->conv,
+			     (ICONV_CONST char **) &inptr, &inleft,
+			     &outptr, &outleft)
+		      != (size_t) (-1))
+		    {
+		      outbuf = (unsigned char *) outptr;
+		      break;
+		    }
+		  if (errno != E2BIG)
+		    {
+		      __libc_lock_unlock (lock);
+		      return NULL;
+		    }
+#  endif
+# endif
+
+		resize_freemem:
+		  /* We must allocate a new buffer or resize the old one.  */
+		  if (malloc_count > 0)
+		    {
+		      ++malloc_count;
+		      freemem_size = malloc_count * INITIAL_BLOCK_SIZE;
+		      newmem = (transmem_block_t *) realloc (transmem_list,
+							     freemem_size);
+# ifdef _LIBC
+		      if (newmem != NULL)
+			transmem_list = transmem_list->next;
+		      else
+			{
+			  struct transmem_list *old = transmem_list;
+
+			  transmem_list = transmem_list->next;
+			  free (old);
+			}
+# endif
+		    }
+		  else
+		    {
+		      malloc_count = 1;
+		      freemem_size = INITIAL_BLOCK_SIZE;
+		      newmem = (transmem_block_t *) malloc (freemem_size);
+		    }
+		  if (__builtin_expect (newmem == NULL, 0))
+		    {
+		      freemem = NULL;
+		      freemem_size = 0;
+		      __libc_lock_unlock (lock);
+		      return (char *) -1;
+		    }
+
+# ifdef _LIBC
+		  /* Add the block to the list of blocks we have to free
+		     at some point.  */
+		  newmem->next = transmem_list;
+		  transmem_list = newmem;
+
+		  freemem = (unsigned char *) newmem->data;
+		  freemem_size -= offsetof (struct transmem_list, data);
+# else
+		  transmem_list = newmem;
+		  freemem = newmem;
+# endif
+
+		  outbuf = freemem + sizeof (size_t);
+		}
+
+	      /* We have now in our buffer a converted string.  Put this
+		 into the table of conversions.  */
+	      *(size_t *) freemem = outbuf - freemem - sizeof (size_t);
+	      convd->conv_tab[act] = (char *) freemem;
+	      /* Shrink freemem, but keep it aligned.  */
+	      freemem_size -= outbuf - freemem;
+	      freemem = outbuf;
+	      freemem += freemem_size & (alignof (size_t) - 1);
+	      freemem_size = freemem_size & ~ (alignof (size_t) - 1);
+
+	      __libc_lock_unlock (lock);
+	    }
+
+	  /* Now convd->conv_tab[act] contains the translation of all
+	     the plural variants.  */
+	  result = convd->conv_tab[act] + sizeof (size_t);
+	  resultlen = *(size_t *) convd->conv_tab[act];
+	}
+    }
+
+  /* The result string is converted.  */
+
+#endif /* _LIBC || HAVE_ICONV */
+
+  *lengthp = resultlen;
+  return result;
+}
+
+
+/* Look up a plural variant.  */
+static char *
+internal_function
+plural_lookup (struct loaded_l10nfile *domain, unsigned long int n,
+	       const char *translation, size_t translation_len)
+{
+  struct loaded_domain *domaindata = (struct loaded_domain *) domain->data;
+  unsigned long int index;
+  const char *p;
+
+  index = plural_eval (domaindata->plural, n);
+  if (index >= domaindata->nplurals)
+    /* This should never happen.  It means the plural expression and the
+       given maximum value do not match.  */
+    index = 0;
+
+  /* Skip INDEX strings at TRANSLATION.  */
+  p = translation;
+  while (index-- > 0)
+    {
+#ifdef _LIBC
+      p = __rawmemchr (p, '\0');
+#else
+      p = strchr (p, '\0');
+#endif
+      /* And skip over the NUL byte.  */
+      p++;
+
+      if (p >= translation + translation_len)
+	/* This should never happen.  It means the plural expression
+	   evaluated to a value larger than the number of variants
+	   available for MSGID1.  */
+	return (char *) translation;
+    }
+  return (char *) p;
+}
+
+#ifndef _LIBC
+/* Return string representation of locale CATEGORY.  */
+static const char *
+internal_function
+category_to_name (int category)
+{
+  const char *retval;
+
+  switch (category)
+  {
+#ifdef LC_COLLATE
+  case LC_COLLATE:
+    retval = "LC_COLLATE";
+    break;
+#endif
+#ifdef LC_CTYPE
+  case LC_CTYPE:
+    retval = "LC_CTYPE";
+    break;
+#endif
+#ifdef LC_MONETARY
+  case LC_MONETARY:
+    retval = "LC_MONETARY";
+    break;
+#endif
+#ifdef LC_NUMERIC
+  case LC_NUMERIC:
+    retval = "LC_NUMERIC";
+    break;
+#endif
+#ifdef LC_TIME
+  case LC_TIME:
+    retval = "LC_TIME";
+    break;
+#endif
+#ifdef LC_MESSAGES
+  case LC_MESSAGES:
+    retval = "LC_MESSAGES";
+    break;
+#endif
+#ifdef LC_RESPONSE
+  case LC_RESPONSE:
+    retval = "LC_RESPONSE";
+    break;
+#endif
+#ifdef LC_ALL
+  case LC_ALL:
+    /* This might not make sense but is perhaps better than any other
+       value.  */
+    retval = "LC_ALL";
+    break;
+#endif
+  default:
+    /* If you have a better idea for a default value let me know.  */
+    retval = "LC_XXX";
+  }
+
+  return retval;
+}
+#endif
+
+/* Guess value of current locale from value of the environment variables
+   or system-dependent defaults.  */
+static const char *
+internal_function
+#ifdef IN_LIBGLOCALE
+guess_category_value (int category, const char *categoryname,
+		      const char *locale)
+
+#else
+guess_category_value (int category, const char *categoryname)
+#endif
+{
+  const char *language;
+#ifndef IN_LIBGLOCALE
+  const char *locale;
+# ifndef _LIBC
+  const char *language_default;
+  int locale_defaulted;
+# endif
+#endif
+
+  /* We use the settings in the following order:
+     1. The value of the environment variable 'LANGUAGE'.  This is a GNU
+        extension.  Its value can be a colon-separated list of locale names.
+     2. The value of the environment variable 'LC_ALL', 'LC_xxx', or 'LANG'.
+        More precisely, the first among these that is set to a non-empty value.
+        This is how POSIX specifies it.  The value is a single locale name.
+     3. A system-dependent preference list of languages.  Its value can be a
+        colon-separated list of locale names.
+     4. A system-dependent default locale name.
+     This way:
+       - System-dependent settings can be overridden by environment variables.
+       - If the system provides both a list of languages and a default locale,
+         the former is used.  */
+
+#ifndef IN_LIBGLOCALE
+  /* Fetch the locale name, through the POSIX method of looking to `LC_ALL',
+     `LC_xxx', and `LANG'.  On some systems this can be done by the
+     `setlocale' function itself.  */
+# ifdef _LIBC
+  locale = __current_locale_name (category);
+# else
+#  if HAVE_STRUCT___LOCALE_STRUCT___NAMES && defined USE_IN_GETTEXT_TESTS
+  /* The __names field is not public glibc API and must therefore not be used
+     in code that is installed in public locations.  */
+  locale_t thread_locale = uselocale (NULL);
+  if (thread_locale != LC_GLOBAL_LOCALE)
+    {
+      locale = thread_locale->__names[category];
+      locale_defaulted = 0;
+    }
+  else
+#  endif
+    {
+      locale = _nl_locale_name_posix (category, categoryname);
+      locale_defaulted = 0;
+      if (locale == NULL)
+	{
+	  locale = _nl_locale_name_default ();
+	  locale_defaulted = 1;
+	}
+    }
+# endif
+#endif
+
+  /* Ignore LANGUAGE and its system-dependent analogon if the locale is set
+     to "C" because
+     1. "C" locale usually uses the ASCII encoding, and most international
+	messages use non-ASCII characters. These characters get displayed
+	as question marks (if using glibc's iconv()) or as invalid 8-bit
+	characters (because other iconv()s refuse to convert most non-ASCII
+	characters to ASCII). In any case, the output is ugly.
+     2. The precise output of some programs in the "C" locale is specified
+	by POSIX and should not depend on environment variables like
+	"LANGUAGE" or system-dependent information.  We allow such programs
+        to use gettext().  */
+  if (strcmp (locale, "C") == 0)
+    return locale;
+
+  /* The highest priority value is the value of the 'LANGUAGE' environment
+     variable.  */
+  language = getenv ("LANGUAGE");
+  if (language != NULL && language[0] != '\0')
+    return language;
+#if !defined IN_LIBGLOCALE && !defined _LIBC
+  /* The next priority value is the locale name, if not defaulted.  */
+  if (locale_defaulted)
+    {
+      /* The next priority value is the default language preferences list. */
+      language_default = _nl_language_preferences_default ();
+      if (language_default != NULL)
+        return language_default;
+    }
+  /* The least priority value is the locale name, if defaulted.  */
+#endif
+  return locale;
+}
+
+#if (defined _LIBC || HAVE_ICONV) && !defined IN_LIBGLOCALE
+/* Returns the output charset.  */
+static const char *
+internal_function
+get_output_charset (struct binding *domainbinding)
+{
+  /* The output charset should normally be determined by the locale.  But
+     sometimes the locale is not used or not correctly set up, so we provide
+     a possibility for the user to override this: the OUTPUT_CHARSET
+     environment variable.  Moreover, the value specified through
+     bind_textdomain_codeset overrides both.  */
+  if (domainbinding != NULL && domainbinding->codeset != NULL)
+    return domainbinding->codeset;
+  else
+    {
+      /* For speed reasons, we look at the value of OUTPUT_CHARSET only
+	 once.  This is a user variable that is not supposed to change
+	 during a program run.  */
+      static char *output_charset_cache;
+      static int output_charset_cached;
+
+      if (!output_charset_cached)
+	{
+	  const char *value = getenv ("OUTPUT_CHARSET");
+
+	  if (value != NULL && value[0] != '\0')
+	    {
+	      size_t len = strlen (value) + 1;
+	      char *value_copy = (char *) malloc (len);
+
+	      if (value_copy != NULL)
+		memcpy (value_copy, value, len);
+	      output_charset_cache = value_copy;
+	    }
+	  output_charset_cached = 1;
+	}
+
+      if (output_charset_cache != NULL)
+	return output_charset_cache;
+      else
+	{
+# ifdef _LIBC
+	  return _NL_CURRENT (LC_CTYPE, CODESET);
+# else
+#  if HAVE_ICONV
+	  return locale_charset ();
+#  endif
+# endif
+	}
+    }
+}
+#endif
+
+/* @@ begin of epilog @@ */
+
+/* We don't want libintl.a to depend on any other library.  So we
+   avoid the non-standard function stpcpy.  In GNU C Library this
+   function is available, though.  Also allow the symbol HAVE_STPCPY
+   to be defined.  */
+#if !_LIBC && !HAVE_STPCPY
+static char *
+stpcpy (char *dest, const char *src)
+{
+  while ((*dest++ = *src++) != '\0')
+    /* Do nothing. */ ;
+  return dest - 1;
+}
+#endif
+
+#if !_LIBC && !HAVE_MEMPCPY
+static void *
+mempcpy (void *dest, const void *src, size_t n)
+{
+  return (void *) ((char *) memcpy (dest, src, n) + n);
+}
+#endif
+
+#if !_LIBC && !HAVE_TSEARCH
+# include "tsearch.c"
+#endif
+
+
+#ifdef _LIBC
+/* If we want to free all resources we have to do some work at
+   program's end.  */
+libc_freeres_fn (free_mem)
+{
+  void *old;
+
+  while (_nl_domain_bindings != NULL)
+    {
+      struct binding *oldp = _nl_domain_bindings;
+      _nl_domain_bindings = _nl_domain_bindings->next;
+      if (oldp->dirname != _nl_default_dirname)
+	/* Yes, this is a pointer comparison.  */
+	free (oldp->dirname);
+      free (oldp->codeset);
+      free (oldp);
+    }
+
+  if (_nl_current_default_domain != _nl_default_default_domain)
+    /* Yes, again a pointer comparison.  */
+    free ((char *) _nl_current_default_domain);
+
+  /* Remove the search tree with the known translations.  */
+  __tdestroy (root, free);
+  root = NULL;
+
+  while (transmem_list != NULL)
+    {
+      old = transmem_list;
+      transmem_list = transmem_list->next;
+      free (old);
+    }
+}
+#endif
diff --git a/intl/dcngettext.c b/intl/dcngettext.c
new file mode 100644
index 0000000..eb36833
--- /dev/null
+++ b/intl/dcngettext.c
@@ -0,0 +1,57 @@
+/* Implementation of the dcngettext(3) function.
+   Copyright (C) 1995-1999, 2000-2003 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "gettextP.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+
+/* @@ end of prolog @@ */
+
+/* Names for the libintl functions are a problem.  They must not clash
+   with existing names and they should follow ANSI C.  But this source
+   code is also used in GNU C Library where the names have a __
+   prefix.  So we have to make a difference here.  */
+#ifdef _LIBC
+# define DCNGETTEXT __dcngettext
+# define DCIGETTEXT __dcigettext
+#else
+# define DCNGETTEXT libintl_dcngettext
+# define DCIGETTEXT libintl_dcigettext
+#endif
+
+/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
+   locale.  */
+char *
+DCNGETTEXT (const char *domainname,
+	    const char *msgid1, const char *msgid2, unsigned long int n,
+	    int category)
+{
+  return DCIGETTEXT (domainname, msgid1, msgid2, 1, n, category);
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library.  */
+weak_alias (__dcngettext, dcngettext);
+#endif
diff --git a/intl/dgettext.c b/intl/dgettext.c
new file mode 100644
index 0000000..9b0d0de
--- /dev/null
+++ b/intl/dgettext.c
@@ -0,0 +1,58 @@
+/* Implementation of the dgettext(3) function.
+   Copyright (C) 1995-1997, 2000-2003 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "gettextP.h"
+
+#include <locale.h>
+
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+
+/* @@ end of prolog @@ */
+
+/* Names for the libintl functions are a problem.  They must not clash
+   with existing names and they should follow ANSI C.  But this source
+   code is also used in GNU C Library where the names have a __
+   prefix.  So we have to make a difference here.  */
+#ifdef _LIBC
+# define DGETTEXT __dgettext
+# define DCGETTEXT INTUSE(__dcgettext)
+#else
+# define DGETTEXT libintl_dgettext
+# define DCGETTEXT libintl_dcgettext
+#endif
+
+/* Look up MSGID in the DOMAINNAME message catalog of the current
+   LC_MESSAGES locale.  */
+char *
+DGETTEXT (const char *domainname, const char *msgid)
+{
+  return DCGETTEXT (domainname, msgid, LC_MESSAGES);
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library.  */
+weak_alias (__dgettext, dgettext);
+#endif
diff --git a/intl/dngettext.c b/intl/dngettext.c
new file mode 100644
index 0000000..3278438
--- /dev/null
+++ b/intl/dngettext.c
@@ -0,0 +1,59 @@
+/* Implementation of the dngettext(3) function.
+   Copyright (C) 1995-1997, 2000-2003 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "gettextP.h"
+
+#include <locale.h>
+
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+
+/* @@ end of prolog @@ */
+
+/* Names for the libintl functions are a problem.  They must not clash
+   with existing names and they should follow ANSI C.  But this source
+   code is also used in GNU C Library where the names have a __
+   prefix.  So we have to make a difference here.  */
+#ifdef _LIBC
+# define DNGETTEXT __dngettext
+# define DCNGETTEXT __dcngettext
+#else
+# define DNGETTEXT libintl_dngettext
+# define DCNGETTEXT libintl_dcngettext
+#endif
+
+/* Look up MSGID in the DOMAINNAME message catalog of the current
+   LC_MESSAGES locale and skip message according to the plural form.  */
+char *
+DNGETTEXT (const char *domainname,
+	   const char *msgid1, const char *msgid2, unsigned long int n)
+{
+  return DCNGETTEXT (domainname, msgid1, msgid2, n, LC_MESSAGES);
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library.  */
+weak_alias (__dngettext, dngettext);
+#endif
diff --git a/intl/eval-plural.h b/intl/eval-plural.h
new file mode 100644
index 0000000..21eecb3
--- /dev/null
+++ b/intl/eval-plural.h
@@ -0,0 +1,108 @@
+/* Plural expression evaluation.
+   Copyright (C) 2000-2003, 2007 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+#ifndef STATIC
+#define STATIC static
+#endif
+
+/* Evaluate the plural expression and return an index value.  */
+STATIC
+unsigned long int
+internal_function
+plural_eval (const struct expression *pexp, unsigned long int n)
+{
+  switch (pexp->nargs)
+    {
+    case 0:
+      switch (pexp->operation)
+	{
+	case var:
+	  return n;
+	case num:
+	  return pexp->val.num;
+	default:
+	  break;
+	}
+      /* NOTREACHED */
+      break;
+    case 1:
+      {
+	/* pexp->operation must be lnot.  */
+	unsigned long int arg = plural_eval (pexp->val.args[0], n);
+	return ! arg;
+      }
+    case 2:
+      {
+	unsigned long int leftarg = plural_eval (pexp->val.args[0], n);
+	if (pexp->operation == lor)
+	  return leftarg || plural_eval (pexp->val.args[1], n);
+	else if (pexp->operation == land)
+	  return leftarg && plural_eval (pexp->val.args[1], n);
+	else
+	  {
+	    unsigned long int rightarg = plural_eval (pexp->val.args[1], n);
+
+	    switch (pexp->operation)
+	      {
+	      case mult:
+		return leftarg * rightarg;
+	      case divide:
+#if !INTDIV0_RAISES_SIGFPE
+		if (rightarg == 0)
+		  raise (SIGFPE);
+#endif
+		return leftarg / rightarg;
+	      case module:
+#if !INTDIV0_RAISES_SIGFPE
+		if (rightarg == 0)
+		  raise (SIGFPE);
+#endif
+		return leftarg % rightarg;
+	      case plus:
+		return leftarg + rightarg;
+	      case minus:
+		return leftarg - rightarg;
+	      case less_than:
+		return leftarg < rightarg;
+	      case greater_than:
+		return leftarg > rightarg;
+	      case less_or_equal:
+		return leftarg <= rightarg;
+	      case greater_or_equal:
+		return leftarg >= rightarg;
+	      case equal:
+		return leftarg == rightarg;
+	      case not_equal:
+		return leftarg != rightarg;
+	      default:
+		break;
+	      }
+	  }
+	/* NOTREACHED */
+	break;
+      }
+    case 3:
+      {
+	/* pexp->operation must be qmop.  */
+	unsigned long int boolarg = plural_eval (pexp->val.args[0], n);
+	return plural_eval (pexp->val.args[boolarg ? 1 : 2], n);
+      }
+    }
+  /* NOTREACHED */
+  return 0;
+}
diff --git a/intl/explodename.c b/intl/explodename.c
new file mode 100644
index 0000000..eb5dd75
--- /dev/null
+++ b/intl/explodename.c
@@ -0,0 +1,135 @@
+/* Copyright (C) 1995-1998, 2000-2001, 2003, 2005, 2007 Free Software Foundation, Inc.
+   Contributed by Ulrich Drepper <drepper at gnu.ai.mit.edu>, 1995.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+
+#include "loadinfo.h"
+
+/* On some strange systems still no definition of NULL is found.  Sigh!  */
+#ifndef NULL
+# if defined __STDC__ && __STDC__
+#  define NULL ((void *) 0)
+# else
+#  define NULL 0
+# endif
+#endif
+
+/* @@ end of prolog @@ */
+
+/* Split a locale name NAME into a leading language part and all the
+   rest.  Return a pointer to the first character after the language,
+   i.e. to the first byte of the rest.  */
+static char *_nl_find_language (const char *name);
+
+static char *
+_nl_find_language (const char *name)
+{
+  while (name[0] != '\0' && name[0] != '_' && name[0] != '@' && name[0] != '.')
+    ++name;
+
+  return (char *) name;
+}
+
+
+int
+_nl_explode_name (char *name,
+		  const char **language, const char **modifier,
+		  const char **territory, const char **codeset,
+		  const char **normalized_codeset)
+{
+  char *cp;
+  int mask;
+
+  *modifier = NULL;
+  *territory = NULL;
+  *codeset = NULL;
+  *normalized_codeset = NULL;
+
+  /* Now we determine the single parts of the locale name.  First
+     look for the language.  Termination symbols are `_', '.', and `@'.  */
+  mask = 0;
+  *language = cp = name;
+  cp = _nl_find_language (*language);
+
+  if (*language == cp)
+    /* This does not make sense: language has to be specified.  Use
+       this entry as it is without exploding.  Perhaps it is an alias.  */
+    cp = strchr (*language, '\0');
+  else
+    {
+      if (cp[0] == '_')
+	{
+	  /* Next is the territory.  */
+	  cp[0] = '\0';
+	  *territory = ++cp;
+
+	  while (cp[0] != '\0' && cp[0] != '.' && cp[0] != '@')
+	    ++cp;
+
+	  mask |= XPG_TERRITORY;
+	}
+
+      if (cp[0] == '.')
+	{
+	  /* Next is the codeset.  */
+	  cp[0] = '\0';
+	  *codeset = ++cp;
+
+	  while (cp[0] != '\0' && cp[0] != '@')
+	    ++cp;
+
+	  mask |= XPG_CODESET;
+
+	  if (*codeset != cp && (*codeset)[0] != '\0')
+	    {
+	      *normalized_codeset = _nl_normalize_codeset (*codeset,
+							   cp - *codeset);
+	      if (*normalized_codeset == NULL)
+		return -1;
+	      else if (strcmp (*codeset, *normalized_codeset) == 0)
+		free ((char *) *normalized_codeset);
+	      else
+		mask |= XPG_NORM_CODESET;
+	    }
+	}
+    }
+
+  if (cp[0] == '@')
+    {
+      /* Next is the modifier.  */
+      cp[0] = '\0';
+      *modifier = ++cp;
+
+      if (cp[0] != '\0')
+	mask |= XPG_MODIFIER;
+    }
+
+  if (*territory != NULL && (*territory)[0] == '\0')
+    mask &= ~XPG_TERRITORY;
+
+  if (*codeset != NULL && (*codeset)[0] == '\0')
+    mask &= ~XPG_CODESET;
+
+  return mask;
+}
diff --git a/intl/export.h b/intl/export.h
new file mode 100644
index 0000000..b5c47ad
--- /dev/null
+++ b/intl/export.h
@@ -0,0 +1,6 @@
+
+#if @HAVE_VISIBILITY@ && BUILDING_LIBINTL
+#define LIBINTL_DLL_EXPORTED __attribute__((__visibility__("default")))
+#else
+#define LIBINTL_DLL_EXPORTED
+#endif
diff --git a/intl/finddomain.c b/intl/finddomain.c
new file mode 100644
index 0000000..cab2c99
--- /dev/null
+++ b/intl/finddomain.c
@@ -0,0 +1,212 @@
+/* Handle list of needed message catalogs
+   Copyright (C) 1995-1999, 2000-2001, 2003-2007 Free Software Foundation, Inc.
+   Written by Ulrich Drepper <drepper at gnu.org>, 1995.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdio.h>
+#include <sys/types.h>
+#include <stdlib.h>
+#include <string.h>
+
+#if defined HAVE_UNISTD_H || defined _LIBC
+# include <unistd.h>
+#endif
+
+#include "gettextP.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+
+/* Handle multi-threaded applications.  */
+#ifdef _LIBC
+# include <bits/libc-lock.h>
+# define gl_rwlock_define_initialized __libc_rwlock_define_initialized
+# define gl_rwlock_rdlock __libc_rwlock_rdlock
+# define gl_rwlock_wrlock __libc_rwlock_wrlock
+# define gl_rwlock_unlock __libc_rwlock_unlock
+#else
+# include "lock.h"
+#endif
+
+/* @@ end of prolog @@ */
+/* List of already loaded domains.  */
+static struct loaded_l10nfile *_nl_loaded_domains;
+
+
+/* Return a data structure describing the message catalog described by
+   the DOMAINNAME and CATEGORY parameters with respect to the currently
+   established bindings.  */
+struct loaded_l10nfile *
+internal_function
+_nl_find_domain (const char *dirname, char *locale,
+		 const char *domainname, struct binding *domainbinding)
+{
+  struct loaded_l10nfile *retval;
+  const char *language;
+  const char *modifier;
+  const char *territory;
+  const char *codeset;
+  const char *normalized_codeset;
+  const char *alias_value;
+  int mask;
+
+  /* LOCALE can consist of up to four recognized parts for the XPG syntax:
+
+		language[_territory][.codeset][@modifier]
+
+     Beside the first part all of them are allowed to be missing.  If
+     the full specified locale is not found, the less specific one are
+     looked for.  The various parts will be stripped off according to
+     the following order:
+		(1) codeset
+		(2) normalized codeset
+		(3) territory
+		(4) modifier
+   */
+
+  /* We need to protect modifying the _NL_LOADED_DOMAINS data.  */
+  gl_rwlock_define_initialized (static, lock);
+  gl_rwlock_rdlock (lock);
+
+  /* If we have already tested for this locale entry there has to
+     be one data set in the list of loaded domains.  */
+  retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname,
+			       strlen (dirname) + 1, 0, locale, NULL, NULL,
+			       NULL, NULL, domainname, 0);
+
+  gl_rwlock_unlock (lock);
+
+  if (retval != NULL)
+    {
+      /* We know something about this locale.  */
+      int cnt;
+
+      if (retval->decided <= 0)
+	_nl_load_domain (retval, domainbinding);
+
+      if (retval->data != NULL)
+	return retval;
+
+      for (cnt = 0; retval->successor[cnt] != NULL; ++cnt)
+	{
+	  if (retval->successor[cnt]->decided <= 0)
+	    _nl_load_domain (retval->successor[cnt], domainbinding);
+
+	  if (retval->successor[cnt]->data != NULL)
+	    break;
+	}
+
+      return retval;
+      /* NOTREACHED */
+    }
+
+  /* See whether the locale value is an alias.  If yes its value
+     *overwrites* the alias name.  No test for the original value is
+     done.  */
+  alias_value = _nl_expand_alias (locale);
+  if (alias_value != NULL)
+    {
+#if defined _LIBC || defined HAVE_STRDUP
+      locale = strdup (alias_value);
+      if (locale == NULL)
+	return NULL;
+#else
+      size_t len = strlen (alias_value) + 1;
+      locale = (char *) malloc (len);
+      if (locale == NULL)
+	return NULL;
+
+      memcpy (locale, alias_value, len);
+#endif
+    }
+
+  /* Now we determine the single parts of the locale name.  First
+     look for the language.  Termination symbols are `_', '.', and `@'.  */
+  mask = _nl_explode_name (locale, &language, &modifier, &territory,
+			   &codeset, &normalized_codeset);
+  if (mask == -1)
+    /* This means we are out of core.  */
+    return NULL;
+
+  /* We need to protect modifying the _NL_LOADED_DOMAINS data.  */
+  gl_rwlock_wrlock (lock);
+
+  /* Create all possible locale entries which might be interested in
+     generalization.  */
+  retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname,
+			       strlen (dirname) + 1, mask, language, territory,
+			       codeset, normalized_codeset, modifier,
+			       domainname, 1);
+
+  gl_rwlock_unlock (lock);
+
+  if (retval == NULL)
+    /* This means we are out of core.  */
+    goto out;
+
+  if (retval->decided <= 0)
+    _nl_load_domain (retval, domainbinding);
+  if (retval->data == NULL)
+    {
+      int cnt;
+      for (cnt = 0; retval->successor[cnt] != NULL; ++cnt)
+	{
+	  if (retval->successor[cnt]->decided <= 0)
+	    _nl_load_domain (retval->successor[cnt], domainbinding);
+	  if (retval->successor[cnt]->data != NULL)
+	    break;
+	}
+    }
+
+  /* The room for an alias was dynamically allocated.  Free it now.  */
+  if (alias_value != NULL)
+    free (locale);
+
+out:
+  /* The space for normalized_codeset is dynamically allocated.  Free it.  */
+  if (mask & XPG_NORM_CODESET)
+    free ((void *) normalized_codeset);
+
+  return retval;
+}
+
+
+#ifdef _LIBC
+/* This is called from iconv/gconv_db.c's free_mem, as locales must
+   be freed before freeing gconv steps arrays.  */
+void __libc_freeres_fn_section
+_nl_finddomain_subfreeres ()
+{
+  struct loaded_l10nfile *runp = _nl_loaded_domains;
+
+  while (runp != NULL)
+    {
+      struct loaded_l10nfile *here = runp;
+      if (runp->data != NULL)
+	_nl_unload_domain ((struct loaded_domain *) runp->data);
+      runp = runp->next;
+      free ((char *) here->filename);
+      free (here);
+    }
+}
+#endif
diff --git a/intl/gettext.c b/intl/gettext.c
new file mode 100644
index 0000000..d82d439
--- /dev/null
+++ b/intl/gettext.c
@@ -0,0 +1,63 @@
+/* Implementation of gettext(3) function.
+   Copyright (C) 1995, 1997, 2000-2003 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#ifdef _LIBC
+# define __need_NULL
+# include <stddef.h>
+#else
+# include <stdlib.h>		/* Just for NULL.  */
+#endif
+
+#include "gettextP.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+
+/* @@ end of prolog @@ */
+
+/* Names for the libintl functions are a problem.  They must not clash
+   with existing names and they should follow ANSI C.  But this source
+   code is also used in GNU C Library where the names have a __
+   prefix.  So we have to make a difference here.  */
+#ifdef _LIBC
+# define GETTEXT __gettext
+# define DCGETTEXT INTUSE(__dcgettext)
+#else
+# define GETTEXT libintl_gettext
+# define DCGETTEXT libintl_dcgettext
+#endif
+
+/* Look up MSGID in the current default message catalog for the current
+   LC_MESSAGES locale.  If not found, returns MSGID itself (the default
+   text).  */
+char *
+GETTEXT (const char *msgid)
+{
+  return DCGETTEXT (NULL, msgid, LC_MESSAGES);
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library.  */
+weak_alias (__gettext, gettext);
+#endif
diff --git a/intl/gettextP.h b/intl/gettextP.h
new file mode 100644
index 0000000..5706fb5
--- /dev/null
+++ b/intl/gettextP.h
@@ -0,0 +1,297 @@
+/* Header describing internals of libintl library.
+   Copyright (C) 1995-1999, 2000-2007 Free Software Foundation, Inc.
+   Written by Ulrich Drepper <drepper at cygnus.com>, 1995.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+#ifndef _GETTEXTP_H
+#define _GETTEXTP_H
+
+#include <stddef.h>		/* Get size_t.  */
+
+#ifdef _LIBC
+# include "../iconv/gconv_int.h"
+#else
+# if HAVE_ICONV
+#  include <iconv.h>
+# endif
+#endif
+
+/* Handle multi-threaded applications.  */
+#ifdef _LIBC
+# include <bits/libc-lock.h>
+# define gl_rwlock_define __libc_rwlock_define
+#else
+# include "lock.h"
+#endif
+
+#ifdef _LIBC
+extern char *__gettext (const char *__msgid);
+extern char *__dgettext (const char *__domainname, const char *__msgid);
+extern char *__dcgettext (const char *__domainname, const char *__msgid,
+			  int __category);
+extern char *__ngettext (const char *__msgid1, const char *__msgid2,
+			 unsigned long int __n);
+extern char *__dngettext (const char *__domainname,
+			  const char *__msgid1, const char *__msgid2,
+			  unsigned long int n);
+extern char *__dcngettext (const char *__domainname,
+			   const char *__msgid1, const char *__msgid2,
+			   unsigned long int __n, int __category);
+extern char *__dcigettext (const char *__domainname,
+			   const char *__msgid1, const char *__msgid2,
+			   int __plural, unsigned long int __n,
+			   int __category);
+extern char *__textdomain (const char *__domainname);
+extern char *__bindtextdomain (const char *__domainname,
+			       const char *__dirname);
+extern char *__bind_textdomain_codeset (const char *__domainname,
+					const char *__codeset);
+extern void _nl_finddomain_subfreeres (void) attribute_hidden;
+extern void _nl_unload_domain (struct loaded_domain *__domain)
+     internal_function attribute_hidden;
+#else
+/* Declare the exported libintl_* functions, in a way that allows us to
+   call them under their real name.  */
+# undef _INTL_REDIRECT_INLINE
+# undef _INTL_REDIRECT_MACROS
+# define _INTL_REDIRECT_MACROS
+# include "libgnuintl.h"
+# ifdef IN_LIBGLOCALE
+extern char *gl_dcigettext (const char *__domainname,
+			    const char *__msgid1, const char *__msgid2,
+			    int __plural, unsigned long int __n,
+			    int __category,
+			    const char *__localename, const char *__encoding);
+# else
+extern char *libintl_dcigettext (const char *__domainname,
+				 const char *__msgid1, const char *__msgid2,
+				 int __plural, unsigned long int __n,
+				 int __category);
+# endif
+#endif
+
+#include "loadinfo.h"
+
+#include "gmo.h"		/* Get nls_uint32.  */
+
+/* @@ end of prolog @@ */
+
+#ifndef internal_function
+# define internal_function
+#endif
+
+#ifndef attribute_hidden
+# define attribute_hidden
+#endif
+
+/* Tell the compiler when a conditional or integer expression is
+   almost always true or almost always false.  */
+#ifndef HAVE_BUILTIN_EXPECT
+# define __builtin_expect(expr, val) (expr)
+#endif
+
+#ifndef W
+# define W(flag, data) ((flag) ? SWAP (data) : (data))
+#endif
+
+
+#ifdef _LIBC
+# include <byteswap.h>
+# define SWAP(i) bswap_32 (i)
+#else
+static inline nls_uint32
+# ifdef __cplusplus
+SWAP (nls_uint32 i)
+# else
+SWAP (i)
+     nls_uint32 i;
+# endif
+{
+  return (i << 24) | ((i & 0xff00) << 8) | ((i >> 8) & 0xff00) | (i >> 24);
+}
+#endif
+
+
+/* In-memory representation of system dependent string.  */
+struct sysdep_string_desc
+{
+  /* Length of addressed string, including the trailing NUL.  */
+  size_t length;
+  /* Pointer to addressed string.  */
+  const char *pointer;
+};
+
+/* Cache of translated strings after charset conversion.
+   Note: The strings are converted to the target encoding only on an as-needed
+   basis.  */
+struct converted_domain
+{
+  /* The target encoding name.  */
+  const char *encoding;
+  /* The descriptor for conversion from the message catalog's encoding to
+     this target encoding.  */
+#ifdef _LIBC
+  __gconv_t conv;
+#else
+# if HAVE_ICONV
+  iconv_t conv;
+# endif
+#endif
+  /* The table of translated strings after charset conversion.  */
+  char **conv_tab;
+};
+
+/* The representation of an opened message catalog.  */
+struct loaded_domain
+{
+  /* Pointer to memory containing the .mo file.  */
+  const char *data;
+  /* 1 if the memory is mmap()ed, 0 if the memory is malloc()ed.  */
+  int use_mmap;
+  /* Size of mmap()ed memory.  */
+  size_t mmap_size;
+  /* 1 if the .mo file uses a different endianness than this machine.  */
+  int must_swap;
+  /* Pointer to additional malloc()ed memory.  */
+  void *malloced;
+
+  /* Number of static strings pairs.  */
+  nls_uint32 nstrings;
+  /* Pointer to descriptors of original strings in the file.  */
+  const struct string_desc *orig_tab;
+  /* Pointer to descriptors of translated strings in the file.  */
+  const struct string_desc *trans_tab;
+
+  /* Number of system dependent strings pairs.  */
+  nls_uint32 n_sysdep_strings;
+  /* Pointer to descriptors of original sysdep strings.  */
+  const struct sysdep_string_desc *orig_sysdep_tab;
+  /* Pointer to descriptors of translated sysdep strings.  */
+  const struct sysdep_string_desc *trans_sysdep_tab;
+
+  /* Size of hash table.  */
+  nls_uint32 hash_size;
+  /* Pointer to hash table.  */
+  const nls_uint32 *hash_tab;
+  /* 1 if the hash table uses a different endianness than this machine.  */
+  int must_swap_hash_tab;
+
+  /* Cache of charset conversions of the translated strings.  */
+  struct converted_domain *conversions;
+  size_t nconversions;
+  gl_rwlock_define (, conversions_lock)
+
+  const struct expression *plural;
+  unsigned long int nplurals;
+};
+
+/* We want to allocate a string at the end of the struct.  But ISO C
+   doesn't allow zero sized arrays.  */
+#ifdef __GNUC__
+# define ZERO 0
+#else
+# define ZERO 1
+#endif
+
+/* A set of settings bound to a message domain.  Used to store settings
+   from bindtextdomain() and bind_textdomain_codeset().  */
+struct binding
+{
+  struct binding *next;
+  char *dirname;
+  char *codeset;
+  char domainname[ZERO];
+};
+
+/* A counter which is incremented each time some previous translations
+   become invalid.
+   This variable is part of the external ABI of the GNU libintl.  */
+#ifdef IN_LIBGLOCALE
+# include <glocale/config.h>
+extern LIBGLOCALE_DLL_EXPORTED int _nl_msg_cat_cntr;
+#else
+extern LIBINTL_DLL_EXPORTED int _nl_msg_cat_cntr;
+#endif
+
+#ifndef _LIBC
+extern const char *_nl_language_preferences_default (void);
+# define gl_locale_name_canonicalize _nl_locale_name_canonicalize
+extern void _nl_locale_name_canonicalize (char *name);
+# define gl_locale_name_posix _nl_locale_name_posix
+extern const char *_nl_locale_name_posix (int category,
+					  const char *categoryname);
+# define gl_locale_name_default _nl_locale_name_default
+extern const char *_nl_locale_name_default (void);
+# define gl_locale_name _nl_locale_name
+extern const char *_nl_locale_name (int category, const char *categoryname);
+#endif
+
+struct loaded_l10nfile *_nl_find_domain (const char *__dirname, char *__locale,
+					 const char *__domainname,
+					 struct binding *__domainbinding)
+     internal_function;
+void _nl_load_domain (struct loaded_l10nfile *__domain,
+		      struct binding *__domainbinding)
+     internal_function;
+
+#ifdef IN_LIBGLOCALE
+char *_nl_find_msg (struct loaded_l10nfile *domain_file,
+		    struct binding *domainbinding, const char *encoding,
+		    const char *msgid,
+		    size_t *lengthp)
+     internal_function;
+#else
+char *_nl_find_msg (struct loaded_l10nfile *domain_file,
+		    struct binding *domainbinding, const char *msgid,
+		    int convert, size_t *lengthp)
+     internal_function;
+#endif
+
+/* The internal variables in the standalone libintl.a must have different
+   names than the internal variables in GNU libc, otherwise programs
+   using libintl.a cannot be linked statically.  */
+#if !defined _LIBC
+# define _nl_default_dirname libintl_nl_default_dirname
+# define _nl_domain_bindings libintl_nl_domain_bindings
+#endif
+
+/* Contains the default location of the message catalogs.  */
+extern const char _nl_default_dirname[];
+#ifdef _LIBC
+libc_hidden_proto (_nl_default_dirname)
+#endif
+
+/* List with bindings of specific domains.  */
+extern struct binding *_nl_domain_bindings;
+
+/* The internal variables in the standalone libintl.a must have different
+   names than the internal variables in GNU libc, otherwise programs
+   using libintl.a cannot be linked statically.  */
+#if !defined _LIBC
+# define _nl_default_default_domain libintl_nl_default_default_domain
+# define _nl_current_default_domain libintl_nl_current_default_domain
+#endif
+
+/* Name of the default text domain.  */
+extern const char _nl_default_default_domain[] attribute_hidden;
+
+/* Default text domain in which entries for gettext(3) are to be found.  */
+extern const char *_nl_current_default_domain attribute_hidden;
+
+/* @@ begin of epilog @@ */
+
+#endif /* gettextP.h  */
diff --git a/intl/gmo.h b/intl/gmo.h
new file mode 100644
index 0000000..da9dbaa
--- /dev/null
+++ b/intl/gmo.h
@@ -0,0 +1,152 @@
+/* Description of GNU message catalog format: general file layout.
+   Copyright (C) 1995, 1997, 2000-2002, 2004, 2006 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+#ifndef _GETTEXT_H
+#define _GETTEXT_H 1
+
+#include <limits.h>
+
+/* @@ end of prolog @@ */
+
+/* The magic number of the GNU message catalog format.  */
+#define _MAGIC 0x950412de
+#define _MAGIC_SWAPPED 0xde120495
+
+/* Revision number of the currently used .mo (binary) file format.  */
+#define MO_REVISION_NUMBER 0
+#define MO_REVISION_NUMBER_WITH_SYSDEP_I 1
+
+/* The following contortions are an attempt to use the C preprocessor
+   to determine an unsigned integral type that is 32 bits wide.  An
+   alternative approach is to use autoconf's AC_CHECK_SIZEOF macro, but
+   as of version autoconf-2.13, the AC_CHECK_SIZEOF macro doesn't work
+   when cross-compiling.  */
+
+#if __STDC__
+# define UINT_MAX_32_BITS 4294967295U
+#else
+# define UINT_MAX_32_BITS 0xFFFFFFFF
+#endif
+
+/* If UINT_MAX isn't defined, assume it's a 32-bit type.
+   This should be valid for all systems GNU cares about because
+   that doesn't include 16-bit systems, and only modern systems
+   (that certainly have <limits.h>) have 64+-bit integral types.  */
+
+#ifndef UINT_MAX
+# define UINT_MAX UINT_MAX_32_BITS
+#endif
+
+#if UINT_MAX == UINT_MAX_32_BITS
+typedef unsigned nls_uint32;
+#else
+# if USHRT_MAX == UINT_MAX_32_BITS
+typedef unsigned short nls_uint32;
+# else
+#  if ULONG_MAX == UINT_MAX_32_BITS
+typedef unsigned long nls_uint32;
+#  else
+  /* The following line is intended to throw an error.  Using #error is
+     not portable enough.  */
+  "Cannot determine unsigned 32-bit data type."
+#  endif
+# endif
+#endif
+
+
+/* Header for binary .mo file format.  */
+struct mo_file_header
+{
+  /* The magic number.  */
+  nls_uint32 magic;
+  /* The revision number of the file format.  */
+  nls_uint32 revision;
+
+  /* The following are only used in .mo files with major revision 0 or 1.  */
+
+  /* The number of strings pairs.  */
+  nls_uint32 nstrings;
+  /* Offset of table with start offsets of original strings.  */
+  nls_uint32 orig_tab_offset;
+  /* Offset of table with start offsets of translated strings.  */
+  nls_uint32 trans_tab_offset;
+  /* Size of hash table.  */
+  nls_uint32 hash_tab_size;
+  /* Offset of first hash table entry.  */
+  nls_uint32 hash_tab_offset;
+
+  /* The following are only used in .mo files with minor revision >= 1.  */
+
+  /* The number of system dependent segments.  */
+  nls_uint32 n_sysdep_segments;
+  /* Offset of table describing system dependent segments.  */
+  nls_uint32 sysdep_segments_offset;
+  /* The number of system dependent strings pairs.  */
+  nls_uint32 n_sysdep_strings;
+  /* Offset of table with start offsets of original sysdep strings.  */
+  nls_uint32 orig_sysdep_tab_offset;
+  /* Offset of table with start offsets of translated sysdep strings.  */
+  nls_uint32 trans_sysdep_tab_offset;
+};
+
+/* Descriptor for static string contained in the binary .mo file.  */
+struct string_desc
+{
+  /* Length of addressed string, not including the trailing NUL.  */
+  nls_uint32 length;
+  /* Offset of string in file.  */
+  nls_uint32 offset;
+};
+
+/* The following are only used in .mo files with minor revision >= 1.  */
+
+/* Descriptor for system dependent string segment.  */
+struct sysdep_segment
+{
+  /* Length of addressed string, including the trailing NUL.  */
+  nls_uint32 length;
+  /* Offset of string in file.  */
+  nls_uint32 offset;
+};
+
+/* Pair of a static and a system dependent segment, in struct sysdep_string.  */
+struct segment_pair
+{
+  /* Size of static segment.  */
+  nls_uint32 segsize;
+  /* Reference to system dependent string segment, or ~0 at the end.  */
+  nls_uint32 sysdepref;
+};
+
+/* Descriptor for system dependent string.  */
+struct sysdep_string
+{
+  /* Offset of static string segments in file.  */
+  nls_uint32 offset;
+  /* Alternating sequence of static and system dependent segments.
+     The last segment is a static segment, including the trailing NUL.  */
+  struct segment_pair segments[1];
+};
+
+/* Marker for the end of the segments[] array.  This has the value 0xFFFFFFFF,
+   regardless whether 'int' is 16 bit, 32 bit, or 64 bit.  */
+#define SEGMENTS_END ((nls_uint32) ~0)
+
+/* @@ begin of epilog @@ */
+
+#endif	/* gettext.h  */
diff --git a/intl/hash-string.c b/intl/hash-string.c
new file mode 100644
index 0000000..3c513f0
--- /dev/null
+++ b/intl/hash-string.c
@@ -0,0 +1,51 @@
+/* Implements a string hashing function.
+   Copyright (C) 1995, 1997, 1998, 2000, 2003 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Lesser General Public
+   License as published by the Free Software Foundation; either
+   version 2.1 of the License, or (at your option) any later version.
+
+   The GNU C Library 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
+   Lesser General Public License for more details.
+
+   You should have received a copy of the GNU Lesser General Public
+   License along with the GNU C Library; if not, write to the Free
+   Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+/* Specification.  */
+#include "hash-string.h"
+
+
+/* Defines the so called `hashpjw' function by P.J. Weinberger
+   [see Aho/Sethi/Ullman, COMPILERS: Principles, Techniques and Tools,
+   1986, 1987 Bell Telephone Laboratories, Inc.]  */
+unsigned long int
+__hash_string (const char *str_param)
+{
+  unsigned long int hval, g;
+  const char *str = str_param;
+
+  /* Compute the hash value for the given string.  */
+  hval = 0;
+  while (*str != '\0')
+    {
+      hval <<= 4;
+      hval += (unsigned char) *str++;
+      g = hval & ((unsigned long int) 0xf << (HASHWORDBITS - 4));
+      if (g != 0)
+	{
+	  hval ^= g >> (HASHWORDBITS - 8);
+	  hval ^= g;
+	}
+    }
+  return hval;
+}
diff --git a/intl/hash-string.h b/intl/hash-string.h
new file mode 100644
index 0000000..98c07e4
--- /dev/null
+++ b/intl/hash-string.h
@@ -0,0 +1,36 @@
+/* Description of GNU message catalog format: string hashing function.
+   Copyright (C) 1995, 1997-1998, 2000-2003, 2005 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+/* @@ end of prolog @@ */
+
+/* We assume to have `unsigned long int' value with at least 32 bits.  */
+#define HASHWORDBITS 32
+
+
+#ifndef _LIBC
+# ifdef IN_LIBINTL
+#  define __hash_string libintl_hash_string
+# else
+#  define __hash_string hash_string
+# endif
+#endif
+
+/* Defines the so called `hashpjw' function by P.J. Weinberger
+   [see Aho/Sethi/Ullman, COMPILERS: Principles, Techniques and Tools,
+   1986, 1987 Bell Telephone Laboratories, Inc.]  */
+extern unsigned long int __hash_string (const char *str_param);
diff --git a/intl/intl-compat.c b/intl/intl-compat.c
new file mode 100644
index 0000000..9b9ecbb
--- /dev/null
+++ b/intl/intl-compat.c
@@ -0,0 +1,133 @@
+/* intl-compat.c - Stub functions to call gettext functions from GNU gettext
+   Library.
+   Copyright (C) 1995, 2000-2003, 2005 Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "gettextP.h"
+
+/* @@ end of prolog @@ */
+
+/* This file redirects the gettext functions (without prefix) to those
+   defined in the included GNU libintl library (with "libintl_" prefix).
+   It is compiled into libintl in order to make the AM_GNU_GETTEXT test
+   of gettext <= 0.11.2 work with the libintl library >= 0.11.3 which
+   has the redirections primarily in the <libintl.h> include file.
+   It is also compiled into libgnuintl so that libgnuintl.so can be used
+   as LD_PRELOADable library on glibc systems, to provide the extra
+   features that the functions in the libc don't have (namely, logging).  */
+
+
+#undef gettext
+#undef dgettext
+#undef dcgettext
+#undef ngettext
+#undef dngettext
+#undef dcngettext
+#undef textdomain
+#undef bindtextdomain
+#undef bind_textdomain_codeset
+
+
+/* When building a DLL, we must export some functions.  Note that because
+   the functions are only defined for binary backward compatibility, we
+   don't need to use __declspec(dllimport) in any case.  */
+#if HAVE_VISIBILITY && BUILDING_DLL
+# define DLL_EXPORTED __attribute__((__visibility__("default")))
+#elif defined _MSC_VER && BUILDING_DLL
+# define DLL_EXPORTED __declspec(dllexport)
+#else
+# define DLL_EXPORTED
+#endif
+
+
+DLL_EXPORTED
+char *
+gettext (const char *msgid)
+{
+  return libintl_gettext (msgid);
+}
+
+
+DLL_EXPORTED
+char *
+dgettext (const char *domainname, const char *msgid)
+{
+  return libintl_dgettext (domainname, msgid);
+}
+
+
+DLL_EXPORTED
+char *
+dcgettext (const char *domainname, const char *msgid, int category)
+{
+  return libintl_dcgettext (domainname, msgid, category);
+}
+
+
+DLL_EXPORTED
+char *
+ngettext (const char *msgid1, const char *msgid2, unsigned long int n)
+{
+  return libintl_ngettext (msgid1, msgid2, n);
+}
+
+
+DLL_EXPORTED
+char *
+dngettext (const char *domainname,
+	   const char *msgid1, const char *msgid2, unsigned long int n)
+{
+  return libintl_dngettext (domainname, msgid1, msgid2, n);
+}
+
+
+DLL_EXPORTED
+char *
+dcngettext (const char *domainname,
+	    const char *msgid1, const char *msgid2, unsigned long int n,
+	    int category)
+{
+  return libintl_dcngettext (domainname, msgid1, msgid2, n, category);
+}
+
+
+DLL_EXPORTED
+char *
+textdomain (const char *domainname)
+{
+  return libintl_textdomain (domainname);
+}
+
+
+DLL_EXPORTED
+char *
+bindtextdomain (const char *domainname, const char *dirname)
+{
+  return libintl_bindtextdomain (domainname, dirname);
+}
+
+
+DLL_EXPORTED
+char *
+bind_textdomain_codeset (const char *domainname, const char *codeset)
+{
+  return libintl_bind_textdomain_codeset (domainname, codeset);
+}
diff --git a/intl/intl-exports.c b/intl/intl-exports.c
new file mode 100644
index 0000000..7176589
--- /dev/null
+++ b/intl/intl-exports.c
@@ -0,0 +1,36 @@
+/* List of exported symbols of libintl on Cygwin.
+   Copyright (C) 2006 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno at clisp.org>, 2006.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+ /* IMP(x) is a symbol that contains the address of x.  */
+#define IMP(x) _imp__##x
+
+ /* Ensure that the variable x is exported from the library, and that a
+    pseudo-variable IMP(x) is available.  */
+#define VARIABLE(x) \
+ /* Export x without redefining x.  This code was found by compiling a	\
+    snippet:								\
+      extern __declspec(dllexport) int x; int x = 42;  */		\
+ asm (".section .drectve\n");						\
+ asm (".ascii \" -export:" #x ",data\"\n");				\
+ asm (".data\n");							\
+ /* Allocate a pseudo-variable IMP(x).  */				\
+ extern int x;								\
+ void * IMP(x) = &x;
+
+VARIABLE(libintl_version)
diff --git a/intl/l10nflist.c b/intl/l10nflist.c
new file mode 100644
index 0000000..365aeb7
--- /dev/null
+++ b/intl/l10nflist.c
@@ -0,0 +1,400 @@
+/* Copyright (C) 1995-1999, 2000-2006 Free Software Foundation, Inc.
+   Contributed by Ulrich Drepper <drepper at gnu.ai.mit.edu>, 1995.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+/* Tell glibc's <string.h> to provide a prototype for stpcpy().
+   This must come before <config.h> because <config.h> may include
+   <features.h>, and once <features.h> has been included, it's too late.  */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE	1
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <string.h>
+
+#if defined _LIBC || defined HAVE_ARGZ_H
+# include <argz.h>
+#endif
+#include <ctype.h>
+#include <sys/types.h>
+#include <stdlib.h>
+
+#include "loadinfo.h"
+
+/* On some strange systems still no definition of NULL is found.  Sigh!  */
+#ifndef NULL
+# if defined __STDC__ && __STDC__
+#  define NULL ((void *) 0)
+# else
+#  define NULL 0
+# endif
+#endif
+
+/* @@ end of prolog @@ */
+
+#ifdef _LIBC
+/* Rename the non ANSI C functions.  This is required by the standard
+   because some ANSI C functions will require linking with this object
+   file and the name space must not be polluted.  */
+# ifndef stpcpy
+#  define stpcpy(dest, src) __stpcpy(dest, src)
+# endif
+#else
+# ifndef HAVE_STPCPY
+static char *stpcpy (char *dest, const char *src);
+# endif
+#endif
+
+/* Pathname support.
+   ISSLASH(C)           tests whether C is a directory separator character.
+   IS_ABSOLUTE_PATH(P)  tests whether P is an absolute path.  If it is not,
+                        it may be concatenated to a directory pathname.
+ */
+#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__
+  /* Win32, Cygwin, OS/2, DOS */
+# define ISSLASH(C) ((C) == '/' || (C) == '\\')
+# define HAS_DEVICE(P) \
+    ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \
+     && (P)[1] == ':')
+# define IS_ABSOLUTE_PATH(P) (ISSLASH ((P)[0]) || HAS_DEVICE (P))
+#else
+  /* Unix */
+# define ISSLASH(C) ((C) == '/')
+# define IS_ABSOLUTE_PATH(P) ISSLASH ((P)[0])
+#endif
+
+/* Define function which are usually not available.  */
+
+#ifdef _LIBC
+# define __argz_count(argz, len) INTUSE(__argz_count) (argz, len)
+#elif defined HAVE_ARGZ_COUNT
+# undef __argz_count
+# define __argz_count argz_count
+#else
+/* Returns the number of strings in ARGZ.  */
+static size_t
+argz_count__ (const char *argz, size_t len)
+{
+  size_t count = 0;
+  while (len > 0)
+    {
+      size_t part_len = strlen (argz);
+      argz += part_len + 1;
+      len -= part_len + 1;
+      count++;
+    }
+  return count;
+}
+# undef __argz_count
+# define __argz_count(argz, len) argz_count__ (argz, len)
+#endif	/* !_LIBC && !HAVE_ARGZ_COUNT */
+
+#ifdef _LIBC
+# define __argz_stringify(argz, len, sep) \
+  INTUSE(__argz_stringify) (argz, len, sep)
+#elif defined HAVE_ARGZ_STRINGIFY
+# undef __argz_stringify
+# define __argz_stringify argz_stringify
+#else
+/* Make '\0' separated arg vector ARGZ printable by converting all the '\0's
+   except the last into the character SEP.  */
+static void
+argz_stringify__ (char *argz, size_t len, int sep)
+{
+  while (len > 0)
+    {
+      size_t part_len = strlen (argz);
+      argz += part_len;
+      len -= part_len + 1;
+      if (len > 0)
+	*argz++ = sep;
+    }
+}
+# undef __argz_stringify
+# define __argz_stringify(argz, len, sep) argz_stringify__ (argz, len, sep)
+#endif	/* !_LIBC && !HAVE_ARGZ_STRINGIFY */
+
+#ifdef _LIBC
+#elif defined HAVE_ARGZ_NEXT
+# undef __argz_next
+# define __argz_next argz_next
+#else
+static char *
+argz_next__ (char *argz, size_t argz_len, const char *entry)
+{
+  if (entry)
+    {
+      if (entry < argz + argz_len)
+        entry = strchr (entry, '\0') + 1;
+
+      return entry >= argz + argz_len ? NULL : (char *) entry;
+    }
+  else
+    if (argz_len > 0)
+      return argz;
+    else
+      return 0;
+}
+# undef __argz_next
+# define __argz_next(argz, len, entry) argz_next__ (argz, len, entry)
+#endif	/* !_LIBC && !HAVE_ARGZ_NEXT */
+
+
+/* Return number of bits set in X.  */
+static inline int
+pop (int x)
+{
+  /* We assume that no more than 16 bits are used.  */
+  x = ((x & ~0x5555) >> 1) + (x & 0x5555);
+  x = ((x & ~0x3333) >> 2) + (x & 0x3333);
+  x = ((x >> 4) + x) & 0x0f0f;
+  x = ((x >> 8) + x) & 0xff;
+
+  return x;
+}
+
+

+struct loaded_l10nfile *
+_nl_make_l10nflist (struct loaded_l10nfile **l10nfile_list,
+		    const char *dirlist, size_t dirlist_len,
+		    int mask, const char *language, const char *territory,
+		    const char *codeset, const char *normalized_codeset,
+		    const char *modifier,
+		    const char *filename, int do_allocate)
+{
+  char *abs_filename;
+  struct loaded_l10nfile **lastp;
+  struct loaded_l10nfile *retval;
+  char *cp;
+  size_t dirlist_count;
+  size_t entries;
+  int cnt;
+
+  /* If LANGUAGE contains an absolute directory specification, we ignore
+     DIRLIST.  */
+  if (IS_ABSOLUTE_PATH (language))
+    dirlist_len = 0;
+
+  /* Allocate room for the full file name.  */
+  abs_filename = (char *) malloc (dirlist_len
+				  + strlen (language)
+				  + ((mask & XPG_TERRITORY) != 0
+				     ? strlen (territory) + 1 : 0)
+				  + ((mask & XPG_CODESET) != 0
+				     ? strlen (codeset) + 1 : 0)
+				  + ((mask & XPG_NORM_CODESET) != 0
+				     ? strlen (normalized_codeset) + 1 : 0)
+				  + ((mask & XPG_MODIFIER) != 0
+				     ? strlen (modifier) + 1 : 0)
+				  + 1 + strlen (filename) + 1);
+
+  if (abs_filename == NULL)
+    return NULL;
+
+  /* Construct file name.  */
+  cp = abs_filename;
+  if (dirlist_len > 0)
+    {
+      memcpy (cp, dirlist, dirlist_len);
+      __argz_stringify (cp, dirlist_len, PATH_SEPARATOR);
+      cp += dirlist_len;
+      cp[-1] = '/';
+    }
+
+  cp = stpcpy (cp, language);
+
+  if ((mask & XPG_TERRITORY) != 0)
+    {
+      *cp++ = '_';
+      cp = stpcpy (cp, territory);
+    }
+  if ((mask & XPG_CODESET) != 0)
+    {
+      *cp++ = '.';
+      cp = stpcpy (cp, codeset);
+    }
+  if ((mask & XPG_NORM_CODESET) != 0)
+    {
+      *cp++ = '.';
+      cp = stpcpy (cp, normalized_codeset);
+    }
+  if ((mask & XPG_MODIFIER) != 0)
+    {
+      *cp++ = '@';
+      cp = stpcpy (cp, modifier);
+    }
+
+  *cp++ = '/';
+  stpcpy (cp, filename);
+
+  /* Look in list of already loaded domains whether it is already
+     available.  */
+  lastp = l10nfile_list;
+  for (retval = *l10nfile_list; retval != NULL; retval = retval->next)
+    if (retval->filename != NULL)
+      {
+	int compare = strcmp (retval->filename, abs_filename);
+	if (compare == 0)
+	  /* We found it!  */
+	  break;
+	if (compare < 0)
+	  {
+	    /* It's not in the list.  */
+	    retval = NULL;
+	    break;
+	  }
+
+	lastp = &retval->next;
+      }
+
+  if (retval != NULL || do_allocate == 0)
+    {
+      free (abs_filename);
+      return retval;
+    }
+
+  dirlist_count = (dirlist_len > 0 ? __argz_count (dirlist, dirlist_len) : 1);
+
+  /* Allocate a new loaded_l10nfile.  */
+  retval =
+    (struct loaded_l10nfile *)
+    malloc (sizeof (*retval)
+	    + (((dirlist_count << pop (mask)) + (dirlist_count > 1 ? 1 : 0))
+	       * sizeof (struct loaded_l10nfile *)));
+  if (retval == NULL)
+    {
+      free (abs_filename);
+      return NULL;
+    }
+
+  retval->filename = abs_filename;
+
+  /* We set retval->data to NULL here; it is filled in later.
+     Setting retval->decided to 1 here means that retval does not
+     correspond to a real file (dirlist_count > 1) or is not worth
+     looking up (if an unnormalized codeset was specified).  */
+  retval->decided = (dirlist_count > 1
+		     || ((mask & XPG_CODESET) != 0
+			 && (mask & XPG_NORM_CODESET) != 0));
+  retval->data = NULL;
+
+  retval->next = *lastp;
+  *lastp = retval;
+
+  entries = 0;
+  /* Recurse to fill the inheritance list of RETVAL.
+     If the DIRLIST is a real list (i.e. DIRLIST_COUNT > 1), the RETVAL
+     entry does not correspond to a real file; retval->filename contains
+     colons.  In this case we loop across all elements of DIRLIST and
+     across all bit patterns dominated by MASK.
+     If the DIRLIST is a single directory or entirely redundant (i.e.
+     DIRLIST_COUNT == 1), we loop across all bit patterns dominated by
+     MASK, excluding MASK itself.
+     In either case, we loop down from MASK to 0.  This has the effect
+     that the extra bits in the locale name are dropped in this order:
+     first the modifier, then the territory, then the codeset, then the
+     normalized_codeset.  */
+  for (cnt = dirlist_count > 1 ? mask : mask - 1; cnt >= 0; --cnt)
+    if ((cnt & ~mask) == 0
+	&& !((cnt & XPG_CODESET) != 0 && (cnt & XPG_NORM_CODESET) != 0))
+      {
+	if (dirlist_count > 1)
+	  {
+	    /* Iterate over all elements of the DIRLIST.  */
+	    char *dir = NULL;
+
+	    while ((dir = __argz_next ((char *) dirlist, dirlist_len, dir))
+		   != NULL)
+	      retval->successor[entries++]
+		= _nl_make_l10nflist (l10nfile_list, dir, strlen (dir) + 1,
+				      cnt, language, territory, codeset,
+				      normalized_codeset, modifier, filename,
+				      1);
+	  }
+	else
+	  retval->successor[entries++]
+	    = _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len,
+				  cnt, language, territory, codeset,
+				  normalized_codeset, modifier, filename, 1);
+      }
+  retval->successor[entries] = NULL;
+
+  return retval;
+}
+

+/* Normalize codeset name.  There is no standard for the codeset
+   names.  Normalization allows the user to use any of the common
+   names.  The return value is dynamically allocated and has to be
+   freed by the caller.  */
+const char *
+_nl_normalize_codeset (const char *codeset, size_t name_len)
+{
+  int len = 0;
+  int only_digit = 1;
+  char *retval;
+  char *wp;
+  size_t cnt;
+
+  for (cnt = 0; cnt < name_len; ++cnt)
+    if (isalnum ((unsigned char) codeset[cnt]))
+      {
+	++len;
+
+	if (isalpha ((unsigned char) codeset[cnt]))
+	  only_digit = 0;
+      }
+
+  retval = (char *) malloc ((only_digit ? 3 : 0) + len + 1);
+
+  if (retval != NULL)
+    {
+      if (only_digit)
+	wp = stpcpy (retval, "iso");
+      else
+	wp = retval;
+
+      for (cnt = 0; cnt < name_len; ++cnt)
+	if (isalpha ((unsigned char) codeset[cnt]))
+	  *wp++ = tolower ((unsigned char) codeset[cnt]);
+	else if (isdigit ((unsigned char) codeset[cnt]))
+	  *wp++ = codeset[cnt];
+
+      *wp = '\0';
+    }
+
+  return (const char *) retval;
+}
+
+
+/* @@ begin of epilog @@ */
+
+/* We don't want libintl.a to depend on any other library.  So we
+   avoid the non-standard function stpcpy.  In GNU C Library this
+   function is available, though.  Also allow the symbol HAVE_STPCPY
+   to be defined.  */
+#if !_LIBC && !HAVE_STPCPY
+static char *
+stpcpy (char *dest, const char *src)
+{
+  while ((*dest++ = *src++) != '\0')
+    /* Do nothing. */ ;
+  return dest - 1;
+}
+#endif
diff --git a/intl/langprefs.c b/intl/langprefs.c
new file mode 100644
index 0000000..59c8def
--- /dev/null
+++ b/intl/langprefs.c
@@ -0,0 +1,130 @@
+/* Determine the user's language preferences.
+   Copyright (C) 2004-2006 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+/* Written by Bruno Haible <bruno at clisp.org>.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdlib.h>
+
+#if HAVE_CFPREFERENCESCOPYAPPVALUE
+# include <string.h>
+# include <CoreFoundation/CFPreferences.h>
+# include <CoreFoundation/CFPropertyList.h>
+# include <CoreFoundation/CFArray.h>
+# include <CoreFoundation/CFString.h>
+extern void _nl_locale_name_canonicalize (char *name);
+#endif
+
+/* Determine the user's language preferences, as a colon separated list of
+   locale names in XPG syntax
+     language[_territory][.codeset][@modifier]
+   The result must not be freed; it is statically allocated.
+   The LANGUAGE environment variable does not need to be considered; it is
+   already taken into account by the caller.  */
+
+const char *
+_nl_language_preferences_default (void)
+{
+#if HAVE_CFPREFERENCESCOPYAPPVALUE /* MacOS X 10.2 or newer */
+  {
+    /* Cache the preferences list, since CoreFoundation calls are expensive.  */
+    static const char *cached_languages;
+    static int cache_initialized;
+
+    if (!cache_initialized)
+      {
+	CFTypeRef preferences =
+	  CFPreferencesCopyAppValue (CFSTR ("AppleLanguages"),
+				     kCFPreferencesCurrentApplication);
+	if (preferences != NULL
+	    && CFGetTypeID (preferences) == CFArrayGetTypeID ())
+	  {
+	    CFArrayRef prefArray = (CFArrayRef)preferences;
+	    int n = CFArrayGetCount (prefArray);
+	    char buf[256];
+	    size_t size = 0;
+	    int i;
+
+	    for (i = 0; i < n; i++)
+	      {
+		CFTypeRef element = CFArrayGetValueAtIndex (prefArray, i);
+		if (element != NULL
+		    && CFGetTypeID (element) == CFStringGetTypeID ()
+		    && CFStringGetCString ((CFStringRef)element,
+					   buf, sizeof (buf),
+					   kCFStringEncodingASCII))
+		  {
+		    _nl_locale_name_canonicalize (buf);
+		    size += strlen (buf) + 1;
+		    /* Most GNU programs use msgids in English and don't ship
+		       an en.mo message catalog.  Therefore when we see "en"
+		       in the preferences list, arrange for gettext() to
+		       return the msgid, and ignore all further elements of
+		       the preferences list.  */
+		    if (strcmp (buf, "en") == 0)
+		      break;
+		  }
+		else
+		  break;
+	      }
+	    if (size > 0)
+	      {
+		char *languages = (char *) malloc (size);
+
+		if (languages != NULL)
+		  {
+		    char *p = languages;
+
+		    for (i = 0; i < n; i++)
+		      {
+			CFTypeRef element =
+			  CFArrayGetValueAtIndex (prefArray, i);
+			if (element != NULL
+		            && CFGetTypeID (element) == CFStringGetTypeID ()
+			    && CFStringGetCString ((CFStringRef)element,
+						   buf, sizeof (buf),
+						   kCFStringEncodingASCII))
+			  {
+			    _nl_locale_name_canonicalize (buf);
+			    strcpy (p, buf);
+			    p += strlen (buf);
+			    *p++ = ':';
+			    if (strcmp (buf, "en") == 0)
+			      break;
+			  }
+			else
+			  break;
+		      }
+		    *--p = '\0';
+
+		    cached_languages = languages;
+		  }
+	      }
+	  }
+	cache_initialized = 1;
+      }
+    if (cached_languages != NULL)
+      return cached_languages;
+  }
+#endif
+
+  return NULL;
+}
diff --git a/intl/libgnuintl.h.in b/intl/libgnuintl.h.in
new file mode 100644
index 0000000..c9da798
--- /dev/null
+++ b/intl/libgnuintl.h.in
@@ -0,0 +1,419 @@
+/* Message catalogs for internationalization.
+   Copyright (C) 1995-1997, 2000-2007 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+#ifndef _LIBINTL_H
+#define _LIBINTL_H	1
+
+#include <locale.h>
+
+/* The LC_MESSAGES locale category is the category used by the functions
+   gettext() and dgettext().  It is specified in POSIX, but not in ANSI C.
+   On systems that don't define it, use an arbitrary value instead.
+   On Solaris, <locale.h> defines __LOCALE_H (or _LOCALE_H in Solaris 2.5)
+   then includes <libintl.h> (i.e. this file!) and then only defines
+   LC_MESSAGES.  To avoid a redefinition warning, don't define LC_MESSAGES
+   in this case.  */
+#if !defined LC_MESSAGES && !(defined __LOCALE_H || (defined _LOCALE_H && defined __sun))
+# define LC_MESSAGES 1729
+#endif
+
+/* We define an additional symbol to signal that we use the GNU
+   implementation of gettext.  */
+#define __USE_GNU_GETTEXT 1
+
+/* Provide information about the supported file formats.  Returns the
+   maximum minor revision number supported for a given major revision.  */
+#define __GNU_GETTEXT_SUPPORTED_REVISION(major) \
+  ((major) == 0 || (major) == 1 ? 1 : -1)
+
+/* Resolve a platform specific conflict on DJGPP.  GNU gettext takes
+   precedence over _conio_gettext.  */
+#ifdef __DJGPP__
+# undef gettext
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* Version number: (major<<16) + (minor<<8) + subminor */
+#define LIBINTL_VERSION 0x001100
+extern int libintl_version;
+
+
+/* We redirect the functions to those prefixed with "libintl_".  This is
+   necessary, because some systems define gettext/textdomain/... in the C
+   library (namely, Solaris 2.4 and newer, and GNU libc 2.0 and newer).
+   If we used the unprefixed names, there would be cases where the
+   definition in the C library would override the one in the libintl.so
+   shared library.  Recall that on ELF systems, the symbols are looked
+   up in the following order:
+     1. in the executable,
+     2. in the shared libraries specified on the link command line, in order,
+     3. in the dependencies of the shared libraries specified on the link
+        command line,
+     4. in the dlopen()ed shared libraries, in the order in which they were
+        dlopen()ed.
+   The definition in the C library would override the one in libintl.so if
+   either
+     * -lc is given on the link command line and -lintl isn't, or
+     * -lc is given on the link command line before -lintl, or
+     * libintl.so is a dependency of a dlopen()ed shared library but not
+       linked to the executable at link time.
+   Since Solaris gettext() behaves differently than GNU gettext(), this
+   would be unacceptable.
+
+   The redirection happens by default through macros in C, so that &gettext
+   is independent of the compilation unit, but through inline functions in
+   C++, in order not to interfere with the name mangling of class fields or
+   class methods called 'gettext'.  */
+
+/* The user can define _INTL_REDIRECT_INLINE or _INTL_REDIRECT_MACROS.
+   If he doesn't, we choose the method.  A third possible method is
+   _INTL_REDIRECT_ASM, supported only by GCC.  */
+#if !(defined _INTL_REDIRECT_INLINE || defined _INTL_REDIRECT_MACROS)
+# if __GNUC__ >= 2 && !(__APPLE_CC__ > 1) && !defined __MINGW32__ && !(__GNUC__ == 2 && defined _AIX) && (defined __STDC__ || defined __cplusplus)
+#  define _INTL_REDIRECT_ASM
+# else
+#  ifdef __cplusplus
+#   define _INTL_REDIRECT_INLINE
+#  else
+#   define _INTL_REDIRECT_MACROS
+#  endif
+# endif
+#endif
+/* Auxiliary macros.  */
+#ifdef _INTL_REDIRECT_ASM
+# define _INTL_ASM(cname) __asm__ (_INTL_ASMNAME (__USER_LABEL_PREFIX__, #cname))
+# define _INTL_ASMNAME(prefix,cnamestring) _INTL_STRINGIFY (prefix) cnamestring
+# define _INTL_STRINGIFY(prefix) #prefix
+#else
+# define _INTL_ASM(cname)
+#endif
+
+/* _INTL_MAY_RETURN_STRING_ARG(n) declares that the given function may return
+   its n-th argument literally.  This enables GCC to warn for example about
+   printf (gettext ("foo %y")).  */
+#if __GNUC__ >= 3 && !(__APPLE_CC__ > 1 && defined __cplusplus)
+# define _INTL_MAY_RETURN_STRING_ARG(n) __attribute__ ((__format_arg__ (n)))
+#else
+# define _INTL_MAY_RETURN_STRING_ARG(n)
+#endif
+
+/* Look up MSGID in the current default message catalog for the current
+   LC_MESSAGES locale.  If not found, returns MSGID itself (the default
+   text).  */
+#ifdef _INTL_REDIRECT_INLINE
+extern char *libintl_gettext (const char *__msgid)
+       _INTL_MAY_RETURN_STRING_ARG (1);
+static inline char *gettext (const char *__msgid)
+{
+  return libintl_gettext (__msgid);
+}
+#else
+#ifdef _INTL_REDIRECT_MACROS
+# define gettext libintl_gettext
+#endif
+extern char *gettext (const char *__msgid)
+       _INTL_ASM (libintl_gettext)
+       _INTL_MAY_RETURN_STRING_ARG (1);
+#endif
+
+/* Look up MSGID in the DOMAINNAME message catalog for the current
+   LC_MESSAGES locale.  */
+#ifdef _INTL_REDIRECT_INLINE
+extern char *libintl_dgettext (const char *__domainname, const char *__msgid)
+       _INTL_MAY_RETURN_STRING_ARG (2);
+static inline char *dgettext (const char *__domainname, const char *__msgid)
+{
+  return libintl_dgettext (__domainname, __msgid);
+}
+#else
+#ifdef _INTL_REDIRECT_MACROS
+# define dgettext libintl_dgettext
+#endif
+extern char *dgettext (const char *__domainname, const char *__msgid)
+       _INTL_ASM (libintl_dgettext)
+       _INTL_MAY_RETURN_STRING_ARG (2);
+#endif
+
+/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
+   locale.  */
+#ifdef _INTL_REDIRECT_INLINE
+extern char *libintl_dcgettext (const char *__domainname, const char *__msgid,
+				int __category)
+       _INTL_MAY_RETURN_STRING_ARG (2);
+static inline char *dcgettext (const char *__domainname, const char *__msgid,
+			       int __category)
+{
+  return libintl_dcgettext (__domainname, __msgid, __category);
+}
+#else
+#ifdef _INTL_REDIRECT_MACROS
+# define dcgettext libintl_dcgettext
+#endif
+extern char *dcgettext (const char *__domainname, const char *__msgid,
+			int __category)
+       _INTL_ASM (libintl_dcgettext)
+       _INTL_MAY_RETURN_STRING_ARG (2);
+#endif
+
+
+/* Similar to `gettext' but select the plural form corresponding to the
+   number N.  */
+#ifdef _INTL_REDIRECT_INLINE
+extern char *libintl_ngettext (const char *__msgid1, const char *__msgid2,
+			       unsigned long int __n)
+       _INTL_MAY_RETURN_STRING_ARG (1) _INTL_MAY_RETURN_STRING_ARG (2);
+static inline char *ngettext (const char *__msgid1, const char *__msgid2,
+			      unsigned long int __n)
+{
+  return libintl_ngettext (__msgid1, __msgid2, __n);
+}
+#else
+#ifdef _INTL_REDIRECT_MACROS
+# define ngettext libintl_ngettext
+#endif
+extern char *ngettext (const char *__msgid1, const char *__msgid2,
+		       unsigned long int __n)
+       _INTL_ASM (libintl_ngettext)
+       _INTL_MAY_RETURN_STRING_ARG (1) _INTL_MAY_RETURN_STRING_ARG (2);
+#endif
+
+/* Similar to `dgettext' but select the plural form corresponding to the
+   number N.  */
+#ifdef _INTL_REDIRECT_INLINE
+extern char *libintl_dngettext (const char *__domainname, const char *__msgid1,
+				const char *__msgid2, unsigned long int __n)
+       _INTL_MAY_RETURN_STRING_ARG (2) _INTL_MAY_RETURN_STRING_ARG (3);
+static inline char *dngettext (const char *__domainname, const char *__msgid1,
+			       const char *__msgid2, unsigned long int __n)
+{
+  return libintl_dngettext (__domainname, __msgid1, __msgid2, __n);
+}
+#else
+#ifdef _INTL_REDIRECT_MACROS
+# define dngettext libintl_dngettext
+#endif
+extern char *dngettext (const char *__domainname,
+			const char *__msgid1, const char *__msgid2,
+			unsigned long int __n)
+       _INTL_ASM (libintl_dngettext)
+       _INTL_MAY_RETURN_STRING_ARG (2) _INTL_MAY_RETURN_STRING_ARG (3);
+#endif
+
+/* Similar to `dcgettext' but select the plural form corresponding to the
+   number N.  */
+#ifdef _INTL_REDIRECT_INLINE
+extern char *libintl_dcngettext (const char *__domainname,
+				 const char *__msgid1, const char *__msgid2,
+				 unsigned long int __n, int __category)
+       _INTL_MAY_RETURN_STRING_ARG (2) _INTL_MAY_RETURN_STRING_ARG (3);
+static inline char *dcngettext (const char *__domainname,
+				const char *__msgid1, const char *__msgid2,
+				unsigned long int __n, int __category)
+{
+  return libintl_dcngettext (__domainname, __msgid1, __msgid2, __n, __category);
+}
+#else
+#ifdef _INTL_REDIRECT_MACROS
+# define dcngettext libintl_dcngettext
+#endif
+extern char *dcngettext (const char *__domainname,
+			 const char *__msgid1, const char *__msgid2,
+			 unsigned long int __n, int __category)
+       _INTL_ASM (libintl_dcngettext)
+       _INTL_MAY_RETURN_STRING_ARG (2) _INTL_MAY_RETURN_STRING_ARG (3);
+#endif
+
+
+#ifndef IN_LIBGLOCALE
+
+/* Set the current default message catalog to DOMAINNAME.
+   If DOMAINNAME is null, return the current default.
+   If DOMAINNAME is "", reset to the default of "messages".  */
+#ifdef _INTL_REDIRECT_INLINE
+extern char *libintl_textdomain (const char *__domainname);
+static inline char *textdomain (const char *__domainname)
+{
+  return libintl_textdomain (__domainname);
+}
+#else
+#ifdef _INTL_REDIRECT_MACROS
+# define textdomain libintl_textdomain
+#endif
+extern char *textdomain (const char *__domainname)
+       _INTL_ASM (libintl_textdomain);
+#endif
+
+/* Specify that the DOMAINNAME message catalog will be found
+   in DIRNAME rather than in the system locale data base.  */
+#ifdef _INTL_REDIRECT_INLINE
+extern char *libintl_bindtextdomain (const char *__domainname,
+				     const char *__dirname);
+static inline char *bindtextdomain (const char *__domainname,
+				    const char *__dirname)
+{
+  return libintl_bindtextdomain (__domainname, __dirname);
+}
+#else
+#ifdef _INTL_REDIRECT_MACROS
+# define bindtextdomain libintl_bindtextdomain
+#endif
+extern char *bindtextdomain (const char *__domainname, const char *__dirname)
+       _INTL_ASM (libintl_bindtextdomain);
+#endif
+
+/* Specify the character encoding in which the messages from the
+   DOMAINNAME message catalog will be returned.  */
+#ifdef _INTL_REDIRECT_INLINE
+extern char *libintl_bind_textdomain_codeset (const char *__domainname,
+					      const char *__codeset);
+static inline char *bind_textdomain_codeset (const char *__domainname,
+					     const char *__codeset)
+{
+  return libintl_bind_textdomain_codeset (__domainname, __codeset);
+}
+#else
+#ifdef _INTL_REDIRECT_MACROS
+# define bind_textdomain_codeset libintl_bind_textdomain_codeset
+#endif
+extern char *bind_textdomain_codeset (const char *__domainname,
+				      const char *__codeset)
+       _INTL_ASM (libintl_bind_textdomain_codeset);
+#endif
+
+#endif /* IN_LIBGLOCALE */
+
+
+/* Support for format strings with positions in *printf(), following the
+   POSIX/XSI specification.
+   Note: These replacements for the *printf() functions are visible only
+   in source files that #include <libintl.h> or #include "gettext.h".
+   Packages that use *printf() in source files that don't refer to _()
+   or gettext() but for which the format string could be the return value
+   of _() or gettext() need to add this #include.  Oh well.  */
+
+#if !@HAVE_POSIX_PRINTF@
+
+#include <stdio.h>
+#include <stddef.h>
+
+/* Get va_list.  */
+#if __STDC__ || defined __cplusplus || defined _MSC_VER
+# include <stdarg.h>
+#else
+# include <varargs.h>
+#endif
+
+#undef fprintf
+#define fprintf libintl_fprintf
+extern int fprintf (FILE *, const char *, ...);
+#undef vfprintf
+#define vfprintf libintl_vfprintf
+extern int vfprintf (FILE *, const char *, va_list);
+
+#undef printf
+#if defined __NetBSD__ || defined __BEOS__ || defined __CYGWIN__ || defined __MINGW32__
+/* Don't break __attribute__((format(printf,M,N))).
+   This redefinition is only possible because the libc in NetBSD, Cygwin,
+   mingw does not have a function __printf__.  */
+# define libintl_printf __printf__
+#endif
+#define printf libintl_printf
+extern int printf (const char *, ...);
+#undef vprintf
+#define vprintf libintl_vprintf
+extern int vprintf (const char *, va_list);
+
+#undef sprintf
+#define sprintf libintl_sprintf
+extern int sprintf (char *, const char *, ...);
+#undef vsprintf
+#define vsprintf libintl_vsprintf
+extern int vsprintf (char *, const char *, va_list);
+
+#if @HAVE_SNPRINTF@
+
+#undef snprintf
+#define snprintf libintl_snprintf
+extern int snprintf (char *, size_t, const char *, ...);
+#undef vsnprintf
+#define vsnprintf libintl_vsnprintf
+extern int vsnprintf (char *, size_t, const char *, va_list);
+
+#endif
+
+#if @HAVE_ASPRINTF@
+
+#undef asprintf
+#define asprintf libintl_asprintf
+extern int asprintf (char **, const char *, ...);
+#undef vasprintf
+#define vasprintf libintl_vasprintf
+extern int vasprintf (char **, const char *, va_list);
+
+#endif
+
+#if @HAVE_WPRINTF@
+
+#undef fwprintf
+#define fwprintf libintl_fwprintf
+extern int fwprintf (FILE *, const wchar_t *, ...);
+#undef vfwprintf
+#define vfwprintf libintl_vfwprintf
+extern int vfwprintf (FILE *, const wchar_t *, va_list);
+
+#undef wprintf
+#define wprintf libintl_wprintf
+extern int wprintf (const wchar_t *, ...);
+#undef vwprintf
+#define vwprintf libintl_vwprintf
+extern int vwprintf (const wchar_t *, va_list);
+
+#undef swprintf
+#define swprintf libintl_swprintf
+extern int swprintf (wchar_t *, size_t, const wchar_t *, ...);
+#undef vswprintf
+#define vswprintf libintl_vswprintf
+extern int vswprintf (wchar_t *, size_t, const wchar_t *, va_list);
+
+#endif
+
+#endif
+
+
+/* Support for relocatable packages.  */
+
+/* Sets the original and the current installation prefix of the package.
+   Relocation simply replaces a pathname starting with the original prefix
+   by the corresponding pathname with the current prefix instead.  Both
+   prefixes should be directory names without trailing slash (i.e. use ""
+   instead of "/").  */
+#define libintl_set_relocation_prefix libintl_set_relocation_prefix
+extern void
+       libintl_set_relocation_prefix (const char *orig_prefix,
+				      const char *curr_prefix);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* libintl.h */
diff --git a/intl/libintl.rc b/intl/libintl.rc
new file mode 100644
index 0000000..f00f0b3
--- /dev/null
+++ b/intl/libintl.rc
@@ -0,0 +1,38 @@
+/* Resources for intl.dll */
+
+#include <winver.h>
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION PACKAGE_VERSION_MAJOR,PACKAGE_VERSION_MINOR,PACKAGE_VERSION_SUBMINOR,0
+ PRODUCTVERSION PACKAGE_VERSION_MAJOR,PACKAGE_VERSION_MINOR,PACKAGE_VERSION_SUBMINOR,0
+ FILEFLAGSMASK 0x3fL /* VS_FFI_FILEFLAGSMASK */
+#ifdef _DEBUG
+ FILEFLAGS 0x1L  /* VS_FF_DEBUG */
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS 0x10004L  /* VOS_DOS_WINDOWS32 */
+ FILETYPE 0x2L  /* VFT_DLL */
+ FILESUBTYPE 0x0L  /* VFT2_UNKNOWN */
+BEGIN
+    BLOCK "StringFileInfo"
+    BEGIN
+        BLOCK "04090000"  /* Lang = US English, Charset = ASCII */
+        BEGIN
+            VALUE "Comments", "This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA\0"
+            VALUE "CompanyName", "Free Software Foundation\0"
+            VALUE "FileDescription", "LGPLed libintl for Windows NT/2000/XP/Vista and Windows 95/98/ME\0"
+            VALUE "FileVersion", PACKAGE_VERSION_STRING "\0"
+            VALUE "InternalName", "intl.dll\0"
+            VALUE "LegalCopyright", "Copyright (C) 1995-2007\0"
+            VALUE "LegalTrademarks", "\0"
+            VALUE "OriginalFilename", "intl.dll\0"
+            VALUE "ProductName", "libintl: accessing NLS message catalogs\0"
+            VALUE "ProductVersion", PACKAGE_VERSION_STRING "\0"
+        END
+    END
+    BLOCK "VarFileInfo"
+    BEGIN
+        VALUE "Translation", 0x0409, 0  /* US English, ASCII */
+    END
+END
diff --git a/intl/loadinfo.h b/intl/loadinfo.h
new file mode 100644
index 0000000..a7a1970
--- /dev/null
+++ b/intl/loadinfo.h
@@ -0,0 +1,132 @@
+/* Copyright (C) 1996-1999, 2000-2003, 2005-2006 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
+   Contributed by Ulrich Drepper <drepper at cygnus.com>, 1996.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+#ifndef _LOADINFO_H
+#define _LOADINFO_H	1
+
+/* Declarations of locale dependent catalog lookup functions.
+   Implemented in
+
+     localealias.c    Possibly replace a locale name by another.
+     explodename.c    Split a locale name into its various fields.
+     l10nflist.c      Generate a list of filenames of possible message catalogs.
+     finddomain.c     Find and open the relevant message catalogs.
+
+   The main function _nl_find_domain() in finddomain.c is declared
+   in gettextP.h.
+ */
+
+#ifndef internal_function
+# define internal_function
+#endif
+
+#ifndef LIBINTL_DLL_EXPORTED
+# define LIBINTL_DLL_EXPORTED
+#endif
+
+/* Tell the compiler when a conditional or integer expression is
+   almost always true or almost always false.  */
+#ifndef HAVE_BUILTIN_EXPECT
+# define __builtin_expect(expr, val) (expr)
+#endif
+
+/* Separator in PATH like lists of pathnames.  */
+#if ((defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__) || defined __EMX__ || defined __DJGPP__
+  /* Win32, OS/2, DOS */
+# define PATH_SEPARATOR ';'
+#else
+  /* Unix */
+# define PATH_SEPARATOR ':'
+#endif
+
+/* Encoding of locale name parts.  */
+#define XPG_NORM_CODESET	1
+#define XPG_CODESET		2
+#define XPG_TERRITORY		4
+#define XPG_MODIFIER		8
+
+
+struct loaded_l10nfile
+{
+  const char *filename;
+  int decided;
+
+  const void *data;
+
+  struct loaded_l10nfile *next;
+  struct loaded_l10nfile *successor[1];
+};
+
+
+/* Normalize codeset name.  There is no standard for the codeset
+   names.  Normalization allows the user to use any of the common
+   names.  The return value is dynamically allocated and has to be
+   freed by the caller.  */
+extern const char *_nl_normalize_codeset (const char *codeset,
+					  size_t name_len);
+
+/* Lookup a locale dependent file.
+   *L10NFILE_LIST denotes a pool of lookup results of locale dependent
+   files of the same kind, sorted in decreasing order of ->filename.
+   DIRLIST and DIRLIST_LEN are an argz list of directories in which to
+   look, containing at least one directory (i.e. DIRLIST_LEN > 0).
+   MASK, LANGUAGE, TERRITORY, CODESET, NORMALIZED_CODESET, MODIFIER
+   are the pieces of the locale name, as produced by _nl_explode_name().
+   FILENAME is the filename suffix.
+   The return value is the lookup result, either found in *L10NFILE_LIST,
+   or - if DO_ALLOCATE is nonzero - freshly allocated, or possibly NULL.
+   If the return value is non-NULL, it is added to *L10NFILE_LIST, and
+   its ->next field denotes the chaining inside *L10NFILE_LIST, and
+   furthermore its ->successor[] field contains a list of other lookup
+   results from which this lookup result inherits.  */
+extern struct loaded_l10nfile *
+_nl_make_l10nflist (struct loaded_l10nfile **l10nfile_list,
+		    const char *dirlist, size_t dirlist_len, int mask,
+		    const char *language, const char *territory,
+		    const char *codeset, const char *normalized_codeset,
+		    const char *modifier,
+		    const char *filename, int do_allocate);
+
+/* Lookup the real locale name for a locale alias NAME, or NULL if
+   NAME is not a locale alias (but possibly a real locale name).
+   The return value is statically allocated and must not be freed.  */
+/* Part of the libintl ABI only for the sake of the gettext.m4 macro.  */
+extern LIBINTL_DLL_EXPORTED const char *_nl_expand_alias (const char *name);
+
+/* Split a locale name NAME into its pieces: language, modifier,
+   territory, codeset.
+   NAME gets destructively modified: NUL bytes are inserted here and
+   there.  *LANGUAGE gets assigned NAME.  Each of *MODIFIER, *TERRITORY,
+   *CODESET gets assigned either a pointer into the old NAME string, or
+   NULL.  *NORMALIZED_CODESET gets assigned the expanded *CODESET, if it
+   is different from *CODESET; this one is dynamically allocated and has
+   to be freed by the caller.
+   The return value is a bitmask, where each bit corresponds to one
+   filled-in value:
+     XPG_MODIFIER                for *MODIFIER,
+     XPG_TERRITORY               for *TERRITORY,
+     XPG_CODESET                 for *CODESET,
+     XPG_NORM_CODESET            for *NORMALIZED_CODESET.
+ */
+extern int _nl_explode_name (char *name, const char **language,
+			     const char **modifier, const char **territory,
+			     const char **codeset,
+			     const char **normalized_codeset);
+
+#endif	/* loadinfo.h */
diff --git a/intl/loadmsgcat.c b/intl/loadmsgcat.c
new file mode 100644
index 0000000..3432a8c
--- /dev/null
+++ b/intl/loadmsgcat.c
@@ -0,0 +1,1336 @@
+/* Load needed message catalogs.
+   Copyright (C) 1995-1999, 2000-2007 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+/* Tell glibc's <string.h> to provide a prototype for mempcpy().
+   This must come before <config.h> because <config.h> may include
+   <features.h>, and once <features.h> has been included, it's too late.  */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE    1
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <ctype.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#ifdef __GNUC__
+# undef  alloca
+# define alloca __builtin_alloca
+# define HAVE_ALLOCA 1
+#else
+# ifdef _MSC_VER
+#  include <malloc.h>
+#  define alloca _alloca
+# else
+#  if defined HAVE_ALLOCA_H || defined _LIBC
+#   include <alloca.h>
+#  else
+#   ifdef _AIX
+ #pragma alloca
+#   else
+#    ifndef alloca
+char *alloca ();
+#    endif
+#   endif
+#  endif
+# endif
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+
+#if defined HAVE_UNISTD_H || defined _LIBC
+# include <unistd.h>
+#endif
+
+#ifdef _LIBC
+# include <langinfo.h>
+# include <locale.h>
+#endif
+
+#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \
+    || (defined _LIBC && defined _POSIX_MAPPED_FILES)
+# include <sys/mman.h>
+# undef HAVE_MMAP
+# define HAVE_MMAP	1
+#else
+# undef HAVE_MMAP
+#endif
+
+#if defined HAVE_STDINT_H_WITH_UINTMAX || defined _LIBC
+# include <stdint.h>
+#endif
+#if defined HAVE_INTTYPES_H || defined _LIBC
+# include <inttypes.h>
+#endif
+
+#include "gmo.h"
+#include "gettextP.h"
+#include "hash-string.h"
+#include "plural-exp.h"
+
+#ifdef _LIBC
+# include "../locale/localeinfo.h"
+# include <not-cancel.h>
+#endif
+
+/* Handle multi-threaded applications.  */
+#ifdef _LIBC
+# include <bits/libc-lock.h>
+#else
+# include "lock.h"
+#endif
+
+/* Provide fallback values for macros that ought to be defined in <inttypes.h>.
+   Note that our fallback values need not be literal strings, because we don't
+   use them with preprocessor string concatenation.  */
+#if !defined PRId8 || PRI_MACROS_BROKEN
+# undef PRId8
+# define PRId8 "d"
+#endif
+#if !defined PRIi8 || PRI_MACROS_BROKEN
+# undef PRIi8
+# define PRIi8 "i"
+#endif
+#if !defined PRIo8 || PRI_MACROS_BROKEN
+# undef PRIo8
+# define PRIo8 "o"
+#endif
+#if !defined PRIu8 || PRI_MACROS_BROKEN
+# undef PRIu8
+# define PRIu8 "u"
+#endif
+#if !defined PRIx8 || PRI_MACROS_BROKEN
+# undef PRIx8
+# define PRIx8 "x"
+#endif
+#if !defined PRIX8 || PRI_MACROS_BROKEN
+# undef PRIX8
+# define PRIX8 "X"
+#endif
+#if !defined PRId16 || PRI_MACROS_BROKEN
+# undef PRId16
+# define PRId16 "d"
+#endif
+#if !defined PRIi16 || PRI_MACROS_BROKEN
+# undef PRIi16
+# define PRIi16 "i"
+#endif
+#if !defined PRIo16 || PRI_MACROS_BROKEN
+# undef PRIo16
+# define PRIo16 "o"
+#endif
+#if !defined PRIu16 || PRI_MACROS_BROKEN
+# undef PRIu16
+# define PRIu16 "u"
+#endif
+#if !defined PRIx16 || PRI_MACROS_BROKEN
+# undef PRIx16
+# define PRIx16 "x"
+#endif
+#if !defined PRIX16 || PRI_MACROS_BROKEN
+# undef PRIX16
+# define PRIX16 "X"
+#endif
+#if !defined PRId32 || PRI_MACROS_BROKEN
+# undef PRId32
+# define PRId32 "d"
+#endif
+#if !defined PRIi32 || PRI_MACROS_BROKEN
+# undef PRIi32
+# define PRIi32 "i"
+#endif
+#if !defined PRIo32 || PRI_MACROS_BROKEN
+# undef PRIo32
+# define PRIo32 "o"
+#endif
+#if !defined PRIu32 || PRI_MACROS_BROKEN
+# undef PRIu32
+# define PRIu32 "u"
+#endif
+#if !defined PRIx32 || PRI_MACROS_BROKEN
+# undef PRIx32
+# define PRIx32 "x"
+#endif
+#if !defined PRIX32 || PRI_MACROS_BROKEN
+# undef PRIX32
+# define PRIX32 "X"
+#endif
+#if !defined PRId64 || PRI_MACROS_BROKEN
+# undef PRId64
+# define PRId64 (sizeof (long) == 8 ? "ld" : "lld")
+#endif
+#if !defined PRIi64 || PRI_MACROS_BROKEN
+# undef PRIi64
+# define PRIi64 (sizeof (long) == 8 ? "li" : "lli")
+#endif
+#if !defined PRIo64 || PRI_MACROS_BROKEN
+# undef PRIo64
+# define PRIo64 (sizeof (long) == 8 ? "lo" : "llo")
+#endif
+#if !defined PRIu64 || PRI_MACROS_BROKEN
+# undef PRIu64
+# define PRIu64 (sizeof (long) == 8 ? "lu" : "llu")
+#endif
+#if !defined PRIx64 || PRI_MACROS_BROKEN
+# undef PRIx64
+# define PRIx64 (sizeof (long) == 8 ? "lx" : "llx")
+#endif
+#if !defined PRIX64 || PRI_MACROS_BROKEN
+# undef PRIX64
+# define PRIX64 (sizeof (long) == 8 ? "lX" : "llX")
+#endif
+#if !defined PRIdLEAST8 || PRI_MACROS_BROKEN
+# undef PRIdLEAST8
+# define PRIdLEAST8 "d"
+#endif
+#if !defined PRIiLEAST8 || PRI_MACROS_BROKEN
+# undef PRIiLEAST8
+# define PRIiLEAST8 "i"
+#endif
+#if !defined PRIoLEAST8 || PRI_MACROS_BROKEN
+# undef PRIoLEAST8
+# define PRIoLEAST8 "o"
+#endif
+#if !defined PRIuLEAST8 || PRI_MACROS_BROKEN
+# undef PRIuLEAST8
+# define PRIuLEAST8 "u"
+#endif
+#if !defined PRIxLEAST8 || PRI_MACROS_BROKEN
+# undef PRIxLEAST8
+# define PRIxLEAST8 "x"
+#endif
+#if !defined PRIXLEAST8 || PRI_MACROS_BROKEN
+# undef PRIXLEAST8
+# define PRIXLEAST8 "X"
+#endif
+#if !defined PRIdLEAST16 || PRI_MACROS_BROKEN
+# undef PRIdLEAST16
+# define PRIdLEAST16 "d"
+#endif
+#if !defined PRIiLEAST16 || PRI_MACROS_BROKEN
+# undef PRIiLEAST16
+# define PRIiLEAST16 "i"
+#endif
+#if !defined PRIoLEAST16 || PRI_MACROS_BROKEN
+# undef PRIoLEAST16
+# define PRIoLEAST16 "o"
+#endif
+#if !defined PRIuLEAST16 || PRI_MACROS_BROKEN
+# undef PRIuLEAST16
+# define PRIuLEAST16 "u"
+#endif
+#if !defined PRIxLEAST16 || PRI_MACROS_BROKEN
+# undef PRIxLEAST16
+# define PRIxLEAST16 "x"
+#endif
+#if !defined PRIXLEAST16 || PRI_MACROS_BROKEN
+# undef PRIXLEAST16
+# define PRIXLEAST16 "X"
+#endif
+#if !defined PRIdLEAST32 || PRI_MACROS_BROKEN
+# undef PRIdLEAST32
+# define PRIdLEAST32 "d"
+#endif
+#if !defined PRIiLEAST32 || PRI_MACROS_BROKEN
+# undef PRIiLEAST32
+# define PRIiLEAST32 "i"
+#endif
+#if !defined PRIoLEAST32 || PRI_MACROS_BROKEN
+# undef PRIoLEAST32
+# define PRIoLEAST32 "o"
+#endif
+#if !defined PRIuLEAST32 || PRI_MACROS_BROKEN
+# undef PRIuLEAST32
+# define PRIuLEAST32 "u"
+#endif
+#if !defined PRIxLEAST32 || PRI_MACROS_BROKEN
+# undef PRIxLEAST32
+# define PRIxLEAST32 "x"
+#endif
+#if !defined PRIXLEAST32 || PRI_MACROS_BROKEN
+# undef PRIXLEAST32
+# define PRIXLEAST32 "X"
+#endif
+#if !defined PRIdLEAST64 || PRI_MACROS_BROKEN
+# undef PRIdLEAST64
+# define PRIdLEAST64 PRId64
+#endif
+#if !defined PRIiLEAST64 || PRI_MACROS_BROKEN
+# undef PRIiLEAST64
+# define PRIiLEAST64 PRIi64
+#endif
+#if !defined PRIoLEAST64 || PRI_MACROS_BROKEN
+# undef PRIoLEAST64
+# define PRIoLEAST64 PRIo64
+#endif
+#if !defined PRIuLEAST64 || PRI_MACROS_BROKEN
+# undef PRIuLEAST64
+# define PRIuLEAST64 PRIu64
+#endif
+#if !defined PRIxLEAST64 || PRI_MACROS_BROKEN
+# undef PRIxLEAST64
+# define PRIxLEAST64 PRIx64
+#endif
+#if !defined PRIXLEAST64 || PRI_MACROS_BROKEN
+# undef PRIXLEAST64
+# define PRIXLEAST64 PRIX64
+#endif
+#if !defined PRIdFAST8 || PRI_MACROS_BROKEN
+# undef PRIdFAST8
+# define PRIdFAST8 "d"
+#endif
+#if !defined PRIiFAST8 || PRI_MACROS_BROKEN
+# undef PRIiFAST8
+# define PRIiFAST8 "i"
+#endif
+#if !defined PRIoFAST8 || PRI_MACROS_BROKEN
+# undef PRIoFAST8
+# define PRIoFAST8 "o"
+#endif
+#if !defined PRIuFAST8 || PRI_MACROS_BROKEN
+# undef PRIuFAST8
+# define PRIuFAST8 "u"
+#endif
+#if !defined PRIxFAST8 || PRI_MACROS_BROKEN
+# undef PRIxFAST8
+# define PRIxFAST8 "x"
+#endif
+#if !defined PRIXFAST8 || PRI_MACROS_BROKEN
+# undef PRIXFAST8
+# define PRIXFAST8 "X"
+#endif
+#if !defined PRIdFAST16 || PRI_MACROS_BROKEN
+# undef PRIdFAST16
+# define PRIdFAST16 "d"
+#endif
+#if !defined PRIiFAST16 || PRI_MACROS_BROKEN
+# undef PRIiFAST16
+# define PRIiFAST16 "i"
+#endif
+#if !defined PRIoFAST16 || PRI_MACROS_BROKEN
+# undef PRIoFAST16
+# define PRIoFAST16 "o"
+#endif
+#if !defined PRIuFAST16 || PRI_MACROS_BROKEN
+# undef PRIuFAST16
+# define PRIuFAST16 "u"
+#endif
+#if !defined PRIxFAST16 || PRI_MACROS_BROKEN
+# undef PRIxFAST16
+# define PRIxFAST16 "x"
+#endif
+#if !defined PRIXFAST16 || PRI_MACROS_BROKEN
+# undef PRIXFAST16
+# define PRIXFAST16 "X"
+#endif
+#if !defined PRIdFAST32 || PRI_MACROS_BROKEN
+# undef PRIdFAST32
+# define PRIdFAST32 "d"
+#endif
+#if !defined PRIiFAST32 || PRI_MACROS_BROKEN
+# undef PRIiFAST32
+# define PRIiFAST32 "i"
+#endif
+#if !defined PRIoFAST32 || PRI_MACROS_BROKEN
+# undef PRIoFAST32
+# define PRIoFAST32 "o"
+#endif
+#if !defined PRIuFAST32 || PRI_MACROS_BROKEN
+# undef PRIuFAST32
+# define PRIuFAST32 "u"
+#endif
+#if !defined PRIxFAST32 || PRI_MACROS_BROKEN
+# undef PRIxFAST32
+# define PRIxFAST32 "x"
+#endif
+#if !defined PRIXFAST32 || PRI_MACROS_BROKEN
+# undef PRIXFAST32
+# define PRIXFAST32 "X"
+#endif
+#if !defined PRIdFAST64 || PRI_MACROS_BROKEN
+# undef PRIdFAST64
+# define PRIdFAST64 PRId64
+#endif
+#if !defined PRIiFAST64 || PRI_MACROS_BROKEN
+# undef PRIiFAST64
+# define PRIiFAST64 PRIi64
+#endif
+#if !defined PRIoFAST64 || PRI_MACROS_BROKEN
+# undef PRIoFAST64
+# define PRIoFAST64 PRIo64
+#endif
+#if !defined PRIuFAST64 || PRI_MACROS_BROKEN
+# undef PRIuFAST64
+# define PRIuFAST64 PRIu64
+#endif
+#if !defined PRIxFAST64 || PRI_MACROS_BROKEN
+# undef PRIxFAST64
+# define PRIxFAST64 PRIx64
+#endif
+#if !defined PRIXFAST64 || PRI_MACROS_BROKEN
+# undef PRIXFAST64
+# define PRIXFAST64 PRIX64
+#endif
+#if !defined PRIdMAX || PRI_MACROS_BROKEN
+# undef PRIdMAX
+# define PRIdMAX (sizeof (uintmax_t) == sizeof (long) ? "ld" : "lld")
+#endif
+#if !defined PRIiMAX || PRI_MACROS_BROKEN
+# undef PRIiMAX
+# define PRIiMAX (sizeof (uintmax_t) == sizeof (long) ? "li" : "lli")
+#endif
+#if !defined PRIoMAX || PRI_MACROS_BROKEN
+# undef PRIoMAX
+# define PRIoMAX (sizeof (uintmax_t) == sizeof (long) ? "lo" : "llo")
+#endif
+#if !defined PRIuMAX || PRI_MACROS_BROKEN
+# undef PRIuMAX
+# define PRIuMAX (sizeof (uintmax_t) == sizeof (long) ? "lu" : "llu")
+#endif
+#if !defined PRIxMAX || PRI_MACROS_BROKEN
+# undef PRIxMAX
+# define PRIxMAX (sizeof (uintmax_t) == sizeof (long) ? "lx" : "llx")
+#endif
+#if !defined PRIXMAX || PRI_MACROS_BROKEN
+# undef PRIXMAX
+# define PRIXMAX (sizeof (uintmax_t) == sizeof (long) ? "lX" : "llX")
+#endif
+#if !defined PRIdPTR || PRI_MACROS_BROKEN
+# undef PRIdPTR
+# define PRIdPTR \
+  (sizeof (void *) == sizeof (long) ? "ld" : \
+   sizeof (void *) == sizeof (int) ? "d" : \
+   "lld")
+#endif
+#if !defined PRIiPTR || PRI_MACROS_BROKEN
+# undef PRIiPTR
+# define PRIiPTR \
+  (sizeof (void *) == sizeof (long) ? "li" : \
+   sizeof (void *) == sizeof (int) ? "i" : \
+   "lli")
+#endif
+#if !defined PRIoPTR || PRI_MACROS_BROKEN
+# undef PRIoPTR
+# define PRIoPTR \
+  (sizeof (void *) == sizeof (long) ? "lo" : \
+   sizeof (void *) == sizeof (int) ? "o" : \
+   "llo")
+#endif
+#if !defined PRIuPTR || PRI_MACROS_BROKEN
+# undef PRIuPTR
+# define PRIuPTR \
+  (sizeof (void *) == sizeof (long) ? "lu" : \
+   sizeof (void *) == sizeof (int) ? "u" : \
+   "llu")
+#endif
+#if !defined PRIxPTR || PRI_MACROS_BROKEN
+# undef PRIxPTR
+# define PRIxPTR \
+  (sizeof (void *) == sizeof (long) ? "lx" : \
+   sizeof (void *) == sizeof (int) ? "x" : \
+   "llx")
+#endif
+#if !defined PRIXPTR || PRI_MACROS_BROKEN
+# undef PRIXPTR
+# define PRIXPTR \
+  (sizeof (void *) == sizeof (long) ? "lX" : \
+   sizeof (void *) == sizeof (int) ? "X" : \
+   "llX")
+#endif
+
+/* @@ end of prolog @@ */
+
+#ifdef _LIBC
+/* Rename the non ISO C functions.  This is required by the standard
+   because some ISO C functions will require linking with this object
+   file and the name space must not be polluted.  */
+# define open(name, flags)	open_not_cancel_2 (name, flags)
+# define close(fd)		close_not_cancel_no_status (fd)
+# define read(fd, buf, n)	read_not_cancel (fd, buf, n)
+# define mmap(addr, len, prot, flags, fd, offset) \
+  __mmap (addr, len, prot, flags, fd, offset)
+# define munmap(addr, len)	__munmap (addr, len)
+#endif
+
+/* For those losing systems which don't have `alloca' we have to add
+   some additional code emulating it.  */
+#ifdef HAVE_ALLOCA
+# define freea(p) /* nothing */
+#else
+# define alloca(n) malloc (n)
+# define freea(p) free (p)
+#endif
+
+/* For systems that distinguish between text and binary I/O.
+   O_BINARY is usually declared in <fcntl.h>. */
+#if !defined O_BINARY && defined _O_BINARY
+  /* For MSC-compatible compilers.  */
+# define O_BINARY _O_BINARY
+# define O_TEXT _O_TEXT
+#endif
+#ifdef __BEOS__
+  /* BeOS 5 has O_BINARY and O_TEXT, but they have no effect.  */
+# undef O_BINARY
+# undef O_TEXT
+#endif
+/* On reasonable systems, binary I/O is the default.  */
+#ifndef O_BINARY
+# define O_BINARY 0
+#endif
+
+
+/* We need a sign, whether a new catalog was loaded, which can be associated
+   with all translations.  This is important if the translations are
+   cached by one of GCC's features.  */
+int _nl_msg_cat_cntr;
+
+
+/* Expand a system dependent string segment.  Return NULL if unsupported.  */
+static const char *
+get_sysdep_segment_value (const char *name)
+{
+  /* Test for an ISO C 99 section 7.8.1 format string directive.
+     Syntax:
+     P R I { d | i | o | u | x | X }
+     { { | LEAST | FAST } { 8 | 16 | 32 | 64 } | MAX | PTR }  */
+  /* We don't use a table of 14 times 6 'const char *' strings here, because
+     data relocations cost startup time.  */
+  if (name[0] == 'P' && name[1] == 'R' && name[2] == 'I')
+    {
+      if (name[3] == 'd' || name[3] == 'i' || name[3] == 'o' || name[3] == 'u'
+	  || name[3] == 'x' || name[3] == 'X')
+	{
+	  if (name[4] == '8' && name[5] == '\0')
+	    {
+	      if (name[3] == 'd')
+		return PRId8;
+	      if (name[3] == 'i')
+		return PRIi8;
+	      if (name[3] == 'o')
+		return PRIo8;
+	      if (name[3] == 'u')
+		return PRIu8;
+	      if (name[3] == 'x')
+		return PRIx8;
+	      if (name[3] == 'X')
+		return PRIX8;
+	      abort ();
+	    }
+	  if (name[4] == '1' && name[5] == '6' && name[6] == '\0')
+	    {
+	      if (name[3] == 'd')
+		return PRId16;
+	      if (name[3] == 'i')
+		return PRIi16;
+	      if (name[3] == 'o')
+		return PRIo16;
+	      if (name[3] == 'u')
+		return PRIu16;
+	      if (name[3] == 'x')
+		return PRIx16;
+	      if (name[3] == 'X')
+		return PRIX16;
+	      abort ();
+	    }
+	  if (name[4] == '3' && name[5] == '2' && name[6] == '\0')
+	    {
+	      if (name[3] == 'd')
+		return PRId32;
+	      if (name[3] == 'i')
+		return PRIi32;
+	      if (name[3] == 'o')
+		return PRIo32;
+	      if (name[3] == 'u')
+		return PRIu32;
+	      if (name[3] == 'x')
+		return PRIx32;
+	      if (name[3] == 'X')
+		return PRIX32;
+	      abort ();
+	    }
+	  if (name[4] == '6' && name[5] == '4' && name[6] == '\0')
+	    {
+	      if (name[3] == 'd')
+		return PRId64;
+	      if (name[3] == 'i')
+		return PRIi64;
+	      if (name[3] == 'o')
+		return PRIo64;
+	      if (name[3] == 'u')
+		return PRIu64;
+	      if (name[3] == 'x')
+		return PRIx64;
+	      if (name[3] == 'X')
+		return PRIX64;
+	      abort ();
+	    }
+	  if (name[4] == 'L' && name[5] == 'E' && name[6] == 'A'
+	      && name[7] == 'S' && name[8] == 'T')
+	    {
+	      if (name[9] == '8' && name[10] == '\0')
+		{
+		  if (name[3] == 'd')
+		    return PRIdLEAST8;
+		  if (name[3] == 'i')
+		    return PRIiLEAST8;
+		  if (name[3] == 'o')
+		    return PRIoLEAST8;
+		  if (name[3] == 'u')
+		    return PRIuLEAST8;
+		  if (name[3] == 'x')
+		    return PRIxLEAST8;
+		  if (name[3] == 'X')
+		    return PRIXLEAST8;
+		  abort ();
+		}
+	      if (name[9] == '1' && name[10] == '6' && name[11] == '\0')
+		{
+		  if (name[3] == 'd')
+		    return PRIdLEAST16;
+		  if (name[3] == 'i')
+		    return PRIiLEAST16;
+		  if (name[3] == 'o')
+		    return PRIoLEAST16;
+		  if (name[3] == 'u')
+		    return PRIuLEAST16;
+		  if (name[3] == 'x')
+		    return PRIxLEAST16;
+		  if (name[3] == 'X')
+		    return PRIXLEAST16;
+		  abort ();
+		}
+	      if (name[9] == '3' && name[10] == '2' && name[11] == '\0')
+		{
+		  if (name[3] == 'd')
+		    return PRIdLEAST32;
+		  if (name[3] == 'i')
+		    return PRIiLEAST32;
+		  if (name[3] == 'o')
+		    return PRIoLEAST32;
+		  if (name[3] == 'u')
+		    return PRIuLEAST32;
+		  if (name[3] == 'x')
+		    return PRIxLEAST32;
+		  if (name[3] == 'X')
+		    return PRIXLEAST32;
+		  abort ();
+		}
+	      if (name[9] == '6' && name[10] == '4' && name[11] == '\0')
+		{
+		  if (name[3] == 'd')
+		    return PRIdLEAST64;
+		  if (name[3] == 'i')
+		    return PRIiLEAST64;
+		  if (name[3] == 'o')
+		    return PRIoLEAST64;
+		  if (name[3] == 'u')
+		    return PRIuLEAST64;
+		  if (name[3] == 'x')
+		    return PRIxLEAST64;
+		  if (name[3] == 'X')
+		    return PRIXLEAST64;
+		  abort ();
+		}
+	    }
+	  if (name[4] == 'F' && name[5] == 'A' && name[6] == 'S'
+	      && name[7] == 'T')
+	    {
+	      if (name[8] == '8' && name[9] == '\0')
+		{
+		  if (name[3] == 'd')
+		    return PRIdFAST8;
+		  if (name[3] == 'i')
+		    return PRIiFAST8;
+		  if (name[3] == 'o')
+		    return PRIoFAST8;
+		  if (name[3] == 'u')
+		    return PRIuFAST8;
+		  if (name[3] == 'x')
+		    return PRIxFAST8;
+		  if (name[3] == 'X')
+		    return PRIXFAST8;
+		  abort ();
+		}
+	      if (name[8] == '1' && name[9] == '6' && name[10] == '\0')
+		{
+		  if (name[3] == 'd')
+		    return PRIdFAST16;
+		  if (name[3] == 'i')
+		    return PRIiFAST16;
+		  if (name[3] == 'o')
+		    return PRIoFAST16;
+		  if (name[3] == 'u')
+		    return PRIuFAST16;
+		  if (name[3] == 'x')
+		    return PRIxFAST16;
+		  if (name[3] == 'X')
+		    return PRIXFAST16;
+		  abort ();
+		}
+	      if (name[8] == '3' && name[9] == '2' && name[10] == '\0')
+		{
+		  if (name[3] == 'd')
+		    return PRIdFAST32;
+		  if (name[3] == 'i')
+		    return PRIiFAST32;
+		  if (name[3] == 'o')
+		    return PRIoFAST32;
+		  if (name[3] == 'u')
+		    return PRIuFAST32;
+		  if (name[3] == 'x')
+		    return PRIxFAST32;
+		  if (name[3] == 'X')
+		    return PRIXFAST32;
+		  abort ();
+		}
+	      if (name[8] == '6' && name[9] == '4' && name[10] == '\0')
+		{
+		  if (name[3] == 'd')
+		    return PRIdFAST64;
+		  if (name[3] == 'i')
+		    return PRIiFAST64;
+		  if (name[3] == 'o')
+		    return PRIoFAST64;
+		  if (name[3] == 'u')
+		    return PRIuFAST64;
+		  if (name[3] == 'x')
+		    return PRIxFAST64;
+		  if (name[3] == 'X')
+		    return PRIXFAST64;
+		  abort ();
+		}
+	    }
+	  if (name[4] == 'M' && name[5] == 'A' && name[6] == 'X'
+	      && name[7] == '\0')
+	    {
+	      if (name[3] == 'd')
+		return PRIdMAX;
+	      if (name[3] == 'i')
+		return PRIiMAX;
+	      if (name[3] == 'o')
+		return PRIoMAX;
+	      if (name[3] == 'u')
+		return PRIuMAX;
+	      if (name[3] == 'x')
+		return PRIxMAX;
+	      if (name[3] == 'X')
+		return PRIXMAX;
+	      abort ();
+	    }
+	  if (name[4] == 'P' && name[5] == 'T' && name[6] == 'R'
+	      && name[7] == '\0')
+	    {
+	      if (name[3] == 'd')
+		return PRIdPTR;
+	      if (name[3] == 'i')
+		return PRIiPTR;
+	      if (name[3] == 'o')
+		return PRIoPTR;
+	      if (name[3] == 'u')
+		return PRIuPTR;
+	      if (name[3] == 'x')
+		return PRIxPTR;
+	      if (name[3] == 'X')
+		return PRIXPTR;
+	      abort ();
+	    }
+	}
+    }
+  /* Test for a glibc specific printf() format directive flag.  */
+  if (name[0] == 'I' && name[1] == '\0')
+    {
+#if defined _LIBC || __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2)
+      /* The 'I' flag, in numeric format directives, replaces ASCII digits
+	 with the 'outdigits' defined in the LC_CTYPE locale facet.  This is
+	 used for Farsi (Persian) and maybe Arabic.  */
+      return "I";
+#else
+      return "";
+#endif
+    }
+  /* Other system dependent strings are not valid.  */
+  return NULL;
+}
+
+/* Load the message catalogs specified by FILENAME.  If it is no valid
+   message catalog do nothing.  */
+void
+internal_function
+_nl_load_domain (struct loaded_l10nfile *domain_file,
+		 struct binding *domainbinding)
+{
+  __libc_lock_define_initialized_recursive (static, lock)
+  int fd = -1;
+  size_t size;
+#ifdef _LIBC
+  struct stat64 st;
+#else
+  struct stat st;
+#endif
+  struct mo_file_header *data = (struct mo_file_header *) -1;
+  int use_mmap = 0;
+  struct loaded_domain *domain;
+  int revision;
+  const char *nullentry;
+  size_t nullentrylen;
+
+  __libc_lock_lock_recursive (lock);
+  if (domain_file->decided != 0)
+    {
+      /* There are two possibilities:
+
+	 + this is the same thread calling again during this initialization
+	   via _nl_find_msg.  We have initialized everything this call needs.
+
+	 + this is another thread which tried to initialize this object.
+	   Not necessary anymore since if the lock is available this
+	   is finished.
+      */
+      goto done;
+    }
+
+  domain_file->decided = -1;
+  domain_file->data = NULL;
+
+  /* Note that it would be useless to store domainbinding in domain_file
+     because domainbinding might be == NULL now but != NULL later (after
+     a call to bind_textdomain_codeset).  */
+
+  /* If the record does not represent a valid locale the FILENAME
+     might be NULL.  This can happen when according to the given
+     specification the locale file name is different for XPG and CEN
+     syntax.  */
+  if (domain_file->filename == NULL)
+    goto out;
+
+  /* Try to open the addressed file.  */
+  fd = open (domain_file->filename, O_RDONLY | O_BINARY);
+  if (fd == -1)
+    goto out;
+
+  /* We must know about the size of the file.  */
+  if (
+#ifdef _LIBC
+      __builtin_expect (fstat64 (fd, &st) != 0, 0)
+#else
+      __builtin_expect (fstat (fd, &st) != 0, 0)
+#endif
+      || __builtin_expect ((size = (size_t) st.st_size) != st.st_size, 0)
+      || __builtin_expect (size < sizeof (struct mo_file_header), 0))
+    /* Something went wrong.  */
+    goto out;
+
+#ifdef HAVE_MMAP
+  /* Now we are ready to load the file.  If mmap() is available we try
+     this first.  If not available or it failed we try to load it.  */
+  data = (struct mo_file_header *) mmap (NULL, size, PROT_READ,
+					 MAP_PRIVATE, fd, 0);
+
+  if (__builtin_expect (data != (struct mo_file_header *) -1, 1))
+    {
+      /* mmap() call was successful.  */
+      close (fd);
+      fd = -1;
+      use_mmap = 1;
+    }
+#endif
+
+  /* If the data is not yet available (i.e. mmap'ed) we try to load
+     it manually.  */
+  if (data == (struct mo_file_header *) -1)
+    {
+      size_t to_read;
+      char *read_ptr;
+
+      data = (struct mo_file_header *) malloc (size);
+      if (data == NULL)
+	goto out;
+
+      to_read = size;
+      read_ptr = (char *) data;
+      do
+	{
+	  long int nb = (long int) read (fd, read_ptr, to_read);
+	  if (nb <= 0)
+	    {
+#ifdef EINTR
+	      if (nb == -1 && errno == EINTR)
+		continue;
+#endif
+	      goto out;
+	    }
+	  read_ptr += nb;
+	  to_read -= nb;
+	}
+      while (to_read > 0);
+
+      close (fd);
+      fd = -1;
+    }
+
+  /* Using the magic number we can test whether it really is a message
+     catalog file.  */
+  if (__builtin_expect (data->magic != _MAGIC && data->magic != _MAGIC_SWAPPED,
+			0))
+    {
+      /* The magic number is wrong: not a message catalog file.  */
+#ifdef HAVE_MMAP
+      if (use_mmap)
+	munmap ((caddr_t) data, size);
+      else
+#endif
+	free (data);
+      goto out;
+    }
+
+  domain = (struct loaded_domain *) malloc (sizeof (struct loaded_domain));
+  if (domain == NULL)
+    goto out;
+  domain_file->data = domain;
+
+  domain->data = (char *) data;
+  domain->use_mmap = use_mmap;
+  domain->mmap_size = size;
+  domain->must_swap = data->magic != _MAGIC;
+  domain->malloced = NULL;
+
+  /* Fill in the information about the available tables.  */
+  revision = W (domain->must_swap, data->revision);
+  /* We support only the major revisions 0 and 1.  */
+  switch (revision >> 16)
+    {
+    case 0:
+    case 1:
+      domain->nstrings = W (domain->must_swap, data->nstrings);
+      domain->orig_tab = (const struct string_desc *)
+	((char *) data + W (domain->must_swap, data->orig_tab_offset));
+      domain->trans_tab = (const struct string_desc *)
+	((char *) data + W (domain->must_swap, data->trans_tab_offset));
+      domain->hash_size = W (domain->must_swap, data->hash_tab_size);
+      domain->hash_tab =
+	(domain->hash_size > 2
+	 ? (const nls_uint32 *)
+	   ((char *) data + W (domain->must_swap, data->hash_tab_offset))
+	 : NULL);
+      domain->must_swap_hash_tab = domain->must_swap;
+
+      /* Now dispatch on the minor revision.  */
+      switch (revision & 0xffff)
+	{
+	case 0:
+	  domain->n_sysdep_strings = 0;
+	  domain->orig_sysdep_tab = NULL;
+	  domain->trans_sysdep_tab = NULL;
+	  break;
+	case 1:
+	default:
+	  {
+	    nls_uint32 n_sysdep_strings;
+
+	    if (domain->hash_tab == NULL)
+	      /* This is invalid.  These minor revisions need a hash table.  */
+	      goto invalid;
+
+	    n_sysdep_strings =
+	      W (domain->must_swap, data->n_sysdep_strings);
+	    if (n_sysdep_strings > 0)
+	      {
+		nls_uint32 n_sysdep_segments;
+		const struct sysdep_segment *sysdep_segments;
+		const char **sysdep_segment_values;
+		const nls_uint32 *orig_sysdep_tab;
+		const nls_uint32 *trans_sysdep_tab;
+		nls_uint32 n_inmem_sysdep_strings;
+		size_t memneed;
+		char *mem;
+		struct sysdep_string_desc *inmem_orig_sysdep_tab;
+		struct sysdep_string_desc *inmem_trans_sysdep_tab;
+		nls_uint32 *inmem_hash_tab;
+		unsigned int i, j;
+
+		/* Get the values of the system dependent segments.  */
+		n_sysdep_segments =
+		  W (domain->must_swap, data->n_sysdep_segments);
+		sysdep_segments = (const struct sysdep_segment *)
+		  ((char *) data
+		   + W (domain->must_swap, data->sysdep_segments_offset));
+		sysdep_segment_values =
+		  (const char **)
+		  alloca (n_sysdep_segments * sizeof (const char *));
+		for (i = 0; i < n_sysdep_segments; i++)
+		  {
+		    const char *name =
+		      (char *) data
+		      + W (domain->must_swap, sysdep_segments[i].offset);
+		    nls_uint32 namelen =
+		      W (domain->must_swap, sysdep_segments[i].length);
+
+		    if (!(namelen > 0 && name[namelen - 1] == '\0'))
+		      {
+			freea (sysdep_segment_values);
+			goto invalid;
+		      }
+
+		    sysdep_segment_values[i] = get_sysdep_segment_value (name);
+		  }
+
+		orig_sysdep_tab = (const nls_uint32 *)
+		  ((char *) data
+		   + W (domain->must_swap, data->orig_sysdep_tab_offset));
+		trans_sysdep_tab = (const nls_uint32 *)
+		  ((char *) data
+		   + W (domain->must_swap, data->trans_sysdep_tab_offset));
+
+		/* Compute the amount of additional memory needed for the
+		   system dependent strings and the augmented hash table.
+		   At the same time, also drop string pairs which refer to
+		   an undefined system dependent segment.  */
+		n_inmem_sysdep_strings = 0;
+		memneed = domain->hash_size * sizeof (nls_uint32);
+		for (i = 0; i < n_sysdep_strings; i++)
+		  {
+		    int valid = 1;
+		    size_t needs[2];
+
+		    for (j = 0; j < 2; j++)
+		      {
+			const struct sysdep_string *sysdep_string =
+			  (const struct sysdep_string *)
+			  ((char *) data
+			   + W (domain->must_swap,
+				j == 0
+				? orig_sysdep_tab[i]
+				: trans_sysdep_tab[i]));
+			size_t need = 0;
+			const struct segment_pair *p = sysdep_string->segments;
+
+			if (W (domain->must_swap, p->sysdepref) != SEGMENTS_END)
+			  for (p = sysdep_string->segments;; p++)
+			    {
+			      nls_uint32 sysdepref;
+
+			      need += W (domain->must_swap, p->segsize);
+
+			      sysdepref = W (domain->must_swap, p->sysdepref);
+			      if (sysdepref == SEGMENTS_END)
+				break;
+
+			      if (sysdepref >= n_sysdep_segments)
+				{
+				  /* Invalid.  */
+				  freea (sysdep_segment_values);
+				  goto invalid;
+				}
+
+			      if (sysdep_segment_values[sysdepref] == NULL)
+				{
+				  /* This particular string pair is invalid.  */
+				  valid = 0;
+				  break;
+				}
+
+			      need += strlen (sysdep_segment_values[sysdepref]);
+			    }
+
+			needs[j] = need;
+			if (!valid)
+			  break;
+		      }
+
+		    if (valid)
+		      {
+			n_inmem_sysdep_strings++;
+			memneed += needs[0] + needs[1];
+		      }
+		  }
+		memneed += 2 * n_inmem_sysdep_strings
+			   * sizeof (struct sysdep_string_desc);
+
+		if (n_inmem_sysdep_strings > 0)
+		  {
+		    unsigned int k;
+
+		    /* Allocate additional memory.  */
+		    mem = (char *) malloc (memneed);
+		    if (mem == NULL)
+		      goto invalid;
+
+		    domain->malloced = mem;
+		    inmem_orig_sysdep_tab = (struct sysdep_string_desc *) mem;
+		    mem += n_inmem_sysdep_strings
+			   * sizeof (struct sysdep_string_desc);
+		    inmem_trans_sysdep_tab = (struct sysdep_string_desc *) mem;
+		    mem += n_inmem_sysdep_strings
+			   * sizeof (struct sysdep_string_desc);
+		    inmem_hash_tab = (nls_uint32 *) mem;
+		    mem += domain->hash_size * sizeof (nls_uint32);
+
+		    /* Compute the system dependent strings.  */
+		    k = 0;
+		    for (i = 0; i < n_sysdep_strings; i++)
+		      {
+			int valid = 1;
+
+			for (j = 0; j < 2; j++)
+			  {
+			    const struct sysdep_string *sysdep_string =
+			      (const struct sysdep_string *)
+			      ((char *) data
+			       + W (domain->must_swap,
+				    j == 0
+				    ? orig_sysdep_tab[i]
+				    : trans_sysdep_tab[i]));
+			    const struct segment_pair *p =
+			      sysdep_string->segments;
+
+			    if (W (domain->must_swap, p->sysdepref)
+				!= SEGMENTS_END)
+			      for (p = sysdep_string->segments;; p++)
+				{
+				  nls_uint32 sysdepref;
+
+				  sysdepref =
+				    W (domain->must_swap, p->sysdepref);
+				  if (sysdepref == SEGMENTS_END)
+				    break;
+
+				  if (sysdep_segment_values[sysdepref] == NULL)
+				    {
+				      /* This particular string pair is
+					 invalid.  */
+				      valid = 0;
+				      break;
+				    }
+				}
+
+			    if (!valid)
+			      break;
+			  }
+
+			if (valid)
+			  {
+			    for (j = 0; j < 2; j++)
+			      {
+				const struct sysdep_string *sysdep_string =
+				  (const struct sysdep_string *)
+				  ((char *) data
+				   + W (domain->must_swap,
+					j == 0
+					? orig_sysdep_tab[i]
+					: trans_sysdep_tab[i]));
+				const char *static_segments =
+				  (char *) data
+				  + W (domain->must_swap, sysdep_string->offset);
+				const struct segment_pair *p =
+				  sysdep_string->segments;
+
+				/* Concatenate the segments, and fill
+				   inmem_orig_sysdep_tab[k] (for j == 0) and
+				   inmem_trans_sysdep_tab[k] (for j == 1).  */
+
+				struct sysdep_string_desc *inmem_tab_entry =
+				  (j == 0
+				   ? inmem_orig_sysdep_tab
+				   : inmem_trans_sysdep_tab)
+				  + k;
+
+				if (W (domain->must_swap, p->sysdepref)
+				    == SEGMENTS_END)
+				  {
+				    /* Only one static segment.  */
+				    inmem_tab_entry->length =
+				      W (domain->must_swap, p->segsize);
+				    inmem_tab_entry->pointer = static_segments;
+				  }
+				else
+				  {
+				    inmem_tab_entry->pointer = mem;
+
+				    for (p = sysdep_string->segments;; p++)
+				      {
+					nls_uint32 segsize =
+					  W (domain->must_swap, p->segsize);
+					nls_uint32 sysdepref =
+					  W (domain->must_swap, p->sysdepref);
+					size_t n;
+
+					if (segsize > 0)
+					  {
+					    memcpy (mem, static_segments, segsize);
+					    mem += segsize;
+					    static_segments += segsize;
+					  }
+
+					if (sysdepref == SEGMENTS_END)
+					  break;
+
+					n = strlen (sysdep_segment_values[sysdepref]);
+					memcpy (mem, sysdep_segment_values[sysdepref], n);
+					mem += n;
+				      }
+
+				    inmem_tab_entry->length =
+				      mem - inmem_tab_entry->pointer;
+				  }
+			      }
+
+			    k++;
+			  }
+		      }
+		    if (k != n_inmem_sysdep_strings)
+		      abort ();
+
+		    /* Compute the augmented hash table.  */
+		    for (i = 0; i < domain->hash_size; i++)
+		      inmem_hash_tab[i] =
+			W (domain->must_swap_hash_tab, domain->hash_tab[i]);
+		    for (i = 0; i < n_inmem_sysdep_strings; i++)
+		      {
+			const char *msgid = inmem_orig_sysdep_tab[i].pointer;
+			nls_uint32 hash_val = __hash_string (msgid);
+			nls_uint32 idx = hash_val % domain->hash_size;
+			nls_uint32 incr =
+			  1 + (hash_val % (domain->hash_size - 2));
+
+			for (;;)
+			  {
+			    if (inmem_hash_tab[idx] == 0)
+			      {
+				/* Hash table entry is empty.  Use it.  */
+				inmem_hash_tab[idx] = 1 + domain->nstrings + i;
+				break;
+			      }
+
+			    if (idx >= domain->hash_size - incr)
+			      idx -= domain->hash_size - incr;
+			    else
+			      idx += incr;
+			  }
+		      }
+
+		    domain->n_sysdep_strings = n_inmem_sysdep_strings;
+		    domain->orig_sysdep_tab = inmem_orig_sysdep_tab;
+		    domain->trans_sysdep_tab = inmem_trans_sysdep_tab;
+
+		    domain->hash_tab = inmem_hash_tab;
+		    domain->must_swap_hash_tab = 0;
+		  }
+		else
+		  {
+		    domain->n_sysdep_strings = 0;
+		    domain->orig_sysdep_tab = NULL;
+		    domain->trans_sysdep_tab = NULL;
+		  }
+
+		freea (sysdep_segment_values);
+	      }
+	    else
+	      {
+		domain->n_sysdep_strings = 0;
+		domain->orig_sysdep_tab = NULL;
+		domain->trans_sysdep_tab = NULL;
+	      }
+	  }
+	  break;
+	}
+      break;
+    default:
+      /* This is an invalid revision.  */
+    invalid:
+      /* This is an invalid .mo file.  */
+      if (domain->malloced)
+	free (domain->malloced);
+#ifdef HAVE_MMAP
+      if (use_mmap)
+	munmap ((caddr_t) data, size);
+      else
+#endif
+	free (data);
+      free (domain);
+      domain_file->data = NULL;
+      goto out;
+    }
+
+  /* No caches of converted translations so far.  */
+  domain->conversions = NULL;
+  domain->nconversions = 0;
+  gl_rwlock_init (domain->conversions_lock);
+
+  /* Get the header entry and look for a plural specification.  */
+#ifdef IN_LIBGLOCALE
+  nullentry =
+    _nl_find_msg (domain_file, domainbinding, NULL, "", &nullentrylen);
+#else
+  nullentry = _nl_find_msg (domain_file, domainbinding, "", 0, &nullentrylen);
+#endif
+  EXTRACT_PLURAL_EXPRESSION (nullentry, &domain->plural, &domain->nplurals);
+
+ out:
+  if (fd != -1)
+    close (fd);
+
+  domain_file->decided = 1;
+
+ done:
+  __libc_lock_unlock_recursive (lock);
+}
+
+
+#ifdef _LIBC
+void
+internal_function __libc_freeres_fn_section
+_nl_unload_domain (struct loaded_domain *domain)
+{
+  size_t i;
+
+  if (domain->plural != &__gettext_germanic_plural)
+    __gettext_free_exp ((struct expression *) domain->plural);
+
+  for (i = 0; i < domain->nconversions; i++)
+    {
+      struct converted_domain *convd = &domain->conversions[i];
+
+      free (convd->encoding);
+      if (convd->conv_tab != NULL && convd->conv_tab != (char **) -1)
+	free (convd->conv_tab);
+      if (convd->conv != (__gconv_t) -1)
+	__gconv_close (convd->conv);
+    }
+  if (domain->conversions != NULL)
+    free (domain->conversions);
+  __libc_rwlock_fini (domain->conversions_lock);
+
+  if (domain->malloced)
+    free (domain->malloced);
+
+# ifdef _POSIX_MAPPED_FILES
+  if (domain->use_mmap)
+    munmap ((caddr_t) domain->data, domain->mmap_size);
+  else
+# endif	/* _POSIX_MAPPED_FILES */
+    free ((void *) domain->data);
+
+  free (domain);
+}
+#endif
diff --git a/intl/localcharset.c b/intl/localcharset.c
new file mode 100644
index 0000000..e796ae7
--- /dev/null
+++ b/intl/localcharset.c
@@ -0,0 +1,461 @@
+/* Determine a canonical name for the current locale's character encoding.
+
+   Copyright (C) 2000-2006 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+/* Written by Bruno Haible <bruno at clisp.org>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "localcharset.h"
+
+#include <stddef.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#if defined _WIN32 || defined __WIN32__
+# define WIN32_NATIVE
+#endif
+
+#if defined __EMX__
+/* Assume EMX program runs on OS/2, even if compiled under DOS.  */
+# define OS2
+#endif
+
+#if !defined WIN32_NATIVE
+# if HAVE_LANGINFO_CODESET
+#  include <langinfo.h>
+# else
+#  if 0 /* see comment below */
+#   include <locale.h>
+#  endif
+# endif
+# ifdef __CYGWIN__
+#  define WIN32_LEAN_AND_MEAN
+#  include <windows.h>
+# endif
+#elif defined WIN32_NATIVE
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+#endif
+#if defined OS2
+# define INCL_DOS
+# include <os2.h>
+#endif
+
+#if ENABLE_RELOCATABLE
+# include "relocatable.h"
+#else
+# define relocate(pathname) (pathname)
+#endif
+
+/* Get LIBDIR.  */
+#ifndef LIBDIR
+# include "configmake.h"
+#endif
+
+#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__
+  /* Win32, Cygwin, OS/2, DOS */
+# define ISSLASH(C) ((C) == '/' || (C) == '\\')
+#endif
+
+#ifndef DIRECTORY_SEPARATOR
+# define DIRECTORY_SEPARATOR '/'
+#endif
+
+#ifndef ISSLASH
+# define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR)
+#endif
+
+#if HAVE_DECL_GETC_UNLOCKED
+# undef getc
+# define getc getc_unlocked
+#endif
+
+/* The following static variable is declared 'volatile' to avoid a
+   possible multithread problem in the function get_charset_aliases. If we
+   are running in a threaded environment, and if two threads initialize
+   'charset_aliases' simultaneously, both will produce the same value,
+   and everything will be ok if the two assignments to 'charset_aliases'
+   are atomic. But I don't know what will happen if the two assignments mix.  */
+#if __STDC__ != 1
+# define volatile /* empty */
+#endif
+/* Pointer to the contents of the charset.alias file, if it has already been
+   read, else NULL.  Its format is:
+   ALIAS_1 '\0' CANONICAL_1 '\0' ... ALIAS_n '\0' CANONICAL_n '\0' '\0'  */
+static const char * volatile charset_aliases;
+
+/* Return a pointer to the contents of the charset.alias file.  */
+static const char *
+get_charset_aliases (void)
+{
+  const char *cp;
+
+  cp = charset_aliases;
+  if (cp == NULL)
+    {
+#if !(defined VMS || defined WIN32_NATIVE || defined __CYGWIN__)
+      FILE *fp;
+      const char *dir;
+      const char *base = "charset.alias";
+      char *file_name;
+
+      /* Make it possible to override the charset.alias location.  This is
+	 necessary for running the testsuite before "make install".  */
+      dir = getenv ("CHARSETALIASDIR");
+      if (dir == NULL || dir[0] == '\0')
+	dir = relocate (LIBDIR);
+
+      /* Concatenate dir and base into freshly allocated file_name.  */
+      {
+	size_t dir_len = strlen (dir);
+	size_t base_len = strlen (base);
+	int add_slash = (dir_len > 0 && !ISSLASH (dir[dir_len - 1]));
+	file_name = (char *) malloc (dir_len + add_slash + base_len + 1);
+	if (file_name != NULL)
+	  {
+	    memcpy (file_name, dir, dir_len);
+	    if (add_slash)
+	      file_name[dir_len] = DIRECTORY_SEPARATOR;
+	    memcpy (file_name + dir_len + add_slash, base, base_len + 1);
+	  }
+      }
+
+      if (file_name == NULL || (fp = fopen (file_name, "r")) == NULL)
+	/* Out of memory or file not found, treat it as empty.  */
+	cp = "";
+      else
+	{
+	  /* Parse the file's contents.  */
+	  char *res_ptr = NULL;
+	  size_t res_size = 0;
+
+	  for (;;)
+	    {
+	      int c;
+	      char buf1[50+1];
+	      char buf2[50+1];
+	      size_t l1, l2;
+	      char *old_res_ptr;
+
+	      c = getc (fp);
+	      if (c == EOF)
+		break;
+	      if (c == '\n' || c == ' ' || c == '\t')
+		continue;
+	      if (c == '#')
+		{
+		  /* Skip comment, to end of line.  */
+		  do
+		    c = getc (fp);
+		  while (!(c == EOF || c == '\n'));
+		  if (c == EOF)
+		    break;
+		  continue;
+		}
+	      ungetc (c, fp);
+	      if (fscanf (fp, "%50s %50s", buf1, buf2) < 2)
+		break;
+	      l1 = strlen (buf1);
+	      l2 = strlen (buf2);
+	      old_res_ptr = res_ptr;
+	      if (res_size == 0)
+		{
+		  res_size = l1 + 1 + l2 + 1;
+		  res_ptr = (char *) malloc (res_size + 1);
+		}
+	      else
+		{
+		  res_size += l1 + 1 + l2 + 1;
+		  res_ptr = (char *) realloc (res_ptr, res_size + 1);
+		}
+	      if (res_ptr == NULL)
+		{
+		  /* Out of memory. */
+		  res_size = 0;
+		  if (old_res_ptr != NULL)
+		    free (old_res_ptr);
+		  break;
+		}
+	      strcpy (res_ptr + res_size - (l2 + 1) - (l1 + 1), buf1);
+	      strcpy (res_ptr + res_size - (l2 + 1), buf2);
+	    }
+	  fclose (fp);
+	  if (res_size == 0)
+	    cp = "";
+	  else
+	    {
+	      *(res_ptr + res_size) = '\0';
+	      cp = res_ptr;
+	    }
+	}
+
+      if (file_name != NULL)
+	free (file_name);
+
+#else
+
+# if defined VMS
+      /* To avoid the troubles of an extra file charset.alias_vms in the
+	 sources of many GNU packages, simply inline the aliases here.  */
+      /* The list of encodings is taken from the OpenVMS 7.3-1 documentation
+	 "Compaq C Run-Time Library Reference Manual for OpenVMS systems"
+	 section 10.7 "Handling Different Character Sets".  */
+      cp = "ISO8859-1" "\0" "ISO-8859-1" "\0"
+	   "ISO8859-2" "\0" "ISO-8859-2" "\0"
+	   "ISO8859-5" "\0" "ISO-8859-5" "\0"
+	   "ISO8859-7" "\0" "ISO-8859-7" "\0"
+	   "ISO8859-8" "\0" "ISO-8859-8" "\0"
+	   "ISO8859-9" "\0" "ISO-8859-9" "\0"
+	   /* Japanese */
+	   "eucJP" "\0" "EUC-JP" "\0"
+	   "SJIS" "\0" "SHIFT_JIS" "\0"
+	   "DECKANJI" "\0" "DEC-KANJI" "\0"
+	   "SDECKANJI" "\0" "EUC-JP" "\0"
+	   /* Chinese */
+	   "eucTW" "\0" "EUC-TW" "\0"
+	   "DECHANYU" "\0" "DEC-HANYU" "\0"
+	   "DECHANZI" "\0" "GB2312" "\0"
+	   /* Korean */
+	   "DECKOREAN" "\0" "EUC-KR" "\0";
+# endif
+
+# if defined WIN32_NATIVE || defined __CYGWIN__
+      /* To avoid the troubles of installing a separate file in the same
+	 directory as the DLL and of retrieving the DLL's directory at
+	 runtime, simply inline the aliases here.  */
+
+      cp = "CP936" "\0" "GBK" "\0"
+	   "CP1361" "\0" "JOHAB" "\0"
+	   "CP20127" "\0" "ASCII" "\0"
+	   "CP20866" "\0" "KOI8-R" "\0"
+	   "CP20936" "\0" "GB2312" "\0"
+	   "CP21866" "\0" "KOI8-RU" "\0"
+	   "CP28591" "\0" "ISO-8859-1" "\0"
+	   "CP28592" "\0" "ISO-8859-2" "\0"
+	   "CP28593" "\0" "ISO-8859-3" "\0"
+	   "CP28594" "\0" "ISO-8859-4" "\0"
+	   "CP28595" "\0" "ISO-8859-5" "\0"
+	   "CP28596" "\0" "ISO-8859-6" "\0"
+	   "CP28597" "\0" "ISO-8859-7" "\0"
+	   "CP28598" "\0" "ISO-8859-8" "\0"
+	   "CP28599" "\0" "ISO-8859-9" "\0"
+	   "CP28605" "\0" "ISO-8859-15" "\0"
+	   "CP38598" "\0" "ISO-8859-8" "\0"
+	   "CP51932" "\0" "EUC-JP" "\0"
+	   "CP51936" "\0" "GB2312" "\0"
+	   "CP51949" "\0" "EUC-KR" "\0"
+	   "CP51950" "\0" "EUC-TW" "\0"
+	   "CP54936" "\0" "GB18030" "\0"
+	   "CP65001" "\0" "UTF-8" "\0";
+# endif
+#endif
+
+      charset_aliases = cp;
+    }
+
+  return cp;
+}
+
+/* Determine the current locale's character encoding, and canonicalize it
+   into one of the canonical names listed in config.charset.
+   The result must not be freed; it is statically allocated.
+   If the canonical name cannot be determined, the result is a non-canonical
+   name.  */
+
+#ifdef STATIC
+STATIC
+#endif
+const char *
+locale_charset (void)
+{
+  const char *codeset;
+  const char *aliases;
+
+#if !(defined WIN32_NATIVE || defined OS2)
+
+# if HAVE_LANGINFO_CODESET
+
+  /* Most systems support nl_langinfo (CODESET) nowadays.  */
+  codeset = nl_langinfo (CODESET);
+
+#  ifdef __CYGWIN__
+  /* Cygwin 2006 does not have locales.  nl_langinfo (CODESET) always
+     returns "US-ASCII".  As long as this is not fixed, return the suffix
+     of the locale name from the environment variables (if present) or
+     the codepage as a number.  */
+  if (codeset != NULL && strcmp (codeset, "US-ASCII") == 0)
+    {
+      const char *locale;
+      static char buf[2 + 10 + 1];
+
+      locale = getenv ("LC_ALL");
+      if (locale == NULL || locale[0] == '\0')
+	{
+	  locale = getenv ("LC_CTYPE");
+	  if (locale == NULL || locale[0] == '\0')
+	    locale = getenv ("LANG");
+	}
+      if (locale != NULL && locale[0] != '\0')
+	{
+	  /* If the locale name contains an encoding after the dot, return
+	     it.  */
+	  const char *dot = strchr (locale, '.');
+
+	  if (dot != NULL)
+	    {
+	      const char *modifier;
+
+	      dot++;
+	      /* Look for the possible @... trailer and remove it, if any.  */
+	      modifier = strchr (dot, '@');
+	      if (modifier == NULL)
+		return dot;
+	      if (modifier - dot < sizeof (buf))
+		{
+		  memcpy (buf, dot, modifier - dot);
+		  buf [modifier - dot] = '\0';
+		  return buf;
+		}
+	    }
+	}
+
+      /* Woe32 has a function returning the locale's codepage as a number.  */
+      sprintf (buf, "CP%u", GetACP ());
+      codeset = buf;
+    }
+#  endif
+
+# else
+
+  /* On old systems which lack it, use setlocale or getenv.  */
+  const char *locale = NULL;
+
+  /* But most old systems don't have a complete set of locales.  Some
+     (like SunOS 4 or DJGPP) have only the C locale.  Therefore we don't
+     use setlocale here; it would return "C" when it doesn't support the
+     locale name the user has set.  */
+#  if 0
+  locale = setlocale (LC_CTYPE, NULL);
+#  endif
+  if (locale == NULL || locale[0] == '\0')
+    {
+      locale = getenv ("LC_ALL");
+      if (locale == NULL || locale[0] == '\0')
+	{
+	  locale = getenv ("LC_CTYPE");
+	  if (locale == NULL || locale[0] == '\0')
+	    locale = getenv ("LANG");
+	}
+    }
+
+  /* On some old systems, one used to set locale = "iso8859_1". On others,
+     you set it to "language_COUNTRY.charset". In any case, we resolve it
+     through the charset.alias file.  */
+  codeset = locale;
+
+# endif
+
+#elif defined WIN32_NATIVE
+
+  static char buf[2 + 10 + 1];
+
+  /* Woe32 has a function returning the locale's codepage as a number.  */
+  sprintf (buf, "CP%u", GetACP ());
+  codeset = buf;
+
+#elif defined OS2
+
+  const char *locale;
+  static char buf[2 + 10 + 1];
+  ULONG cp[3];
+  ULONG cplen;
+
+  /* Allow user to override the codeset, as set in the operating system,
+     with standard language environment variables.  */
+  locale = getenv ("LC_ALL");
+  if (locale == NULL || locale[0] == '\0')
+    {
+      locale = getenv ("LC_CTYPE");
+      if (locale == NULL || locale[0] == '\0')
+	locale = getenv ("LANG");
+    }
+  if (locale != NULL && locale[0] != '\0')
+    {
+      /* If the locale name contains an encoding after the dot, return it.  */
+      const char *dot = strchr (locale, '.');
+
+      if (dot != NULL)
+	{
+	  const char *modifier;
+
+	  dot++;
+	  /* Look for the possible @... trailer and remove it, if any.  */
+	  modifier = strchr (dot, '@');
+	  if (modifier == NULL)
+	    return dot;
+	  if (modifier - dot < sizeof (buf))
+	    {
+	      memcpy (buf, dot, modifier - dot);
+	      buf [modifier - dot] = '\0';
+	      return buf;
+	    }
+	}
+
+      /* Resolve through the charset.alias file.  */
+      codeset = locale;
+    }
+  else
+    {
+      /* OS/2 has a function returning the locale's codepage as a number.  */
+      if (DosQueryCp (sizeof (cp), cp, &cplen))
+	codeset = "";
+      else
+	{
+	  sprintf (buf, "CP%u", cp[0]);
+	  codeset = buf;
+	}
+    }
+
+#endif
+
+  if (codeset == NULL)
+    /* The canonical name cannot be determined.  */
+    codeset = "";
+
+  /* Resolve alias. */
+  for (aliases = get_charset_aliases ();
+       *aliases != '\0';
+       aliases += strlen (aliases) + 1, aliases += strlen (aliases) + 1)
+    if (strcmp (codeset, aliases) == 0
+	|| (aliases[0] == '*' && aliases[1] == '\0'))
+      {
+	codeset = aliases + strlen (aliases) + 1;
+	break;
+      }
+
+  /* Don't return an empty string.  GNU libc and GNU libiconv interpret
+     the empty string as denoting "the locale's character encoding",
+     thus GNU libiconv would call this function a second time.  */
+  if (codeset[0] == '\0')
+    codeset = "ASCII";
+
+  return codeset;
+}
diff --git a/intl/localcharset.h b/intl/localcharset.h
new file mode 100644
index 0000000..129e4a4
--- /dev/null
+++ b/intl/localcharset.h
@@ -0,0 +1,42 @@
+/* Determine a canonical name for the current locale's character encoding.
+   Copyright (C) 2000-2003 Free Software Foundation, Inc.
+   This file is part of the GNU CHARSET Library.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+#ifndef _LOCALCHARSET_H
+#define _LOCALCHARSET_H
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* Determine the current locale's character encoding, and canonicalize it
+   into one of the canonical names listed in config.charset.
+   The result must not be freed; it is statically allocated.
+   If the canonical name cannot be determined, the result is a non-canonical
+   name.  */
+extern const char * locale_charset (void);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* _LOCALCHARSET_H */
diff --git a/intl/locale.alias b/intl/locale.alias
new file mode 100644
index 0000000..1044a40
--- /dev/null
+++ b/intl/locale.alias
@@ -0,0 +1,77 @@
+# Locale name alias data base.
+# Copyright (C) 1996-2001,2003,2007 Free Software Foundation, Inc.
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU Library General Public License as published
+# by the Free Software Foundation; either version 2, 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
+# Library General Public License for more details.
+#
+# You should have received a copy of the GNU Library General Public
+# License along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+# USA.
+
+# The format of this file is the same as for the corresponding file of
+# the X Window System, which normally can be found in
+#	/usr/lib/X11/locale/locale.alias
+# A single line contains two fields: an alias and a substitution value.
+# All entries are case independent.
+
+# Note: This file is obsolete and is kept around for the time being for
+# backward compatibility.  Nobody should rely on the names defined here.
+# Locales should always be specified by their full name.
+
+# Packages using this file: 
+
+bokmal		nb_NO.ISO-8859-1
+bokm�l		nb_NO.ISO-8859-1
+catalan		ca_ES.ISO-8859-1
+croatian	hr_HR.ISO-8859-2
+czech		cs_CZ.ISO-8859-2
+danish          da_DK.ISO-8859-1
+dansk		da_DK.ISO-8859-1
+deutsch		de_DE.ISO-8859-1
+dutch		nl_NL.ISO-8859-1
+eesti		et_EE.ISO-8859-1
+estonian	et_EE.ISO-8859-1
+finnish         fi_FI.ISO-8859-1
+fran�ais	fr_FR.ISO-8859-1
+french		fr_FR.ISO-8859-1
+galego		gl_ES.ISO-8859-1
+galician	gl_ES.ISO-8859-1
+german		de_DE.ISO-8859-1
+greek           el_GR.ISO-8859-7
+hebrew          he_IL.ISO-8859-8
+hrvatski	hr_HR.ISO-8859-2
+hungarian       hu_HU.ISO-8859-2
+icelandic       is_IS.ISO-8859-1
+italian         it_IT.ISO-8859-1
+japanese	ja_JP.eucJP
+japanese.euc	ja_JP.eucJP
+ja_JP		ja_JP.eucJP
+ja_JP.ujis	ja_JP.eucJP
+japanese.sjis	ja_JP.SJIS
+korean		ko_KR.eucKR
+korean.euc 	ko_KR.eucKR
+ko_KR		ko_KR.eucKR
+lithuanian      lt_LT.ISO-8859-13
+no_NO		nb_NO.ISO-8859-1
+no_NO.ISO-8859-1 nb_NO.ISO-8859-1
+norwegian       nb_NO.ISO-8859-1
+nynorsk		nn_NO.ISO-8859-1
+polish          pl_PL.ISO-8859-2
+portuguese      pt_PT.ISO-8859-1
+romanian        ro_RO.ISO-8859-2
+russian         ru_RU.ISO-8859-5
+slovak          sk_SK.ISO-8859-2
+slovene         sl_SI.ISO-8859-2
+slovenian       sl_SI.ISO-8859-2
+spanish         es_ES.ISO-8859-1
+swedish         sv_SE.ISO-8859-1
+thai		th_TH.TIS-620
+turkish         tr_TR.ISO-8859-9
diff --git a/intl/localealias.c b/intl/localealias.c
new file mode 100644
index 0000000..910db53
--- /dev/null
+++ b/intl/localealias.c
@@ -0,0 +1,439 @@
+/* Handle aliases for locale names.
+   Copyright (C) 1995-1999, 2000-2001, 2003, 2005-2006 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+/* Tell glibc's <string.h> to provide a prototype for mempcpy().
+   This must come before <config.h> because <config.h> may include
+   <features.h>, and once <features.h> has been included, it's too late.  */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE    1
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <ctype.h>
+#include <stdio.h>
+#if defined _LIBC || defined HAVE___FSETLOCKING
+# include <stdio_ext.h>
+#endif
+#include <sys/types.h>
+
+#ifdef __GNUC__
+# undef alloca
+# define alloca __builtin_alloca
+# define HAVE_ALLOCA 1
+#else
+# ifdef _MSC_VER
+#  include <malloc.h>
+#  define alloca _alloca
+# else
+#  if defined HAVE_ALLOCA_H || defined _LIBC
+#   include <alloca.h>
+#  else
+#   ifdef _AIX
+ #pragma alloca
+#   else
+#    ifndef alloca
+char *alloca ();
+#    endif
+#   endif
+#  endif
+# endif
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "gettextP.h"
+
+#if ENABLE_RELOCATABLE
+# include "relocatable.h"
+#else
+# define relocate(pathname) (pathname)
+#endif
+
+/* @@ end of prolog @@ */
+
+#ifdef _LIBC
+/* Rename the non ANSI C functions.  This is required by the standard
+   because some ANSI C functions will require linking with this object
+   file and the name space must not be polluted.  */
+# define strcasecmp __strcasecmp
+
+# ifndef mempcpy
+#  define mempcpy __mempcpy
+# endif
+# define HAVE_MEMPCPY	1
+# define HAVE___FSETLOCKING	1
+#endif
+
+/* Handle multi-threaded applications.  */
+#ifdef _LIBC
+# include <bits/libc-lock.h>
+#else
+# include "lock.h"
+#endif
+
+#ifndef internal_function
+# define internal_function
+#endif
+
+/* Some optimizations for glibc.  */
+#ifdef _LIBC
+# define FEOF(fp)		feof_unlocked (fp)
+# define FGETS(buf, n, fp)	fgets_unlocked (buf, n, fp)
+#else
+# define FEOF(fp)		feof (fp)
+# define FGETS(buf, n, fp)	fgets (buf, n, fp)
+#endif
+
+/* For those losing systems which don't have `alloca' we have to add
+   some additional code emulating it.  */
+#ifdef HAVE_ALLOCA
+# define freea(p) /* nothing */
+#else
+# define alloca(n) malloc (n)
+# define freea(p) free (p)
+#endif
+
+#if defined _LIBC_REENTRANT || HAVE_DECL_FGETS_UNLOCKED
+# undef fgets
+# define fgets(buf, len, s) fgets_unlocked (buf, len, s)
+#endif
+#if defined _LIBC_REENTRANT || HAVE_DECL_FEOF_UNLOCKED
+# undef feof
+# define feof(s) feof_unlocked (s)
+#endif
+
+
+__libc_lock_define_initialized (static, lock)
+
+
+struct alias_map
+{
+  const char *alias;
+  const char *value;
+};
+
+
+#ifndef _LIBC
+# define libc_freeres_ptr(decl) decl
+#endif
+
+libc_freeres_ptr (static char *string_space);
+static size_t string_space_act;
+static size_t string_space_max;
+libc_freeres_ptr (static struct alias_map *map);
+static size_t nmap;
+static size_t maxmap;
+
+
+/* Prototypes for local functions.  */
+static size_t read_alias_file (const char *fname, int fname_len)
+     internal_function;
+static int extend_alias_table (void);
+static int alias_compare (const struct alias_map *map1,
+			  const struct alias_map *map2);
+
+
+const char *
+_nl_expand_alias (const char *name)
+{
+  static const char *locale_alias_path;
+  struct alias_map *retval;
+  const char *result = NULL;
+  size_t added;
+
+  __libc_lock_lock (lock);
+
+  if (locale_alias_path == NULL)
+    locale_alias_path = LOCALE_ALIAS_PATH;
+
+  do
+    {
+      struct alias_map item;
+
+      item.alias = name;
+
+      if (nmap > 0)
+	retval = (struct alias_map *) bsearch (&item, map, nmap,
+					       sizeof (struct alias_map),
+					       (int (*) (const void *,
+							 const void *)
+						) alias_compare);
+      else
+	retval = NULL;
+
+      /* We really found an alias.  Return the value.  */
+      if (retval != NULL)
+	{
+	  result = retval->value;
+	  break;
+	}
+
+      /* Perhaps we can find another alias file.  */
+      added = 0;
+      while (added == 0 && locale_alias_path[0] != '\0')
+	{
+	  const char *start;
+
+	  while (locale_alias_path[0] == PATH_SEPARATOR)
+	    ++locale_alias_path;
+	  start = locale_alias_path;
+
+	  while (locale_alias_path[0] != '\0'
+		 && locale_alias_path[0] != PATH_SEPARATOR)
+	    ++locale_alias_path;
+
+	  if (start < locale_alias_path)
+	    added = read_alias_file (start, locale_alias_path - start);
+	}
+    }
+  while (added != 0);
+
+  __libc_lock_unlock (lock);
+
+  return result;
+}
+
+
+static size_t
+internal_function
+read_alias_file (const char *fname, int fname_len)
+{
+  FILE *fp;
+  char *full_fname;
+  size_t added;
+  static const char aliasfile[] = "/locale.alias";
+
+  full_fname = (char *) alloca (fname_len + sizeof aliasfile);
+#ifdef HAVE_MEMPCPY
+  mempcpy (mempcpy (full_fname, fname, fname_len),
+	   aliasfile, sizeof aliasfile);
+#else
+  memcpy (full_fname, fname, fname_len);
+  memcpy (&full_fname[fname_len], aliasfile, sizeof aliasfile);
+#endif
+
+#ifdef _LIBC
+  /* Note the file is opened with cancellation in the I/O functions
+     disabled.  */
+  fp = fopen (relocate (full_fname), "rc");
+#else
+  fp = fopen (relocate (full_fname), "r");
+#endif
+  freea (full_fname);
+  if (fp == NULL)
+    return 0;
+
+#ifdef HAVE___FSETLOCKING
+  /* No threads present.  */
+  __fsetlocking (fp, FSETLOCKING_BYCALLER);
+#endif
+
+  added = 0;
+  while (!FEOF (fp))
+    {
+      /* It is a reasonable approach to use a fix buffer here because
+	 a) we are only interested in the first two fields
+	 b) these fields must be usable as file names and so must not
+	    be that long
+	 We avoid a multi-kilobyte buffer here since this would use up
+	 stack space which we might not have if the program ran out of
+	 memory.  */
+      char buf[400];
+      char *alias;
+      char *value;
+      char *cp;
+      int complete_line;
+
+      if (FGETS (buf, sizeof buf, fp) == NULL)
+	/* EOF reached.  */
+	break;
+
+      /* Determine whether the line is complete.  */
+      complete_line = strchr (buf, '\n') != NULL;
+
+      cp = buf;
+      /* Ignore leading white space.  */
+      while (isspace ((unsigned char) cp[0]))
+	++cp;
+
+      /* A leading '#' signals a comment line.  */
+      if (cp[0] != '\0' && cp[0] != '#')
+	{
+	  alias = cp++;
+	  while (cp[0] != '\0' && !isspace ((unsigned char) cp[0]))
+	    ++cp;
+	  /* Terminate alias name.  */
+	  if (cp[0] != '\0')
+	    *cp++ = '\0';
+
+	  /* Now look for the beginning of the value.  */
+	  while (isspace ((unsigned char) cp[0]))
+	    ++cp;
+
+	  if (cp[0] != '\0')
+	    {
+	      value = cp++;
+	      while (cp[0] != '\0' && !isspace ((unsigned char) cp[0]))
+		++cp;
+	      /* Terminate value.  */
+	      if (cp[0] == '\n')
+		{
+		  /* This has to be done to make the following test
+		     for the end of line possible.  We are looking for
+		     the terminating '\n' which do not overwrite here.  */
+		  *cp++ = '\0';
+		  *cp = '\n';
+		}
+	      else if (cp[0] != '\0')
+		*cp++ = '\0';
+
+#ifdef IN_LIBGLOCALE
+	      /* glibc's locale.alias contains entries for ja_JP and ko_KR
+		 that make it impossible to use a Japanese or Korean UTF-8
+		 locale under the name "ja_JP" or "ko_KR".  Ignore these
+		 entries.  */
+	      if (strchr (alias, '_') == NULL)
+#endif
+		{
+		  size_t alias_len;
+		  size_t value_len;
+
+		  if (nmap >= maxmap)
+		    if (__builtin_expect (extend_alias_table (), 0))
+		      goto out;
+
+		  alias_len = strlen (alias) + 1;
+		  value_len = strlen (value) + 1;
+
+		  if (string_space_act + alias_len + value_len > string_space_max)
+		    {
+		      /* Increase size of memory pool.  */
+		      size_t new_size = (string_space_max
+					 + (alias_len + value_len > 1024
+					    ? alias_len + value_len : 1024));
+		      char *new_pool = (char *) realloc (string_space, new_size);
+		      if (new_pool == NULL)
+			goto out;
+
+		      if (__builtin_expect (string_space != new_pool, 0))
+			{
+			  size_t i;
+
+			  for (i = 0; i < nmap; i++)
+			    {
+			      map[i].alias += new_pool - string_space;
+			      map[i].value += new_pool - string_space;
+			    }
+			}
+
+		      string_space = new_pool;
+		      string_space_max = new_size;
+		    }
+
+		  map[nmap].alias =
+		    (const char *) memcpy (&string_space[string_space_act],
+					   alias, alias_len);
+		  string_space_act += alias_len;
+
+		  map[nmap].value =
+		    (const char *) memcpy (&string_space[string_space_act],
+					   value, value_len);
+		  string_space_act += value_len;
+
+		  ++nmap;
+		  ++added;
+		}
+	    }
+	}
+
+      /* Possibly not the whole line fits into the buffer.  Ignore
+	 the rest of the line.  */
+      if (! complete_line)
+	do
+	  if (FGETS (buf, sizeof buf, fp) == NULL)
+	    /* Make sure the inner loop will be left.  The outer loop
+	       will exit at the `feof' test.  */
+	    break;
+	while (strchr (buf, '\n') == NULL);
+    }
+
+ out:
+  /* Should we test for ferror()?  I think we have to silently ignore
+     errors.  --drepper  */
+  fclose (fp);
+
+  if (added > 0)
+    qsort (map, nmap, sizeof (struct alias_map),
+	   (int (*) (const void *, const void *)) alias_compare);
+
+  return added;
+}
+
+
+static int
+extend_alias_table ()
+{
+  size_t new_size;
+  struct alias_map *new_map;
+
+  new_size = maxmap == 0 ? 100 : 2 * maxmap;
+  new_map = (struct alias_map *) realloc (map, (new_size
+						* sizeof (struct alias_map)));
+  if (new_map == NULL)
+    /* Simply don't extend: we don't have any more core.  */
+    return -1;
+
+  map = new_map;
+  maxmap = new_size;
+  return 0;
+}
+
+
+static int
+alias_compare (const struct alias_map *map1, const struct alias_map *map2)
+{
+#if defined _LIBC || defined HAVE_STRCASECMP
+  return strcasecmp (map1->alias, map2->alias);
+#else
+  const unsigned char *p1 = (const unsigned char *) map1->alias;
+  const unsigned char *p2 = (const unsigned char *) map2->alias;
+  unsigned char c1, c2;
+
+  if (p1 == p2)
+    return 0;
+
+  do
+    {
+      /* I know this seems to be odd but the tolower() function in
+	 some systems libc cannot handle nonalpha characters.  */
+      c1 = isupper (*p1) ? tolower (*p1) : *p1;
+      c2 = isupper (*p2) ? tolower (*p2) : *p2;
+      if (c1 == '\0')
+	break;
+      ++p1;
+      ++p2;
+    }
+  while (c1 == c2);
+
+  return c1 - c2;
+#endif
+}
diff --git a/intl/localename.c b/intl/localename.c
new file mode 100644
index 0000000..af4c229
--- /dev/null
+++ b/intl/localename.c
@@ -0,0 +1,1507 @@
+/* Determine name of the currently selected locale.
+   Copyright (C) 1995-1999, 2000-2007 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+/* Written by Ulrich Drepper <drepper at gnu.org>, 1995.  */
+/* Win32 code written by Tor Lillqvist <tml at iki.fi>.  */
+/* MacOS X code written by Bruno Haible <bruno at clisp.org>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#ifdef IN_LIBINTL
+# include "gettextP.h"
+#else
+# include "localename.h"
+#endif
+
+#include <stdlib.h>
+#include <locale.h>
+
+#if HAVE_CFLOCALECOPYCURRENT || HAVE_CFPREFERENCESCOPYAPPVALUE
+# include <string.h>
+# include <CoreFoundation/CFString.h>
+# if HAVE_CFLOCALECOPYCURRENT
+#  include <CoreFoundation/CFLocale.h>
+# elif HAVE_CFPREFERENCESCOPYAPPVALUE
+#  include <CoreFoundation/CFPreferences.h>
+# endif
+#endif
+
+#if defined _WIN32 || defined __WIN32__
+# define WIN32_NATIVE
+#endif
+
+#ifdef WIN32_NATIVE
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+/* List of language codes, sorted by value:
+   0x01 LANG_ARABIC
+   0x02 LANG_BULGARIAN
+   0x03 LANG_CATALAN
+   0x04 LANG_CHINESE
+   0x05 LANG_CZECH
+   0x06 LANG_DANISH
+   0x07 LANG_GERMAN
+   0x08 LANG_GREEK
+   0x09 LANG_ENGLISH
+   0x0a LANG_SPANISH
+   0x0b LANG_FINNISH
+   0x0c LANG_FRENCH
+   0x0d LANG_HEBREW
+   0x0e LANG_HUNGARIAN
+   0x0f LANG_ICELANDIC
+   0x10 LANG_ITALIAN
+   0x11 LANG_JAPANESE
+   0x12 LANG_KOREAN
+   0x13 LANG_DUTCH
+   0x14 LANG_NORWEGIAN
+   0x15 LANG_POLISH
+   0x16 LANG_PORTUGUESE
+   0x17 LANG_RHAETO_ROMANCE
+   0x18 LANG_ROMANIAN
+   0x19 LANG_RUSSIAN
+   0x1a LANG_CROATIAN == LANG_SERBIAN
+   0x1b LANG_SLOVAK
+   0x1c LANG_ALBANIAN
+   0x1d LANG_SWEDISH
+   0x1e LANG_THAI
+   0x1f LANG_TURKISH
+   0x20 LANG_URDU
+   0x21 LANG_INDONESIAN
+   0x22 LANG_UKRAINIAN
+   0x23 LANG_BELARUSIAN
+   0x24 LANG_SLOVENIAN
+   0x25 LANG_ESTONIAN
+   0x26 LANG_LATVIAN
+   0x27 LANG_LITHUANIAN
+   0x28 LANG_TAJIK
+   0x29 LANG_FARSI
+   0x2a LANG_VIETNAMESE
+   0x2b LANG_ARMENIAN
+   0x2c LANG_AZERI
+   0x2d LANG_BASQUE
+   0x2e LANG_SORBIAN
+   0x2f LANG_MACEDONIAN
+   0x30 LANG_SUTU
+   0x31 LANG_TSONGA
+   0x32 LANG_TSWANA
+   0x33 LANG_VENDA
+   0x34 LANG_XHOSA
+   0x35 LANG_ZULU
+   0x36 LANG_AFRIKAANS
+   0x37 LANG_GEORGIAN
+   0x38 LANG_FAEROESE
+   0x39 LANG_HINDI
+   0x3a LANG_MALTESE
+   0x3b LANG_SAAMI
+   0x3c LANG_GAELIC
+   0x3d LANG_YIDDISH
+   0x3e LANG_MALAY
+   0x3f LANG_KAZAK
+   0x40 LANG_KYRGYZ
+   0x41 LANG_SWAHILI
+   0x42 LANG_TURKMEN
+   0x43 LANG_UZBEK
+   0x44 LANG_TATAR
+   0x45 LANG_BENGALI
+   0x46 LANG_PUNJABI
+   0x47 LANG_GUJARATI
+   0x48 LANG_ORIYA
+   0x49 LANG_TAMIL
+   0x4a LANG_TELUGU
+   0x4b LANG_KANNADA
+   0x4c LANG_MALAYALAM
+   0x4d LANG_ASSAMESE
+   0x4e LANG_MARATHI
+   0x4f LANG_SANSKRIT
+   0x50 LANG_MONGOLIAN
+   0x51 LANG_TIBETAN
+   0x52 LANG_WELSH
+   0x53 LANG_CAMBODIAN
+   0x54 LANG_LAO
+   0x55 LANG_BURMESE
+   0x56 LANG_GALICIAN
+   0x57 LANG_KONKANI
+   0x58 LANG_MANIPURI
+   0x59 LANG_SINDHI
+   0x5a LANG_SYRIAC
+   0x5b LANG_SINHALESE
+   0x5c LANG_CHEROKEE
+   0x5d LANG_INUKTITUT
+   0x5e LANG_AMHARIC
+   0x5f LANG_TAMAZIGHT
+   0x60 LANG_KASHMIRI
+   0x61 LANG_NEPALI
+   0x62 LANG_FRISIAN
+   0x63 LANG_PASHTO
+   0x64 LANG_TAGALOG
+   0x65 LANG_DIVEHI
+   0x66 LANG_EDO
+   0x67 LANG_FULFULDE
+   0x68 LANG_HAUSA
+   0x69 LANG_IBIBIO
+   0x6a LANG_YORUBA
+   0x70 LANG_IGBO
+   0x71 LANG_KANURI
+   0x72 LANG_OROMO
+   0x73 LANG_TIGRINYA
+   0x74 LANG_GUARANI
+   0x75 LANG_HAWAIIAN
+   0x76 LANG_LATIN
+   0x77 LANG_SOMALI
+   0x78 LANG_YI
+   0x79 LANG_PAPIAMENTU
+*/
+/* Mingw headers don't have latest language and sublanguage codes.  */
+# ifndef LANG_AFRIKAANS
+# define LANG_AFRIKAANS 0x36
+# endif
+# ifndef LANG_ALBANIAN
+# define LANG_ALBANIAN 0x1c
+# endif
+# ifndef LANG_AMHARIC
+# define LANG_AMHARIC 0x5e
+# endif
+# ifndef LANG_ARABIC
+# define LANG_ARABIC 0x01
+# endif
+# ifndef LANG_ARMENIAN
+# define LANG_ARMENIAN 0x2b
+# endif
+# ifndef LANG_ASSAMESE
+# define LANG_ASSAMESE 0x4d
+# endif
+# ifndef LANG_AZERI
+# define LANG_AZERI 0x2c
+# endif
+# ifndef LANG_BASQUE
+# define LANG_BASQUE 0x2d
+# endif
+# ifndef LANG_BELARUSIAN
+# define LANG_BELARUSIAN 0x23
+# endif
+# ifndef LANG_BENGALI
+# define LANG_BENGALI 0x45
+# endif
+# ifndef LANG_BURMESE
+# define LANG_BURMESE 0x55
+# endif
+# ifndef LANG_CAMBODIAN
+# define LANG_CAMBODIAN 0x53
+# endif
+# ifndef LANG_CATALAN
+# define LANG_CATALAN 0x03
+# endif
+# ifndef LANG_CHEROKEE
+# define LANG_CHEROKEE 0x5c
+# endif
+# ifndef LANG_DIVEHI
+# define LANG_DIVEHI 0x65
+# endif
+# ifndef LANG_EDO
+# define LANG_EDO 0x66
+# endif
+# ifndef LANG_ESTONIAN
+# define LANG_ESTONIAN 0x25
+# endif
+# ifndef LANG_FAEROESE
+# define LANG_FAEROESE 0x38
+# endif
+# ifndef LANG_FARSI
+# define LANG_FARSI 0x29
+# endif
+# ifndef LANG_FRISIAN
+# define LANG_FRISIAN 0x62
+# endif
+# ifndef LANG_FULFULDE
+# define LANG_FULFULDE 0x67
+# endif
+# ifndef LANG_GAELIC
+# define LANG_GAELIC 0x3c
+# endif
+# ifndef LANG_GALICIAN
+# define LANG_GALICIAN 0x56
+# endif
+# ifndef LANG_GEORGIAN
+# define LANG_GEORGIAN 0x37
+# endif
+# ifndef LANG_GUARANI
+# define LANG_GUARANI 0x74
+# endif
+# ifndef LANG_GUJARATI
+# define LANG_GUJARATI 0x47
+# endif
+# ifndef LANG_HAUSA
+# define LANG_HAUSA 0x68
+# endif
+# ifndef LANG_HAWAIIAN
+# define LANG_HAWAIIAN 0x75
+# endif
+# ifndef LANG_HEBREW
+# define LANG_HEBREW 0x0d
+# endif
+# ifndef LANG_HINDI
+# define LANG_HINDI 0x39
+# endif
+# ifndef LANG_IBIBIO
+# define LANG_IBIBIO 0x69
+# endif
+# ifndef LANG_IGBO
+# define LANG_IGBO 0x70
+# endif
+# ifndef LANG_INDONESIAN
+# define LANG_INDONESIAN 0x21
+# endif
+# ifndef LANG_INUKTITUT
+# define LANG_INUKTITUT 0x5d
+# endif
+# ifndef LANG_KANNADA
+# define LANG_KANNADA 0x4b
+# endif
+# ifndef LANG_KANURI
+# define LANG_KANURI 0x71
+# endif
+# ifndef LANG_KASHMIRI
+# define LANG_KASHMIRI 0x60
+# endif
+# ifndef LANG_KAZAK
+# define LANG_KAZAK 0x3f
+# endif
+# ifndef LANG_KONKANI
+# define LANG_KONKANI 0x57
+# endif
+# ifndef LANG_KYRGYZ
+# define LANG_KYRGYZ 0x40
+# endif
+# ifndef LANG_LAO
+# define LANG_LAO 0x54
+# endif
+# ifndef LANG_LATIN
+# define LANG_LATIN 0x76
+# endif
+# ifndef LANG_LATVIAN
+# define LANG_LATVIAN 0x26
+# endif
+# ifndef LANG_LITHUANIAN
+# define LANG_LITHUANIAN 0x27
+# endif
+# ifndef LANG_MACEDONIAN
+# define LANG_MACEDONIAN 0x2f
+# endif
+# ifndef LANG_MALAY
+# define LANG_MALAY 0x3e
+# endif
+# ifndef LANG_MALAYALAM
+# define LANG_MALAYALAM 0x4c
+# endif
+# ifndef LANG_MALTESE
+# define LANG_MALTESE 0x3a
+# endif
+# ifndef LANG_MANIPURI
+# define LANG_MANIPURI 0x58
+# endif
+# ifndef LANG_MARATHI
+# define LANG_MARATHI 0x4e
+# endif
+# ifndef LANG_MONGOLIAN
+# define LANG_MONGOLIAN 0x50
+# endif
+# ifndef LANG_NEPALI
+# define LANG_NEPALI 0x61
+# endif
+# ifndef LANG_ORIYA
+# define LANG_ORIYA 0x48
+# endif
+# ifndef LANG_OROMO
+# define LANG_OROMO 0x72
+# endif
+# ifndef LANG_PAPIAMENTU
+# define LANG_PAPIAMENTU 0x79
+# endif
+# ifndef LANG_PASHTO
+# define LANG_PASHTO 0x63
+# endif
+# ifndef LANG_PUNJABI
+# define LANG_PUNJABI 0x46
+# endif
+# ifndef LANG_RHAETO_ROMANCE
+# define LANG_RHAETO_ROMANCE 0x17
+# endif
+# ifndef LANG_SAAMI
+# define LANG_SAAMI 0x3b
+# endif
+# ifndef LANG_SANSKRIT
+# define LANG_SANSKRIT 0x4f
+# endif
+# ifndef LANG_SERBIAN
+# define LANG_SERBIAN 0x1a
+# endif
+# ifndef LANG_SINDHI
+# define LANG_SINDHI 0x59
+# endif
+# ifndef LANG_SINHALESE
+# define LANG_SINHALESE 0x5b
+# endif
+# ifndef LANG_SLOVAK
+# define LANG_SLOVAK 0x1b
+# endif
+# ifndef LANG_SOMALI
+# define LANG_SOMALI 0x77
+# endif
+# ifndef LANG_SORBIAN
+# define LANG_SORBIAN 0x2e
+# endif
+# ifndef LANG_SUTU
+# define LANG_SUTU 0x30
+# endif
+# ifndef LANG_SWAHILI
+# define LANG_SWAHILI 0x41
+# endif
+# ifndef LANG_SYRIAC
+# define LANG_SYRIAC 0x5a
+# endif
+# ifndef LANG_TAGALOG
+# define LANG_TAGALOG 0x64
+# endif
+# ifndef LANG_TAJIK
+# define LANG_TAJIK 0x28
+# endif
+# ifndef LANG_TAMAZIGHT
+# define LANG_TAMAZIGHT 0x5f
+# endif
+# ifndef LANG_TAMIL
+# define LANG_TAMIL 0x49
+# endif
+# ifndef LANG_TATAR
+# define LANG_TATAR 0x44
+# endif
+# ifndef LANG_TELUGU
+# define LANG_TELUGU 0x4a
+# endif
+# ifndef LANG_THAI
+# define LANG_THAI 0x1e
+# endif
+# ifndef LANG_TIBETAN
+# define LANG_TIBETAN 0x51
+# endif
+# ifndef LANG_TIGRINYA
+# define LANG_TIGRINYA 0x73
+# endif
+# ifndef LANG_TSONGA
+# define LANG_TSONGA 0x31
+# endif
+# ifndef LANG_TSWANA
+# define LANG_TSWANA 0x32
+# endif
+# ifndef LANG_TURKMEN
+# define LANG_TURKMEN 0x42
+# endif
+# ifndef LANG_UKRAINIAN
+# define LANG_UKRAINIAN 0x22
+# endif
+# ifndef LANG_URDU
+# define LANG_URDU 0x20
+# endif
+# ifndef LANG_UZBEK
+# define LANG_UZBEK 0x43
+# endif
+# ifndef LANG_VENDA
+# define LANG_VENDA 0x33
+# endif
+# ifndef LANG_VIETNAMESE
+# define LANG_VIETNAMESE 0x2a
+# endif
+# ifndef LANG_WELSH
+# define LANG_WELSH 0x52
+# endif
+# ifndef LANG_XHOSA
+# define LANG_XHOSA 0x34
+# endif
+# ifndef LANG_YI
+# define LANG_YI 0x78
+# endif
+# ifndef LANG_YIDDISH
+# define LANG_YIDDISH 0x3d
+# endif
+# ifndef LANG_YORUBA
+# define LANG_YORUBA 0x6a
+# endif
+# ifndef LANG_ZULU
+# define LANG_ZULU 0x35
+# endif
+# ifndef SUBLANG_ARABIC_SAUDI_ARABIA
+# define SUBLANG_ARABIC_SAUDI_ARABIA 0x01
+# endif
+# ifndef SUBLANG_ARABIC_IRAQ
+# define SUBLANG_ARABIC_IRAQ 0x02
+# endif
+# ifndef SUBLANG_ARABIC_EGYPT
+# define SUBLANG_ARABIC_EGYPT 0x03
+# endif
+# ifndef SUBLANG_ARABIC_LIBYA
+# define SUBLANG_ARABIC_LIBYA 0x04
+# endif
+# ifndef SUBLANG_ARABIC_ALGERIA
+# define SUBLANG_ARABIC_ALGERIA 0x05
+# endif
+# ifndef SUBLANG_ARABIC_MOROCCO
+# define SUBLANG_ARABIC_MOROCCO 0x06
+# endif
+# ifndef SUBLANG_ARABIC_TUNISIA
+# define SUBLANG_ARABIC_TUNISIA 0x07
+# endif
+# ifndef SUBLANG_ARABIC_OMAN
+# define SUBLANG_ARABIC_OMAN 0x08
+# endif
+# ifndef SUBLANG_ARABIC_YEMEN
+# define SUBLANG_ARABIC_YEMEN 0x09
+# endif
+# ifndef SUBLANG_ARABIC_SYRIA
+# define SUBLANG_ARABIC_SYRIA 0x0a
+# endif
+# ifndef SUBLANG_ARABIC_JORDAN
+# define SUBLANG_ARABIC_JORDAN 0x0b
+# endif
+# ifndef SUBLANG_ARABIC_LEBANON
+# define SUBLANG_ARABIC_LEBANON 0x0c
+# endif
+# ifndef SUBLANG_ARABIC_KUWAIT
+# define SUBLANG_ARABIC_KUWAIT 0x0d
+# endif
+# ifndef SUBLANG_ARABIC_UAE
+# define SUBLANG_ARABIC_UAE 0x0e
+# endif
+# ifndef SUBLANG_ARABIC_BAHRAIN
+# define SUBLANG_ARABIC_BAHRAIN 0x0f
+# endif
+# ifndef SUBLANG_ARABIC_QATAR
+# define SUBLANG_ARABIC_QATAR 0x10
+# endif
+# ifndef SUBLANG_AZERI_LATIN
+# define SUBLANG_AZERI_LATIN 0x01
+# endif
+# ifndef SUBLANG_AZERI_CYRILLIC
+# define SUBLANG_AZERI_CYRILLIC 0x02
+# endif
+# ifndef SUBLANG_BENGALI_INDIA
+# define SUBLANG_BENGALI_INDIA 0x01
+# endif
+# ifndef SUBLANG_BENGALI_BANGLADESH
+# define SUBLANG_BENGALI_BANGLADESH 0x02
+# endif
+# ifndef SUBLANG_CHINESE_MACAU
+# define SUBLANG_CHINESE_MACAU 0x05
+# endif
+# ifndef SUBLANG_ENGLISH_SOUTH_AFRICA
+# define SUBLANG_ENGLISH_SOUTH_AFRICA 0x07
+# endif
+# ifndef SUBLANG_ENGLISH_JAMAICA
+# define SUBLANG_ENGLISH_JAMAICA 0x08
+# endif
+# ifndef SUBLANG_ENGLISH_CARIBBEAN
+# define SUBLANG_ENGLISH_CARIBBEAN 0x09
+# endif
+# ifndef SUBLANG_ENGLISH_BELIZE
+# define SUBLANG_ENGLISH_BELIZE 0x0a
+# endif
+# ifndef SUBLANG_ENGLISH_TRINIDAD
+# define SUBLANG_ENGLISH_TRINIDAD 0x0b
+# endif
+# ifndef SUBLANG_ENGLISH_ZIMBABWE
+# define SUBLANG_ENGLISH_ZIMBABWE 0x0c
+# endif
+# ifndef SUBLANG_ENGLISH_PHILIPPINES
+# define SUBLANG_ENGLISH_PHILIPPINES 0x0d
+# endif
+# ifndef SUBLANG_ENGLISH_INDONESIA
+# define SUBLANG_ENGLISH_INDONESIA 0x0e
+# endif
+# ifndef SUBLANG_ENGLISH_HONGKONG
+# define SUBLANG_ENGLISH_HONGKONG 0x0f
+# endif
+# ifndef SUBLANG_ENGLISH_INDIA
+# define SUBLANG_ENGLISH_INDIA 0x10
+# endif
+# ifndef SUBLANG_ENGLISH_MALAYSIA
+# define SUBLANG_ENGLISH_MALAYSIA 0x11
+# endif
+# ifndef SUBLANG_ENGLISH_SINGAPORE
+# define SUBLANG_ENGLISH_SINGAPORE 0x12
+# endif
+# ifndef SUBLANG_FRENCH_LUXEMBOURG
+# define SUBLANG_FRENCH_LUXEMBOURG 0x05
+# endif
+# ifndef SUBLANG_FRENCH_MONACO
+# define SUBLANG_FRENCH_MONACO 0x06
+# endif
+# ifndef SUBLANG_FRENCH_WESTINDIES
+# define SUBLANG_FRENCH_WESTINDIES 0x07
+# endif
+# ifndef SUBLANG_FRENCH_REUNION
+# define SUBLANG_FRENCH_REUNION 0x08
+# endif
+# ifndef SUBLANG_FRENCH_CONGO
+# define SUBLANG_FRENCH_CONGO 0x09
+# endif
+# ifndef SUBLANG_FRENCH_SENEGAL
+# define SUBLANG_FRENCH_SENEGAL 0x0a
+# endif
+# ifndef SUBLANG_FRENCH_CAMEROON
+# define SUBLANG_FRENCH_CAMEROON 0x0b
+# endif
+# ifndef SUBLANG_FRENCH_COTEDIVOIRE
+# define SUBLANG_FRENCH_COTEDIVOIRE 0x0c
+# endif
+# ifndef SUBLANG_FRENCH_MALI
+# define SUBLANG_FRENCH_MALI 0x0d
+# endif
+# ifndef SUBLANG_FRENCH_MOROCCO
+# define SUBLANG_FRENCH_MOROCCO 0x0e
+# endif
+# ifndef SUBLANG_FRENCH_HAITI
+# define SUBLANG_FRENCH_HAITI 0x0f
+# endif
+# ifndef SUBLANG_GERMAN_LUXEMBOURG
+# define SUBLANG_GERMAN_LUXEMBOURG 0x04
+# endif
+# ifndef SUBLANG_GERMAN_LIECHTENSTEIN
+# define SUBLANG_GERMAN_LIECHTENSTEIN 0x05
+# endif
+# ifndef SUBLANG_KASHMIRI_INDIA
+# define SUBLANG_KASHMIRI_INDIA 0x02
+# endif
+# ifndef SUBLANG_MALAY_MALAYSIA
+# define SUBLANG_MALAY_MALAYSIA 0x01
+# endif
+# ifndef SUBLANG_MALAY_BRUNEI_DARUSSALAM
+# define SUBLANG_MALAY_BRUNEI_DARUSSALAM 0x02
+# endif
+# ifndef SUBLANG_NEPALI_INDIA
+# define SUBLANG_NEPALI_INDIA 0x02
+# endif
+# ifndef SUBLANG_PUNJABI_INDIA
+# define SUBLANG_PUNJABI_INDIA 0x01
+# endif
+# ifndef SUBLANG_PUNJABI_PAKISTAN
+# define SUBLANG_PUNJABI_PAKISTAN 0x02
+# endif
+# ifndef SUBLANG_ROMANIAN_ROMANIA
+# define SUBLANG_ROMANIAN_ROMANIA 0x01
+# endif
+# ifndef SUBLANG_ROMANIAN_MOLDOVA
+# define SUBLANG_ROMANIAN_MOLDOVA 0x02
+# endif
+# ifndef SUBLANG_SERBIAN_LATIN
+# define SUBLANG_SERBIAN_LATIN 0x02
+# endif
+# ifndef SUBLANG_SERBIAN_CYRILLIC
+# define SUBLANG_SERBIAN_CYRILLIC 0x03
+# endif
+# ifndef SUBLANG_SINDHI_PAKISTAN
+# define SUBLANG_SINDHI_PAKISTAN 0x01
+# endif
+# ifndef SUBLANG_SINDHI_AFGHANISTAN
+# define SUBLANG_SINDHI_AFGHANISTAN 0x02
+# endif
+# ifndef SUBLANG_SPANISH_GUATEMALA
+# define SUBLANG_SPANISH_GUATEMALA 0x04
+# endif
+# ifndef SUBLANG_SPANISH_COSTA_RICA
+# define SUBLANG_SPANISH_COSTA_RICA 0x05
+# endif
+# ifndef SUBLANG_SPANISH_PANAMA
+# define SUBLANG_SPANISH_PANAMA 0x06
+# endif
+# ifndef SUBLANG_SPANISH_DOMINICAN_REPUBLIC
+# define SUBLANG_SPANISH_DOMINICAN_REPUBLIC 0x07
+# endif
+# ifndef SUBLANG_SPANISH_VENEZUELA
+# define SUBLANG_SPANISH_VENEZUELA 0x08
+# endif
+# ifndef SUBLANG_SPANISH_COLOMBIA
+# define SUBLANG_SPANISH_COLOMBIA 0x09
+# endif
+# ifndef SUBLANG_SPANISH_PERU
+# define SUBLANG_SPANISH_PERU 0x0a
+# endif
+# ifndef SUBLANG_SPANISH_ARGENTINA
+# define SUBLANG_SPANISH_ARGENTINA 0x0b
+# endif
+# ifndef SUBLANG_SPANISH_ECUADOR
+# define SUBLANG_SPANISH_ECUADOR 0x0c
+# endif
+# ifndef SUBLANG_SPANISH_CHILE
+# define SUBLANG_SPANISH_CHILE 0x0d
+# endif
+# ifndef SUBLANG_SPANISH_URUGUAY
+# define SUBLANG_SPANISH_URUGUAY 0x0e
+# endif
+# ifndef SUBLANG_SPANISH_PARAGUAY
+# define SUBLANG_SPANISH_PARAGUAY 0x0f
+# endif
+# ifndef SUBLANG_SPANISH_BOLIVIA
+# define SUBLANG_SPANISH_BOLIVIA 0x10
+# endif
+# ifndef SUBLANG_SPANISH_EL_SALVADOR
+# define SUBLANG_SPANISH_EL_SALVADOR 0x11
+# endif
+# ifndef SUBLANG_SPANISH_HONDURAS
+# define SUBLANG_SPANISH_HONDURAS 0x12
+# endif
+# ifndef SUBLANG_SPANISH_NICARAGUA
+# define SUBLANG_SPANISH_NICARAGUA 0x13
+# endif
+# ifndef SUBLANG_SPANISH_PUERTO_RICO
+# define SUBLANG_SPANISH_PUERTO_RICO 0x14
+# endif
+# ifndef SUBLANG_SWEDISH_FINLAND
+# define SUBLANG_SWEDISH_FINLAND 0x02
+# endif
+# ifndef SUBLANG_TAMAZIGHT_ARABIC
+# define SUBLANG_TAMAZIGHT_ARABIC 0x01
+# endif
+# ifndef SUBLANG_TAMAZIGHT_ALGERIA_LATIN
+# define SUBLANG_TAMAZIGHT_ALGERIA_LATIN 0x02
+# endif
+# ifndef SUBLANG_TIGRINYA_ETHIOPIA
+# define SUBLANG_TIGRINYA_ETHIOPIA 0x01
+# endif
+# ifndef SUBLANG_TIGRINYA_ERITREA
+# define SUBLANG_TIGRINYA_ERITREA 0x02
+# endif
+# ifndef SUBLANG_URDU_PAKISTAN
+# define SUBLANG_URDU_PAKISTAN 0x01
+# endif
+# ifndef SUBLANG_URDU_INDIA
+# define SUBLANG_URDU_INDIA 0x02
+# endif
+# ifndef SUBLANG_UZBEK_LATIN
+# define SUBLANG_UZBEK_LATIN 0x01
+# endif
+# ifndef SUBLANG_UZBEK_CYRILLIC
+# define SUBLANG_UZBEK_CYRILLIC 0x02
+# endif
+#endif
+
+# if HAVE_CFLOCALECOPYCURRENT || HAVE_CFPREFERENCESCOPYAPPVALUE
+/* MacOS X 10.2 or newer */
+
+/* Canonicalize a MacOS X locale name to a Unix locale name.
+   NAME is a sufficiently large buffer.
+   On input, it contains the MacOS X locale name.
+   On output, it contains the Unix locale name.  */
+#  if !defined IN_LIBINTL
+static
+#  endif
+void
+gl_locale_name_canonicalize (char *name)
+{
+  /* This conversion is based on a posting by
+     Deborah GoldSmith <goldsmit at apple.com> on 2005-03-08,
+     http://lists.apple.com/archives/carbon-dev/2005/Mar/msg00293.html */
+
+  /* Convert legacy (NeXTstep inherited) English names to Unix (ISO 639 and
+     ISO 3166) names.  Prior to MacOS X 10.3, there is no API for doing this.
+     Therefore we do it ourselves, using a table based on the results of the
+     MacOS X 10.3.8 function
+     CFLocaleCreateCanonicalLocaleIdentifierFromString().  */
+  typedef struct { const char legacy[21+1]; const char unixy[5+1]; }
+	  legacy_entry;
+  static const legacy_entry legacy_table[] = {
+    { "Afrikaans",             "af" },
+    { "Albanian",              "sq" },
+    { "Amharic",               "am" },
+    { "Arabic",                "ar" },
+    { "Armenian",              "hy" },
+    { "Assamese",              "as" },
+    { "Aymara",                "ay" },
+    { "Azerbaijani",           "az" },
+    { "Basque",                "eu" },
+    { "Belarusian",            "be" },
+    { "Belorussian",           "be" },
+    { "Bengali",               "bn" },
+    { "Brazilian Portugese",   "pt_BR" },
+    { "Brazilian Portuguese",  "pt_BR" },
+    { "Breton",                "br" },
+    { "Bulgarian",             "bg" },
+    { "Burmese",               "my" },
+    { "Byelorussian",          "be" },
+    { "Catalan",               "ca" },
+    { "Chewa",                 "ny" },
+    { "Chichewa",              "ny" },
+    { "Chinese",               "zh" },
+    { "Chinese, Simplified",   "zh_CN" },
+    { "Chinese, Traditional",  "zh_TW" },
+    { "Chinese, Tradtional",   "zh_TW" },
+    { "Croatian",              "hr" },
+    { "Czech",                 "cs" },
+    { "Danish",                "da" },
+    { "Dutch",                 "nl" },
+    { "Dzongkha",              "dz" },
+    { "English",               "en" },
+    { "Esperanto",             "eo" },
+    { "Estonian",              "et" },
+    { "Faroese",               "fo" },
+    { "Farsi",                 "fa" },
+    { "Finnish",               "fi" },
+    { "Flemish",               "nl_BE" },
+    { "French",                "fr" },
+    { "Galician",              "gl" },
+    { "Gallegan",              "gl" },
+    { "Georgian",              "ka" },
+    { "German",                "de" },
+    { "Greek",                 "el" },
+    { "Greenlandic",           "kl" },
+    { "Guarani",               "gn" },
+    { "Gujarati",              "gu" },
+    { "Hawaiian",              "haw" }, /* Yes, "haw", not "cpe".  */
+    { "Hebrew",                "he" },
+    { "Hindi",                 "hi" },
+    { "Hungarian",             "hu" },
+    { "Icelandic",             "is" },
+    { "Indonesian",            "id" },
+    { "Inuktitut",             "iu" },
+    { "Irish",                 "ga" },
+    { "Italian",               "it" },
+    { "Japanese",              "ja" },
+    { "Javanese",              "jv" },
+    { "Kalaallisut",           "kl" },
+    { "Kannada",               "kn" },
+    { "Kashmiri",              "ks" },
+    { "Kazakh",                "kk" },
+    { "Khmer",                 "km" },
+    { "Kinyarwanda",           "rw" },
+    { "Kirghiz",               "ky" },
+    { "Korean",                "ko" },
+    { "Kurdish",               "ku" },
+    { "Latin",                 "la" },
+    { "Latvian",               "lv" },
+    { "Lithuanian",            "lt" },
+    { "Macedonian",            "mk" },
+    { "Malagasy",              "mg" },
+    { "Malay",                 "ms" },
+    { "Malayalam",             "ml" },
+    { "Maltese",               "mt" },
+    { "Manx",                  "gv" },
+    { "Marathi",               "mr" },
+    { "Moldavian",             "mo" },
+    { "Mongolian",             "mn" },
+    { "Nepali",                "ne" },
+    { "Norwegian",             "nb" }, /* Yes, "nb", not the obsolete "no".  */
+    { "Nyanja",                "ny" },
+    { "Nynorsk",               "nn" },
+    { "Oriya",                 "or" },
+    { "Oromo",                 "om" },
+    { "Panjabi",               "pa" },
+    { "Pashto",                "ps" },
+    { "Persian",               "fa" },
+    { "Polish",                "pl" },
+    { "Portuguese",            "pt" },
+    { "Portuguese, Brazilian", "pt_BR" },
+    { "Punjabi",               "pa" },
+    { "Pushto",                "ps" },
+    { "Quechua",               "qu" },
+    { "Romanian",              "ro" },
+    { "Ruanda",                "rw" },
+    { "Rundi",                 "rn" },
+    { "Russian",               "ru" },
+    { "Sami",                  "se_NO" }, /* Not just "se".  */
+    { "Sanskrit",              "sa" },
+    { "Scottish",              "gd" },
+    { "Serbian",               "sr" },
+    { "Simplified Chinese",    "zh_CN" },
+    { "Sindhi",                "sd" },
+    { "Sinhalese",             "si" },
+    { "Slovak",                "sk" },
+    { "Slovenian",             "sl" },
+    { "Somali",                "so" },
+    { "Spanish",               "es" },
+    { "Sundanese",             "su" },
+    { "Swahili",               "sw" },
+    { "Swedish",               "sv" },
+    { "Tagalog",               "tl" },
+    { "Tajik",                 "tg" },
+    { "Tajiki",                "tg" },
+    { "Tamil",                 "ta" },
+    { "Tatar",                 "tt" },
+    { "Telugu",                "te" },
+    { "Thai",                  "th" },
+    { "Tibetan",               "bo" },
+    { "Tigrinya",              "ti" },
+    { "Tongan",                "to" },
+    { "Traditional Chinese",   "zh_TW" },
+    { "Turkish",               "tr" },
+    { "Turkmen",               "tk" },
+    { "Uighur",                "ug" },
+    { "Ukrainian",             "uk" },
+    { "Urdu",                  "ur" },
+    { "Uzbek",                 "uz" },
+    { "Vietnamese",            "vi" },
+    { "Welsh",                 "cy" },
+    { "Yiddish",               "yi" }
+  };
+
+  /* Convert new-style locale names with language tags (ISO 639 and ISO 15924)
+     to Unix (ISO 639 and ISO 3166) names.  */
+  typedef struct { const char langtag[7+1]; const char unixy[12+1]; }
+	  langtag_entry;
+  static const langtag_entry langtag_table[] = {
+    /* MacOS X has "az-Arab", "az-Cyrl", "az-Latn".
+       The default script for az on Unix is Latin.  */
+    { "az-Latn", "az" },
+    /* MacOS X has "ga-dots".  Does not yet exist on Unix.  */
+    { "ga-dots", "ga" },
+    /* MacOS X has "kk-Cyrl".  Does not yet exist on Unix.  */
+    /* MacOS X has "mn-Cyrl", "mn-Mong".
+       The default script for mn on Unix is Cyrillic.  */
+    { "mn-Cyrl", "mn" },
+    /* MacOS X has "ms-Arab", "ms-Latn".
+       The default script for ms on Unix is Latin.  */
+    { "ms-Latn", "ms" },
+    /* MacOS X has "tg-Cyrl".
+       The default script for tg on Unix is Cyrillic.  */
+    { "tg-Cyrl", "tg" },
+    /* MacOS X has "tk-Cyrl".  Does not yet exist on Unix.  */
+    /* MacOS X has "tt-Cyrl".
+       The default script for tt on Unix is Cyrillic.  */
+    { "tt-Cyrl", "tt" },
+    /* MacOS X has "zh-Hans", "zh-Hant".
+       Country codes are used to distinguish these on Unix.  */
+    { "zh-Hans", "zh_CN" },
+    { "zh-Hant", "zh_TW" }
+  };
+
+  /* Convert script names (ISO 15924) to Unix conventions.
+     See http://www.unicode.org/iso15924/iso15924-codes.html  */
+  typedef struct { const char script[4+1]; const char unixy[9+1]; }
+	  script_entry;
+  static const script_entry script_table[] = {
+    { "Arab", "arabic" },
+    { "Cyrl", "cyrillic" },
+    { "Mong", "mongolian" }
+  };
+
+  /* Step 1: Convert using legacy_table.  */
+  if (name[0] >= 'A' && name[0] <= 'Z')
+    {
+      unsigned int i1, i2;
+      i1 = 0;
+      i2 = sizeof (legacy_table) / sizeof (legacy_entry);
+      while (i2 - i1 > 1)
+	{
+	  /* At this point we know that if name occurs in legacy_table,
+	     its index must be >= i1 and < i2.  */
+	  unsigned int i = (i1 + i2) >> 1;
+	  const legacy_entry *p = &legacy_table[i];
+	  if (strcmp (name, p->legacy) < 0)
+	    i2 = i;
+	  else
+	    i1 = i;
+	}
+      if (strcmp (name, legacy_table[i1].legacy) == 0)
+	{
+	  strcpy (name, legacy_table[i1].unixy);
+	  return;
+	}
+    }
+
+  /* Step 2: Convert using langtag_table and script_table.  */
+  if (strlen (name) == 7 && name[2] == '-')
+    {
+      unsigned int i1, i2;
+      i1 = 0;
+      i2 = sizeof (langtag_table) / sizeof (langtag_entry);
+      while (i2 - i1 > 1)
+	{
+	  /* At this point we know that if name occurs in langtag_table,
+	     its index must be >= i1 and < i2.  */
+	  unsigned int i = (i1 + i2) >> 1;
+	  const langtag_entry *p = &langtag_table[i];
+	  if (strcmp (name, p->langtag) < 0)
+	    i2 = i;
+	  else
+	    i1 = i;
+	}
+      if (strcmp (name, langtag_table[i1].langtag) == 0)
+	{
+	  strcpy (name, langtag_table[i1].unixy);
+	  return;
+	}
+
+      i1 = 0;
+      i2 = sizeof (script_table) / sizeof (script_entry);
+      while (i2 - i1 > 1)
+	{
+	  /* At this point we know that if (name + 3) occurs in script_table,
+	     its index must be >= i1 and < i2.  */
+	  unsigned int i = (i1 + i2) >> 1;
+	  const script_entry *p = &script_table[i];
+	  if (strcmp (name + 3, p->script) < 0)
+	    i2 = i;
+	  else
+	    i1 = i;
+	}
+      if (strcmp (name + 3, script_table[i1].script) == 0)
+	{
+	  name[2] = '@';
+	  strcpy (name + 3, script_table[i1].unixy);
+	  return;
+	}
+    }
+
+  /* Step 3: Convert new-style dash to Unix underscore. */
+  {
+    char *p;
+    for (p = name; *p != '\0'; p++)
+      if (*p == '-')
+	*p = '_';
+  }
+}
+
+#endif
+
+/* XPG3 defines the result of 'setlocale (category, NULL)' as:
+   "Directs 'setlocale()' to query 'category' and return the current
+    setting of 'local'."
+   However it does not specify the exact format.  Neither do SUSV2 and
+   ISO C 99.  So we can use this feature only on selected systems (e.g.
+   those using GNU C Library).  */
+#if defined _LIBC || (defined __GLIBC__ && __GLIBC__ >= 2)
+# define HAVE_LOCALE_NULL
+#endif
+
+/* Determine the current locale's name, and canonicalize it into XPG syntax
+     language[_territory][.codeset][@modifier]
+   The codeset part in the result is not reliable; the locale_charset()
+   should be used for codeset information instead.
+   The result must not be freed; it is statically allocated.  */
+
+const char *
+gl_locale_name_posix (int category, const char *categoryname)
+{
+  /* Use the POSIX methods of looking to 'LC_ALL', 'LC_xxx', and 'LANG'.
+     On some systems this can be done by the 'setlocale' function itself.  */
+#if defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES && defined HAVE_LOCALE_NULL
+  return setlocale (category, NULL);
+#else
+  const char *retval;
+
+  /* Setting of LC_ALL overrides all other.  */
+  retval = getenv ("LC_ALL");
+  if (retval != NULL && retval[0] != '\0')
+    return retval;
+  /* Next comes the name of the desired category.  */
+  retval = getenv (categoryname);
+  if (retval != NULL && retval[0] != '\0')
+    return retval;
+  /* Last possibility is the LANG environment variable.  */
+  retval = getenv ("LANG");
+  if (retval != NULL && retval[0] != '\0')
+    return retval;
+
+  return NULL;
+#endif
+}
+
+const char *
+gl_locale_name_default (void)
+{
+  /* POSIX:2001 says:
+     "All implementations shall define a locale as the default locale, to be
+      invoked when no environment variables are set, or set to the empty
+      string.  This default locale can be the POSIX locale or any other
+      implementation-defined locale.  Some implementations may provide
+      facilities for local installation administrators to set the default
+      locale, customizing it for each location.  POSIX:2001 does not require
+      such a facility.  */
+
+#if !(HAVE_CFLOCALECOPYCURRENT || HAVE_CFPREFERENCESCOPYAPPVALUE || defined(WIN32_NATIVE))
+
+  /* The system does not have a way of setting the locale, other than the
+     POSIX specified environment variables.  We use C as default locale.  */
+  return "C";
+
+#else
+
+  /* Return an XPG style locale name language[_territory][@modifier].
+     Don't even bother determining the codeset; it's not useful in this
+     context, because message catalogs are not specific to a single
+     codeset.  */
+
+# if HAVE_CFLOCALECOPYCURRENT || HAVE_CFPREFERENCESCOPYAPPVALUE
+  /* MacOS X 10.2 or newer */
+  {
+    /* Cache the locale name, since CoreFoundation calls are expensive.  */
+    static const char *cached_localename;
+
+    if (cached_localename == NULL)
+      {
+	char namebuf[256];
+#  if HAVE_CFLOCALECOPYCURRENT /* MacOS X 10.3 or newer */
+	CFLocaleRef locale = CFLocaleCopyCurrent ();
+	CFStringRef name = CFLocaleGetIdentifier (locale);
+
+	if (CFStringGetCString (name, namebuf, sizeof(namebuf),
+				kCFStringEncodingASCII))
+	  {
+	    gl_locale_name_canonicalize (namebuf);
+	    cached_localename = strdup (namebuf);
+	  }
+	CFRelease (locale);
+#  elif HAVE_CFPREFERENCESCOPYAPPVALUE /* MacOS X 10.2 or newer */
+	CFTypeRef value =
+	  CFPreferencesCopyAppValue (CFSTR ("AppleLocale"),
+				     kCFPreferencesCurrentApplication);
+	if (value != NULL
+	    && CFGetTypeID (value) == CFStringGetTypeID ()
+	    && CFStringGetCString ((CFStringRef)value, namebuf, sizeof(namebuf),
+				   kCFStringEncodingASCII))
+	  {
+	    gl_locale_name_canonicalize (namebuf);
+	    cached_localename = strdup (namebuf);
+	  }
+#  endif
+	if (cached_localename == NULL)
+	  cached_localename = "C";
+      }
+    return cached_localename;
+  }
+
+# endif
+
+# if defined(WIN32_NATIVE) /* WIN32, not Cygwin */
+  {
+    LCID lcid;
+    LANGID langid;
+    int primary, sub;
+
+    /* Use native Win32 API locale ID.  */
+    lcid = GetThreadLocale ();
+
+    /* Strip off the sorting rules, keep only the language part.  */
+    langid = LANGIDFROMLCID (lcid);
+
+    /* Split into language and territory part.  */
+    primary = PRIMARYLANGID (langid);
+    sub = SUBLANGID (langid);
+
+    /* Dispatch on language.
+       See also http://www.unicode.org/unicode/onlinedat/languages.html .
+       For details about languages, see http://www.ethnologue.com/ .  */
+    switch (primary)
+      {
+      case LANG_AFRIKAANS: return "af_ZA";
+      case LANG_ALBANIAN: return "sq_AL";
+      case LANG_AMHARIC: return "am_ET";
+      case LANG_ARABIC:
+	switch (sub)
+	  {
+	  case SUBLANG_ARABIC_SAUDI_ARABIA: return "ar_SA";
+	  case SUBLANG_ARABIC_IRAQ: return "ar_IQ";
+	  case SUBLANG_ARABIC_EGYPT: return "ar_EG";
+	  case SUBLANG_ARABIC_LIBYA: return "ar_LY";
+	  case SUBLANG_ARABIC_ALGERIA: return "ar_DZ";
+	  case SUBLANG_ARABIC_MOROCCO: return "ar_MA";
+	  case SUBLANG_ARABIC_TUNISIA: return "ar_TN";
+	  case SUBLANG_ARABIC_OMAN: return "ar_OM";
+	  case SUBLANG_ARABIC_YEMEN: return "ar_YE";
+	  case SUBLANG_ARABIC_SYRIA: return "ar_SY";
+	  case SUBLANG_ARABIC_JORDAN: return "ar_JO";
+	  case SUBLANG_ARABIC_LEBANON: return "ar_LB";
+	  case SUBLANG_ARABIC_KUWAIT: return "ar_KW";
+	  case SUBLANG_ARABIC_UAE: return "ar_AE";
+	  case SUBLANG_ARABIC_BAHRAIN: return "ar_BH";
+	  case SUBLANG_ARABIC_QATAR: return "ar_QA";
+	  }
+	return "ar";
+      case LANG_ARMENIAN: return "hy_AM";
+      case LANG_ASSAMESE: return "as_IN";
+      case LANG_AZERI:
+	switch (sub)
+	  {
+	  /* FIXME: Adjust this when Azerbaijani locales appear on Unix.  */
+	  case SUBLANG_AZERI_LATIN: return "az_AZ at latin";
+	  case SUBLANG_AZERI_CYRILLIC: return "az_AZ at cyrillic";
+	  }
+	return "az";
+      case LANG_BASQUE:
+	switch (sub)
+	  {
+	  case SUBLANG_DEFAULT: return "eu_ES";
+	  }
+	return "eu"; /* Ambiguous: could be "eu_ES" or "eu_FR".  */
+      case LANG_BELARUSIAN: return "be_BY";
+      case LANG_BENGALI:
+	switch (sub)
+	  {
+	  case SUBLANG_BENGALI_INDIA: return "bn_IN";
+	  case SUBLANG_BENGALI_BANGLADESH: return "bn_BD";
+	  }
+	return "bn";
+      case LANG_BULGARIAN: return "bg_BG";
+      case LANG_BURMESE: return "my_MM";
+      case LANG_CAMBODIAN: return "km_KH";
+      case LANG_CATALAN: return "ca_ES";
+      case LANG_CHEROKEE: return "chr_US";
+      case LANG_CHINESE:
+	switch (sub)
+	  {
+	  case SUBLANG_CHINESE_TRADITIONAL: return "zh_TW";
+	  case SUBLANG_CHINESE_SIMPLIFIED: return "zh_CN";
+	  case SUBLANG_CHINESE_HONGKONG: return "zh_HK";
+	  case SUBLANG_CHINESE_SINGAPORE: return "zh_SG";
+	  case SUBLANG_CHINESE_MACAU: return "zh_MO";
+	  }
+	return "zh";
+      case LANG_CROATIAN:       /* LANG_CROATIAN == LANG_SERBIAN
+				 * What used to be called Serbo-Croatian
+				 * should really now be two separate
+				 * languages because of political reasons.
+				 * (Says tml, who knows nothing about Serbian
+				 * or Croatian.)
+				 * (I can feel those flames coming already.)
+				 */
+	switch (sub)
+	  {
+	  case SUBLANG_DEFAULT: return "hr_HR";
+	  case SUBLANG_SERBIAN_LATIN: return "sr_CS";
+	  case SUBLANG_SERBIAN_CYRILLIC: return "sr_CS at cyrillic";
+	  }
+	return "hr";
+      case LANG_CZECH: return "cs_CZ";
+      case LANG_DANISH: return "da_DK";
+      case LANG_DIVEHI: return "dv_MV";
+      case LANG_DUTCH:
+	switch (sub)
+	  {
+	  case SUBLANG_DUTCH: return "nl_NL";
+	  case SUBLANG_DUTCH_BELGIAN: /* FLEMISH, VLAAMS */ return "nl_BE";
+	  }
+	return "nl";
+      case LANG_EDO: return "bin_NG";
+      case LANG_ENGLISH:
+	switch (sub)
+	  {
+	  /* SUBLANG_ENGLISH_US == SUBLANG_DEFAULT. Heh. I thought
+	   * English was the language spoken in England.
+	   * Oh well.
+	   */
+	  case SUBLANG_ENGLISH_US: return "en_US";
+	  case SUBLANG_ENGLISH_UK: return "en_GB";
+	  case SUBLANG_ENGLISH_AUS: return "en_AU";
+	  case SUBLANG_ENGLISH_CAN: return "en_CA";
+	  case SUBLANG_ENGLISH_NZ: return "en_NZ";
+	  case SUBLANG_ENGLISH_EIRE: return "en_IE";
+	  case SUBLANG_ENGLISH_SOUTH_AFRICA: return "en_ZA";
+	  case SUBLANG_ENGLISH_JAMAICA: return "en_JM";
+	  case SUBLANG_ENGLISH_CARIBBEAN: return "en_GD"; /* Grenada? */
+	  case SUBLANG_ENGLISH_BELIZE: return "en_BZ";
+	  case SUBLANG_ENGLISH_TRINIDAD: return "en_TT";
+	  case SUBLANG_ENGLISH_ZIMBABWE: return "en_ZW";
+	  case SUBLANG_ENGLISH_PHILIPPINES: return "en_PH";
+	  case SUBLANG_ENGLISH_INDONESIA: return "en_ID";
+	  case SUBLANG_ENGLISH_HONGKONG: return "en_HK";
+	  case SUBLANG_ENGLISH_INDIA: return "en_IN";
+	  case SUBLANG_ENGLISH_MALAYSIA: return "en_MY";
+	  case SUBLANG_ENGLISH_SINGAPORE: return "en_SG";
+	  }
+	return "en";
+      case LANG_ESTONIAN: return "et_EE";
+      case LANG_FAEROESE: return "fo_FO";
+      case LANG_FARSI: return "fa_IR";
+      case LANG_FINNISH: return "fi_FI";
+      case LANG_FRENCH:
+	switch (sub)
+	  {
+	  case SUBLANG_FRENCH: return "fr_FR";
+	  case SUBLANG_FRENCH_BELGIAN: /* WALLOON */ return "fr_BE";
+	  case SUBLANG_FRENCH_CANADIAN: return "fr_CA";
+	  case SUBLANG_FRENCH_SWISS: return "fr_CH";
+	  case SUBLANG_FRENCH_LUXEMBOURG: return "fr_LU";
+	  case SUBLANG_FRENCH_MONACO: return "fr_MC";
+	  case SUBLANG_FRENCH_WESTINDIES: return "fr"; /* Caribbean? */
+	  case SUBLANG_FRENCH_REUNION: return "fr_RE";
+	  case SUBLANG_FRENCH_CONGO: return "fr_CG";
+	  case SUBLANG_FRENCH_SENEGAL: return "fr_SN";
+	  case SUBLANG_FRENCH_CAMEROON: return "fr_CM";
+	  case SUBLANG_FRENCH_COTEDIVOIRE: return "fr_CI";
+	  case SUBLANG_FRENCH_MALI: return "fr_ML";
+	  case SUBLANG_FRENCH_MOROCCO: return "fr_MA";
+	  case SUBLANG_FRENCH_HAITI: return "fr_HT";
+	  }
+	return "fr";
+      case LANG_FRISIAN: return "fy_NL";
+      case LANG_FULFULDE:
+	/* Spoken in Nigeria, Guinea, Senegal, Mali, Niger, Cameroon, Benin.  */
+	return "ff_NG";
+      case LANG_GAELIC:
+	switch (sub)
+	  {
+	  case 0x01: /* SCOTTISH */ return "gd_GB";
+	  case 0x02: /* IRISH */ return "ga_IE";
+	  }
+	return "C";
+      case LANG_GALICIAN: return "gl_ES";
+      case LANG_GEORGIAN: return "ka_GE";
+      case LANG_GERMAN:
+	switch (sub)
+	  {
+	  case SUBLANG_GERMAN: return "de_DE";
+	  case SUBLANG_GERMAN_SWISS: return "de_CH";
+	  case SUBLANG_GERMAN_AUSTRIAN: return "de_AT";
+	  case SUBLANG_GERMAN_LUXEMBOURG: return "de_LU";
+	  case SUBLANG_GERMAN_LIECHTENSTEIN: return "de_LI";
+	  }
+	return "de";
+      case LANG_GREEK: return "el_GR";
+      case LANG_GUARANI: return "gn_PY";
+      case LANG_GUJARATI: return "gu_IN";
+      case LANG_HAUSA: return "ha_NG";
+      case LANG_HAWAIIAN:
+	/* FIXME: Do they mean Hawaiian ("haw_US", 1000 speakers)
+	   or Hawaii Creole English ("cpe_US", 600000 speakers)?  */
+	return "cpe_US";
+      case LANG_HEBREW: return "he_IL";
+      case LANG_HINDI: return "hi_IN";
+      case LANG_HUNGARIAN: return "hu_HU";
+      case LANG_IBIBIO: return "nic_NG";
+      case LANG_ICELANDIC: return "is_IS";
+      case LANG_IGBO: return "ig_NG";
+      case LANG_INDONESIAN: return "id_ID";
+      case LANG_INUKTITUT: return "iu_CA";
+      case LANG_ITALIAN:
+	switch (sub)
+	  {
+	  case SUBLANG_ITALIAN: return "it_IT";
+	  case SUBLANG_ITALIAN_SWISS: return "it_CH";
+	  }
+	return "it";
+      case LANG_JAPANESE: return "ja_JP";
+      case LANG_KANNADA: return "kn_IN";
+      case LANG_KANURI: return "kr_NG";
+      case LANG_KASHMIRI:
+	switch (sub)
+	  {
+	  case SUBLANG_DEFAULT: return "ks_PK";
+	  case SUBLANG_KASHMIRI_INDIA: return "ks_IN";
+	  }
+	return "ks";
+      case LANG_KAZAK: return "kk_KZ";
+      case LANG_KONKANI:
+	/* FIXME: Adjust this when such locales appear on Unix.  */
+	return "kok_IN";
+      case LANG_KOREAN: return "ko_KR";
+      case LANG_KYRGYZ: return "ky_KG";
+      case LANG_LAO: return "lo_LA";
+      case LANG_LATIN: return "la_VA";
+      case LANG_LATVIAN: return "lv_LV";
+      case LANG_LITHUANIAN: return "lt_LT";
+      case LANG_MACEDONIAN: return "mk_MK";
+      case LANG_MALAY:
+	switch (sub)
+	  {
+	  case SUBLANG_MALAY_MALAYSIA: return "ms_MY";
+	  case SUBLANG_MALAY_BRUNEI_DARUSSALAM: return "ms_BN";
+	  }
+	return "ms";
+      case LANG_MALAYALAM: return "ml_IN";
+      case LANG_MALTESE: return "mt_MT";
+      case LANG_MANIPURI:
+	/* FIXME: Adjust this when such locales appear on Unix.  */
+	return "mni_IN";
+      case LANG_MARATHI: return "mr_IN";
+      case LANG_MONGOLIAN:
+	switch (sub)
+	  {
+	  case SUBLANG_DEFAULT: return "mn_MN";
+	  }
+	return "mn"; /* Ambiguous: could be "mn_CN" or "mn_MN".  */
+      case LANG_NEPALI:
+	switch (sub)
+	  {
+	  case SUBLANG_DEFAULT: return "ne_NP";
+	  case SUBLANG_NEPALI_INDIA: return "ne_IN";
+	  }
+	return "ne";
+      case LANG_NORWEGIAN:
+	switch (sub)
+	  {
+	  case SUBLANG_NORWEGIAN_BOKMAL: return "nb_NO";
+	  case SUBLANG_NORWEGIAN_NYNORSK: return "nn_NO";
+	  }
+	return "no";
+      case LANG_ORIYA: return "or_IN";
+      case LANG_OROMO: return "om_ET";
+      case LANG_PAPIAMENTU: return "pap_AN";
+      case LANG_PASHTO:
+	return "ps"; /* Ambiguous: could be "ps_PK" or "ps_AF".  */
+      case LANG_POLISH: return "pl_PL";
+      case LANG_PORTUGUESE:
+	switch (sub)
+	  {
+	  case SUBLANG_PORTUGUESE: return "pt_PT";
+	  /* Hmm. SUBLANG_PORTUGUESE_BRAZILIAN == SUBLANG_DEFAULT.
+	     Same phenomenon as SUBLANG_ENGLISH_US == SUBLANG_DEFAULT. */
+	  case SUBLANG_PORTUGUESE_BRAZILIAN: return "pt_BR";
+	  }
+	return "pt";
+      case LANG_PUNJABI:
+	switch (sub)
+	  {
+	  case SUBLANG_PUNJABI_INDIA: return "pa_IN"; /* Gurmukhi script */
+	  case SUBLANG_PUNJABI_PAKISTAN: return "pa_PK"; /* Arabic script */
+	  }
+	return "pa";
+      case LANG_RHAETO_ROMANCE: return "rm_CH";
+      case LANG_ROMANIAN:
+	switch (sub)
+	  {
+	  case SUBLANG_ROMANIAN_ROMANIA: return "ro_RO";
+	  case SUBLANG_ROMANIAN_MOLDOVA: return "ro_MD";
+	  }
+	return "ro";
+      case LANG_RUSSIAN:
+	switch (sub)
+	  {
+	  case SUBLANG_DEFAULT: return "ru_RU";
+	  }
+	return "ru"; /* Ambiguous: could be "ru_RU" or "ru_UA" or "ru_MD".  */
+      case LANG_SAAMI: /* actually Northern Sami */ return "se_NO";
+      case LANG_SANSKRIT: return "sa_IN";
+      case LANG_SINDHI:
+	switch (sub)
+	  {
+	  case SUBLANG_SINDHI_PAKISTAN: return "sd_PK";
+	  case SUBLANG_SINDHI_AFGHANISTAN: return "sd_AF";
+	  }
+	return "sd";
+      case LANG_SINHALESE: return "si_LK";
+      case LANG_SLOVAK: return "sk_SK";
+      case LANG_SLOVENIAN: return "sl_SI";
+      case LANG_SOMALI: return "so_SO";
+      case LANG_SORBIAN:
+	/* FIXME: Adjust this when such locales appear on Unix.  */
+	return "wen_DE";
+      case LANG_SPANISH:
+	switch (sub)
+	  {
+	  case SUBLANG_SPANISH: return "es_ES";
+	  case SUBLANG_SPANISH_MEXICAN: return "es_MX";
+	  case SUBLANG_SPANISH_MODERN:
+	    return "es_ES at modern";	/* not seen on Unix */
+	  case SUBLANG_SPANISH_GUATEMALA: return "es_GT";
+	  case SUBLANG_SPANISH_COSTA_RICA: return "es_CR";
+	  case SUBLANG_SPANISH_PANAMA: return "es_PA";
+	  case SUBLANG_SPANISH_DOMINICAN_REPUBLIC: return "es_DO";
+	  case SUBLANG_SPANISH_VENEZUELA: return "es_VE";
+	  case SUBLANG_SPANISH_COLOMBIA: return "es_CO";
+	  case SUBLANG_SPANISH_PERU: return "es_PE";
+	  case SUBLANG_SPANISH_ARGENTINA: return "es_AR";
+	  case SUBLANG_SPANISH_ECUADOR: return "es_EC";
+	  case SUBLANG_SPANISH_CHILE: return "es_CL";
+	  case SUBLANG_SPANISH_URUGUAY: return "es_UY";
+	  case SUBLANG_SPANISH_PARAGUAY: return "es_PY";
+	  case SUBLANG_SPANISH_BOLIVIA: return "es_BO";
+	  case SUBLANG_SPANISH_EL_SALVADOR: return "es_SV";
+	  case SUBLANG_SPANISH_HONDURAS: return "es_HN";
+	  case SUBLANG_SPANISH_NICARAGUA: return "es_NI";
+	  case SUBLANG_SPANISH_PUERTO_RICO: return "es_PR";
+	  }
+	return "es";
+      case LANG_SUTU: return "bnt_TZ"; /* or "st_LS" or "nso_ZA"? */
+      case LANG_SWAHILI: return "sw_KE";
+      case LANG_SWEDISH:
+	switch (sub)
+	  {
+	  case SUBLANG_DEFAULT: return "sv_SE";
+	  case SUBLANG_SWEDISH_FINLAND: return "sv_FI";
+	  }
+	return "sv";
+      case LANG_SYRIAC: return "syr_TR"; /* An extinct language.  */
+      case LANG_TAGALOG: return "tl_PH";
+      case LANG_TAJIK: return "tg_TJ";
+      case LANG_TAMAZIGHT:
+	switch (sub)
+	  {
+	  /* FIXME: Adjust this when Tamazight locales appear on Unix.  */
+	  case SUBLANG_TAMAZIGHT_ARABIC: return "ber_MA at arabic";
+	  case SUBLANG_TAMAZIGHT_ALGERIA_LATIN: return "ber_DZ at latin";
+	  }
+	return "ber_MA";
+      case LANG_TAMIL:
+	switch (sub)
+	  {
+	  case SUBLANG_DEFAULT: return "ta_IN";
+	  }
+	return "ta"; /* Ambiguous: could be "ta_IN" or "ta_LK" or "ta_SG".  */
+      case LANG_TATAR: return "tt_RU";
+      case LANG_TELUGU: return "te_IN";
+      case LANG_THAI: return "th_TH";
+      case LANG_TIBETAN: return "bo_CN";
+      case LANG_TIGRINYA:
+	switch (sub)
+	  {
+	  case SUBLANG_TIGRINYA_ETHIOPIA: return "ti_ET";
+	  case SUBLANG_TIGRINYA_ERITREA: return "ti_ER";
+	  }
+	return "ti";
+      case LANG_TSONGA: return "ts_ZA";
+      case LANG_TSWANA: return "tn_BW";
+      case LANG_TURKISH: return "tr_TR";
+      case LANG_TURKMEN: return "tk_TM";
+      case LANG_UKRAINIAN: return "uk_UA";
+      case LANG_URDU:
+	switch (sub)
+	  {
+	  case SUBLANG_URDU_PAKISTAN: return "ur_PK";
+	  case SUBLANG_URDU_INDIA: return "ur_IN";
+	  }
+	return "ur";
+      case LANG_UZBEK:
+	switch (sub)
+	  {
+	  case SUBLANG_UZBEK_LATIN: return "uz_UZ";
+	  case SUBLANG_UZBEK_CYRILLIC: return "uz_UZ at cyrillic";
+	  }
+	return "uz";
+      case LANG_VENDA: return "ve_ZA";
+      case LANG_VIETNAMESE: return "vi_VN";
+      case LANG_WELSH: return "cy_GB";
+      case LANG_XHOSA: return "xh_ZA";
+      case LANG_YI: return "sit_CN";
+      case LANG_YIDDISH: return "yi_IL";
+      case LANG_YORUBA: return "yo_NG";
+      case LANG_ZULU: return "zu_ZA";
+      default: return "C";
+      }
+  }
+# endif
+#endif
+}
+
+const char *
+gl_locale_name (int category, const char *categoryname)
+{
+  const char *retval;
+
+  retval = gl_locale_name_posix (category, categoryname);
+  if (retval != NULL)
+    return retval;
+
+  return gl_locale_name_default ();
+}
diff --git a/intl/lock.c b/intl/lock.c
new file mode 100644
index 0000000..f60a8d9
--- /dev/null
+++ b/intl/lock.c
@@ -0,0 +1,922 @@
+/* Locking in multithreaded situations.
+   Copyright (C) 2005-2006 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+/* Written by Bruno Haible <bruno at clisp.org>, 2005.
+   Based on GCC's gthr-posix.h, gthr-posix95.h, gthr-solaris.h,
+   gthr-win32.h.  */
+
+#include <config.h>
+
+#include "lock.h"
+
+/* ========================================================================= */
+
+#if USE_POSIX_THREADS
+
+/* Use the POSIX threads library.  */
+
+# if PTHREAD_IN_USE_DETECTION_HARD
+
+/* The function to be executed by a dummy thread.  */
+static void *
+dummy_thread_func (void *arg)
+{
+  return arg;
+}
+
+int
+glthread_in_use (void)
+{
+  static int tested;
+  static int result; /* 1: linked with -lpthread, 0: only with libc */
+
+  if (!tested)
+    {
+      pthread_t thread;
+
+      if (pthread_create (&thread, NULL, dummy_thread_func, NULL) != 0)
+	/* Thread creation failed.  */
+	result = 0;
+      else
+	{
+	  /* Thread creation works.  */
+	  void *retval;
+	  if (pthread_join (thread, &retval) != 0)
+	    abort ();
+	  result = 1;
+	}
+      tested = 1;
+    }
+  return result;
+}
+
+# endif
+
+/* -------------------------- gl_lock_t datatype -------------------------- */
+
+/* ------------------------- gl_rwlock_t datatype ------------------------- */
+
+# if HAVE_PTHREAD_RWLOCK
+
+#  if !defined PTHREAD_RWLOCK_INITIALIZER
+
+void
+glthread_rwlock_init (gl_rwlock_t *lock)
+{
+  if (pthread_rwlock_init (&lock->rwlock, NULL) != 0)
+    abort ();
+  lock->initialized = 1;
+}
+
+void
+glthread_rwlock_rdlock (gl_rwlock_t *lock)
+{
+  if (!lock->initialized)
+    {
+      if (pthread_mutex_lock (&lock->guard) != 0)
+	abort ();
+      if (!lock->initialized)
+	glthread_rwlock_init (lock);
+      if (pthread_mutex_unlock (&lock->guard) != 0)
+	abort ();
+    }
+  if (pthread_rwlock_rdlock (&lock->rwlock) != 0)
+    abort ();
+}
+
+void
+glthread_rwlock_wrlock (gl_rwlock_t *lock)
+{
+  if (!lock->initialized)
+    {
+      if (pthread_mutex_lock (&lock->guard) != 0)
+	abort ();
+      if (!lock->initialized)
+	glthread_rwlock_init (lock);
+      if (pthread_mutex_unlock (&lock->guard) != 0)
+	abort ();
+    }
+  if (pthread_rwlock_wrlock (&lock->rwlock) != 0)
+    abort ();
+}
+
+void
+glthread_rwlock_unlock (gl_rwlock_t *lock)
+{
+  if (!lock->initialized)
+    abort ();
+  if (pthread_rwlock_unlock (&lock->rwlock) != 0)
+    abort ();
+}
+
+void
+glthread_rwlock_destroy (gl_rwlock_t *lock)
+{
+  if (!lock->initialized)
+    abort ();
+  if (pthread_rwlock_destroy (&lock->rwlock) != 0)
+    abort ();
+  lock->initialized = 0;
+}
+
+#  endif
+
+# else
+
+void
+glthread_rwlock_init (gl_rwlock_t *lock)
+{
+  if (pthread_mutex_init (&lock->lock, NULL) != 0)
+    abort ();
+  if (pthread_cond_init (&lock->waiting_readers, NULL) != 0)
+    abort ();
+  if (pthread_cond_init (&lock->waiting_writers, NULL) != 0)
+    abort ();
+  lock->waiting_writers_count = 0;
+  lock->runcount = 0;
+}
+
+void
+glthread_rwlock_rdlock (gl_rwlock_t *lock)
+{
+  if (pthread_mutex_lock (&lock->lock) != 0)
+    abort ();
+  /* Test whether only readers are currently running, and whether the runcount
+     field will not overflow.  */
+  /* POSIX says: "It is implementation-defined whether the calling thread
+     acquires the lock when a writer does not hold the lock and there are
+     writers blocked on the lock."  Let's say, no: give the writers a higher
+     priority.  */
+  while (!(lock->runcount + 1 > 0 && lock->waiting_writers_count == 0))
+    {
+      /* This thread has to wait for a while.  Enqueue it among the
+	 waiting_readers.  */
+      if (pthread_cond_wait (&lock->waiting_readers, &lock->lock) != 0)
+	abort ();
+    }
+  lock->runcount++;
+  if (pthread_mutex_unlock (&lock->lock) != 0)
+    abort ();
+}
+
+void
+glthread_rwlock_wrlock (gl_rwlock_t *lock)
+{
+  if (pthread_mutex_lock (&lock->lock) != 0)
+    abort ();
+  /* Test whether no readers or writers are currently running.  */
+  while (!(lock->runcount == 0))
+    {
+      /* This thread has to wait for a while.  Enqueue it among the
+	 waiting_writers.  */
+      lock->waiting_writers_count++;
+      if (pthread_cond_wait (&lock->waiting_writers, &lock->lock) != 0)
+	abort ();
+      lock->waiting_writers_count--;
+    }
+  lock->runcount--; /* runcount becomes -1 */
+  if (pthread_mutex_unlock (&lock->lock) != 0)
+    abort ();
+}
+
+void
+glthread_rwlock_unlock (gl_rwlock_t *lock)
+{
+  if (pthread_mutex_lock (&lock->lock) != 0)
+    abort ();
+  if (lock->runcount < 0)
+    {
+      /* Drop a writer lock.  */
+      if (!(lock->runcount == -1))
+	abort ();
+      lock->runcount = 0;
+    }
+  else
+    {
+      /* Drop a reader lock.  */
+      if (!(lock->runcount > 0))
+	abort ();
+      lock->runcount--;
+    }
+  if (lock->runcount == 0)
+    {
+      /* POSIX recommends that "write locks shall take precedence over read
+	 locks", to avoid "writer starvation".  */
+      if (lock->waiting_writers_count > 0)
+	{
+	  /* Wake up one of the waiting writers.  */
+	  if (pthread_cond_signal (&lock->waiting_writers) != 0)
+	    abort ();
+	}
+      else
+	{
+	  /* Wake up all waiting readers.  */
+	  if (pthread_cond_broadcast (&lock->waiting_readers) != 0)
+	    abort ();
+	}
+    }
+  if (pthread_mutex_unlock (&lock->lock) != 0)
+    abort ();
+}
+
+void
+glthread_rwlock_destroy (gl_rwlock_t *lock)
+{
+  if (pthread_mutex_destroy (&lock->lock) != 0)
+    abort ();
+  if (pthread_cond_destroy (&lock->waiting_readers) != 0)
+    abort ();
+  if (pthread_cond_destroy (&lock->waiting_writers) != 0)
+    abort ();
+}
+
+# endif
+
+/* --------------------- gl_recursive_lock_t datatype --------------------- */
+
+# if HAVE_PTHREAD_MUTEX_RECURSIVE
+
+#  if !(defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER || defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP)
+
+void
+glthread_recursive_lock_init (gl_recursive_lock_t *lock)
+{
+  pthread_mutexattr_t attributes;
+
+  if (pthread_mutexattr_init (&attributes) != 0)
+    abort ();
+  if (pthread_mutexattr_settype (&attributes, PTHREAD_MUTEX_RECURSIVE) != 0)
+    abort ();
+  if (pthread_mutex_init (&lock->recmutex, &attributes) != 0)
+    abort ();
+  if (pthread_mutexattr_destroy (&attributes) != 0)
+    abort ();
+  lock->initialized = 1;
+}
+
+void
+glthread_recursive_lock_lock (gl_recursive_lock_t *lock)
+{
+  if (!lock->initialized)
+    {
+      if (pthread_mutex_lock (&lock->guard) != 0)
+	abort ();
+      if (!lock->initialized)
+	glthread_recursive_lock_init (lock);
+      if (pthread_mutex_unlock (&lock->guard) != 0)
+	abort ();
+    }
+  if (pthread_mutex_lock (&lock->recmutex) != 0)
+    abort ();
+}
+
+void
+glthread_recursive_lock_unlock (gl_recursive_lock_t *lock)
+{
+  if (!lock->initialized)
+    abort ();
+  if (pthread_mutex_unlock (&lock->recmutex) != 0)
+    abort ();
+}
+
+void
+glthread_recursive_lock_destroy (gl_recursive_lock_t *lock)
+{
+  if (!lock->initialized)
+    abort ();
+  if (pthread_mutex_destroy (&lock->recmutex) != 0)
+    abort ();
+  lock->initialized = 0;
+}
+
+#  endif
+
+# else
+
+void
+glthread_recursive_lock_init (gl_recursive_lock_t *lock)
+{
+  if (pthread_mutex_init (&lock->mutex, NULL) != 0)
+    abort ();
+  lock->owner = (pthread_t) 0;
+  lock->depth = 0;
+}
+
+void
+glthread_recursive_lock_lock (gl_recursive_lock_t *lock)
+{
+  pthread_t self = pthread_self ();
+  if (lock->owner != self)
+    {
+      if (pthread_mutex_lock (&lock->mutex) != 0)
+	abort ();
+      lock->owner = self;
+    }
+  if (++(lock->depth) == 0) /* wraparound? */
+    abort ();
+}
+
+void
+glthread_recursive_lock_unlock (gl_recursive_lock_t *lock)
+{
+  if (lock->owner != pthread_self ())
+    abort ();
+  if (lock->depth == 0)
+    abort ();
+  if (--(lock->depth) == 0)
+    {
+      lock->owner = (pthread_t) 0;
+      if (pthread_mutex_unlock (&lock->mutex) != 0)
+	abort ();
+    }
+}
+
+void
+glthread_recursive_lock_destroy (gl_recursive_lock_t *lock)
+{
+  if (lock->owner != (pthread_t) 0)
+    abort ();
+  if (pthread_mutex_destroy (&lock->mutex) != 0)
+    abort ();
+}
+
+# endif
+
+/* -------------------------- gl_once_t datatype -------------------------- */
+
+static const pthread_once_t fresh_once = PTHREAD_ONCE_INIT;
+
+int
+glthread_once_singlethreaded (pthread_once_t *once_control)
+{
+  /* We don't know whether pthread_once_t is an integer type, a floating-point
+     type, a pointer type, or a structure type.  */
+  char *firstbyte = (char *)once_control;
+  if (*firstbyte == *(const char *)&fresh_once)
+    {
+      /* First time use of once_control.  Invert the first byte.  */
+      *firstbyte = ~ *(const char *)&fresh_once;
+      return 1;
+    }
+  else
+    return 0;
+}
+
+#endif
+
+/* ========================================================================= */
+
+#if USE_PTH_THREADS
+
+/* Use the GNU Pth threads library.  */
+
+/* -------------------------- gl_lock_t datatype -------------------------- */
+
+/* ------------------------- gl_rwlock_t datatype ------------------------- */
+
+/* --------------------- gl_recursive_lock_t datatype --------------------- */
+
+/* -------------------------- gl_once_t datatype -------------------------- */
+
+void
+glthread_once_call (void *arg)
+{
+  void (**gl_once_temp_addr) (void) = (void (**) (void)) arg;
+  void (*initfunction) (void) = *gl_once_temp_addr;
+  initfunction ();
+}
+
+int
+glthread_once_singlethreaded (pth_once_t *once_control)
+{
+  /* We know that pth_once_t is an integer type.  */
+  if (*once_control == PTH_ONCE_INIT)
+    {
+      /* First time use of once_control.  Invert the marker.  */
+      *once_control = ~ PTH_ONCE_INIT;
+      return 1;
+    }
+  else
+    return 0;
+}
+
+#endif
+
+/* ========================================================================= */
+
+#if USE_SOLARIS_THREADS
+
+/* Use the old Solaris threads library.  */
+
+/* -------------------------- gl_lock_t datatype -------------------------- */
+
+/* ------------------------- gl_rwlock_t datatype ------------------------- */
+
+/* --------------------- gl_recursive_lock_t datatype --------------------- */
+
+void
+glthread_recursive_lock_init (gl_recursive_lock_t *lock)
+{
+  if (mutex_init (&lock->mutex, USYNC_THREAD, NULL) != 0)
+    abort ();
+  lock->owner = (thread_t) 0;
+  lock->depth = 0;
+}
+
+void
+glthread_recursive_lock_lock (gl_recursive_lock_t *lock)
+{
+  thread_t self = thr_self ();
+  if (lock->owner != self)
+    {
+      if (mutex_lock (&lock->mutex) != 0)
+	abort ();
+      lock->owner = self;
+    }
+  if (++(lock->depth) == 0) /* wraparound? */
+    abort ();
+}
+
+void
+glthread_recursive_lock_unlock (gl_recursive_lock_t *lock)
+{
+  if (lock->owner != thr_self ())
+    abort ();
+  if (lock->depth == 0)
+    abort ();
+  if (--(lock->depth) == 0)
+    {
+      lock->owner = (thread_t) 0;
+      if (mutex_unlock (&lock->mutex) != 0)
+	abort ();
+    }
+}
+
+void
+glthread_recursive_lock_destroy (gl_recursive_lock_t *lock)
+{
+  if (lock->owner != (thread_t) 0)
+    abort ();
+  if (mutex_destroy (&lock->mutex) != 0)
+    abort ();
+}
+
+/* -------------------------- gl_once_t datatype -------------------------- */
+
+void
+glthread_once (gl_once_t *once_control, void (*initfunction) (void))
+{
+  if (!once_control->inited)
+    {
+      /* Use the mutex to guarantee that if another thread is already calling
+	 the initfunction, this thread waits until it's finished.  */
+      if (mutex_lock (&once_control->mutex) != 0)
+	abort ();
+      if (!once_control->inited)
+	{
+	  once_control->inited = 1;
+	  initfunction ();
+	}
+      if (mutex_unlock (&once_control->mutex) != 0)
+	abort ();
+    }
+}
+
+int
+glthread_once_singlethreaded (gl_once_t *once_control)
+{
+  /* We know that gl_once_t contains an integer type.  */
+  if (!once_control->inited)
+    {
+      /* First time use of once_control.  Invert the marker.  */
+      once_control->inited = ~ 0;
+      return 1;
+    }
+  else
+    return 0;
+}
+
+#endif
+
+/* ========================================================================= */
+
+#if USE_WIN32_THREADS
+
+/* -------------------------- gl_lock_t datatype -------------------------- */
+
+void
+glthread_lock_init (gl_lock_t *lock)
+{
+  InitializeCriticalSection (&lock->lock);
+  lock->guard.done = 1;
+}
+
+void
+glthread_lock_lock (gl_lock_t *lock)
+{
+  if (!lock->guard.done)
+    {
+      if (InterlockedIncrement (&lock->guard.started) == 0)
+	/* This thread is the first one to need this lock.  Initialize it.  */
+	glthread_lock_init (lock);
+      else
+	/* Yield the CPU while waiting for another thread to finish
+	   initializing this lock.  */
+	while (!lock->guard.done)
+	  Sleep (0);
+    }
+  EnterCriticalSection (&lock->lock);
+}
+
+void
+glthread_lock_unlock (gl_lock_t *lock)
+{
+  if (!lock->guard.done)
+    abort ();
+  LeaveCriticalSection (&lock->lock);
+}
+
+void
+glthread_lock_destroy (gl_lock_t *lock)
+{
+  if (!lock->guard.done)
+    abort ();
+  DeleteCriticalSection (&lock->lock);
+  lock->guard.done = 0;
+}
+
+/* ------------------------- gl_rwlock_t datatype ------------------------- */
+
+static inline void
+gl_waitqueue_init (gl_waitqueue_t *wq)
+{
+  wq->array = NULL;
+  wq->count = 0;
+  wq->alloc = 0;
+  wq->offset = 0;
+}
+
+/* Enqueues the current thread, represented by an event, in a wait queue.
+   Returns INVALID_HANDLE_VALUE if an allocation failure occurs.  */
+static HANDLE
+gl_waitqueue_add (gl_waitqueue_t *wq)
+{
+  HANDLE event;
+  unsigned int index;
+
+  if (wq->count == wq->alloc)
+    {
+      unsigned int new_alloc = 2 * wq->alloc + 1;
+      HANDLE *new_array =
+	(HANDLE *) realloc (wq->array, new_alloc * sizeof (HANDLE));
+      if (new_array == NULL)
+	/* No more memory.  */
+	return INVALID_HANDLE_VALUE;
+      /* Now is a good opportunity to rotate the array so that its contents
+	 starts at offset 0.  */
+      if (wq->offset > 0)
+	{
+	  unsigned int old_count = wq->count;
+	  unsigned int old_alloc = wq->alloc;
+	  unsigned int old_offset = wq->offset;
+	  unsigned int i;
+	  if (old_offset + old_count > old_alloc)
+	    {
+	      unsigned int limit = old_offset + old_count - old_alloc;
+	      for (i = 0; i < limit; i++)
+		new_array[old_alloc + i] = new_array[i];
+	    }
+	  for (i = 0; i < old_count; i++)
+	    new_array[i] = new_array[old_offset + i];
+	  wq->offset = 0;
+	}
+      wq->array = new_array;
+      wq->alloc = new_alloc;
+    }
+  event = CreateEvent (NULL, TRUE, FALSE, NULL);
+  if (event == INVALID_HANDLE_VALUE)
+    /* No way to allocate an event.  */
+    return INVALID_HANDLE_VALUE;
+  index = wq->offset + wq->count;
+  if (index >= wq->alloc)
+    index -= wq->alloc;
+  wq->array[index] = event;
+  wq->count++;
+  return event;
+}
+
+/* Notifies the first thread from a wait queue and dequeues it.  */
+static inline void
+gl_waitqueue_notify_first (gl_waitqueue_t *wq)
+{
+  SetEvent (wq->array[wq->offset + 0]);
+  wq->offset++;
+  wq->count--;
+  if (wq->count == 0 || wq->offset == wq->alloc)
+    wq->offset = 0;
+}
+
+/* Notifies all threads from a wait queue and dequeues them all.  */
+static inline void
+gl_waitqueue_notify_all (gl_waitqueue_t *wq)
+{
+  unsigned int i;
+
+  for (i = 0; i < wq->count; i++)
+    {
+      unsigned int index = wq->offset + i;
+      if (index >= wq->alloc)
+	index -= wq->alloc;
+      SetEvent (wq->array[index]);
+    }
+  wq->count = 0;
+  wq->offset = 0;
+}
+
+void
+glthread_rwlock_init (gl_rwlock_t *lock)
+{
+  InitializeCriticalSection (&lock->lock);
+  gl_waitqueue_init (&lock->waiting_readers);
+  gl_waitqueue_init (&lock->waiting_writers);
+  lock->runcount = 0;
+  lock->guard.done = 1;
+}
+
+void
+glthread_rwlock_rdlock (gl_rwlock_t *lock)
+{
+  if (!lock->guard.done)
+    {
+      if (InterlockedIncrement (&lock->guard.started) == 0)
+	/* This thread is the first one to need this lock.  Initialize it.  */
+	glthread_rwlock_init (lock);
+      else
+	/* Yield the CPU while waiting for another thread to finish
+	   initializing this lock.  */
+	while (!lock->guard.done)
+	  Sleep (0);
+    }
+  EnterCriticalSection (&lock->lock);
+  /* Test whether only readers are currently running, and whether the runcount
+     field will not overflow.  */
+  if (!(lock->runcount + 1 > 0))
+    {
+      /* This thread has to wait for a while.  Enqueue it among the
+	 waiting_readers.  */
+      HANDLE event = gl_waitqueue_add (&lock->waiting_readers);
+      if (event != INVALID_HANDLE_VALUE)
+	{
+	  DWORD result;
+	  LeaveCriticalSection (&lock->lock);
+	  /* Wait until another thread signals this event.  */
+	  result = WaitForSingleObject (event, INFINITE);
+	  if (result == WAIT_FAILED || result == WAIT_TIMEOUT)
+	    abort ();
+	  CloseHandle (event);
+	  /* The thread which signalled the event already did the bookkeeping:
+	     removed us from the waiting_readers, incremented lock->runcount.  */
+	  if (!(lock->runcount > 0))
+	    abort ();
+	  return;
+	}
+      else
+	{
+	  /* Allocation failure.  Weird.  */
+	  do
+	    {
+	      LeaveCriticalSection (&lock->lock);
+	      Sleep (1);
+	      EnterCriticalSection (&lock->lock);
+	    }
+	  while (!(lock->runcount + 1 > 0));
+	}
+    }
+  lock->runcount++;
+  LeaveCriticalSection (&lock->lock);
+}
+
+void
+glthread_rwlock_wrlock (gl_rwlock_t *lock)
+{
+  if (!lock->guard.done)
+    {
+      if (InterlockedIncrement (&lock->guard.started) == 0)
+	/* This thread is the first one to need this lock.  Initialize it.  */
+	glthread_rwlock_init (lock);
+      else
+	/* Yield the CPU while waiting for another thread to finish
+	   initializing this lock.  */
+	while (!lock->guard.done)
+	  Sleep (0);
+    }
+  EnterCriticalSection (&lock->lock);
+  /* Test whether no readers or writers are currently running.  */
+  if (!(lock->runcount == 0))
+    {
+      /* This thread has to wait for a while.  Enqueue it among the
+	 waiting_writers.  */
+      HANDLE event = gl_waitqueue_add (&lock->waiting_writers);
+      if (event != INVALID_HANDLE_VALUE)
+	{
+	  DWORD result;
+	  LeaveCriticalSection (&lock->lock);
+	  /* Wait until another thread signals this event.  */
+	  result = WaitForSingleObject (event, INFINITE);
+	  if (result == WAIT_FAILED || result == WAIT_TIMEOUT)
+	    abort ();
+	  CloseHandle (event);
+	  /* The thread which signalled the event already did the bookkeeping:
+	     removed us from the waiting_writers, set lock->runcount = -1.  */
+	  if (!(lock->runcount == -1))
+	    abort ();
+	  return;
+	}
+      else
+	{
+	  /* Allocation failure.  Weird.  */
+	  do
+	    {
+	      LeaveCriticalSection (&lock->lock);
+	      Sleep (1);
+	      EnterCriticalSection (&lock->lock);
+	    }
+	  while (!(lock->runcount == 0));
+	}
+    }
+  lock->runcount--; /* runcount becomes -1 */
+  LeaveCriticalSection (&lock->lock);
+}
+
+void
+glthread_rwlock_unlock (gl_rwlock_t *lock)
+{
+  if (!lock->guard.done)
+    abort ();
+  EnterCriticalSection (&lock->lock);
+  if (lock->runcount < 0)
+    {
+      /* Drop a writer lock.  */
+      if (!(lock->runcount == -1))
+	abort ();
+      lock->runcount = 0;
+    }
+  else
+    {
+      /* Drop a reader lock.  */
+      if (!(lock->runcount > 0))
+	abort ();
+      lock->runcount--;
+    }
+  if (lock->runcount == 0)
+    {
+      /* POSIX recommends that "write locks shall take precedence over read
+	 locks", to avoid "writer starvation".  */
+      if (lock->waiting_writers.count > 0)
+	{
+	  /* Wake up one of the waiting writers.  */
+	  lock->runcount--;
+	  gl_waitqueue_notify_first (&lock->waiting_writers);
+	}
+      else
+	{
+	  /* Wake up all waiting readers.  */
+	  lock->runcount += lock->waiting_readers.count;
+	  gl_waitqueue_notify_all (&lock->waiting_readers);
+	}
+    }
+  LeaveCriticalSection (&lock->lock);
+}
+
+void
+glthread_rwlock_destroy (gl_rwlock_t *lock)
+{
+  if (!lock->guard.done)
+    abort ();
+  if (lock->runcount != 0)
+    abort ();
+  DeleteCriticalSection (&lock->lock);
+  if (lock->waiting_readers.array != NULL)
+    free (lock->waiting_readers.array);
+  if (lock->waiting_writers.array != NULL)
+    free (lock->waiting_writers.array);
+  lock->guard.done = 0;
+}
+
+/* --------------------- gl_recursive_lock_t datatype --------------------- */
+
+void
+glthread_recursive_lock_init (gl_recursive_lock_t *lock)
+{
+  lock->owner = 0;
+  lock->depth = 0;
+  InitializeCriticalSection (&lock->lock);
+  lock->guard.done = 1;
+}
+
+void
+glthread_recursive_lock_lock (gl_recursive_lock_t *lock)
+{
+  if (!lock->guard.done)
+    {
+      if (InterlockedIncrement (&lock->guard.started) == 0)
+	/* This thread is the first one to need this lock.  Initialize it.  */
+	glthread_recursive_lock_init (lock);
+      else
+	/* Yield the CPU while waiting for another thread to finish
+	   initializing this lock.  */
+	while (!lock->guard.done)
+	  Sleep (0);
+    }
+  {
+    DWORD self = GetCurrentThreadId ();
+    if (lock->owner != self)
+      {
+	EnterCriticalSection (&lock->lock);
+	lock->owner = self;
+      }
+    if (++(lock->depth) == 0) /* wraparound? */
+      abort ();
+  }
+}
+
+void
+glthread_recursive_lock_unlock (gl_recursive_lock_t *lock)
+{
+  if (lock->owner != GetCurrentThreadId ())
+    abort ();
+  if (lock->depth == 0)
+    abort ();
+  if (--(lock->depth) == 0)
+    {
+      lock->owner = 0;
+      LeaveCriticalSection (&lock->lock);
+    }
+}
+
+void
+glthread_recursive_lock_destroy (gl_recursive_lock_t *lock)
+{
+  if (lock->owner != 0)
+    abort ();
+  DeleteCriticalSection (&lock->lock);
+  lock->guard.done = 0;
+}
+
+/* -------------------------- gl_once_t datatype -------------------------- */
+
+void
+glthread_once (gl_once_t *once_control, void (*initfunction) (void))
+{
+  if (once_control->inited <= 0)
+    {
+      if (InterlockedIncrement (&once_control->started) == 0)
+	{
+	  /* This thread is the first one to come to this once_control.  */
+	  InitializeCriticalSection (&once_control->lock);
+	  EnterCriticalSection (&once_control->lock);
+	  once_control->inited = 0;
+	  initfunction ();
+	  once_control->inited = 1;
+	  LeaveCriticalSection (&once_control->lock);
+	}
+      else
+	{
+	  /* Undo last operation.  */
+	  InterlockedDecrement (&once_control->started);
+	  /* Some other thread has already started the initialization.
+	     Yield the CPU while waiting for the other thread to finish
+	     initializing and taking the lock.  */
+	  while (once_control->inited < 0)
+	    Sleep (0);
+	  if (once_control->inited <= 0)
+	    {
+	      /* Take the lock.  This blocks until the other thread has
+		 finished calling the initfunction.  */
+	      EnterCriticalSection (&once_control->lock);
+	      LeaveCriticalSection (&once_control->lock);
+	      if (!(once_control->inited > 0))
+		abort ();
+	    }
+	}
+    }
+}
+
+#endif
+
+/* ========================================================================= */
diff --git a/intl/lock.h b/intl/lock.h
new file mode 100644
index 0000000..144531d
--- /dev/null
+++ b/intl/lock.h
@@ -0,0 +1,1105 @@
+/* Locking in multithreaded situations.
+   Copyright (C) 2005-2007 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+/* Written by Bruno Haible <bruno at clisp.org>, 2005.
+   Based on GCC's gthr-posix.h, gthr-posix95.h, gthr-solaris.h,
+   gthr-win32.h.  */
+
+/* This file contains locking primitives for use with a given thread library.
+   It does not contain primitives for creating threads or for other
+   synchronization primitives.
+
+   Normal (non-recursive) locks:
+     Type:                gl_lock_t
+     Declaration:         gl_lock_define(extern, name)
+     Initializer:         gl_lock_define_initialized(, name)
+     Initialization:      gl_lock_init (name);
+     Taking the lock:     gl_lock_lock (name);
+     Releasing the lock:  gl_lock_unlock (name);
+     De-initialization:   gl_lock_destroy (name);
+
+   Read-Write (non-recursive) locks:
+     Type:                gl_rwlock_t
+     Declaration:         gl_rwlock_define(extern, name)
+     Initializer:         gl_rwlock_define_initialized(, name)
+     Initialization:      gl_rwlock_init (name);
+     Taking the lock:     gl_rwlock_rdlock (name);
+                          gl_rwlock_wrlock (name);
+     Releasing the lock:  gl_rwlock_unlock (name);
+     De-initialization:   gl_rwlock_destroy (name);
+
+   Recursive locks:
+     Type:                gl_recursive_lock_t
+     Declaration:         gl_recursive_lock_define(extern, name)
+     Initializer:         gl_recursive_lock_define_initialized(, name)
+     Initialization:      gl_recursive_lock_init (name);
+     Taking the lock:     gl_recursive_lock_lock (name);
+     Releasing the lock:  gl_recursive_lock_unlock (name);
+     De-initialization:   gl_recursive_lock_destroy (name);
+
+  Once-only execution:
+     Type:                gl_once_t
+     Initializer:         gl_once_define(extern, name)
+     Execution:           gl_once (name, initfunction);
+*/
+
+
+#ifndef _LOCK_H
+#define _LOCK_H
+
+/* ========================================================================= */
+
+#if USE_POSIX_THREADS
+
+/* Use the POSIX threads library.  */
+
+# include <pthread.h>
+# include <stdlib.h>
+
+# ifdef __cplusplus
+extern "C" {
+# endif
+
+# if PTHREAD_IN_USE_DETECTION_HARD
+
+/* The pthread_in_use() detection needs to be done at runtime.  */
+#  define pthread_in_use() \
+     glthread_in_use ()
+extern int glthread_in_use (void);
+
+# endif
+
+# if USE_POSIX_THREADS_WEAK
+
+/* Use weak references to the POSIX threads library.  */
+
+/* Weak references avoid dragging in external libraries if the other parts
+   of the program don't use them.  Here we use them, because we don't want
+   every program that uses libintl to depend on libpthread.  This assumes
+   that libpthread would not be loaded after libintl; i.e. if libintl is
+   loaded first, by an executable that does not depend on libpthread, and
+   then a module is dynamically loaded that depends on libpthread, libintl
+   will not be multithread-safe.  */
+
+/* The way to test at runtime whether libpthread is present is to test
+   whether a function pointer's value, such as &pthread_mutex_init, is
+   non-NULL.  However, some versions of GCC have a bug through which, in
+   PIC mode, &foo != NULL always evaluates to true if there is a direct
+   call to foo(...) in the same function.  To avoid this, we test the
+   address of a function in libpthread that we don't use.  */
+
+#  pragma weak pthread_mutex_init
+#  pragma weak pthread_mutex_lock
+#  pragma weak pthread_mutex_unlock
+#  pragma weak pthread_mutex_destroy
+#  pragma weak pthread_rwlock_init
+#  pragma weak pthread_rwlock_rdlock
+#  pragma weak pthread_rwlock_wrlock
+#  pragma weak pthread_rwlock_unlock
+#  pragma weak pthread_rwlock_destroy
+#  pragma weak pthread_once
+#  pragma weak pthread_cond_init
+#  pragma weak pthread_cond_wait
+#  pragma weak pthread_cond_signal
+#  pragma weak pthread_cond_broadcast
+#  pragma weak pthread_cond_destroy
+#  pragma weak pthread_mutexattr_init
+#  pragma weak pthread_mutexattr_settype
+#  pragma weak pthread_mutexattr_destroy
+#  ifndef pthread_self
+#   pragma weak pthread_self
+#  endif
+
+#  if !PTHREAD_IN_USE_DETECTION_HARD
+#   pragma weak pthread_cancel
+#   define pthread_in_use() (pthread_cancel != NULL)
+#  endif
+
+# else
+
+#  if !PTHREAD_IN_USE_DETECTION_HARD
+#   define pthread_in_use() 1
+#  endif
+
+# endif
+
+/* -------------------------- gl_lock_t datatype -------------------------- */
+
+typedef pthread_mutex_t gl_lock_t;
+# define gl_lock_define(STORAGECLASS, NAME) \
+    STORAGECLASS pthread_mutex_t NAME;
+# define gl_lock_define_initialized(STORAGECLASS, NAME) \
+    STORAGECLASS pthread_mutex_t NAME = gl_lock_initializer;
+# define gl_lock_initializer \
+    PTHREAD_MUTEX_INITIALIZER
+# define gl_lock_init(NAME) \
+    do                                                                  \
+      {                                                                 \
+        if (pthread_in_use () && pthread_mutex_init (&NAME, NULL) != 0) \
+          abort ();                                                     \
+      }                                                                 \
+    while (0)
+# define gl_lock_lock(NAME) \
+    do                                                            \
+      {                                                           \
+        if (pthread_in_use () && pthread_mutex_lock (&NAME) != 0) \
+          abort ();                                               \
+      }                                                           \
+    while (0)
+# define gl_lock_unlock(NAME) \
+    do                                                              \
+      {                                                             \
+        if (pthread_in_use () && pthread_mutex_unlock (&NAME) != 0) \
+          abort ();                                                 \
+      }                                                             \
+    while (0)
+# define gl_lock_destroy(NAME) \
+    do                                                               \
+      {                                                              \
+        if (pthread_in_use () && pthread_mutex_destroy (&NAME) != 0) \
+          abort ();                                                  \
+      }                                                              \
+    while (0)
+
+/* ------------------------- gl_rwlock_t datatype ------------------------- */
+
+# if HAVE_PTHREAD_RWLOCK
+
+#  ifdef PTHREAD_RWLOCK_INITIALIZER
+
+typedef pthread_rwlock_t gl_rwlock_t;
+#   define gl_rwlock_define(STORAGECLASS, NAME) \
+      STORAGECLASS pthread_rwlock_t NAME;
+#   define gl_rwlock_define_initialized(STORAGECLASS, NAME) \
+      STORAGECLASS pthread_rwlock_t NAME = gl_rwlock_initializer;
+#   define gl_rwlock_initializer \
+      PTHREAD_RWLOCK_INITIALIZER
+#   define gl_rwlock_init(NAME) \
+      do                                                                   \
+        {                                                                  \
+          if (pthread_in_use () && pthread_rwlock_init (&NAME, NULL) != 0) \
+            abort ();                                                      \
+        }                                                                  \
+      while (0)
+#   define gl_rwlock_rdlock(NAME) \
+      do                                                               \
+        {                                                              \
+          if (pthread_in_use () && pthread_rwlock_rdlock (&NAME) != 0) \
+            abort ();                                                  \
+        }                                                              \
+      while (0)
+#   define gl_rwlock_wrlock(NAME) \
+      do                                                               \
+        {                                                              \
+          if (pthread_in_use () && pthread_rwlock_wrlock (&NAME) != 0) \
+            abort ();                                                  \
+        }                                                              \
+      while (0)
+#   define gl_rwlock_unlock(NAME) \
+      do                                                               \
+        {                                                              \
+          if (pthread_in_use () && pthread_rwlock_unlock (&NAME) != 0) \
+            abort ();                                                  \
+        }                                                              \
+      while (0)
+#   define gl_rwlock_destroy(NAME) \
+      do                                                                \
+        {                                                               \
+          if (pthread_in_use () && pthread_rwlock_destroy (&NAME) != 0) \
+            abort ();                                                   \
+        }                                                               \
+      while (0)
+
+#  else
+
+typedef struct
+        {
+          int initialized;
+          pthread_mutex_t guard;   /* protects the initialization */
+          pthread_rwlock_t rwlock; /* read-write lock */
+        }
+        gl_rwlock_t;
+#   define gl_rwlock_define(STORAGECLASS, NAME) \
+      STORAGECLASS gl_rwlock_t NAME;
+#   define gl_rwlock_define_initialized(STORAGECLASS, NAME) \
+      STORAGECLASS gl_rwlock_t NAME = gl_rwlock_initializer;
+#   define gl_rwlock_initializer \
+      { 0, PTHREAD_MUTEX_INITIALIZER }
+#   define gl_rwlock_init(NAME) \
+      do                                  \
+        {                                 \
+          if (pthread_in_use ())          \
+            glthread_rwlock_init (&NAME); \
+        }                                 \
+      while (0)
+#   define gl_rwlock_rdlock(NAME) \
+      do                                    \
+        {                                   \
+          if (pthread_in_use ())            \
+            glthread_rwlock_rdlock (&NAME); \
+        }                                   \
+      while (0)
+#   define gl_rwlock_wrlock(NAME) \
+      do                                    \
+        {                                   \
+          if (pthread_in_use ())            \
+            glthread_rwlock_wrlock (&NAME); \
+        }                                   \
+      while (0)
+#   define gl_rwlock_unlock(NAME) \
+      do                                    \
+        {                                   \
+          if (pthread_in_use ())            \
+            glthread_rwlock_unlock (&NAME); \
+        }                                   \
+      while (0)
+#   define gl_rwlock_destroy(NAME) \
+      do                                     \
+        {                                    \
+          if (pthread_in_use ())             \
+            glthread_rwlock_destroy (&NAME); \
+        }                                    \
+      while (0)
+extern void glthread_rwlock_init (gl_rwlock_t *lock);
+extern void glthread_rwlock_rdlock (gl_rwlock_t *lock);
+extern void glthread_rwlock_wrlock (gl_rwlock_t *lock);
+extern void glthread_rwlock_unlock (gl_rwlock_t *lock);
+extern void glthread_rwlock_destroy (gl_rwlock_t *lock);
+
+#  endif
+
+# else
+
+typedef struct
+        {
+          pthread_mutex_t lock; /* protects the remaining fields */
+          pthread_cond_t waiting_readers; /* waiting readers */
+          pthread_cond_t waiting_writers; /* waiting writers */
+          unsigned int waiting_writers_count; /* number of waiting writers */
+          int runcount; /* number of readers running, or -1 when a writer runs */
+        }
+        gl_rwlock_t;
+# define gl_rwlock_define(STORAGECLASS, NAME) \
+    STORAGECLASS gl_rwlock_t NAME;
+# define gl_rwlock_define_initialized(STORAGECLASS, NAME) \
+    STORAGECLASS gl_rwlock_t NAME = gl_rwlock_initializer;
+# define gl_rwlock_initializer \
+    { PTHREAD_MUTEX_INITIALIZER, PTHREAD_COND_INITIALIZER, PTHREAD_COND_INITIALIZER, 0, 0 }
+# define gl_rwlock_init(NAME) \
+    do                                  \
+      {                                 \
+        if (pthread_in_use ())          \
+          glthread_rwlock_init (&NAME); \
+      }                                 \
+    while (0)
+# define gl_rwlock_rdlock(NAME) \
+    do                                    \
+      {                                   \
+        if (pthread_in_use ())            \
+          glthread_rwlock_rdlock (&NAME); \
+      }                                   \
+    while (0)
+# define gl_rwlock_wrlock(NAME) \
+    do                                    \
+      {                                   \
+        if (pthread_in_use ())            \
+          glthread_rwlock_wrlock (&NAME); \
+      }                                   \
+    while (0)
+# define gl_rwlock_unlock(NAME) \
+    do                                    \
+      {                                   \
+        if (pthread_in_use ())            \
+          glthread_rwlock_unlock (&NAME); \
+      }                                   \
+    while (0)
+# define gl_rwlock_destroy(NAME) \
+    do                                     \
+      {                                    \
+        if (pthread_in_use ())             \
+          glthread_rwlock_destroy (&NAME); \
+      }                                    \
+    while (0)
+extern void glthread_rwlock_init (gl_rwlock_t *lock);
+extern void glthread_rwlock_rdlock (gl_rwlock_t *lock);
+extern void glthread_rwlock_wrlock (gl_rwlock_t *lock);
+extern void glthread_rwlock_unlock (gl_rwlock_t *lock);
+extern void glthread_rwlock_destroy (gl_rwlock_t *lock);
+
+# endif
+
+/* --------------------- gl_recursive_lock_t datatype --------------------- */
+
+# if HAVE_PTHREAD_MUTEX_RECURSIVE
+
+#  if defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER || defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP
+
+typedef pthread_mutex_t gl_recursive_lock_t;
+#   define gl_recursive_lock_define(STORAGECLASS, NAME) \
+      STORAGECLASS pthread_mutex_t NAME;
+#   define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \
+      STORAGECLASS pthread_mutex_t NAME = gl_recursive_lock_initializer;
+#   ifdef PTHREAD_RECURSIVE_MUTEX_INITIALIZER
+#    define gl_recursive_lock_initializer \
+       PTHREAD_RECURSIVE_MUTEX_INITIALIZER
+#   else
+#    define gl_recursive_lock_initializer \
+       PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP
+#   endif
+#   define gl_recursive_lock_init(NAME) \
+      do                                                                  \
+        {                                                                 \
+          if (pthread_in_use () && pthread_mutex_init (&NAME, NULL) != 0) \
+            abort ();                                                     \
+        }                                                                 \
+      while (0)
+#   define gl_recursive_lock_lock(NAME) \
+      do                                                            \
+        {                                                           \
+          if (pthread_in_use () && pthread_mutex_lock (&NAME) != 0) \
+            abort ();                                               \
+        }                                                           \
+      while (0)
+#   define gl_recursive_lock_unlock(NAME) \
+      do                                                              \
+        {                                                             \
+          if (pthread_in_use () && pthread_mutex_unlock (&NAME) != 0) \
+            abort ();                                                 \
+        }                                                             \
+      while (0)
+#   define gl_recursive_lock_destroy(NAME) \
+      do                                                               \
+        {                                                              \
+          if (pthread_in_use () && pthread_mutex_destroy (&NAME) != 0) \
+            abort ();                                                  \
+        }                                                              \
+      while (0)
+
+#  else
+
+typedef struct
+        {
+          pthread_mutex_t recmutex; /* recursive mutex */
+          pthread_mutex_t guard;    /* protects the initialization */
+          int initialized;
+        }
+        gl_recursive_lock_t;
+#   define gl_recursive_lock_define(STORAGECLASS, NAME) \
+      STORAGECLASS gl_recursive_lock_t NAME;
+#   define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \
+      STORAGECLASS gl_recursive_lock_t NAME = gl_recursive_lock_initializer;
+#   define gl_recursive_lock_initializer \
+      { PTHREAD_MUTEX_INITIALIZER, PTHREAD_MUTEX_INITIALIZER, 0 }
+#   define gl_recursive_lock_init(NAME) \
+      do                                          \
+        {                                         \
+          if (pthread_in_use ())                  \
+            glthread_recursive_lock_init (&NAME); \
+        }                                         \
+      while (0)
+#   define gl_recursive_lock_lock(NAME) \
+      do                                          \
+        {                                         \
+          if (pthread_in_use ())                  \
+            glthread_recursive_lock_lock (&NAME); \
+        }                                         \
+      while (0)
+#   define gl_recursive_lock_unlock(NAME) \
+      do                                            \
+        {                                           \
+          if (pthread_in_use ())                    \
+            glthread_recursive_lock_unlock (&NAME); \
+        }                                           \
+      while (0)
+#   define gl_recursive_lock_destroy(NAME) \
+      do                                             \
+        {                                            \
+          if (pthread_in_use ())                     \
+            glthread_recursive_lock_destroy (&NAME); \
+        }                                            \
+      while (0)
+extern void glthread_recursive_lock_init (gl_recursive_lock_t *lock);
+extern void glthread_recursive_lock_lock (gl_recursive_lock_t *lock);
+extern void glthread_recursive_lock_unlock (gl_recursive_lock_t *lock);
+extern void glthread_recursive_lock_destroy (gl_recursive_lock_t *lock);
+
+#  endif
+
+# else
+
+/* Old versions of POSIX threads on Solaris did not have recursive locks.
+   We have to implement them ourselves.  */
+
+typedef struct
+        {
+          pthread_mutex_t mutex;
+          pthread_t owner;
+          unsigned long depth;
+        }
+        gl_recursive_lock_t;
+#  define gl_recursive_lock_define(STORAGECLASS, NAME) \
+     STORAGECLASS gl_recursive_lock_t NAME;
+#  define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \
+     STORAGECLASS gl_recursive_lock_t NAME = gl_recursive_lock_initializer;
+#  define gl_recursive_lock_initializer \
+     { PTHREAD_MUTEX_INITIALIZER, (pthread_t) 0, 0 }
+#  define gl_recursive_lock_init(NAME) \
+     do                                          \
+       {                                         \
+         if (pthread_in_use ())                  \
+           glthread_recursive_lock_init (&NAME); \
+       }                                         \
+     while (0)
+#  define gl_recursive_lock_lock(NAME) \
+     do                                          \
+       {                                         \
+         if (pthread_in_use ())                  \
+           glthread_recursive_lock_lock (&NAME); \
+       }                                         \
+     while (0)
+#  define gl_recursive_lock_unlock(NAME) \
+     do                                            \
+       {                                           \
+         if (pthread_in_use ())                    \
+           glthread_recursive_lock_unlock (&NAME); \
+       }                                           \
+     while (0)
+#  define gl_recursive_lock_destroy(NAME) \
+     do                                             \
+       {                                            \
+         if (pthread_in_use ())                     \
+           glthread_recursive_lock_destroy (&NAME); \
+       }                                            \
+     while (0)
+extern void glthread_recursive_lock_init (gl_recursive_lock_t *lock);
+extern void glthread_recursive_lock_lock (gl_recursive_lock_t *lock);
+extern void glthread_recursive_lock_unlock (gl_recursive_lock_t *lock);
+extern void glthread_recursive_lock_destroy (gl_recursive_lock_t *lock);
+
+# endif
+
+/* -------------------------- gl_once_t datatype -------------------------- */
+
+typedef pthread_once_t gl_once_t;
+# define gl_once_define(STORAGECLASS, NAME) \
+    STORAGECLASS pthread_once_t NAME = PTHREAD_ONCE_INIT;
+# define gl_once(NAME, INITFUNCTION) \
+    do                                                   \
+      {                                                  \
+        if (pthread_in_use ())                           \
+          {                                              \
+            if (pthread_once (&NAME, INITFUNCTION) != 0) \
+              abort ();                                  \
+          }                                              \
+        else                                             \
+          {                                              \
+            if (glthread_once_singlethreaded (&NAME))    \
+              INITFUNCTION ();                           \
+          }                                              \
+      }                                                  \
+    while (0)
+extern int glthread_once_singlethreaded (pthread_once_t *once_control);
+
+# ifdef __cplusplus
+}
+# endif
+
+#endif
+
+/* ========================================================================= */
+
+#if USE_PTH_THREADS
+
+/* Use the GNU Pth threads library.  */
+
+# include <pth.h>
+# include <stdlib.h>
+
+# ifdef __cplusplus
+extern "C" {
+# endif
+
+# if USE_PTH_THREADS_WEAK
+
+/* Use weak references to the GNU Pth threads library.  */
+
+#  pragma weak pth_mutex_init
+#  pragma weak pth_mutex_acquire
+#  pragma weak pth_mutex_release
+#  pragma weak pth_rwlock_init
+#  pragma weak pth_rwlock_acquire
+#  pragma weak pth_rwlock_release
+#  pragma weak pth_once
+
+#  pragma weak pth_cancel
+#  define pth_in_use() (pth_cancel != NULL)
+
+# else
+
+#  define pth_in_use() 1
+
+# endif
+
+/* -------------------------- gl_lock_t datatype -------------------------- */
+
+typedef pth_mutex_t gl_lock_t;
+# define gl_lock_define(STORAGECLASS, NAME) \
+    STORAGECLASS pth_mutex_t NAME;
+# define gl_lock_define_initialized(STORAGECLASS, NAME) \
+    STORAGECLASS pth_mutex_t NAME = gl_lock_initializer;
+# define gl_lock_initializer \
+    PTH_MUTEX_INIT
+# define gl_lock_init(NAME) \
+    do                                               \
+      {                                              \
+        if (pth_in_use() && !pth_mutex_init (&NAME)) \
+          abort ();                                  \
+      }                                              \
+    while (0)
+# define gl_lock_lock(NAME) \
+    do                                                           \
+      {                                                          \
+        if (pth_in_use() && !pth_mutex_acquire (&NAME, 0, NULL)) \
+          abort ();                                              \
+      }                                                          \
+    while (0)
+# define gl_lock_unlock(NAME) \
+    do                                                  \
+      {                                                 \
+        if (pth_in_use() && !pth_mutex_release (&NAME)) \
+          abort ();                                     \
+      }                                                 \
+    while (0)
+# define gl_lock_destroy(NAME) \
+    (void)(&NAME)
+
+/* ------------------------- gl_rwlock_t datatype ------------------------- */
+
+typedef pth_rwlock_t gl_rwlock_t;
+#  define gl_rwlock_define(STORAGECLASS, NAME) \
+     STORAGECLASS pth_rwlock_t NAME;
+#  define gl_rwlock_define_initialized(STORAGECLASS, NAME) \
+     STORAGECLASS pth_rwlock_t NAME = gl_rwlock_initializer;
+#  define gl_rwlock_initializer \
+     PTH_RWLOCK_INIT
+#  define gl_rwlock_init(NAME) \
+     do                                                \
+       {                                               \
+         if (pth_in_use() && !pth_rwlock_init (&NAME)) \
+           abort ();                                   \
+       }                                               \
+     while (0)
+#  define gl_rwlock_rdlock(NAME) \
+     do                                                              \
+       {                                                             \
+         if (pth_in_use()                                            \
+             && !pth_rwlock_acquire (&NAME, PTH_RWLOCK_RD, 0, NULL)) \
+           abort ();                                                 \
+       }                                                             \
+     while (0)
+#  define gl_rwlock_wrlock(NAME) \
+     do                                                              \
+       {                                                             \
+         if (pth_in_use()                                            \
+             && !pth_rwlock_acquire (&NAME, PTH_RWLOCK_RW, 0, NULL)) \
+           abort ();                                                 \
+       }                                                             \
+     while (0)
+#  define gl_rwlock_unlock(NAME) \
+     do                                                   \
+       {                                                  \
+         if (pth_in_use() && !pth_rwlock_release (&NAME)) \
+           abort ();                                      \
+       }                                                  \
+     while (0)
+#  define gl_rwlock_destroy(NAME) \
+     (void)(&NAME)
+
+/* --------------------- gl_recursive_lock_t datatype --------------------- */
+
+/* In Pth, mutexes are recursive by default.  */
+typedef pth_mutex_t gl_recursive_lock_t;
+#  define gl_recursive_lock_define(STORAGECLASS, NAME) \
+     STORAGECLASS pth_mutex_t NAME;
+#  define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \
+     STORAGECLASS pth_mutex_t NAME = gl_recursive_lock_initializer;
+#  define gl_recursive_lock_initializer \
+     PTH_MUTEX_INIT
+#  define gl_recursive_lock_init(NAME) \
+     do                                               \
+       {                                              \
+         if (pth_in_use() && !pth_mutex_init (&NAME)) \
+           abort ();                                  \
+       }                                              \
+     while (0)
+#  define gl_recursive_lock_lock(NAME) \
+     do                                                           \
+       {                                                          \
+         if (pth_in_use() && !pth_mutex_acquire (&NAME, 0, NULL)) \
+           abort ();                                              \
+       }                                                          \
+     while (0)
+#  define gl_recursive_lock_unlock(NAME) \
+     do                                                  \
+       {                                                 \
+         if (pth_in_use() && !pth_mutex_release (&NAME)) \
+           abort ();                                     \
+       }                                                 \
+     while (0)
+#  define gl_recursive_lock_destroy(NAME) \
+     (void)(&NAME)
+
+/* -------------------------- gl_once_t datatype -------------------------- */
+
+typedef pth_once_t gl_once_t;
+# define gl_once_define(STORAGECLASS, NAME) \
+    STORAGECLASS pth_once_t NAME = PTH_ONCE_INIT;
+# define gl_once(NAME, INITFUNCTION) \
+    do                                                                \
+      {                                                               \
+        if (pth_in_use ())                                            \
+          {                                                           \
+            void (*gl_once_temp) (void) = INITFUNCTION;               \
+            if (!pth_once (&NAME, glthread_once_call, &gl_once_temp)) \
+              abort ();                                               \
+          }                                                           \
+        else                                                          \
+          {                                                           \
+            if (glthread_once_singlethreaded (&NAME))                 \
+              INITFUNCTION ();                                        \
+          }                                                           \
+      }                                                               \
+    while (0)
+extern void glthread_once_call (void *arg);
+extern int glthread_once_singlethreaded (pth_once_t *once_control);
+
+# ifdef __cplusplus
+}
+# endif
+
+#endif
+
+/* ========================================================================= */
+
+#if USE_SOLARIS_THREADS
+
+/* Use the old Solaris threads library.  */
+
+# include <thread.h>
+# include <synch.h>
+# include <stdlib.h>
+
+# ifdef __cplusplus
+extern "C" {
+# endif
+
+# if USE_SOLARIS_THREADS_WEAK
+
+/* Use weak references to the old Solaris threads library.  */
+
+#  pragma weak mutex_init
+#  pragma weak mutex_lock
+#  pragma weak mutex_unlock
+#  pragma weak mutex_destroy
+#  pragma weak rwlock_init
+#  pragma weak rw_rdlock
+#  pragma weak rw_wrlock
+#  pragma weak rw_unlock
+#  pragma weak rwlock_destroy
+#  pragma weak thr_self
+
+#  pragma weak thr_suspend
+#  define thread_in_use() (thr_suspend != NULL)
+
+# else
+
+#  define thread_in_use() 1
+
+# endif
+
+/* -------------------------- gl_lock_t datatype -------------------------- */
+
+typedef mutex_t gl_lock_t;
+# define gl_lock_define(STORAGECLASS, NAME) \
+    STORAGECLASS mutex_t NAME;
+# define gl_lock_define_initialized(STORAGECLASS, NAME) \
+    STORAGECLASS mutex_t NAME = gl_lock_initializer;
+# define gl_lock_initializer \
+    DEFAULTMUTEX
+# define gl_lock_init(NAME) \
+    do                                                                       \
+      {                                                                      \
+        if (thread_in_use () && mutex_init (&NAME, USYNC_THREAD, NULL) != 0) \
+          abort ();                                                          \
+      }                                                                      \
+    while (0)
+# define gl_lock_lock(NAME) \
+    do                                                   \
+      {                                                  \
+        if (thread_in_use () && mutex_lock (&NAME) != 0) \
+          abort ();                                      \
+      }                                                  \
+    while (0)
+# define gl_lock_unlock(NAME) \
+    do                                                     \
+      {                                                    \
+        if (thread_in_use () && mutex_unlock (&NAME) != 0) \
+          abort ();                                        \
+      }                                                    \
+    while (0)
+# define gl_lock_destroy(NAME) \
+    do                                                      \
+      {                                                     \
+        if (thread_in_use () && mutex_destroy (&NAME) != 0) \
+          abort ();                                         \
+      }                                                     \
+    while (0)
+
+/* ------------------------- gl_rwlock_t datatype ------------------------- */
+
+typedef rwlock_t gl_rwlock_t;
+# define gl_rwlock_define(STORAGECLASS, NAME) \
+    STORAGECLASS rwlock_t NAME;
+# define gl_rwlock_define_initialized(STORAGECLASS, NAME) \
+    STORAGECLASS rwlock_t NAME = gl_rwlock_initializer;
+# define gl_rwlock_initializer \
+    DEFAULTRWLOCK
+# define gl_rwlock_init(NAME) \
+    do                                                                        \
+      {                                                                       \
+        if (thread_in_use () && rwlock_init (&NAME, USYNC_THREAD, NULL) != 0) \
+          abort ();                                                           \
+      }                                                                       \
+    while (0)
+# define gl_rwlock_rdlock(NAME) \
+    do                                                  \
+      {                                                 \
+        if (thread_in_use () && rw_rdlock (&NAME) != 0) \
+          abort ();                                     \
+      }                                                 \
+    while (0)
+# define gl_rwlock_wrlock(NAME) \
+    do                                                  \
+      {                                                 \
+        if (thread_in_use () && rw_wrlock (&NAME) != 0) \
+          abort ();                                     \
+      }                                                 \
+    while (0)
+# define gl_rwlock_unlock(NAME) \
+    do                                                  \
+      {                                                 \
+        if (thread_in_use () && rw_unlock (&NAME) != 0) \
+          abort ();                                     \
+      }                                                 \
+    while (0)
+# define gl_rwlock_destroy(NAME) \
+    do                                                       \
+      {                                                      \
+        if (thread_in_use () && rwlock_destroy (&NAME) != 0) \
+          abort ();                                          \
+      }                                                      \
+    while (0)
+
+/* --------------------- gl_recursive_lock_t datatype --------------------- */
+
+/* Old Solaris threads did not have recursive locks.
+   We have to implement them ourselves.  */
+
+typedef struct
+        {
+          mutex_t mutex;
+          thread_t owner;
+          unsigned long depth;
+        }
+        gl_recursive_lock_t;
+# define gl_recursive_lock_define(STORAGECLASS, NAME) \
+    STORAGECLASS gl_recursive_lock_t NAME;
+# define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \
+    STORAGECLASS gl_recursive_lock_t NAME = gl_recursive_lock_initializer;
+# define gl_recursive_lock_initializer \
+    { DEFAULTMUTEX, (thread_t) 0, 0 }
+# define gl_recursive_lock_init(NAME) \
+    do                                          \
+      {                                         \
+        if (thread_in_use ())                   \
+          glthread_recursive_lock_init (&NAME); \
+      }                                         \
+    while (0)
+# define gl_recursive_lock_lock(NAME) \
+    do                                          \
+      {                                         \
+        if (thread_in_use ())                   \
+          glthread_recursive_lock_lock (&NAME); \
+      }                                         \
+    while (0)
+# define gl_recursive_lock_unlock(NAME) \
+    do                                            \
+      {                                           \
+        if (thread_in_use ())                     \
+          glthread_recursive_lock_unlock (&NAME); \
+      }                                           \
+    while (0)
+# define gl_recursive_lock_destroy(NAME) \
+    do                                             \
+      {                                            \
+        if (thread_in_use ())                      \
+          glthread_recursive_lock_destroy (&NAME); \
+      }                                            \
+    while (0)
+extern void glthread_recursive_lock_init (gl_recursive_lock_t *lock);
+extern void glthread_recursive_lock_lock (gl_recursive_lock_t *lock);
+extern void glthread_recursive_lock_unlock (gl_recursive_lock_t *lock);
+extern void glthread_recursive_lock_destroy (gl_recursive_lock_t *lock);
+
+/* -------------------------- gl_once_t datatype -------------------------- */
+
+typedef struct
+        {
+          volatile int inited;
+          mutex_t mutex;
+        }
+        gl_once_t;
+# define gl_once_define(STORAGECLASS, NAME) \
+    STORAGECLASS gl_once_t NAME = { 0, DEFAULTMUTEX };
+# define gl_once(NAME, INITFUNCTION) \
+    do                                                \
+      {                                               \
+        if (thread_in_use ())                         \
+          {                                           \
+            glthread_once (&NAME, INITFUNCTION);      \
+          }                                           \
+        else                                          \
+          {                                           \
+            if (glthread_once_singlethreaded (&NAME)) \
+              INITFUNCTION ();                        \
+          }                                           \
+      }                                               \
+    while (0)
+extern void glthread_once (gl_once_t *once_control, void (*initfunction) (void));
+extern int glthread_once_singlethreaded (gl_once_t *once_control);
+
+# ifdef __cplusplus
+}
+# endif
+
+#endif
+
+/* ========================================================================= */
+
+#if USE_WIN32_THREADS
+
+# include <windows.h>
+
+# ifdef __cplusplus
+extern "C" {
+# endif
+
+/* We can use CRITICAL_SECTION directly, rather than the Win32 Event, Mutex,
+   Semaphore types, because
+     - we need only to synchronize inside a single process (address space),
+       not inter-process locking,
+     - we don't need to support trylock operations.  (TryEnterCriticalSection
+       does not work on Windows 95/98/ME.  Packages that need trylock usually
+       define their own mutex type.)  */
+
+/* There is no way to statically initialize a CRITICAL_SECTION.  It needs
+   to be done lazily, once only.  For this we need spinlocks.  */
+
+typedef struct { volatile int done; volatile long started; } gl_spinlock_t;
+
+/* -------------------------- gl_lock_t datatype -------------------------- */
+
+typedef struct
+        {
+          gl_spinlock_t guard; /* protects the initialization */
+          CRITICAL_SECTION lock;
+        }
+        gl_lock_t;
+# define gl_lock_define(STORAGECLASS, NAME) \
+    STORAGECLASS gl_lock_t NAME;
+# define gl_lock_define_initialized(STORAGECLASS, NAME) \
+    STORAGECLASS gl_lock_t NAME = gl_lock_initializer;
+# define gl_lock_initializer \
+    { { 0, -1 } }
+# define gl_lock_init(NAME) \
+    glthread_lock_init (&NAME)
+# define gl_lock_lock(NAME) \
+    glthread_lock_lock (&NAME)
+# define gl_lock_unlock(NAME) \
+    glthread_lock_unlock (&NAME)
+# define gl_lock_destroy(NAME) \
+    glthread_lock_destroy (&NAME)
+extern void glthread_lock_init (gl_lock_t *lock);
+extern void glthread_lock_lock (gl_lock_t *lock);
+extern void glthread_lock_unlock (gl_lock_t *lock);
+extern void glthread_lock_destroy (gl_lock_t *lock);
+
+/* ------------------------- gl_rwlock_t datatype ------------------------- */
+
+/* It is impossible to implement read-write locks using plain locks, without
+   introducing an extra thread dedicated to managing read-write locks.
+   Therefore here we need to use the low-level Event type.  */
+
+typedef struct
+        {
+          HANDLE *array; /* array of waiting threads, each represented by an event */
+          unsigned int count; /* number of waiting threads */
+          unsigned int alloc; /* length of allocated array */
+          unsigned int offset; /* index of first waiting thread in array */
+        }
+        gl_waitqueue_t;
+typedef struct
+        {
+          gl_spinlock_t guard; /* protects the initialization */
+          CRITICAL_SECTION lock; /* protects the remaining fields */
+          gl_waitqueue_t waiting_readers; /* waiting readers */
+          gl_waitqueue_t waiting_writers; /* waiting writers */
+          int runcount; /* number of readers running, or -1 when a writer runs */
+        }
+        gl_rwlock_t;
+# define gl_rwlock_define(STORAGECLASS, NAME) \
+    STORAGECLASS gl_rwlock_t NAME;
+# define gl_rwlock_define_initialized(STORAGECLASS, NAME) \
+    STORAGECLASS gl_rwlock_t NAME = gl_rwlock_initializer;
+# define gl_rwlock_initializer \
+    { { 0, -1 } }
+# define gl_rwlock_init(NAME) \
+    glthread_rwlock_init (&NAME)
+# define gl_rwlock_rdlock(NAME) \
+    glthread_rwlock_rdlock (&NAME)
+# define gl_rwlock_wrlock(NAME) \
+    glthread_rwlock_wrlock (&NAME)
+# define gl_rwlock_unlock(NAME) \
+    glthread_rwlock_unlock (&NAME)
+# define gl_rwlock_destroy(NAME) \
+    glthread_rwlock_destroy (&NAME)
+extern void glthread_rwlock_init (gl_rwlock_t *lock);
+extern void glthread_rwlock_rdlock (gl_rwlock_t *lock);
+extern void glthread_rwlock_wrlock (gl_rwlock_t *lock);
+extern void glthread_rwlock_unlock (gl_rwlock_t *lock);
+extern void glthread_rwlock_destroy (gl_rwlock_t *lock);
+
+/* --------------------- gl_recursive_lock_t datatype --------------------- */
+
+/* The Win32 documentation says that CRITICAL_SECTION already implements a
+   recursive lock.  But we need not rely on it: It's easy to implement a
+   recursive lock without this assumption.  */
+
+typedef struct
+        {
+          gl_spinlock_t guard; /* protects the initialization */
+          DWORD owner;
+          unsigned long depth;
+          CRITICAL_SECTION lock;
+        }
+        gl_recursive_lock_t;
+# define gl_recursive_lock_define(STORAGECLASS, NAME) \
+    STORAGECLASS gl_recursive_lock_t NAME;
+# define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \
+    STORAGECLASS gl_recursive_lock_t NAME = gl_recursive_lock_initializer;
+# define gl_recursive_lock_initializer \
+    { { 0, -1 }, 0, 0 }
+# define gl_recursive_lock_init(NAME) \
+    glthread_recursive_lock_init (&NAME)
+# define gl_recursive_lock_lock(NAME) \
+    glthread_recursive_lock_lock (&NAME)
+# define gl_recursive_lock_unlock(NAME) \
+    glthread_recursive_lock_unlock (&NAME)
+# define gl_recursive_lock_destroy(NAME) \
+    glthread_recursive_lock_destroy (&NAME)
+extern void glthread_recursive_lock_init (gl_recursive_lock_t *lock);
+extern void glthread_recursive_lock_lock (gl_recursive_lock_t *lock);
+extern void glthread_recursive_lock_unlock (gl_recursive_lock_t *lock);
+extern void glthread_recursive_lock_destroy (gl_recursive_lock_t *lock);
+
+/* -------------------------- gl_once_t datatype -------------------------- */
+
+typedef struct
+        {
+          volatile int inited;
+          volatile long started;
+          CRITICAL_SECTION lock;
+        }
+        gl_once_t;
+# define gl_once_define(STORAGECLASS, NAME) \
+    STORAGECLASS gl_once_t NAME = { -1, -1 };
+# define gl_once(NAME, INITFUNCTION) \
+    glthread_once (&NAME, INITFUNCTION)
+extern void glthread_once (gl_once_t *once_control, void (*initfunction) (void));
+
+# ifdef __cplusplus
+}
+# endif
+
+#endif
+
+/* ========================================================================= */
+
+#if !(USE_POSIX_THREADS || USE_PTH_THREADS || USE_SOLARIS_THREADS || USE_WIN32_THREADS)
+
+/* Provide dummy implementation if threads are not supported.  */
+
+/* -------------------------- gl_lock_t datatype -------------------------- */
+
+typedef int gl_lock_t;
+# define gl_lock_define(STORAGECLASS, NAME)
+# define gl_lock_define_initialized(STORAGECLASS, NAME)
+# define gl_lock_init(NAME)
+# define gl_lock_lock(NAME)
+# define gl_lock_unlock(NAME)
+
+/* ------------------------- gl_rwlock_t datatype ------------------------- */
+
+typedef int gl_rwlock_t;
+# define gl_rwlock_define(STORAGECLASS, NAME)
+# define gl_rwlock_define_initialized(STORAGECLASS, NAME)
+# define gl_rwlock_init(NAME)
+# define gl_rwlock_rdlock(NAME)
+# define gl_rwlock_wrlock(NAME)
+# define gl_rwlock_unlock(NAME)
+
+/* --------------------- gl_recursive_lock_t datatype --------------------- */
+
+typedef int gl_recursive_lock_t;
+# define gl_recursive_lock_define(STORAGECLASS, NAME)
+# define gl_recursive_lock_define_initialized(STORAGECLASS, NAME)
+# define gl_recursive_lock_init(NAME)
+# define gl_recursive_lock_lock(NAME)
+# define gl_recursive_lock_unlock(NAME)
+
+/* -------------------------- gl_once_t datatype -------------------------- */
+
+typedef int gl_once_t;
+# define gl_once_define(STORAGECLASS, NAME) \
+    STORAGECLASS gl_once_t NAME = 0;
+# define gl_once(NAME, INITFUNCTION) \
+    do                       \
+      {                      \
+        if (NAME == 0)       \
+          {                  \
+            NAME = ~ 0;      \
+            INITFUNCTION (); \
+          }                  \
+      }                      \
+    while (0)
+
+#endif
+
+/* ========================================================================= */
+
+#endif /* _LOCK_H */
diff --git a/intl/log.c b/intl/log.c
new file mode 100644
index 0000000..e3ab5d0
--- /dev/null
+++ b/intl/log.c
@@ -0,0 +1,116 @@
+/* Log file output.
+   Copyright (C) 2003, 2005 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+/* Written by Bruno Haible <bruno at clisp.org>.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* Handle multi-threaded applications.  */
+#ifdef _LIBC
+# include <bits/libc-lock.h>
+#else
+# include "lock.h"
+#endif
+
+/* Print an ASCII string with quotes and escape sequences where needed.  */
+static void
+print_escaped (FILE *stream, const char *str)
+{
+  putc ('"', stream);
+  for (; *str != '\0'; str++)
+    if (*str == '\n')
+      {
+	fputs ("\\n\"", stream);
+	if (str[1] == '\0')
+	  return;
+	fputs ("\n\"", stream);
+      }
+    else
+      {
+	if (*str == '"' || *str == '\\')
+	  putc ('\\', stream);
+	putc (*str, stream);
+      }
+  putc ('"', stream);
+}
+
+static char *last_logfilename = NULL;
+static FILE *last_logfile = NULL;
+__libc_lock_define_initialized (static, lock)
+
+static inline void
+_nl_log_untranslated_locked (const char *logfilename, const char *domainname,
+			     const char *msgid1, const char *msgid2, int plural)
+{
+  FILE *logfile;
+
+  /* Can we reuse the last opened logfile?  */
+  if (last_logfilename == NULL || strcmp (logfilename, last_logfilename) != 0)
+    {
+      /* Close the last used logfile.  */
+      if (last_logfilename != NULL)
+	{
+	  if (last_logfile != NULL)
+	    {
+	      fclose (last_logfile);
+	      last_logfile = NULL;
+	    }
+	  free (last_logfilename);
+	  last_logfilename = NULL;
+	}
+      /* Open the logfile.  */
+      last_logfilename = (char *) malloc (strlen (logfilename) + 1);
+      if (last_logfilename == NULL)
+	return;
+      strcpy (last_logfilename, logfilename);
+      last_logfile = fopen (logfilename, "a");
+      if (last_logfile == NULL)
+	return;
+    }
+  logfile = last_logfile;
+
+  fprintf (logfile, "domain ");
+  print_escaped (logfile, domainname);
+  fprintf (logfile, "\nmsgid ");
+  print_escaped (logfile, msgid1);
+  if (plural)
+    {
+      fprintf (logfile, "\nmsgid_plural ");
+      print_escaped (logfile, msgid2);
+      fprintf (logfile, "\nmsgstr[0] \"\"\n");
+    }
+  else
+    fprintf (logfile, "\nmsgstr \"\"\n");
+  putc ('\n', logfile);
+}
+
+/* Add to the log file an entry denoting a failed translation.  */
+void
+_nl_log_untranslated (const char *logfilename, const char *domainname,
+		      const char *msgid1, const char *msgid2, int plural)
+{
+  __libc_lock_lock (lock);
+  _nl_log_untranslated_locked (logfilename, domainname, msgid1, msgid2, plural);
+  __libc_lock_unlock (lock);
+}
diff --git a/intl/ngettext.c b/intl/ngettext.c
new file mode 100644
index 0000000..a33529c
--- /dev/null
+++ b/intl/ngettext.c
@@ -0,0 +1,65 @@
+/* Implementation of ngettext(3) function.
+   Copyright (C) 1995, 1997, 2000-2003 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#ifdef _LIBC
+# define __need_NULL
+# include <stddef.h>
+#else
+# include <stdlib.h>		/* Just for NULL.  */
+#endif
+
+#include "gettextP.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+
+#include <locale.h>
+
+/* @@ end of prolog @@ */
+
+/* Names for the libintl functions are a problem.  They must not clash
+   with existing names and they should follow ANSI C.  But this source
+   code is also used in GNU C Library where the names have a __
+   prefix.  So we have to make a difference here.  */
+#ifdef _LIBC
+# define NGETTEXT __ngettext
+# define DCNGETTEXT __dcngettext
+#else
+# define NGETTEXT libintl_ngettext
+# define DCNGETTEXT libintl_dcngettext
+#endif
+
+/* Look up MSGID in the current default message catalog for the current
+   LC_MESSAGES locale.  If not found, returns MSGID itself (the default
+   text).  */
+char *
+NGETTEXT (const char *msgid1, const char *msgid2, unsigned long int n)
+{
+  return DCNGETTEXT (NULL, msgid1, msgid2, n, LC_MESSAGES);
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library.  */
+weak_alias (__ngettext, ngettext);
+#endif
diff --git a/intl/os2compat.c b/intl/os2compat.c
new file mode 100644
index 0000000..d041de2
--- /dev/null
+++ b/intl/os2compat.c
@@ -0,0 +1,98 @@
+/* OS/2 compatibility functions.
+   Copyright (C) 2001-2002 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+#define OS2_AWARE
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+#include <sys/param.h>
+
+/* A version of getenv() that works from DLLs */
+extern unsigned long DosScanEnv (const unsigned char *pszName, unsigned char **ppszValue);
+
+char *
+_nl_getenv (const char *name)
+{
+  unsigned char *value;
+  if (DosScanEnv (name, &value))
+    return NULL;
+  else
+    return value;
+}
+
+/* A fixed size buffer.  */
+char libintl_nl_default_dirname[MAXPATHLEN+1];
+
+char *_nlos2_libdir = NULL;
+char *_nlos2_localealiaspath = NULL;
+char *_nlos2_localedir = NULL;
+
+static __attribute__((constructor)) void
+nlos2_initialize ()
+{
+  char *root = getenv ("UNIXROOT");
+  char *gnulocaledir = getenv ("GNULOCALEDIR");
+
+  _nlos2_libdir = gnulocaledir;
+  if (!_nlos2_libdir)
+    {
+      if (root)
+        {
+          size_t sl = strlen (root);
+          _nlos2_libdir = (char *) malloc (sl + strlen (LIBDIR) + 1);
+          memcpy (_nlos2_libdir, root, sl);
+          memcpy (_nlos2_libdir + sl, LIBDIR, strlen (LIBDIR) + 1);
+        }
+      else
+        _nlos2_libdir = LIBDIR;
+    }
+
+  _nlos2_localealiaspath = gnulocaledir;
+  if (!_nlos2_localealiaspath)
+    {
+      if (root)
+        {
+          size_t sl = strlen (root);
+          _nlos2_localealiaspath = (char *) malloc (sl + strlen (LOCALE_ALIAS_PATH) + 1);
+          memcpy (_nlos2_localealiaspath, root, sl);
+          memcpy (_nlos2_localealiaspath + sl, LOCALE_ALIAS_PATH, strlen (LOCALE_ALIAS_PATH) + 1);
+        }
+     else
+        _nlos2_localealiaspath = LOCALE_ALIAS_PATH;
+    }
+
+  _nlos2_localedir = gnulocaledir;
+  if (!_nlos2_localedir)
+    {
+      if (root)
+        {
+          size_t sl = strlen (root);
+          _nlos2_localedir = (char *) malloc (sl + strlen (LOCALEDIR) + 1);
+          memcpy (_nlos2_localedir, root, sl);
+          memcpy (_nlos2_localedir + sl, LOCALEDIR, strlen (LOCALEDIR) + 1);
+        }
+      else
+        _nlos2_localedir = LOCALEDIR;
+    }
+
+  if (strlen (_nlos2_localedir) <= MAXPATHLEN)
+    strcpy (libintl_nl_default_dirname, _nlos2_localedir);
+}
diff --git a/intl/os2compat.h b/intl/os2compat.h
new file mode 100644
index 0000000..a18d582
--- /dev/null
+++ b/intl/os2compat.h
@@ -0,0 +1,46 @@
+/* OS/2 compatibility defines.
+   This file is intended to be included from config.h
+   Copyright (C) 2001-2002 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+/* When included from os2compat.h we need all the original definitions */
+#ifndef OS2_AWARE
+
+#undef LIBDIR
+#define LIBDIR			_nlos2_libdir
+extern char *_nlos2_libdir;
+
+#undef LOCALEDIR
+#define LOCALEDIR		_nlos2_localedir
+extern char *_nlos2_localedir;
+
+#undef LOCALE_ALIAS_PATH
+#define LOCALE_ALIAS_PATH	_nlos2_localealiaspath
+extern char *_nlos2_localealiaspath;
+
+#endif
+
+#undef HAVE_STRCASECMP
+#define HAVE_STRCASECMP 1
+#define strcasecmp stricmp
+#define strncasecmp strnicmp
+
+/* We have our own getenv() which works even if library is compiled as DLL */
+#define getenv _nl_getenv
+
+/* Older versions of gettext used -1 as the value of LC_MESSAGES */
+#define LC_MESSAGES_COMPAT (-1)
diff --git a/intl/osdep.c b/intl/osdep.c
new file mode 100644
index 0000000..3cc35c0
--- /dev/null
+++ b/intl/osdep.c
@@ -0,0 +1,26 @@
+/* OS dependent parts of libintl.
+   Copyright (C) 2001-2002, 2006 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+#if defined __CYGWIN__
+# include "intl-exports.c"
+#elif defined __EMX__
+# include "os2compat.c"
+#else
+/* Avoid AIX compiler warning.  */
+typedef int dummy;
+#endif
diff --git a/intl/plural-exp.c b/intl/plural-exp.c
new file mode 100644
index 0000000..751a688
--- /dev/null
+++ b/intl/plural-exp.c
@@ -0,0 +1,155 @@
+/* Expression parsing for plural form selection.
+   Copyright (C) 2000-2001, 2003, 2005-2007 Free Software Foundation, Inc.
+   Written by Ulrich Drepper <drepper at cygnus.com>, 2000.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <ctype.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "plural-exp.h"
+
+#if (defined __GNUC__ && !(__APPLE_CC__ > 1) && !defined __cplusplus) \
+    || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L)
+
+/* These structs are the constant expression for the germanic plural
+   form determination.  It represents the expression  "n != 1".  */
+static const struct expression plvar =
+{
+  .nargs = 0,
+  .operation = var,
+};
+static const struct expression plone =
+{
+  .nargs = 0,
+  .operation = num,
+  .val =
+  {
+    .num = 1
+  }
+};
+struct expression GERMANIC_PLURAL =
+{
+  .nargs = 2,
+  .operation = not_equal,
+  .val =
+  {
+    .args =
+    {
+      [0] = (struct expression *) &plvar,
+      [1] = (struct expression *) &plone
+    }
+  }
+};
+
+# define INIT_GERMANIC_PLURAL()
+
+#else
+
+/* For compilers without support for ISO C 99 struct/union initializers:
+   Initialization at run-time.  */
+
+static struct expression plvar;
+static struct expression plone;
+struct expression GERMANIC_PLURAL;
+
+static void
+init_germanic_plural ()
+{
+  if (plone.val.num == 0)
+    {
+      plvar.nargs = 0;
+      plvar.operation = var;
+
+      plone.nargs = 0;
+      plone.operation = num;
+      plone.val.num = 1;
+
+      GERMANIC_PLURAL.nargs = 2;
+      GERMANIC_PLURAL.operation = not_equal;
+      GERMANIC_PLURAL.val.args[0] = &plvar;
+      GERMANIC_PLURAL.val.args[1] = &plone;
+    }
+}
+
+# define INIT_GERMANIC_PLURAL() init_germanic_plural ()
+
+#endif
+
+void
+internal_function
+EXTRACT_PLURAL_EXPRESSION (const char *nullentry,
+			   const struct expression **pluralp,
+			   unsigned long int *npluralsp)
+{
+  if (nullentry != NULL)
+    {
+      const char *plural;
+      const char *nplurals;
+
+      plural = strstr (nullentry, "plural=");
+      nplurals = strstr (nullentry, "nplurals=");
+      if (plural == NULL || nplurals == NULL)
+	goto no_plural;
+      else
+	{
+	  char *endp;
+	  unsigned long int n;
+	  struct parse_args args;
+
+	  /* First get the number.  */
+	  nplurals += 9;
+	  while (*nplurals != '\0' && isspace ((unsigned char) *nplurals))
+	    ++nplurals;
+	  if (!(*nplurals >= '0' && *nplurals <= '9'))
+	    goto no_plural;
+#if defined HAVE_STRTOUL || defined _LIBC
+	  n = strtoul (nplurals, &endp, 10);
+#else
+	  for (endp = nplurals, n = 0; *endp >= '0' && *endp <= '9'; endp++)
+	    n = n * 10 + (*endp - '0');
+#endif
+	  if (nplurals == endp)
+	    goto no_plural;
+	  *npluralsp = n;
+
+	  /* Due to the restrictions bison imposes onto the interface of the
+	     scanner function we have to put the input string and the result
+	     passed up from the parser into the same structure which address
+	     is passed down to the parser.  */
+	  plural += 7;
+	  args.cp = plural;
+	  if (PLURAL_PARSE (&args) != 0)
+	    goto no_plural;
+	  *pluralp = args.res;
+	}
+    }
+  else
+    {
+      /* By default we are using the Germanic form: singular form only
+         for `one', the plural form otherwise.  Yes, this is also what
+         English is using since English is a Germanic language.  */
+    no_plural:
+      INIT_GERMANIC_PLURAL ();
+      *pluralp = &GERMANIC_PLURAL;
+      *npluralsp = 2;
+    }
+}
diff --git a/intl/plural-exp.h b/intl/plural-exp.h
new file mode 100644
index 0000000..d6cb8c5
--- /dev/null
+++ b/intl/plural-exp.h
@@ -0,0 +1,129 @@
+/* Expression parsing and evaluation for plural form selection.
+   Copyright (C) 2000-2003, 2005-2007 Free Software Foundation, Inc.
+   Written by Ulrich Drepper <drepper at cygnus.com>, 2000.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+#ifndef _PLURAL_EXP_H
+#define _PLURAL_EXP_H
+
+#ifndef internal_function
+# define internal_function
+#endif
+
+#ifndef attribute_hidden
+# define attribute_hidden
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+enum expression_operator
+{
+  /* Without arguments:  */
+  var,				/* The variable "n".  */
+  num,				/* Decimal number.  */
+  /* Unary operators:  */
+  lnot,				/* Logical NOT.  */
+  /* Binary operators:  */
+  mult,				/* Multiplication.  */
+  divide,			/* Division.  */
+  module,			/* Modulo operation.  */
+  plus,				/* Addition.  */
+  minus,			/* Subtraction.  */
+  less_than,			/* Comparison.  */
+  greater_than,			/* Comparison.  */
+  less_or_equal,		/* Comparison.  */
+  greater_or_equal,		/* Comparison.  */
+  equal,			/* Comparison for equality.  */
+  not_equal,			/* Comparison for inequality.  */
+  land,				/* Logical AND.  */
+  lor,				/* Logical OR.  */
+  /* Ternary operators:  */
+  qmop				/* Question mark operator.  */
+};
+
+/* This is the representation of the expressions to determine the
+   plural form.  */
+struct expression
+{
+  int nargs;			/* Number of arguments.  */
+  enum expression_operator operation;
+  union
+  {
+    unsigned long int num;	/* Number value for `num'.  */
+    struct expression *args[3];	/* Up to three arguments.  */
+  } val;
+};
+
+/* This is the data structure to pass information to the parser and get
+   the result in a thread-safe way.  */
+struct parse_args
+{
+  const char *cp;
+  struct expression *res;
+};
+
+
+/* Names for the libintl functions are a problem.  This source code is used
+   1. in the GNU C Library library,
+   2. in the GNU libintl library,
+   3. in the GNU gettext tools.
+   The function names in each situation must be different, to allow for
+   binary incompatible changes in 'struct expression'.  Furthermore,
+   1. in the GNU C Library library, the names have a __ prefix,
+   2.+3. in the GNU libintl library and in the GNU gettext tools, the names
+         must follow ANSI C and not start with __.
+   So we have to distinguish the three cases.  */
+#ifdef _LIBC
+# define FREE_EXPRESSION __gettext_free_exp
+# define PLURAL_PARSE __gettextparse
+# define GERMANIC_PLURAL __gettext_germanic_plural
+# define EXTRACT_PLURAL_EXPRESSION __gettext_extract_plural
+#elif defined (IN_LIBINTL)
+# define FREE_EXPRESSION libintl_gettext_free_exp
+# define PLURAL_PARSE libintl_gettextparse
+# define GERMANIC_PLURAL libintl_gettext_germanic_plural
+# define EXTRACT_PLURAL_EXPRESSION libintl_gettext_extract_plural
+#else
+# define FREE_EXPRESSION free_plural_expression
+# define PLURAL_PARSE parse_plural_expression
+# define GERMANIC_PLURAL germanic_plural
+# define EXTRACT_PLURAL_EXPRESSION extract_plural_expression
+#endif
+
+extern void FREE_EXPRESSION (struct expression *exp)
+     internal_function;
+extern int PLURAL_PARSE (void *arg);
+extern struct expression GERMANIC_PLURAL attribute_hidden;
+extern void EXTRACT_PLURAL_EXPRESSION (const char *nullentry,
+				       const struct expression **pluralp,
+				       unsigned long int *npluralsp)
+     internal_function;
+
+#if !defined (_LIBC) && !defined (IN_LIBINTL) && !defined (IN_LIBGLOCALE)
+extern unsigned long int plural_eval (const struct expression *pexp,
+				      unsigned long int n);
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _PLURAL_EXP_H */
diff --git a/intl/plural.c b/intl/plural.c
new file mode 100644
index 0000000..7a4d947
--- /dev/null
+++ b/intl/plural.c
@@ -0,0 +1,1961 @@
+/* A Bison parser, made by GNU Bison 2.3a.  */
+
+/* Skeleton implementation for Bison's Yacc-like parsers in C
+
+   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
+   Free Software Foundation, Inc.
+
+   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, 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., 51 Franklin Street, Fifth Floor,
+   Boston, MA 02110-1301, USA.  */
+
+/* As a special exception, you may create a larger work that contains
+   part or all of the Bison parser skeleton and distribute that work
+   under terms of your choice, so long as that work isn't itself a
+   parser generator using the skeleton or a modified version thereof
+   as a parser skeleton.  Alternatively, if you modify or redistribute
+   the parser skeleton itself, you may (at your option) remove this
+   special exception, which will cause the skeleton and the resulting
+   Bison output files to be licensed under the GNU General Public
+   License without this special exception.
+
+   This special exception was added by the Free Software Foundation in
+   version 2.2 of Bison.  */
+
+/* C LALR(1) parser skeleton written by Richard Stallman, by
+   simplifying the original so-called "semantic" parser.  */
+
+/* All symbols defined below should begin with yy or YY, to avoid
+   infringing on user name space.  This should be done even for local
+   variables, as they might otherwise be expanded by user macros.
+   There are some unavoidable exceptions within include files to
+   define necessary library symbols; they are noted "INFRINGES ON
+   USER NAME SPACE" below.  */
+
+/* Identify Bison output.  */
+#define YYBISON 1
+
+/* Bison version.  */
+#define YYBISON_VERSION "2.3a"
+
+/* Skeleton name.  */
+#define YYSKELETON_NAME "yacc.c"
+
+/* Pure parsers.  */
+#define YYPURE 1
+
+/* Using locations.  */
+#define YYLSP_NEEDED 0
+
+/* Substitute the variable and function names.  */
+#define yyparse __gettextparse
+#define yylex   __gettextlex
+#define yyerror __gettexterror
+#define yylval  __gettextlval
+#define yychar  __gettextchar
+#define yydebug __gettextdebug
+#define yynerrs __gettextnerrs
+
+
+/* Copy the first part of user declarations.  */
+/* Line 164 of yacc.c.  */
+#line 1 "plural.y"
+
+/* Expression parsing for plural form selection.
+   Copyright (C) 2000-2001, 2003, 2005-2006 Free Software Foundation, Inc.
+   Written by Ulrich Drepper <drepper at cygnus.com>, 2000.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+/* For bison < 2.0, the bison generated parser uses alloca.  AIX 3 forces us
+   to put this declaration at the beginning of the file.  The declaration in
+   bison's skeleton file comes too late.  This must come before <config.h>
+   because <config.h> may include arbitrary system headers.
+   This can go away once the AM_INTL_SUBDIR macro requires bison >= 2.0.  */
+#if defined _AIX && !defined __GNUC__
+ #pragma alloca
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
+#include "plural-exp.h"
+
+/* The main function generated by the parser is called __gettextparse,
+   but we want it to be called PLURAL_PARSE.  */
+#ifndef _LIBC
+# define __gettextparse PLURAL_PARSE
+#endif
+
+#define YYLEX_PARAM	&((struct parse_args *) arg)->cp
+#define YYPARSE_PARAM	arg
+
+
+/* Enabling traces.  */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+
+/* Enabling verbose error messages.  */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE 0
+#endif
+
+/* Enabling the token table.  */
+#ifndef YYTOKEN_TABLE
+# define YYTOKEN_TABLE 0
+#endif
+
+
+/* Tokens.  */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+   /* Put the tokens into the symbol table, so that GDB and other debuggers
+      know about them.  */
+   enum yytokentype {
+     EQUOP2 = 258,
+     CMPOP2 = 259,
+     ADDOP2 = 260,
+     MULOP2 = 261,
+     NUMBER = 262
+   };
+#endif
+/* Tokens.  */
+#define EQUOP2 258
+#define CMPOP2 259
+#define ADDOP2 260
+#define MULOP2 261
+#define NUMBER 262
+
+
+
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
+{/* Line 191 of yacc.c.  */
+#line 51 "plural.y"
+
+  unsigned long int num;
+  enum expression_operator op;
+  struct expression *exp;
+}
+/* Line 191 of yacc.c.  */
+#line 175 "plural.c"
+	YYSTYPE;
+# define YYSTYPE_IS_TRIVIAL 1
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+
+
+
+/* Copy the second part of user declarations.  */
+/* Line 221 of yacc.c.  */
+#line 57 "plural.y"
+
+/* Prototypes for local functions.  */
+static int yylex (YYSTYPE *lval, const char **pexp);
+static void yyerror (const char *str);
+
+/* Allocation of expressions.  */
+
+static struct expression *
+new_exp (int nargs, enum expression_operator op,
+	 struct expression * const *args)
+{
+  int i;
+  struct expression *newp;
+
+  /* If any of the argument could not be malloc'ed, just return NULL.  */
+  for (i = nargs - 1; i >= 0; i--)
+    if (args[i] == NULL)
+      goto fail;
+
+  /* Allocate a new expression.  */
+  newp = (struct expression *) malloc (sizeof (*newp));
+  if (newp != NULL)
+    {
+      newp->nargs = nargs;
+      newp->operation = op;
+      for (i = nargs - 1; i >= 0; i--)
+	newp->val.args[i] = args[i];
+      return newp;
+    }
+
+ fail:
+  for (i = nargs - 1; i >= 0; i--)
+    FREE_EXPRESSION (args[i]);
+
+  return NULL;
+}
+
+static inline struct expression *
+new_exp_0 (enum expression_operator op)
+{
+  return new_exp (0, op, NULL);
+}
+
+static inline struct expression *
+new_exp_1 (enum expression_operator op, struct expression *right)
+{
+  struct expression *args[1];
+
+  args[0] = right;
+  return new_exp (1, op, args);
+}
+
+static struct expression *
+new_exp_2 (enum expression_operator op, struct expression *left,
+	   struct expression *right)
+{
+  struct expression *args[2];
+
+  args[0] = left;
+  args[1] = right;
+  return new_exp (2, op, args);
+}
+
+static inline struct expression *
+new_exp_3 (enum expression_operator op, struct expression *bexp,
+	   struct expression *tbranch, struct expression *fbranch)
+{
+  struct expression *args[3];
+
+  args[0] = bexp;
+  args[1] = tbranch;
+  args[2] = fbranch;
+  return new_exp (3, op, args);
+}
+
+
+/* Line 221 of yacc.c.  */
+#line 265 "plural.c"
+
+#ifdef short
+# undef short
+#endif
+
+#ifdef YYTYPE_UINT8
+typedef YYTYPE_UINT8 yytype_uint8;
+#else
+typedef unsigned char yytype_uint8;
+#endif
+
+#ifdef YYTYPE_INT8
+typedef YYTYPE_INT8 yytype_int8;
+#elif (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+typedef signed char yytype_int8;
+#else
+typedef short int yytype_int8;
+#endif
+
+#ifdef YYTYPE_UINT16
+typedef YYTYPE_UINT16 yytype_uint16;
+#else
+typedef unsigned short int yytype_uint16;
+#endif
+
+#ifdef YYTYPE_INT16
+typedef YYTYPE_INT16 yytype_int16;
+#else
+typedef short int yytype_int16;
+#endif
+
+#ifndef YYSIZE_T
+# ifdef __SIZE_TYPE__
+#  define YYSIZE_T __SIZE_TYPE__
+# elif defined size_t
+#  define YYSIZE_T size_t
+# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+#  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+#  define YYSIZE_T size_t
+# else
+#  define YYSIZE_T unsigned int
+# endif
+#endif
+
+#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+
+#ifndef YY_
+# if YYENABLE_NLS
+#  if ENABLE_NLS
+#   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
+#   define YY_(msgid) dgettext ("bison-runtime", msgid)
+#  endif
+# endif
+# ifndef YY_
+#  define YY_(msgid) msgid
+# endif
+#endif
+
+/* Suppress unused-variable warnings by "using" E.  */
+#if ! defined lint || defined __GNUC__
+# define YYUSE(e) ((void) (e))
+#else
+# define YYUSE(e) /* empty */
+#endif
+
+/* Identity function, used to suppress warnings about constant conditions.  */
+#ifndef lint
+# define YYID(n) (n)
+#else
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static int
+YYID (int yyi)
+#else
+static int
+YYID (yyi)
+    int yyi;
+#endif
+{
+  return yyi;
+}
+#endif
+
+#if ! defined yyoverflow || YYERROR_VERBOSE
+
+/* The parser invokes alloca or malloc; define the necessary symbols.  */
+
+# ifdef YYSTACK_USE_ALLOCA
+#  if YYSTACK_USE_ALLOCA
+#   ifdef __GNUC__
+#    define YYSTACK_ALLOC __builtin_alloca
+#   elif defined __BUILTIN_VA_ARG_INCR
+#    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
+#   elif defined _AIX
+#    define YYSTACK_ALLOC __alloca
+#   elif defined _MSC_VER
+#    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
+#    define alloca _alloca
+#   else
+#    define YYSTACK_ALLOC alloca
+#    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+#     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#     ifndef _STDLIB_H
+#      define _STDLIB_H 1
+#     endif
+#    endif
+#   endif
+#  endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+   /* Pacify GCC's `empty if-body' warning.  */
+#  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
+#  ifndef YYSTACK_ALLOC_MAXIMUM
+    /* The OS might guarantee only one guard page at the bottom of the stack,
+       and a page size can be as small as 4096 bytes.  So we cannot safely
+       invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
+       to allow for a few compiler-allocated temporary stack slots.  */
+#   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
+#  endif
+# else
+#  define YYSTACK_ALLOC YYMALLOC
+#  define YYSTACK_FREE YYFREE
+#  ifndef YYSTACK_ALLOC_MAXIMUM
+#   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
+#  endif
+#  if (defined __cplusplus && ! defined _STDLIB_H \
+       && ! ((defined YYMALLOC || defined malloc) \
+	     && (defined YYFREE || defined free)))
+#   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+#   ifndef _STDLIB_H
+#    define _STDLIB_H 1
+#   endif
+#  endif
+#  ifndef YYMALLOC
+#   define YYMALLOC malloc
+#   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
+#   endif
+#  endif
+#  ifndef YYFREE
+#   define YYFREE free
+#   if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+void free (void *); /* INFRINGES ON USER NAME SPACE */
+#   endif
+#  endif
+# endif
+#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
+
+
+#if (! defined yyoverflow \
+     && (! defined __cplusplus \
+	 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+
+/* A type that is properly aligned for any stack member.  */
+union yyalloc
+{
+  yytype_int16 yyss;
+  YYSTYPE yyvs;
+  };
+
+/* The size of the maximum gap between one aligned stack and the next.  */
+# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+
+/* The size of an array large to enough to hold all stacks, each with
+   N elements.  */
+# define YYSTACK_BYTES(N) \
+     ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+      + YYSTACK_GAP_MAXIMUM)
+
+/* Copy COUNT objects from FROM to TO.  The source and destination do
+   not overlap.  */
+# ifndef YYCOPY
+#  if defined __GNUC__ && 1 < __GNUC__
+#   define YYCOPY(To, From, Count) \
+      __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
+#  else
+#   define YYCOPY(To, From, Count)		\
+      do					\
+	{					\
+	  YYSIZE_T yyi;				\
+	  for (yyi = 0; yyi < (Count); yyi++)	\
+	    (To)[yyi] = (From)[yyi];		\
+	}					\
+      while (YYID (0))
+#  endif
+# endif
+
+/* Relocate STACK from its old location to the new one.  The
+   local variables YYSIZE and YYSTACKSIZE give the old and new number of
+   elements in the stack, and YYPTR gives the new location of the
+   stack.  Advance YYPTR to a properly aligned location for the next
+   stack.  */
+# define YYSTACK_RELOCATE(Stack)					\
+    do									\
+      {									\
+	YYSIZE_T yynewbytes;						\
+	YYCOPY (&yyptr->Stack, Stack, yysize);				\
+	Stack = &yyptr->Stack;						\
+	yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+	yyptr += yynewbytes / sizeof (*yyptr);				\
+      }									\
+    while (YYID (0))
+
+#endif
+
+/* YYFINAL -- State number of the termination state.  */
+#define YYFINAL  9
+/* YYLAST -- Last index in YYTABLE.  */
+#define YYLAST   54
+
+/* YYNTOKENS -- Number of terminals.  */
+#define YYNTOKENS  16
+/* YYNNTS -- Number of nonterminals.  */
+#define YYNNTS  3
+/* YYNRULES -- Number of rules.  */
+#define YYNRULES  13
+/* YYNRULES -- Number of states.  */
+#define YYNSTATES  27
+
+/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
+#define YYUNDEFTOK  2
+#define YYMAXUTOK   262
+
+#define YYTRANSLATE(YYX)						\
+  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+
+/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
+static const yytype_uint8 yytranslate[] =
+{
+       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,    10,     2,     2,     2,     2,     5,     2,
+      14,    15,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,    12,     2,
+       2,     2,     2,     3,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+      13,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     4,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
+       2,     2,     2,     2,     2,     2,     1,     2,     6,     7,
+       8,     9,    11
+};
+
+#if YYDEBUG
+/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+   YYRHS.  */
+static const yytype_uint8 yyprhs[] =
+{
+       0,     0,     3,     5,    11,    15,    19,    23,    27,    31,
+      35,    38,    40,    42
+};
+
+/* YYRHS -- A `-1'-separated list of the rules' RHS.  */
+static const yytype_int8 yyrhs[] =
+{
+      17,     0,    -1,    18,    -1,    18,     3,    18,    12,    18,
+      -1,    18,     4,    18,    -1,    18,     5,    18,    -1,    18,
+       6,    18,    -1,    18,     7,    18,    -1,    18,     8,    18,
+      -1,    18,     9,    18,    -1,    10,    18,    -1,    13,    -1,
+      11,    -1,    14,    18,    15,    -1
+};
+
+/* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
+static const yytype_uint8 yyrline[] =
+{
+       0,   154,   154,   162,   166,   170,   174,   178,   182,   186,
+     190,   194,   198,   203
+};
+#endif
+
+#if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
+/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+   First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
+static const char *const yytname[] =
+{
+  "$end", "error", "$undefined", "'?'", "'|'", "'&'", "EQUOP2", "CMPOP2",
+  "ADDOP2", "MULOP2", "'!'", "NUMBER", "':'", "'n'", "'('", "')'",
+  "$accept", "start", "exp", 0
+};
+#endif
+
+# ifdef YYPRINT
+/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+   token YYLEX-NUM.  */
+static const yytype_uint16 yytoknum[] =
+{
+       0,   256,   257,    63,   124,    38,   258,   259,   260,   261,
+      33,   262,    58,   110,    40,    41
+};
+# endif
+
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
+static const yytype_uint8 yyr1[] =
+{
+       0,    16,    17,    18,    18,    18,    18,    18,    18,    18,
+      18,    18,    18,    18
+};
+
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
+static const yytype_uint8 yyr2[] =
+{
+       0,     2,     1,     5,     3,     3,     3,     3,     3,     3,
+       2,     1,     1,     3
+};
+
+/* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
+   STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
+   means the default is an error.  */
+static const yytype_uint8 yydefact[] =
+{
+       0,     0,    12,    11,     0,     0,     2,    10,     0,     1,
+       0,     0,     0,     0,     0,     0,     0,    13,     0,     4,
+       5,     6,     7,     8,     9,     0,     3
+};
+
+/* YYDEFGOTO[NTERM-NUM].  */
+static const yytype_int8 yydefgoto[] =
+{
+      -1,     5,     6
+};
+
+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+   STATE-NUM.  */
+#define YYPACT_NINF -10
+static const yytype_int8 yypact[] =
+{
+      -9,    -9,   -10,   -10,    -9,     8,    36,   -10,    13,   -10,
+      -9,    -9,    -9,    -9,    -9,    -9,    -9,   -10,    26,    41,
+      45,    18,    -2,    14,   -10,    -9,    36
+};
+
+/* YYPGOTO[NTERM-NUM].  */
+static const yytype_int8 yypgoto[] =
+{
+     -10,   -10,    -1
+};
+
+/* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
+   positive, shift that token.  If negative, reduce the rule which
+   number is the opposite.  If zero, do what YYDEFACT says.
+   If YYTABLE_NINF, syntax error.  */
+#define YYTABLE_NINF -1
+static const yytype_uint8 yytable[] =
+{
+       7,     1,     2,     8,     3,     4,    15,    16,     9,    18,
+      19,    20,    21,    22,    23,    24,    10,    11,    12,    13,
+      14,    15,    16,    16,    26,    14,    15,    16,    17,    10,
+      11,    12,    13,    14,    15,    16,     0,     0,    25,    10,
+      11,    12,    13,    14,    15,    16,    12,    13,    14,    15,
+      16,    13,    14,    15,    16
+};
+
+static const yytype_int8 yycheck[] =
+{
+       1,    10,    11,     4,    13,    14,     8,     9,     0,    10,
+      11,    12,    13,    14,    15,    16,     3,     4,     5,     6,
+       7,     8,     9,     9,    25,     7,     8,     9,    15,     3,
+       4,     5,     6,     7,     8,     9,    -1,    -1,    12,     3,
+       4,     5,     6,     7,     8,     9,     5,     6,     7,     8,
+       9,     6,     7,     8,     9
+};
+
+/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+   symbol of state STATE-NUM.  */
+static const yytype_uint8 yystos[] =
+{
+       0,    10,    11,    13,    14,    17,    18,    18,    18,     0,
+       3,     4,     5,     6,     7,     8,     9,    15,    18,    18,
+      18,    18,    18,    18,    18,    12,    18
+};
+
+#define yyerrok		(yyerrstatus = 0)
+#define yyclearin	(yychar = YYEMPTY)
+#define YYEMPTY		(-2)
+#define YYEOF		0
+
+#define YYACCEPT	goto yyacceptlab
+#define YYABORT		goto yyabortlab
+#define YYERROR		goto yyerrorlab
+
+
+/* Like YYERROR except do call yyerror.  This remains here temporarily
+   to ease the transition to the new meaning of YYERROR, for GCC.
+   Once GCC version 2 has supplanted version 1, this can go.  */
+
+#define YYFAIL		goto yyerrlab
+
+#define YYRECOVERING()  (!!yyerrstatus)
+
+#define YYBACKUP(Token, Value)					\
+do								\
+  if (yychar == YYEMPTY && yylen == 1)				\
+    {								\
+      yychar = (Token);						\
+      yylval = (Value);						\
+      yytoken = YYTRANSLATE (yychar);				\
+      YYPOPSTACK (1);						\
+      goto yybackup;						\
+    }								\
+  else								\
+    {								\
+      yyerror (YY_("syntax error: cannot back up")); \
+      YYERROR;							\
+    }								\
+while (YYID (0))
+
+
+#define YYTERROR	1
+#define YYERRCODE	256
+
+
+/* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
+   If N is 0, then set CURRENT to the empty location which ends
+   the previous symbol: RHS[0] (always defined).  */
+
+#define YYRHSLOC(Rhs, K) ((Rhs)[K])
+#ifndef YYLLOC_DEFAULT
+# define YYLLOC_DEFAULT(Current, Rhs, N)				\
+    do									\
+      if (YYID (N))                                                    \
+	{								\
+	  (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;	\
+	  (Current).first_column = YYRHSLOC (Rhs, 1).first_column;	\
+	  (Current).last_line    = YYRHSLOC (Rhs, N).last_line;		\
+	  (Current).last_column  = YYRHSLOC (Rhs, N).last_column;	\
+	}								\
+      else								\
+	{								\
+	  (Current).first_line   = (Current).last_line   =		\
+	    YYRHSLOC (Rhs, 0).last_line;				\
+	  (Current).first_column = (Current).last_column =		\
+	    YYRHSLOC (Rhs, 0).last_column;				\
+	}								\
+    while (YYID (0))
+#endif
+
+
+/* YY_LOCATION_PRINT -- Print the location on the stream.
+   This macro was not mandated originally: define only if we know
+   we won't break user code: when these are the locations we know.  */
+
+#ifndef YY_LOCATION_PRINT
+# if YYLTYPE_IS_TRIVIAL
+#  define YY_LOCATION_PRINT(File, Loc)			\
+     fprintf (File, "%d.%d-%d.%d",			\
+	      (Loc).first_line, (Loc).first_column,	\
+	      (Loc).last_line,  (Loc).last_column)
+# else
+#  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+# endif
+#endif
+
+
+/* YYLEX -- calling `yylex' with the right arguments.  */
+
+#ifdef YYLEX_PARAM
+# define YYLEX yylex (&yylval, YYLEX_PARAM)
+#else
+# define YYLEX yylex (&yylval)
+#endif
+
+/* Enable debugging if requested.  */
+#if YYDEBUG
+
+# ifndef YYFPRINTF
+#  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
+#  define YYFPRINTF fprintf
+# endif
+
+# define YYDPRINTF(Args)			\
+do {						\
+  if (yydebug)					\
+    YYFPRINTF Args;				\
+} while (YYID (0))
+
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)			  \
+do {									  \
+  if (yydebug)								  \
+    {									  \
+      YYFPRINTF (stderr, "%s ", Title);					  \
+      yy_symbol_print (stderr,						  \
+		  Type, Value); \
+      YYFPRINTF (stderr, "\n");						  \
+    }									  \
+} while (YYID (0))
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+#else
+static void
+yy_symbol_value_print (yyoutput, yytype, yyvaluep)
+    FILE *yyoutput;
+    int yytype;
+    YYSTYPE const * const yyvaluep;
+#endif
+{
+  if (!yyvaluep)
+    return;
+# ifdef YYPRINT
+  if (yytype < YYNTOKENS)
+    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+# else
+  YYUSE (yyoutput);
+# endif
+  switch (yytype)
+    {
+      default:
+	break;
+    }
+}
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT.  |
+`--------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+#else
+static void
+yy_symbol_print (yyoutput, yytype, yyvaluep)
+    FILE *yyoutput;
+    int yytype;
+    YYSTYPE const * const yyvaluep;
+#endif
+{
+  if (yytype < YYNTOKENS)
+    YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+  else
+    YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+
+  yy_symbol_value_print (yyoutput, yytype, yyvaluep);
+  YYFPRINTF (yyoutput, ")");
+}
+
+/*------------------------------------------------------------------.
+| yy_stack_print -- Print the state stack from its BOTTOM up to its |
+| TOP (included).                                                   |
+`------------------------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
+#else
+static void
+yy_stack_print (yybottom, yytop)
+    yytype_int16 *yybottom;
+    yytype_int16 *yytop;
+#endif
+{
+  YYFPRINTF (stderr, "Stack now");
+  for (; yybottom <= yytop; yybottom++)
+    {
+      int yybot = *yybottom;
+      YYFPRINTF (stderr, " %d", yybot);
+    }
+  YYFPRINTF (stderr, "\n");
+}
+
+# define YY_STACK_PRINT(Bottom, Top)				\
+do {								\
+  if (yydebug)							\
+    yy_stack_print ((Bottom), (Top));				\
+} while (YYID (0))
+
+
+/*------------------------------------------------.
+| Report that the YYRULE is going to be reduced.  |
+`------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
+#else
+static void
+yy_reduce_print (yyvsp, yyrule)
+    YYSTYPE *yyvsp;
+    int yyrule;
+#endif
+{
+  int yynrhs = yyr2[yyrule];
+  int yyi;
+  unsigned long int yylno = yyrline[yyrule];
+  YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
+	     yyrule - 1, yylno);
+  /* The symbols being reduced.  */
+  for (yyi = 0; yyi < yynrhs; yyi++)
+    {
+      fprintf (stderr, "   $%d = ", yyi + 1);
+      yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
+		       &(yyvsp[(yyi + 1) - (yynrhs)])
+		       		       );
+      fprintf (stderr, "\n");
+    }
+}
+
+# define YY_REDUCE_PRINT(Rule)		\
+do {					\
+  if (yydebug)				\
+    yy_reduce_print (yyvsp, Rule); \
+} while (YYID (0))
+
+/* Nonzero means print parse trace.  It is left uninitialized so that
+   multiple parsers can coexist.  */
+int yydebug;
+#else /* !YYDEBUG */
+# define YYDPRINTF(Args)
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+# define YY_STACK_PRINT(Bottom, Top)
+# define YY_REDUCE_PRINT(Rule)
+#endif /* !YYDEBUG */
+
+
+/* YYINITDEPTH -- initial size of the parser's stacks.  */
+#ifndef	YYINITDEPTH
+# define YYINITDEPTH 200
+#endif
+
+/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
+   if the built-in stack extension method is used).
+
+   Do not make this value too large; the results are undefined if
+   YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
+   evaluated with infinite-precision integer arithmetic.  */
+
+#ifndef YYMAXDEPTH
+# define YYMAXDEPTH 10000
+#endif
+
+

+
+#if YYERROR_VERBOSE
+
+# ifndef yystrlen
+#  if defined __GLIBC__ && defined _STRING_H
+#   define yystrlen strlen
+#  else
+/* Return the length of YYSTR.  */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static YYSIZE_T
+yystrlen (const char *yystr)
+#else
+static YYSIZE_T
+yystrlen (yystr)
+    const char *yystr;
+#endif
+{
+  YYSIZE_T yylen;
+  for (yylen = 0; yystr[yylen]; yylen++)
+    continue;
+  return yylen;
+}
+#  endif
+# endif
+
+# ifndef yystpcpy
+#  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
+#   define yystpcpy stpcpy
+#  else
+/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+   YYDEST.  */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static char *
+yystpcpy (char *yydest, const char *yysrc)
+#else
+static char *
+yystpcpy (yydest, yysrc)
+    char *yydest;
+    const char *yysrc;
+#endif
+{
+  char *yyd = yydest;
+  const char *yys = yysrc;
+
+  while ((*yyd++ = *yys++) != '\0')
+    continue;
+
+  return yyd - 1;
+}
+#  endif
+# endif
+
+# ifndef yytnamerr
+/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
+   quotes and backslashes, so that it's suitable for yyerror.  The
+   heuristic is that double-quoting is unnecessary unless the string
+   contains an apostrophe, a comma, or backslash (other than
+   backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
+   null, do not copy; instead, return the length of what the result
+   would have been.  */
+static YYSIZE_T
+yytnamerr (char *yyres, const char *yystr)
+{
+  if (*yystr == '"')
+    {
+      YYSIZE_T yyn = 0;
+      char const *yyp = yystr;
+
+      for (;;)
+	switch (*++yyp)
+	  {
+	  case '\'':
+	  case ',':
+	    goto do_not_strip_quotes;
+
+	  case '\\':
+	    if (*++yyp != '\\')
+	      goto do_not_strip_quotes;
+	    /* Fall through.  */
+	  default:
+	    if (yyres)
+	      yyres[yyn] = *yyp;
+	    yyn++;
+	    break;
+
+	  case '"':
+	    if (yyres)
+	      yyres[yyn] = '\0';
+	    return yyn;
+	  }
+    do_not_strip_quotes: ;
+    }
+
+  if (! yyres)
+    return yystrlen (yystr);
+
+  return yystpcpy (yyres, yystr) - yyres;
+}
+# endif
+
+/* Copy into YYRESULT an error message about the unexpected token
+   YYCHAR while in state YYSTATE.  Return the number of bytes copied,
+   including the terminating null byte.  If YYRESULT is null, do not
+   copy anything; just return the number of bytes that would be
+   copied.  As a special case, return 0 if an ordinary "syntax error"
+   message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
+   size calculation.  */
+static YYSIZE_T
+yysyntax_error (char *yyresult, int yystate, int yychar)
+{
+  int yyn = yypact[yystate];
+
+  if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
+    return 0;
+  else
+    {
+      int yytype = YYTRANSLATE (yychar);
+      YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
+      YYSIZE_T yysize = yysize0;
+      YYSIZE_T yysize1;
+      int yysize_overflow = 0;
+      enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+      char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+      int yyx;
+
+# if 0
+      /* This is so xgettext sees the translatable formats that are
+	 constructed on the fly.  */
+      YY_("syntax error, unexpected %s");
+      YY_("syntax error, unexpected %s, expecting %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s or %s");
+      YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
+# endif
+      char *yyfmt;
+      char const *yyf;
+      static char const yyunexpected[] = "syntax error, unexpected %s";
+      static char const yyexpecting[] = ", expecting %s";
+      static char const yyor[] = " or %s";
+      char yyformat[sizeof yyunexpected
+		    + sizeof yyexpecting - 1
+		    + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
+		       * (sizeof yyor - 1))];
+      char const *yyprefix = yyexpecting;
+
+      /* Start YYX at -YYN if negative to avoid negative indexes in
+	 YYCHECK.  */
+      int yyxbegin = yyn < 0 ? -yyn : 0;
+
+      /* Stay within bounds of both yycheck and yytname.  */
+      int yychecklim = YYLAST - yyn + 1;
+      int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+      int yycount = 1;
+
+      yyarg[0] = yytname[yytype];
+      yyfmt = yystpcpy (yyformat, yyunexpected);
+
+      for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+	if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
+	  {
+	    if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+	      {
+		yycount = 1;
+		yysize = yysize0;
+		yyformat[sizeof yyunexpected - 1] = '\0';
+		break;
+	      }
+	    yyarg[yycount++] = yytname[yyx];
+	    yysize1 = yysize + yytnamerr (0, yytname[yyx]);
+	    yysize_overflow |= (yysize1 < yysize);
+	    yysize = yysize1;
+	    yyfmt = yystpcpy (yyfmt, yyprefix);
+	    yyprefix = yyor;
+	  }
+
+      yyf = YY_(yyformat);
+      yysize1 = yysize + yystrlen (yyf);
+      yysize_overflow |= (yysize1 < yysize);
+      yysize = yysize1;
+
+      if (yysize_overflow)
+	return YYSIZE_MAXIMUM;
+
+      if (yyresult)
+	{
+	  /* Avoid sprintf, as that infringes on the user's name space.
+	     Don't have undefined behavior even if the translation
+	     produced a string with the wrong number of "%s"s.  */
+	  char *yyp = yyresult;
+	  int yyi = 0;
+	  while ((*yyp = *yyf) != '\0')
+	    {
+	      if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
+		{
+		  yyp += yytnamerr (yyp, yyarg[yyi++]);
+		  yyf += 2;
+		}
+	      else
+		{
+		  yyp++;
+		  yyf++;
+		}
+	    }
+	}
+      return yysize;
+    }
+}
+#endif /* YYERROR_VERBOSE */
+

+
+/*-----------------------------------------------.
+| Release the memory associated to this symbol.  |
+`-----------------------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+static void
+yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
+#else
+static void
+yydestruct (yymsg, yytype, yyvaluep)
+    const char *yymsg;
+    int yytype;
+    YYSTYPE *yyvaluep;
+#endif
+{
+  YYUSE (yyvaluep);
+
+  if (!yymsg)
+    yymsg = "Deleting";
+  YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+
+  switch (yytype)
+    {
+
+      default:
+	break;
+    }
+}
+

+
+/* Prevent warnings from -Wmissing-prototypes.  */
+
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void *YYPARSE_PARAM);
+#else
+int yyparse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
+int yyparse (void);
+#else
+int yyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
+
+
+
+
+
+
+/*----------.
+| yyparse.  |
+`----------*/
+
+#ifdef YYPARSE_PARAM
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void *YYPARSE_PARAM)
+#else
+int
+yyparse (YYPARSE_PARAM)
+    void *YYPARSE_PARAM;
+#endif
+#else /* ! YYPARSE_PARAM */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+     || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void)
+#else
+int
+yyparse ()
+
+#endif
+#endif
+{
+  /* The lookahead symbol.  */
+int yychar;
+
+/* The semantic value of the lookahead symbol.  */
+YYSTYPE yylval;
+
+/* Number of syntax errors so far.  */
+int yynerrs;
+
+  int yystate;
+  int yyn;
+  int yyresult;
+  /* Number of tokens to shift before error messages enabled.  */
+  int yyerrstatus;
+  /* Lookahead token as an internal (translated) token number.  */
+  int yytoken = 0;
+#if YYERROR_VERBOSE
+  /* Buffer for error messages, and its allocated size.  */
+  char yymsgbuf[128];
+  char *yymsg = yymsgbuf;
+  YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
+#endif
+
+  /* Three stacks and their tools:
+     `yyss': related to states,
+     `yyvs': related to semantic values,
+     `yyls': related to locations.
+
+     Refer to the stacks thru separate pointers, to allow yyoverflow
+     to reallocate them elsewhere.  */
+
+  /* The state stack.  */
+  yytype_int16 yyssa[YYINITDEPTH];
+  yytype_int16 *yyss = yyssa;
+  yytype_int16 *yyssp;
+
+  /* The semantic value stack.  */
+  YYSTYPE yyvsa[YYINITDEPTH];
+  YYSTYPE *yyvs = yyvsa;
+  YYSTYPE *yyvsp;
+
+
+
+#define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
+
+  YYSIZE_T yystacksize = YYINITDEPTH;
+
+  /* The variables used to return semantic value and location from the
+     action routines.  */
+  YYSTYPE yyval;
+
+
+  /* The number of symbols on the RHS of the reduced rule.
+     Keep to zero when no symbol should be popped.  */
+  int yylen = 0;
+
+  YYDPRINTF ((stderr, "Starting parse\n"));
+
+  yystate = 0;
+  yyerrstatus = 0;
+  yynerrs = 0;
+  yychar = YYEMPTY;		/* Cause a token to be read.  */
+
+  /* Initialize stack pointers.
+     Waste one element of value and location stack
+     so that they stay on the same level as the state stack.
+     The wasted elements are never initialized.  */
+
+  yyssp = yyss;
+  yyvsp = yyvs;
+
+  goto yysetstate;
+
+/*------------------------------------------------------------.
+| yynewstate -- Push a new state, which is found in yystate.  |
+`------------------------------------------------------------*/
+ yynewstate:
+  /* In all cases, when you get here, the value and location stacks
+     have just been pushed.  So pushing a state here evens the stacks.  */
+  yyssp++;
+
+ yysetstate:
+  *yyssp = yystate;
+
+  if (yyss + yystacksize - 1 <= yyssp)
+    {
+      /* Get the current used size of the three stacks, in elements.  */
+      YYSIZE_T yysize = yyssp - yyss + 1;
+
+#ifdef yyoverflow
+      {
+	/* Give user a chance to reallocate the stack.  Use copies of
+	   these so that the &'s don't force the real ones into
+	   memory.  */
+	YYSTYPE *yyvs1 = yyvs;
+	yytype_int16 *yyss1 = yyss;
+
+
+	/* Each stack pointer address is followed by the size of the
+	   data in use in that stack, in bytes.  This used to be a
+	   conditional around just the two extra args, but that might
+	   be undefined if yyoverflow is a macro.  */
+	yyoverflow (YY_("memory exhausted"),
+		    &yyss1, yysize * sizeof (*yyssp),
+		    &yyvs1, yysize * sizeof (*yyvsp),
+
+		    &yystacksize);
+
+	yyss = yyss1;
+	yyvs = yyvs1;
+      }
+#else /* no yyoverflow */
+# ifndef YYSTACK_RELOCATE
+      goto yyexhaustedlab;
+# else
+      /* Extend the stack our own way.  */
+      if (YYMAXDEPTH <= yystacksize)
+	goto yyexhaustedlab;
+      yystacksize *= 2;
+      if (YYMAXDEPTH < yystacksize)
+	yystacksize = YYMAXDEPTH;
+
+      {
+	yytype_int16 *yyss1 = yyss;
+	union yyalloc *yyptr =
+	  (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+	if (! yyptr)
+	  goto yyexhaustedlab;
+	YYSTACK_RELOCATE (yyss);
+	YYSTACK_RELOCATE (yyvs);
+
+#  undef YYSTACK_RELOCATE
+	if (yyss1 != yyssa)
+	  YYSTACK_FREE (yyss1);
+      }
+# endif
+#endif /* no yyoverflow */
+
+      yyssp = yyss + yysize - 1;
+      yyvsp = yyvs + yysize - 1;
+
+
+      YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+		  (unsigned long int) yystacksize));
+
+      if (yyss + yystacksize - 1 <= yyssp)
+	YYABORT;
+    }
+
+  YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+
+  if (yystate == YYFINAL)
+    YYACCEPT;
+
+  goto yybackup;
+
+/*-----------.
+| yybackup.  |
+`-----------*/
+yybackup:
+
+  /* Do appropriate processing given the current state.  Read a
+     lookahead token if we need one and don't already have one.  */
+
+  /* First try to decide what to do without reference to lookahead token.  */
+  yyn = yypact[yystate];
+  if (yyn == YYPACT_NINF)
+    goto yydefault;
+
+  /* Not known => get a lookahead token if don't already have one.  */
+
+  /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
+  if (yychar == YYEMPTY)
+    {
+      YYDPRINTF ((stderr, "Reading a token: "));
+      yychar = YYLEX;
+    }
+
+  if (yychar <= YYEOF)
+    {
+      yychar = yytoken = YYEOF;
+      YYDPRINTF ((stderr, "Now at end of input.\n"));
+    }
+  else
+    {
+      yytoken = YYTRANSLATE (yychar);
+      YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+    }
+
+  /* If the proper action on seeing token YYTOKEN is to reduce or to
+     detect an error, take that action.  */
+  yyn += yytoken;
+  if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
+    goto yydefault;
+  yyn = yytable[yyn];
+  if (yyn <= 0)
+    {
+      if (yyn == 0 || yyn == YYTABLE_NINF)
+	goto yyerrlab;
+      yyn = -yyn;
+      goto yyreduce;
+    }
+
+  /* Count tokens shifted since error; after three, turn off error
+     status.  */
+  if (yyerrstatus)
+    yyerrstatus--;
+
+  /* Shift the lookahead token.  */
+  YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
+
+  /* Discard the shifted token.  */
+  yychar = YYEMPTY;
+
+  yystate = yyn;
+  *++yyvsp = yylval;
+
+  goto yynewstate;
+
+
+/*-----------------------------------------------------------.
+| yydefault -- do the default action for the current state.  |
+`-----------------------------------------------------------*/
+yydefault:
+  yyn = yydefact[yystate];
+  if (yyn == 0)
+    goto yyerrlab;
+  goto yyreduce;
+
+
+/*-----------------------------.
+| yyreduce -- Do a reduction.  |
+`-----------------------------*/
+yyreduce:
+  /* yyn is the number of a rule to reduce with.  */
+  yylen = yyr2[yyn];
+
+  /* If YYLEN is nonzero, implement the default value of the action:
+     `$$ = $1'.
+
+     Otherwise, the following line sets YYVAL to garbage.
+     This behavior is undocumented and Bison
+     users should not rely upon it.  Assigning to YYVAL
+     unconditionally makes the parser a bit smaller, and it avoids a
+     GCC warning that YYVAL may be used uninitialized.  */
+  yyval = yyvsp[1-yylen];
+
+
+  YY_REDUCE_PRINT (yyn);
+  switch (yyn)
+    {
+        case 2:
+/* Line 1269 of yacc.c.  */
+#line 155 "plural.y"
+    {
+	    if ((yyvsp[(1) - (1)].exp) == NULL)
+	      YYABORT;
+	    ((struct parse_args *) arg)->res = (yyvsp[(1) - (1)].exp);
+	  }
+    break;
+
+  case 3:
+/* Line 1269 of yacc.c.  */
+#line 163 "plural.y"
+    {
+	    (yyval.exp) = new_exp_3 (qmop, (yyvsp[(1) - (5)].exp), (yyvsp[(3) - (5)].exp), (yyvsp[(5) - (5)].exp));
+	  }
+    break;
+
+  case 4:
+/* Line 1269 of yacc.c.  */
+#line 167 "plural.y"
+    {
+	    (yyval.exp) = new_exp_2 (lor, (yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].exp));
+	  }
+    break;
+
+  case 5:
+/* Line 1269 of yacc.c.  */
+#line 171 "plural.y"
+    {
+	    (yyval.exp) = new_exp_2 (land, (yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].exp));
+	  }
+    break;
+
+  case 6:
+/* Line 1269 of yacc.c.  */
+#line 175 "plural.y"
+    {
+	    (yyval.exp) = new_exp_2 ((yyvsp[(2) - (3)].op), (yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].exp));
+	  }
+    break;
+
+  case 7:
+/* Line 1269 of yacc.c.  */
+#line 179 "plural.y"
+    {
+	    (yyval.exp) = new_exp_2 ((yyvsp[(2) - (3)].op), (yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].exp));
+	  }
+    break;
+
+  case 8:
+/* Line 1269 of yacc.c.  */
+#line 183 "plural.y"
+    {
+	    (yyval.exp) = new_exp_2 ((yyvsp[(2) - (3)].op), (yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].exp));
+	  }
+    break;
+
+  case 9:
+/* Line 1269 of yacc.c.  */
+#line 187 "plural.y"
+    {
+	    (yyval.exp) = new_exp_2 ((yyvsp[(2) - (3)].op), (yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].exp));
+	  }
+    break;
+
+  case 10:
+/* Line 1269 of yacc.c.  */
+#line 191 "plural.y"
+    {
+	    (yyval.exp) = new_exp_1 (lnot, (yyvsp[(2) - (2)].exp));
+	  }
+    break;
+
+  case 11:
+/* Line 1269 of yacc.c.  */
+#line 195 "plural.y"
+    {
+	    (yyval.exp) = new_exp_0 (var);
+	  }
+    break;
+
+  case 12:
+/* Line 1269 of yacc.c.  */
+#line 199 "plural.y"
+    {
+	    if (((yyval.exp) = new_exp_0 (num)) != NULL)
+	      (yyval.exp)->val.num = (yyvsp[(1) - (1)].num);
+	  }
+    break;
+
+  case 13:
+/* Line 1269 of yacc.c.  */
+#line 204 "plural.y"
+    {
+	    (yyval.exp) = (yyvsp[(2) - (3)].exp);
+	  }
+    break;
+
+
+/* Line 1269 of yacc.c.  */
+#line 1572 "plural.c"
+      default: break;
+    }
+  YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+
+  YYPOPSTACK (yylen);
+  yylen = 0;
+  YY_STACK_PRINT (yyss, yyssp);
+
+  *++yyvsp = yyval;
+
+
+  /* Now `shift' the result of the reduction.  Determine what state
+     that goes to, based on the state we popped back to and the rule
+     number reduced by.  */
+
+  yyn = yyr1[yyn];
+
+  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
+  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+    yystate = yytable[yystate];
+  else
+    yystate = yydefgoto[yyn - YYNTOKENS];
+
+  goto yynewstate;
+
+
+/*------------------------------------.
+| yyerrlab -- here on detecting error |
+`------------------------------------*/
+yyerrlab:
+  /* If not already recovering from an error, report this error.  */
+  if (!yyerrstatus)
+    {
+      ++yynerrs;
+#if ! YYERROR_VERBOSE
+      yyerror (YY_("syntax error"));
+#else
+      {
+	YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
+	if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
+	  {
+	    YYSIZE_T yyalloc = 2 * yysize;
+	    if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
+	      yyalloc = YYSTACK_ALLOC_MAXIMUM;
+	    if (yymsg != yymsgbuf)
+	      YYSTACK_FREE (yymsg);
+	    yymsg = (char *) YYSTACK_ALLOC (yyalloc);
+	    if (yymsg)
+	      yymsg_alloc = yyalloc;
+	    else
+	      {
+		yymsg = yymsgbuf;
+		yymsg_alloc = sizeof yymsgbuf;
+	      }
+	  }
+
+	if (0 < yysize && yysize <= yymsg_alloc)
+	  {
+	    (void) yysyntax_error (yymsg, yystate, yychar);
+	    yyerror (yymsg);
+	  }
+	else
+	  {
+	    yyerror (YY_("syntax error"));
+	    if (yysize != 0)
+	      goto yyexhaustedlab;
+	  }
+      }
+#endif
+    }
+
+
+
+  if (yyerrstatus == 3)
+    {
+      /* If just tried and failed to reuse lookahead token after an
+	 error, discard it.  */
+
+      if (yychar <= YYEOF)
+	{
+	  /* Return failure if at end of input.  */
+	  if (yychar == YYEOF)
+	    YYABORT;
+	}
+      else
+	{
+	  yydestruct ("Error: discarding",
+		      yytoken, &yylval);
+	  yychar = YYEMPTY;
+	}
+    }
+
+  /* Else will try to reuse lookahead token after shifting the error
+     token.  */
+  goto yyerrlab1;
+
+
+/*---------------------------------------------------.
+| yyerrorlab -- error raised explicitly by YYERROR.  |
+`---------------------------------------------------*/
+yyerrorlab:
+
+  /* Pacify compilers like GCC when the user code never invokes
+     YYERROR and the label yyerrorlab therefore never appears in user
+     code.  */
+  if (/*CONSTCOND*/ 0)
+     goto yyerrorlab;
+
+  /* Do not reclaim the symbols of the rule which action triggered
+     this YYERROR.  */
+  YYPOPSTACK (yylen);
+  yylen = 0;
+  YY_STACK_PRINT (yyss, yyssp);
+  yystate = *yyssp;
+  goto yyerrlab1;
+
+
+/*-------------------------------------------------------------.
+| yyerrlab1 -- common code for both syntax error and YYERROR.  |
+`-------------------------------------------------------------*/
+yyerrlab1:
+  yyerrstatus = 3;	/* Each real token shifted decrements this.  */
+
+  for (;;)
+    {
+      yyn = yypact[yystate];
+      if (yyn != YYPACT_NINF)
+	{
+	  yyn += YYTERROR;
+	  if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+	    {
+	      yyn = yytable[yyn];
+	      if (0 < yyn)
+		break;
+	    }
+	}
+
+      /* Pop the current state because it cannot handle the error token.  */
+      if (yyssp == yyss)
+	YYABORT;
+
+
+      yydestruct ("Error: popping",
+		  yystos[yystate], yyvsp);
+      YYPOPSTACK (1);
+      yystate = *yyssp;
+      YY_STACK_PRINT (yyss, yyssp);
+    }
+
+  *++yyvsp = yylval;
+
+
+  /* Shift the error token.  */
+  YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
+
+  yystate = yyn;
+  goto yynewstate;
+
+
+/*-------------------------------------.
+| yyacceptlab -- YYACCEPT comes here.  |
+`-------------------------------------*/
+yyacceptlab:
+  yyresult = 0;
+  goto yyreturn;
+
+/*-----------------------------------.
+| yyabortlab -- YYABORT comes here.  |
+`-----------------------------------*/
+yyabortlab:
+  yyresult = 1;
+  goto yyreturn;
+
+#ifndef yyoverflow
+/*-------------------------------------------------.
+| yyexhaustedlab -- memory exhaustion comes here.  |
+`-------------------------------------------------*/
+yyexhaustedlab:
+  yyerror (YY_("memory exhausted"));
+  yyresult = 2;
+  /* Fall through.  */
+#endif
+
+yyreturn:
+  if (yychar != YYEMPTY)
+     yydestruct ("Cleanup: discarding lookahead",
+		 yytoken, &yylval);
+  /* Do not reclaim the symbols of the rule which action triggered
+     this YYABORT or YYACCEPT.  */
+  YYPOPSTACK (yylen);
+  YY_STACK_PRINT (yyss, yyssp);
+  while (yyssp != yyss)
+    {
+      yydestruct ("Cleanup: popping",
+		  yystos[*yyssp], yyvsp);
+      YYPOPSTACK (1);
+    }
+#ifndef yyoverflow
+  if (yyss != yyssa)
+    YYSTACK_FREE (yyss);
+#endif
+#if YYERROR_VERBOSE
+  if (yymsg != yymsgbuf)
+    YYSTACK_FREE (yymsg);
+#endif
+  /* Make sure YYID is used.  */
+  return YYID (yyresult);
+}
+
+
+/* Line 1486 of yacc.c.  */
+#line 209 "plural.y"
+
+
+void
+internal_function
+FREE_EXPRESSION (struct expression *exp)
+{
+  if (exp == NULL)
+    return;
+
+  /* Handle the recursive case.  */
+  switch (exp->nargs)
+    {
+    case 3:
+      FREE_EXPRESSION (exp->val.args[2]);
+      /* FALLTHROUGH */
+    case 2:
+      FREE_EXPRESSION (exp->val.args[1]);
+      /* FALLTHROUGH */
+    case 1:
+      FREE_EXPRESSION (exp->val.args[0]);
+      /* FALLTHROUGH */
+    default:
+      break;
+    }
+
+  free (exp);
+}
+
+
+static int
+yylex (YYSTYPE *lval, const char **pexp)
+{
+  const char *exp = *pexp;
+  int result;
+
+  while (1)
+    {
+      if (exp[0] == '\0')
+	{
+	  *pexp = exp;
+	  return YYEOF;
+	}
+
+      if (exp[0] != ' ' && exp[0] != '\t')
+	break;
+
+      ++exp;
+    }
+
+  result = *exp++;
+  switch (result)
+    {
+    case '0': case '1': case '2': case '3': case '4':
+    case '5': case '6': case '7': case '8': case '9':
+      {
+	unsigned long int n = result - '0';
+	while (exp[0] >= '0' && exp[0] <= '9')
+	  {
+	    n *= 10;
+	    n += exp[0] - '0';
+	    ++exp;
+	  }
+	lval->num = n;
+	result = NUMBER;
+      }
+      break;
+
+    case '=':
+      if (exp[0] == '=')
+	{
+	  ++exp;
+	  lval->op = equal;
+	  result = EQUOP2;
+	}
+      else
+	result = YYERRCODE;
+      break;
+
+    case '!':
+      if (exp[0] == '=')
+	{
+	  ++exp;
+	  lval->op = not_equal;
+	  result = EQUOP2;
+	}
+      break;
+
+    case '&':
+    case '|':
+      if (exp[0] == result)
+	++exp;
+      else
+	result = YYERRCODE;
+      break;
+
+    case '<':
+      if (exp[0] == '=')
+	{
+	  ++exp;
+	  lval->op = less_or_equal;
+	}
+      else
+	lval->op = less_than;
+      result = CMPOP2;
+      break;
+
+    case '>':
+      if (exp[0] == '=')
+	{
+	  ++exp;
+	  lval->op = greater_or_equal;
+	}
+      else
+	lval->op = greater_than;
+      result = CMPOP2;
+      break;
+
+    case '*':
+      lval->op = mult;
+      result = MULOP2;
+      break;
+
+    case '/':
+      lval->op = divide;
+      result = MULOP2;
+      break;
+
+    case '%':
+      lval->op = module;
+      result = MULOP2;
+      break;
+
+    case '+':
+      lval->op = plus;
+      result = ADDOP2;
+      break;
+
+    case '-':
+      lval->op = minus;
+      result = ADDOP2;
+      break;
+
+    case 'n':
+    case '?':
+    case ':':
+    case '(':
+    case ')':
+      /* Nothing, just return the character.  */
+      break;
+
+    case ';':
+    case '\n':
+    case '\0':
+      /* Be safe and let the user call this function again.  */
+      --exp;
+      result = YYEOF;
+      break;
+
+    default:
+      result = YYERRCODE;
+#if YYDEBUG != 0
+      --exp;
+#endif
+      break;
+    }
+
+  *pexp = exp;
+
+  return result;
+}
+
+
+static void
+yyerror (const char *str)
+{
+  /* Do nothing.  We don't print error messages here.  */
+}
+
diff --git a/intl/plural.y b/intl/plural.y
new file mode 100644
index 0000000..ec36a09
--- /dev/null
+++ b/intl/plural.y
@@ -0,0 +1,385 @@
+%{
+/* Expression parsing for plural form selection.
+   Copyright (C) 2000-2001, 2003, 2005-2006 Free Software Foundation, Inc.
+   Written by Ulrich Drepper <drepper at cygnus.com>, 2000.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+/* For bison < 2.0, the bison generated parser uses alloca.  AIX 3 forces us
+   to put this declaration at the beginning of the file.  The declaration in
+   bison's skeleton file comes too late.  This must come before <config.h>
+   because <config.h> may include arbitrary system headers.
+   This can go away once the AM_INTL_SUBDIR macro requires bison >= 2.0.  */
+#if defined _AIX && !defined __GNUC__
+ #pragma alloca
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
+#include "plural-exp.h"
+
+/* The main function generated by the parser is called __gettextparse,
+   but we want it to be called PLURAL_PARSE.  */
+#ifndef _LIBC
+# define __gettextparse PLURAL_PARSE
+#endif
+
+#define YYLEX_PARAM	&((struct parse_args *) arg)->cp
+#define YYPARSE_PARAM	arg
+%}
+%pure_parser
+%expect 7
+
+%union {
+  unsigned long int num;
+  enum expression_operator op;
+  struct expression *exp;
+}
+
+%{
+/* Prototypes for local functions.  */
+static int yylex (YYSTYPE *lval, const char **pexp);
+static void yyerror (const char *str);
+
+/* Allocation of expressions.  */
+
+static struct expression *
+new_exp (int nargs, enum expression_operator op,
+	 struct expression * const *args)
+{
+  int i;
+  struct expression *newp;
+
+  /* If any of the argument could not be malloc'ed, just return NULL.  */
+  for (i = nargs - 1; i >= 0; i--)
+    if (args[i] == NULL)
+      goto fail;
+
+  /* Allocate a new expression.  */
+  newp = (struct expression *) malloc (sizeof (*newp));
+  if (newp != NULL)
+    {
+      newp->nargs = nargs;
+      newp->operation = op;
+      for (i = nargs - 1; i >= 0; i--)
+	newp->val.args[i] = args[i];
+      return newp;
+    }
+
+ fail:
+  for (i = nargs - 1; i >= 0; i--)
+    FREE_EXPRESSION (args[i]);
+
+  return NULL;
+}
+
+static inline struct expression *
+new_exp_0 (enum expression_operator op)
+{
+  return new_exp (0, op, NULL);
+}
+
+static inline struct expression *
+new_exp_1 (enum expression_operator op, struct expression *right)
+{
+  struct expression *args[1];
+
+  args[0] = right;
+  return new_exp (1, op, args);
+}
+
+static struct expression *
+new_exp_2 (enum expression_operator op, struct expression *left,
+	   struct expression *right)
+{
+  struct expression *args[2];
+
+  args[0] = left;
+  args[1] = right;
+  return new_exp (2, op, args);
+}
+
+static inline struct expression *
+new_exp_3 (enum expression_operator op, struct expression *bexp,
+	   struct expression *tbranch, struct expression *fbranch)
+{
+  struct expression *args[3];
+
+  args[0] = bexp;
+  args[1] = tbranch;
+  args[2] = fbranch;
+  return new_exp (3, op, args);
+}
+
+%}
+
+/* This declares that all operators have the same associativity and the
+   precedence order as in C.  See [Harbison, Steele: C, A Reference Manual].
+   There is no unary minus and no bitwise operators.
+   Operators with the same syntactic behaviour have been merged into a single
+   token, to save space in the array generated by bison.  */
+%right '?'		/*   ?		*/
+%left '|'		/*   ||		*/
+%left '&'		/*   &&		*/
+%left EQUOP2		/*   == !=	*/
+%left CMPOP2		/*   < > <= >=	*/
+%left ADDOP2		/*   + -	*/
+%left MULOP2		/*   * / %	*/
+%right '!'		/*   !		*/
+
+%token <op> EQUOP2 CMPOP2 ADDOP2 MULOP2
+%token <num> NUMBER
+%type <exp> exp
+
+%%
+
+start:	  exp
+	  {
+	    if ($1 == NULL)
+	      YYABORT;
+	    ((struct parse_args *) arg)->res = $1;
+	  }
+	;
+
+exp:	  exp '?' exp ':' exp
+	  {
+	    $$ = new_exp_3 (qmop, $1, $3, $5);
+	  }
+	| exp '|' exp
+	  {
+	    $$ = new_exp_2 (lor, $1, $3);
+	  }
+	| exp '&' exp
+	  {
+	    $$ = new_exp_2 (land, $1, $3);
+	  }
+	| exp EQUOP2 exp
+	  {
+	    $$ = new_exp_2 ($2, $1, $3);
+	  }
+	| exp CMPOP2 exp
+	  {
+	    $$ = new_exp_2 ($2, $1, $3);
+	  }
+	| exp ADDOP2 exp
+	  {
+	    $$ = new_exp_2 ($2, $1, $3);
+	  }
+	| exp MULOP2 exp
+	  {
+	    $$ = new_exp_2 ($2, $1, $3);
+	  }
+	| '!' exp
+	  {
+	    $$ = new_exp_1 (lnot, $2);
+	  }
+	| 'n'
+	  {
+	    $$ = new_exp_0 (var);
+	  }
+	| NUMBER
+	  {
+	    if (($$ = new_exp_0 (num)) != NULL)
+	      $$->val.num = $1;
+	  }
+	| '(' exp ')'
+	  {
+	    $$ = $2;
+	  }
+	;
+
+%%
+
+void
+internal_function
+FREE_EXPRESSION (struct expression *exp)
+{
+  if (exp == NULL)
+    return;
+
+  /* Handle the recursive case.  */
+  switch (exp->nargs)
+    {
+    case 3:
+      FREE_EXPRESSION (exp->val.args[2]);
+      /* FALLTHROUGH */
+    case 2:
+      FREE_EXPRESSION (exp->val.args[1]);
+      /* FALLTHROUGH */
+    case 1:
+      FREE_EXPRESSION (exp->val.args[0]);
+      /* FALLTHROUGH */
+    default:
+      break;
+    }
+
+  free (exp);
+}
+
+
+static int
+yylex (YYSTYPE *lval, const char **pexp)
+{
+  const char *exp = *pexp;
+  int result;
+
+  while (1)
+    {
+      if (exp[0] == '\0')
+	{
+	  *pexp = exp;
+	  return YYEOF;
+	}
+
+      if (exp[0] != ' ' && exp[0] != '\t')
+	break;
+
+      ++exp;
+    }
+
+  result = *exp++;
+  switch (result)
+    {
+    case '0': case '1': case '2': case '3': case '4':
+    case '5': case '6': case '7': case '8': case '9':
+      {
+	unsigned long int n = result - '0';
+	while (exp[0] >= '0' && exp[0] <= '9')
+	  {
+	    n *= 10;
+	    n += exp[0] - '0';
+	    ++exp;
+	  }
+	lval->num = n;
+	result = NUMBER;
+      }
+      break;
+
+    case '=':
+      if (exp[0] == '=')
+	{
+	  ++exp;
+	  lval->op = equal;
+	  result = EQUOP2;
+	}
+      else
+	result = YYERRCODE;
+      break;
+
+    case '!':
+      if (exp[0] == '=')
+	{
+	  ++exp;
+	  lval->op = not_equal;
+	  result = EQUOP2;
+	}
+      break;
+
+    case '&':
+    case '|':
+      if (exp[0] == result)
+	++exp;
+      else
+	result = YYERRCODE;
+      break;
+
+    case '<':
+      if (exp[0] == '=')
+	{
+	  ++exp;
+	  lval->op = less_or_equal;
+	}
+      else
+	lval->op = less_than;
+      result = CMPOP2;
+      break;
+
+    case '>':
+      if (exp[0] == '=')
+	{
+	  ++exp;
+	  lval->op = greater_or_equal;
+	}
+      else
+	lval->op = greater_than;
+      result = CMPOP2;
+      break;
+
+    case '*':
+      lval->op = mult;
+      result = MULOP2;
+      break;
+
+    case '/':
+      lval->op = divide;
+      result = MULOP2;
+      break;
+
+    case '%':
+      lval->op = module;
+      result = MULOP2;
+      break;
+
+    case '+':
+      lval->op = plus;
+      result = ADDOP2;
+      break;
+
+    case '-':
+      lval->op = minus;
+      result = ADDOP2;
+      break;
+
+    case 'n':
+    case '?':
+    case ':':
+    case '(':
+    case ')':
+      /* Nothing, just return the character.  */
+      break;
+
+    case ';':
+    case '\n':
+    case '\0':
+      /* Be safe and let the user call this function again.  */
+      --exp;
+      result = YYEOF;
+      break;
+
+    default:
+      result = YYERRCODE;
+#if YYDEBUG != 0
+      --exp;
+#endif
+      break;
+    }
+
+  *pexp = exp;
+
+  return result;
+}
+
+
+static void
+yyerror (const char *str)
+{
+  /* Do nothing.  We don't print error messages here.  */
+}
diff --git a/intl/printf-args.c b/intl/printf-args.c
new file mode 100644
index 0000000..cbd437d
--- /dev/null
+++ b/intl/printf-args.c
@@ -0,0 +1,188 @@
+/* Decomposed printf argument list.
+   Copyright (C) 1999, 2002-2003, 2005-2007 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+/* This file can be parametrized with the following macros:
+     ENABLE_UNISTDIO    Set to 1 to enable the unistdio extensions.
+     PRINTF_FETCHARGS   Name of the function to be defined.
+     STATIC             Set to 'static' to declare the function static.  */
+
+#ifndef PRINTF_FETCHARGS
+# include <config.h>
+#endif
+
+/* Specification.  */
+#ifndef PRINTF_FETCHARGS
+# include "printf-args.h"
+#endif
+
+#ifdef STATIC
+STATIC
+#endif
+int
+PRINTF_FETCHARGS (va_list args, arguments *a)
+{
+  size_t i;
+  argument *ap;
+
+  for (i = 0, ap = &a->arg[0]; i < a->count; i++, ap++)
+    switch (ap->type)
+      {
+      case TYPE_SCHAR:
+	ap->a.a_schar = va_arg (args, /*signed char*/ int);
+	break;
+      case TYPE_UCHAR:
+	ap->a.a_uchar = va_arg (args, /*unsigned char*/ int);
+	break;
+      case TYPE_SHORT:
+	ap->a.a_short = va_arg (args, /*short*/ int);
+	break;
+      case TYPE_USHORT:
+	ap->a.a_ushort = va_arg (args, /*unsigned short*/ int);
+	break;
+      case TYPE_INT:
+	ap->a.a_int = va_arg (args, int);
+	break;
+      case TYPE_UINT:
+	ap->a.a_uint = va_arg (args, unsigned int);
+	break;
+      case TYPE_LONGINT:
+	ap->a.a_longint = va_arg (args, long int);
+	break;
+      case TYPE_ULONGINT:
+	ap->a.a_ulongint = va_arg (args, unsigned long int);
+	break;
+#if HAVE_LONG_LONG_INT
+      case TYPE_LONGLONGINT:
+	ap->a.a_longlongint = va_arg (args, long long int);
+	break;
+      case TYPE_ULONGLONGINT:
+	ap->a.a_ulonglongint = va_arg (args, unsigned long long int);
+	break;
+#endif
+      case TYPE_DOUBLE:
+	ap->a.a_double = va_arg (args, double);
+	break;
+      case TYPE_LONGDOUBLE:
+	ap->a.a_longdouble = va_arg (args, long double);
+	break;
+      case TYPE_CHAR:
+	ap->a.a_char = va_arg (args, int);
+	break;
+#if HAVE_WINT_T
+      case TYPE_WIDE_CHAR:
+	/* Although ISO C 99 7.24.1.(2) says that wint_t is "unchanged by
+	   default argument promotions", this is not the case in mingw32,
+	   where wint_t is 'unsigned short'.  */
+	ap->a.a_wide_char =
+	  (sizeof (wint_t) < sizeof (int)
+	   ? va_arg (args, int)
+	   : va_arg (args, wint_t));
+	break;
+#endif
+      case TYPE_STRING:
+	ap->a.a_string = va_arg (args, const char *);
+	/* A null pointer is an invalid argument for "%s", but in practice
+	   it occurs quite frequently in printf statements that produce
+	   debug output.  Use a fallback in this case.  */
+	if (ap->a.a_string == NULL)
+	  ap->a.a_string = "(NULL)";
+	break;
+#if HAVE_WCHAR_T
+      case TYPE_WIDE_STRING:
+	ap->a.a_wide_string = va_arg (args, const wchar_t *);
+	/* A null pointer is an invalid argument for "%ls", but in practice
+	   it occurs quite frequently in printf statements that produce
+	   debug output.  Use a fallback in this case.  */
+	if (ap->a.a_wide_string == NULL)
+	  {
+	    static const wchar_t wide_null_string[] =
+	      {
+		(wchar_t)'(',
+		(wchar_t)'N', (wchar_t)'U', (wchar_t)'L', (wchar_t)'L',
+		(wchar_t)')',
+		(wchar_t)0
+	      };
+	    ap->a.a_wide_string = wide_null_string;
+	  }
+	break;
+#endif
+      case TYPE_POINTER:
+	ap->a.a_pointer = va_arg (args, void *);
+	break;
+      case TYPE_COUNT_SCHAR_POINTER:
+	ap->a.a_count_schar_pointer = va_arg (args, signed char *);
+	break;
+      case TYPE_COUNT_SHORT_POINTER:
+	ap->a.a_count_short_pointer = va_arg (args, short *);
+	break;
+      case TYPE_COUNT_INT_POINTER:
+	ap->a.a_count_int_pointer = va_arg (args, int *);
+	break;
+      case TYPE_COUNT_LONGINT_POINTER:
+	ap->a.a_count_longint_pointer = va_arg (args, long int *);
+	break;
+#if HAVE_LONG_LONG_INT
+      case TYPE_COUNT_LONGLONGINT_POINTER:
+	ap->a.a_count_longlongint_pointer = va_arg (args, long long int *);
+	break;
+#endif
+#if ENABLE_UNISTDIO
+      /* The unistdio extensions.  */
+      case TYPE_U8_STRING:
+	ap->a.a_u8_string = va_arg (args, const uint8_t *);
+	/* A null pointer is an invalid argument for "%U", but in practice
+	   it occurs quite frequently in printf statements that produce
+	   debug output.  Use a fallback in this case.  */
+	if (ap->a.a_u8_string == NULL)
+	  {
+	    static const uint8_t u8_null_string[] =
+	      { '(', 'N', 'U', 'L', 'L', ')', 0 };
+	    ap->a.a_u8_string = u8_null_string;
+	  }
+	break;
+      case TYPE_U16_STRING:
+	ap->a.a_u16_string = va_arg (args, const uint16_t *);
+	/* A null pointer is an invalid argument for "%lU", but in practice
+	   it occurs quite frequently in printf statements that produce
+	   debug output.  Use a fallback in this case.  */
+	if (ap->a.a_u16_string == NULL)
+	  {
+	    static const uint16_t u16_null_string[] =
+	      { '(', 'N', 'U', 'L', 'L', ')', 0 };
+	    ap->a.a_u16_string = u16_null_string;
+	  }
+	break;
+      case TYPE_U32_STRING:
+	ap->a.a_u32_string = va_arg (args, const uint32_t *);
+	/* A null pointer is an invalid argument for "%llU", but in practice
+	   it occurs quite frequently in printf statements that produce
+	   debug output.  Use a fallback in this case.  */
+	if (ap->a.a_u32_string == NULL)
+	  {
+	    static const uint32_t u32_null_string[] =
+	      { '(', 'N', 'U', 'L', 'L', ')', 0 };
+	    ap->a.a_u32_string = u32_null_string;
+	  }
+	break;
+#endif
+      default:
+	/* Unknown type.  */
+	return -1;
+      }
+  return 0;
+}
diff --git a/intl/printf-args.h b/intl/printf-args.h
new file mode 100644
index 0000000..cf89c3e
--- /dev/null
+++ b/intl/printf-args.h
@@ -0,0 +1,155 @@
+/* Decomposed printf argument list.
+   Copyright (C) 1999, 2002-2003, 2006-2007 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+#ifndef _PRINTF_ARGS_H
+#define _PRINTF_ARGS_H
+
+/* This file can be parametrized with the following macros:
+     ENABLE_UNISTDIO    Set to 1 to enable the unistdio extensions.
+     PRINTF_FETCHARGS   Name of the function to be declared.
+     STATIC             Set to 'static' to declare the function static.  */
+
+/* Default parameters.  */
+#ifndef PRINTF_FETCHARGS
+# define PRINTF_FETCHARGS printf_fetchargs
+#endif
+
+/* Get size_t.  */
+#include <stddef.h>
+
+/* Get wchar_t.  */
+#if HAVE_WCHAR_T
+# include <stddef.h>
+#endif
+
+/* Get wint_t.  */
+#if HAVE_WINT_T
+# include <wchar.h>
+#endif
+
+/* Get va_list.  */
+#include <stdarg.h>
+
+
+/* Argument types */
+typedef enum
+{
+  TYPE_NONE,
+  TYPE_SCHAR,
+  TYPE_UCHAR,
+  TYPE_SHORT,
+  TYPE_USHORT,
+  TYPE_INT,
+  TYPE_UINT,
+  TYPE_LONGINT,
+  TYPE_ULONGINT,
+#if HAVE_LONG_LONG_INT
+  TYPE_LONGLONGINT,
+  TYPE_ULONGLONGINT,
+#endif
+  TYPE_DOUBLE,
+  TYPE_LONGDOUBLE,
+  TYPE_CHAR,
+#if HAVE_WINT_T
+  TYPE_WIDE_CHAR,
+#endif
+  TYPE_STRING,
+#if HAVE_WCHAR_T
+  TYPE_WIDE_STRING,
+#endif
+  TYPE_POINTER,
+  TYPE_COUNT_SCHAR_POINTER,
+  TYPE_COUNT_SHORT_POINTER,
+  TYPE_COUNT_INT_POINTER,
+  TYPE_COUNT_LONGINT_POINTER
+#if HAVE_LONG_LONG_INT
+, TYPE_COUNT_LONGLONGINT_POINTER
+#endif
+#if ENABLE_UNISTDIO
+  /* The unistdio extensions.  */
+, TYPE_U8_STRING
+, TYPE_U16_STRING
+, TYPE_U32_STRING
+#endif
+} arg_type;
+
+/* Polymorphic argument */
+typedef struct
+{
+  arg_type type;
+  union
+  {
+    signed char			a_schar;
+    unsigned char		a_uchar;
+    short			a_short;
+    unsigned short		a_ushort;
+    int				a_int;
+    unsigned int		a_uint;
+    long int			a_longint;
+    unsigned long int		a_ulongint;
+#if HAVE_LONG_LONG_INT
+    long long int		a_longlongint;
+    unsigned long long int	a_ulonglongint;
+#endif
+    float			a_float;
+    double			a_double;
+    long double			a_longdouble;
+    int				a_char;
+#if HAVE_WINT_T
+    wint_t			a_wide_char;
+#endif
+    const char*			a_string;
+#if HAVE_WCHAR_T
+    const wchar_t*		a_wide_string;
+#endif
+    void*			a_pointer;
+    signed char *		a_count_schar_pointer;
+    short *			a_count_short_pointer;
+    int *			a_count_int_pointer;
+    long int *			a_count_longint_pointer;
+#if HAVE_LONG_LONG_INT
+    long long int *		a_count_longlongint_pointer;
+#endif
+#if ENABLE_UNISTDIO
+    /* The unistdio extensions.  */
+    const uint8_t *		a_u8_string;
+    const uint16_t *		a_u16_string;
+    const uint32_t *		a_u32_string;
+#endif
+  }
+  a;
+}
+argument;
+
+typedef struct
+{
+  size_t count;
+  argument *arg;
+}
+arguments;
+
+
+/* Fetch the arguments, putting them into a. */
+#ifdef STATIC
+STATIC
+#else
+extern
+#endif
+int PRINTF_FETCHARGS (va_list args, arguments *a);
+
+#endif /* _PRINTF_ARGS_H */
diff --git a/intl/printf-parse.c b/intl/printf-parse.c
new file mode 100644
index 0000000..6ed1cc3
--- /dev/null
+++ b/intl/printf-parse.c
@@ -0,0 +1,590 @@
+/* Formatted output to strings.
+   Copyright (C) 1999-2000, 2002-2003, 2006-2007 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+/* This file can be parametrized with the following macros:
+     CHAR_T             The element type of the format string.
+     CHAR_T_ONLY_ASCII  Set to 1 to enable verification that all characters
+                        in the format string are ASCII.
+     DIRECTIVE          Structure denoting a format directive.
+                        Depends on CHAR_T.
+     DIRECTIVES         Structure denoting the set of format directives of a
+                        format string.  Depends on CHAR_T.
+     PRINTF_PARSE       Function that parses a format string.
+                        Depends on CHAR_T.
+     STATIC             Set to 'static' to declare the function static.
+     ENABLE_UNISTDIO    Set to 1 to enable the unistdio extensions.  */
+
+#ifndef PRINTF_PARSE
+# include <config.h>
+#endif
+
+/* Specification.  */
+#ifndef PRINTF_PARSE
+# include "printf-parse.h"
+#endif
+
+/* Default parameters.  */
+#ifndef PRINTF_PARSE
+# define PRINTF_PARSE printf_parse
+# define CHAR_T char
+# define DIRECTIVE char_directive
+# define DIRECTIVES char_directives
+#endif
+
+/* Get size_t, NULL.  */
+#include <stddef.h>
+
+/* Get intmax_t.  */
+#if defined IN_LIBINTL || defined IN_LIBASPRINTF
+# if HAVE_STDINT_H_WITH_UINTMAX
+#  include <stdint.h>
+# endif
+# if HAVE_INTTYPES_H_WITH_UINTMAX
+#  include <inttypes.h>
+# endif
+#else
+# include <stdint.h>
+#endif
+
+/* malloc(), realloc(), free().  */
+#include <stdlib.h>
+
+/* errno.  */
+#include <errno.h>
+
+/* Checked size_t computations.  */
+#include "xsize.h"
+
+#if CHAR_T_ONLY_ASCII
+/* c_isascii().  */
+# include "c-ctype.h"
+#endif
+
+#ifdef STATIC
+STATIC
+#endif
+int
+PRINTF_PARSE (const CHAR_T *format, DIRECTIVES *d, arguments *a)
+{
+  const CHAR_T *cp = format;		/* pointer into format */
+  size_t arg_posn = 0;		/* number of regular arguments consumed */
+  size_t d_allocated;			/* allocated elements of d->dir */
+  size_t a_allocated;			/* allocated elements of a->arg */
+  size_t max_width_length = 0;
+  size_t max_precision_length = 0;
+
+  d->count = 0;
+  d_allocated = 1;
+  d->dir = (DIRECTIVE *) malloc (d_allocated * sizeof (DIRECTIVE));
+  if (d->dir == NULL)
+    /* Out of memory.  */
+    goto out_of_memory_1;
+
+  a->count = 0;
+  a_allocated = 0;
+  a->arg = NULL;
+
+#define REGISTER_ARG(_index_,_type_) \
+  {									\
+    size_t n = (_index_);						\
+    if (n >= a_allocated)						\
+      {									\
+	size_t memory_size;						\
+	argument *memory;						\
+									\
+	a_allocated = xtimes (a_allocated, 2);				\
+	if (a_allocated <= n)						\
+	  a_allocated = xsum (n, 1);					\
+	memory_size = xtimes (a_allocated, sizeof (argument));		\
+	if (size_overflow_p (memory_size))				\
+	  /* Overflow, would lead to out of memory.  */			\
+	  goto out_of_memory;						\
+	memory = (argument *) (a->arg					\
+			       ? realloc (a->arg, memory_size)		\
+			       : malloc (memory_size));			\
+	if (memory == NULL)						\
+	  /* Out of memory.  */						\
+	  goto out_of_memory;						\
+	a->arg = memory;						\
+      }									\
+    while (a->count <= n)						\
+      a->arg[a->count++].type = TYPE_NONE;				\
+    if (a->arg[n].type == TYPE_NONE)					\
+      a->arg[n].type = (_type_);					\
+    else if (a->arg[n].type != (_type_))				\
+      /* Ambiguous type for positional argument.  */			\
+      goto error;							\
+  }
+
+  while (*cp != '\0')
+    {
+      CHAR_T c = *cp++;
+      if (c == '%')
+	{
+	  size_t arg_index = ARG_NONE;
+	  DIRECTIVE *dp = &d->dir[d->count]; /* pointer to next directive */
+
+	  /* Initialize the next directive.  */
+	  dp->dir_start = cp - 1;
+	  dp->flags = 0;
+	  dp->width_start = NULL;
+	  dp->width_end = NULL;
+	  dp->width_arg_index = ARG_NONE;
+	  dp->precision_start = NULL;
+	  dp->precision_end = NULL;
+	  dp->precision_arg_index = ARG_NONE;
+	  dp->arg_index = ARG_NONE;
+
+	  /* Test for positional argument.  */
+	  if (*cp >= '0' && *cp <= '9')
+	    {
+	      const CHAR_T *np;
+
+	      for (np = cp; *np >= '0' && *np <= '9'; np++)
+		;
+	      if (*np == '$')
+		{
+		  size_t n = 0;
+
+		  for (np = cp; *np >= '0' && *np <= '9'; np++)
+		    n = xsum (xtimes (n, 10), *np - '0');
+		  if (n == 0)
+		    /* Positional argument 0.  */
+		    goto error;
+		  if (size_overflow_p (n))
+		    /* n too large, would lead to out of memory later.  */
+		    goto error;
+		  arg_index = n - 1;
+		  cp = np + 1;
+		}
+	    }
+
+	  /* Read the flags.  */
+	  for (;;)
+	    {
+	      if (*cp == '\'')
+		{
+		  dp->flags |= FLAG_GROUP;
+		  cp++;
+		}
+	      else if (*cp == '-')
+		{
+		  dp->flags |= FLAG_LEFT;
+		  cp++;
+		}
+	      else if (*cp == '+')
+		{
+		  dp->flags |= FLAG_SHOWSIGN;
+		  cp++;
+		}
+	      else if (*cp == ' ')
+		{
+		  dp->flags |= FLAG_SPACE;
+		  cp++;
+		}
+	      else if (*cp == '#')
+		{
+		  dp->flags |= FLAG_ALT;
+		  cp++;
+		}
+	      else if (*cp == '0')
+		{
+		  dp->flags |= FLAG_ZERO;
+		  cp++;
+		}
+	      else
+		break;
+	    }
+
+	  /* Parse the field width.  */
+	  if (*cp == '*')
+	    {
+	      dp->width_start = cp;
+	      cp++;
+	      dp->width_end = cp;
+	      if (max_width_length < 1)
+		max_width_length = 1;
+
+	      /* Test for positional argument.  */
+	      if (*cp >= '0' && *cp <= '9')
+		{
+		  const CHAR_T *np;
+
+		  for (np = cp; *np >= '0' && *np <= '9'; np++)
+		    ;
+		  if (*np == '$')
+		    {
+		      size_t n = 0;
+
+		      for (np = cp; *np >= '0' && *np <= '9'; np++)
+			n = xsum (xtimes (n, 10), *np - '0');
+		      if (n == 0)
+			/* Positional argument 0.  */
+			goto error;
+		      if (size_overflow_p (n))
+			/* n too large, would lead to out of memory later.  */
+			goto error;
+		      dp->width_arg_index = n - 1;
+		      cp = np + 1;
+		    }
+		}
+	      if (dp->width_arg_index == ARG_NONE)
+		{
+		  dp->width_arg_index = arg_posn++;
+		  if (dp->width_arg_index == ARG_NONE)
+		    /* arg_posn wrapped around.  */
+		    goto error;
+		}
+	      REGISTER_ARG (dp->width_arg_index, TYPE_INT);
+	    }
+	  else if (*cp >= '0' && *cp <= '9')
+	    {
+	      size_t width_length;
+
+	      dp->width_start = cp;
+	      for (; *cp >= '0' && *cp <= '9'; cp++)
+		;
+	      dp->width_end = cp;
+	      width_length = dp->width_end - dp->width_start;
+	      if (max_width_length < width_length)
+		max_width_length = width_length;
+	    }
+
+	  /* Parse the precision.  */
+	  if (*cp == '.')
+	    {
+	      cp++;
+	      if (*cp == '*')
+		{
+		  dp->precision_start = cp - 1;
+		  cp++;
+		  dp->precision_end = cp;
+		  if (max_precision_length < 2)
+		    max_precision_length = 2;
+
+		  /* Test for positional argument.  */
+		  if (*cp >= '0' && *cp <= '9')
+		    {
+		      const CHAR_T *np;
+
+		      for (np = cp; *np >= '0' && *np <= '9'; np++)
+			;
+		      if (*np == '$')
+			{
+			  size_t n = 0;
+
+			  for (np = cp; *np >= '0' && *np <= '9'; np++)
+			    n = xsum (xtimes (n, 10), *np - '0');
+			  if (n == 0)
+			    /* Positional argument 0.  */
+			    goto error;
+			  if (size_overflow_p (n))
+			    /* n too large, would lead to out of memory
+			       later.  */
+			    goto error;
+			  dp->precision_arg_index = n - 1;
+			  cp = np + 1;
+			}
+		    }
+		  if (dp->precision_arg_index == ARG_NONE)
+		    {
+		      dp->precision_arg_index = arg_posn++;
+		      if (dp->precision_arg_index == ARG_NONE)
+			/* arg_posn wrapped around.  */
+			goto error;
+		    }
+		  REGISTER_ARG (dp->precision_arg_index, TYPE_INT);
+		}
+	      else
+		{
+		  size_t precision_length;
+
+		  dp->precision_start = cp - 1;
+		  for (; *cp >= '0' && *cp <= '9'; cp++)
+		    ;
+		  dp->precision_end = cp;
+		  precision_length = dp->precision_end - dp->precision_start;
+		  if (max_precision_length < precision_length)
+		    max_precision_length = precision_length;
+		}
+	    }
+
+	  {
+	    arg_type type;
+
+	    /* Parse argument type/size specifiers.  */
+	    {
+	      int flags = 0;
+
+	      for (;;)
+		{
+		  if (*cp == 'h')
+		    {
+		      flags |= (1 << (flags & 1));
+		      cp++;
+		    }
+		  else if (*cp == 'L')
+		    {
+		      flags |= 4;
+		      cp++;
+		    }
+		  else if (*cp == 'l')
+		    {
+		      flags += 8;
+		      cp++;
+		    }
+		  else if (*cp == 'j')
+		    {
+		      if (sizeof (intmax_t) > sizeof (long))
+			{
+			  /* intmax_t = long long */
+			  flags += 16;
+			}
+		      else if (sizeof (intmax_t) > sizeof (int))
+			{
+			  /* intmax_t = long */
+			  flags += 8;
+			}
+		      cp++;
+		    }
+		  else if (*cp == 'z' || *cp == 'Z')
+		    {
+		      /* 'z' is standardized in ISO C 99, but glibc uses 'Z'
+			 because the warning facility in gcc-2.95.2 understands
+			 only 'Z' (see gcc-2.95.2/gcc/c-common.c:1784).  */
+		      if (sizeof (size_t) > sizeof (long))
+			{
+			  /* size_t = long long */
+			  flags += 16;
+			}
+		      else if (sizeof (size_t) > sizeof (int))
+			{
+			  /* size_t = long */
+			  flags += 8;
+			}
+		      cp++;
+		    }
+		  else if (*cp == 't')
+		    {
+		      if (sizeof (ptrdiff_t) > sizeof (long))
+			{
+			  /* ptrdiff_t = long long */
+			  flags += 16;
+			}
+		      else if (sizeof (ptrdiff_t) > sizeof (int))
+			{
+			  /* ptrdiff_t = long */
+			  flags += 8;
+			}
+		      cp++;
+		    }
+		  else
+		    break;
+		}
+
+	      /* Read the conversion character.  */
+	      c = *cp++;
+	      switch (c)
+		{
+		case 'd': case 'i':
+#if HAVE_LONG_LONG_INT
+		  /* If 'long long' exists and is larger than 'long':  */
+		  if (flags >= 16 || (flags & 4))
+		    type = TYPE_LONGLONGINT;
+		  else
+#endif
+		  /* If 'long long' exists and is the same as 'long', we parse
+		     "lld" into TYPE_LONGINT.  */
+		  if (flags >= 8)
+		    type = TYPE_LONGINT;
+		  else if (flags & 2)
+		    type = TYPE_SCHAR;
+		  else if (flags & 1)
+		    type = TYPE_SHORT;
+		  else
+		    type = TYPE_INT;
+		  break;
+		case 'o': case 'u': case 'x': case 'X':
+#if HAVE_LONG_LONG_INT
+		  /* If 'long long' exists and is larger than 'long':  */
+		  if (flags >= 16 || (flags & 4))
+		    type = TYPE_ULONGLONGINT;
+		  else
+#endif
+		  /* If 'unsigned long long' exists and is the same as
+		     'unsigned long', we parse "llu" into TYPE_ULONGINT.  */
+		  if (flags >= 8)
+		    type = TYPE_ULONGINT;
+		  else if (flags & 2)
+		    type = TYPE_UCHAR;
+		  else if (flags & 1)
+		    type = TYPE_USHORT;
+		  else
+		    type = TYPE_UINT;
+		  break;
+		case 'f': case 'F': case 'e': case 'E': case 'g': case 'G':
+		case 'a': case 'A':
+		  if (flags >= 16 || (flags & 4))
+		    type = TYPE_LONGDOUBLE;
+		  else
+		    type = TYPE_DOUBLE;
+		  break;
+		case 'c':
+		  if (flags >= 8)
+#if HAVE_WINT_T
+		    type = TYPE_WIDE_CHAR;
+#else
+		    goto error;
+#endif
+		  else
+		    type = TYPE_CHAR;
+		  break;
+#if HAVE_WINT_T
+		case 'C':
+		  type = TYPE_WIDE_CHAR;
+		  c = 'c';
+		  break;
+#endif
+		case 's':
+		  if (flags >= 8)
+#if HAVE_WCHAR_T
+		    type = TYPE_WIDE_STRING;
+#else
+		    goto error;
+#endif
+		  else
+		    type = TYPE_STRING;
+		  break;
+#if HAVE_WCHAR_T
+		case 'S':
+		  type = TYPE_WIDE_STRING;
+		  c = 's';
+		  break;
+#endif
+		case 'p':
+		  type = TYPE_POINTER;
+		  break;
+		case 'n':
+#if HAVE_LONG_LONG_INT
+		  /* If 'long long' exists and is larger than 'long':  */
+		  if (flags >= 16 || (flags & 4))
+		    type = TYPE_COUNT_LONGLONGINT_POINTER;
+		  else
+#endif
+		  /* If 'long long' exists and is the same as 'long', we parse
+		     "lln" into TYPE_COUNT_LONGINT_POINTER.  */
+		  if (flags >= 8)
+		    type = TYPE_COUNT_LONGINT_POINTER;
+		  else if (flags & 2)
+		    type = TYPE_COUNT_SCHAR_POINTER;
+		  else if (flags & 1)
+		    type = TYPE_COUNT_SHORT_POINTER;
+		  else
+		    type = TYPE_COUNT_INT_POINTER;
+		  break;
+#if ENABLE_UNISTDIO
+		/* The unistdio extensions.  */
+		case 'U':
+		  if (flags >= 16)
+		    type = TYPE_U32_STRING;
+		  else if (flags >= 8)
+		    type = TYPE_U16_STRING;
+		  else
+		    type = TYPE_U8_STRING;
+		  break;
+#endif
+		case '%':
+		  type = TYPE_NONE;
+		  break;
+		default:
+		  /* Unknown conversion character.  */
+		  goto error;
+		}
+	    }
+
+	    if (type != TYPE_NONE)
+	      {
+		dp->arg_index = arg_index;
+		if (dp->arg_index == ARG_NONE)
+		  {
+		    dp->arg_index = arg_posn++;
+		    if (dp->arg_index == ARG_NONE)
+		      /* arg_posn wrapped around.  */
+		      goto error;
+		  }
+		REGISTER_ARG (dp->arg_index, type);
+	      }
+	    dp->conversion = c;
+	    dp->dir_end = cp;
+	  }
+
+	  d->count++;
+	  if (d->count >= d_allocated)
+	    {
+	      size_t memory_size;
+	      DIRECTIVE *memory;
+
+	      d_allocated = xtimes (d_allocated, 2);
+	      memory_size = xtimes (d_allocated, sizeof (DIRECTIVE));
+	      if (size_overflow_p (memory_size))
+		/* Overflow, would lead to out of memory.  */
+		goto out_of_memory;
+	      memory = (DIRECTIVE *) realloc (d->dir, memory_size);
+	      if (memory == NULL)
+		/* Out of memory.  */
+		goto out_of_memory;
+	      d->dir = memory;
+	    }
+	}
+#if CHAR_T_ONLY_ASCII
+      else if (!c_isascii (c))
+	{
+	  /* Non-ASCII character.  Not supported.  */
+	  goto error;
+	}
+#endif
+    }
+  d->dir[d->count].dir_start = cp;
+
+  d->max_width_length = max_width_length;
+  d->max_precision_length = max_precision_length;
+  return 0;
+
+error:
+  if (a->arg)
+    free (a->arg);
+  if (d->dir)
+    free (d->dir);
+  errno = EINVAL;
+  return -1;
+
+out_of_memory:
+  if (a->arg)
+    free (a->arg);
+  if (d->dir)
+    free (d->dir);
+out_of_memory_1:
+  errno = ENOMEM;
+  return -1;
+}
+
+#undef PRINTF_PARSE
+#undef DIRECTIVES
+#undef DIRECTIVE
+#undef CHAR_T_ONLY_ASCII
+#undef CHAR_T
diff --git a/intl/printf-parse.h b/intl/printf-parse.h
new file mode 100644
index 0000000..e785338
--- /dev/null
+++ b/intl/printf-parse.h
@@ -0,0 +1,75 @@
+/* Parse printf format string.
+   Copyright (C) 1999, 2002-2003 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+#ifndef _PRINTF_PARSE_H
+#define _PRINTF_PARSE_H
+
+#include "printf-args.h"
+
+
+/* Flags */
+#define FLAG_GROUP	 1	/* ' flag */
+#define FLAG_LEFT	 2	/* - flag */
+#define FLAG_SHOWSIGN	 4	/* + flag */
+#define FLAG_SPACE	 8	/* space flag */
+#define FLAG_ALT	16	/* # flag */
+#define FLAG_ZERO	32
+
+/* arg_index value indicating that no argument is consumed.  */
+#define ARG_NONE	(~(size_t)0)
+
+/* A parsed directive.  */
+typedef struct
+{
+  const char* dir_start;
+  const char* dir_end;
+  int flags;
+  const char* width_start;
+  const char* width_end;
+  size_t width_arg_index;
+  const char* precision_start;
+  const char* precision_end;
+  size_t precision_arg_index;
+  char conversion; /* d i o u x X f e E g G c s p n U % but not C S */
+  size_t arg_index;
+}
+char_directive;
+
+/* A parsed format string.  */
+typedef struct
+{
+  size_t count;
+  char_directive *dir;
+  size_t max_width_length;
+  size_t max_precision_length;
+}
+char_directives;
+
+
+/* Parses the format string.  Fills in the number N of directives, and fills
+   in directives[0], ..., directives[N-1], and sets directives[N].dir_start
+   to the end of the format string.  Also fills in the arg_type fields of the
+   arguments and the needed count of arguments.  */
+#ifdef STATIC
+STATIC
+#else
+extern
+#endif
+int printf_parse (const char *format, char_directives *d, arguments *a);
+
+#endif /* _PRINTF_PARSE_H */
diff --git a/intl/printf.c b/intl/printf.c
new file mode 100644
index 0000000..0088e51
--- /dev/null
+++ b/intl/printf.c
@@ -0,0 +1,427 @@
+/* Formatted output to strings, using POSIX/XSI format strings with positions.
+   Copyright (C) 2003, 2006-2007 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno at clisp.org>, 2003.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#ifdef __GNUC__
+# define alloca __builtin_alloca
+# define HAVE_ALLOCA 1
+#else
+# ifdef _MSC_VER
+#  include <malloc.h>
+#  define alloca _alloca
+# else
+#  if defined HAVE_ALLOCA_H || defined _LIBC
+#   include <alloca.h>
+#  else
+#   ifdef _AIX
+ #pragma alloca
+#   else
+#    ifndef alloca
+char *alloca ();
+#    endif
+#   endif
+#  endif
+# endif
+#endif
+
+#include <stdio.h>
+
+#if !HAVE_POSIX_PRINTF
+
+#include <errno.h>
+#include <limits.h>
+#include <stdlib.h>
+#include <string.h>
+
+/* Some systems, like OSF/1 4.0 and Woe32, don't have EOVERFLOW.  */
+#ifndef EOVERFLOW
+# define EOVERFLOW E2BIG
+#endif
+
+/* When building a DLL, we must export some functions.  Note that because
+   the functions are only defined for binary backward compatibility, we
+   don't need to use __declspec(dllimport) in any case.  */
+#if defined _MSC_VER && BUILDING_DLL
+# define DLL_EXPORTED __declspec(dllexport)
+#else
+# define DLL_EXPORTED
+#endif
+
+#define STATIC static
+
+/* This needs to be consistent with libgnuintl.h.in.  */
+#if defined __NetBSD__ || defined __BEOS__ || defined __CYGWIN__ || defined __MINGW32__
+/* Don't break __attribute__((format(printf,M,N))).
+   This redefinition is only possible because the libc in NetBSD, Cygwin,
+   mingw does not have a function __printf__.  */
+# define libintl_printf __printf__
+#endif
+
+/* Define auxiliary functions declared in "printf-args.h".  */
+#include "printf-args.c"
+
+/* Define auxiliary functions declared in "printf-parse.h".  */
+#include "printf-parse.c"
+
+/* Define functions declared in "vasnprintf.h".  */
+#define vasnprintf libintl_vasnprintf
+#include "vasnprintf.c"
+#if 0 /* not needed */
+#define asnprintf libintl_asnprintf
+#include "asnprintf.c"
+#endif
+
+DLL_EXPORTED
+int
+libintl_vfprintf (FILE *stream, const char *format, va_list args)
+{
+  if (strchr (format, '$') == NULL)
+    return vfprintf (stream, format, args);
+  else
+    {
+      size_t length;
+      char *result = libintl_vasnprintf (NULL, &length, format, args);
+      int retval = -1;
+      if (result != NULL)
+	{
+	  size_t written = fwrite (result, 1, length, stream);
+	  free (result);
+	  if (written == length)
+	    {
+	      if (length > INT_MAX)
+		errno = EOVERFLOW;
+	      else
+		retval = length;
+	    }
+	}
+      return retval;
+    }
+}
+
+DLL_EXPORTED
+int
+libintl_fprintf (FILE *stream, const char *format, ...)
+{
+  va_list args;
+  int retval;
+
+  va_start (args, format);
+  retval = libintl_vfprintf (stream, format, args);
+  va_end (args);
+  return retval;
+}
+
+DLL_EXPORTED
+int
+libintl_vprintf (const char *format, va_list args)
+{
+  return libintl_vfprintf (stdout, format, args);
+}
+
+DLL_EXPORTED
+int
+libintl_printf (const char *format, ...)
+{
+  va_list args;
+  int retval;
+
+  va_start (args, format);
+  retval = libintl_vprintf (format, args);
+  va_end (args);
+  return retval;
+}
+
+DLL_EXPORTED
+int
+libintl_vsprintf (char *resultbuf, const char *format, va_list args)
+{
+  if (strchr (format, '$') == NULL)
+    return vsprintf (resultbuf, format, args);
+  else
+    {
+      size_t length = (size_t) ~0 / (4 * sizeof (char));
+      char *result = libintl_vasnprintf (resultbuf, &length, format, args);
+      if (result != resultbuf)
+	{
+	  free (result);
+	  return -1;
+	}
+      if (length > INT_MAX)
+	{
+	  errno = EOVERFLOW;
+	  return -1;
+	}
+      else
+	return length;
+    }
+}
+
+DLL_EXPORTED
+int
+libintl_sprintf (char *resultbuf, const char *format, ...)
+{
+  va_list args;
+  int retval;
+
+  va_start (args, format);
+  retval = libintl_vsprintf (resultbuf, format, args);
+  va_end (args);
+  return retval;
+}
+
+#if HAVE_SNPRINTF
+
+# if HAVE_DECL__SNPRINTF
+   /* Windows.  */
+#  define system_vsnprintf _vsnprintf
+# else
+   /* Unix.  */
+#  define system_vsnprintf vsnprintf
+# endif
+
+DLL_EXPORTED
+int
+libintl_vsnprintf (char *resultbuf, size_t length, const char *format, va_list args)
+{
+  if (strchr (format, '$') == NULL)
+    return system_vsnprintf (resultbuf, length, format, args);
+  else
+    {
+      size_t maxlength = length;
+      char *result = libintl_vasnprintf (resultbuf, &length, format, args);
+      if (result != resultbuf)
+	{
+	  if (maxlength > 0)
+	    {
+	      size_t pruned_length =
+		(length < maxlength ? length : maxlength - 1);
+	      memcpy (resultbuf, result, pruned_length);
+	      resultbuf[pruned_length] = '\0';
+	    }
+	  free (result);
+	}
+      if (length > INT_MAX)
+	{
+	  errno = EOVERFLOW;
+	  return -1;
+	}
+      else
+	return length;
+    }
+}
+
+DLL_EXPORTED
+int
+libintl_snprintf (char *resultbuf, size_t length, const char *format, ...)
+{
+  va_list args;
+  int retval;
+
+  va_start (args, format);
+  retval = libintl_vsnprintf (resultbuf, length, format, args);
+  va_end (args);
+  return retval;
+}
+
+#endif
+
+#if HAVE_ASPRINTF
+
+DLL_EXPORTED
+int
+libintl_vasprintf (char **resultp, const char *format, va_list args)
+{
+  size_t length;
+  char *result = libintl_vasnprintf (NULL, &length, format, args);
+  if (result == NULL)
+    return -1;
+  if (length > INT_MAX)
+    {
+      free (result);
+      errno = EOVERFLOW;
+      return -1;
+    }
+  *resultp = result;
+  return length;
+}
+
+DLL_EXPORTED
+int
+libintl_asprintf (char **resultp, const char *format, ...)
+{
+  va_list args;
+  int retval;
+
+  va_start (args, format);
+  retval = libintl_vasprintf (resultp, format, args);
+  va_end (args);
+  return retval;
+}
+
+#endif
+
+#if HAVE_FWPRINTF
+
+#include <wchar.h>
+
+#define WIDE_CHAR_VERSION 1
+
+#include "wprintf-parse.h"
+/* Define auxiliary functions declared in "wprintf-parse.h".  */
+#define CHAR_T wchar_t
+#define DIRECTIVE wchar_t_directive
+#define DIRECTIVES wchar_t_directives
+#define PRINTF_PARSE wprintf_parse
+#include "printf-parse.c"
+
+/* Define functions declared in "vasnprintf.h".  */
+#define vasnwprintf libintl_vasnwprintf
+#include "vasnprintf.c"
+#if 0 /* not needed */
+#define asnwprintf libintl_asnwprintf
+#include "asnprintf.c"
+#endif
+
+# if HAVE_DECL__SNWPRINTF
+   /* Windows.  */
+#  define system_vswprintf _vsnwprintf
+# else
+   /* Unix.  */
+#  define system_vswprintf vswprintf
+# endif
+
+DLL_EXPORTED
+int
+libintl_vfwprintf (FILE *stream, const wchar_t *format, va_list args)
+{
+  if (wcschr (format, '$') == NULL)
+    return vfwprintf (stream, format, args);
+  else
+    {
+      size_t length;
+      wchar_t *result = libintl_vasnwprintf (NULL, &length, format, args);
+      int retval = -1;
+      if (result != NULL)
+	{
+	  size_t i;
+	  for (i = 0; i < length; i++)
+	    if (fputwc (result[i], stream) == WEOF)
+	      break;
+	  free (result);
+	  if (i == length)
+	    {
+	      if (length > INT_MAX)
+		errno = EOVERFLOW;
+	      else
+		retval = length;
+	    }
+	}
+      return retval;
+    }
+}
+
+DLL_EXPORTED
+int
+libintl_fwprintf (FILE *stream, const wchar_t *format, ...)
+{
+  va_list args;
+  int retval;
+
+  va_start (args, format);
+  retval = libintl_vfwprintf (stream, format, args);
+  va_end (args);
+  return retval;
+}
+
+DLL_EXPORTED
+int
+libintl_vwprintf (const wchar_t *format, va_list args)
+{
+  return libintl_vfwprintf (stdout, format, args);
+}
+
+DLL_EXPORTED
+int
+libintl_wprintf (const wchar_t *format, ...)
+{
+  va_list args;
+  int retval;
+
+  va_start (args, format);
+  retval = libintl_vwprintf (format, args);
+  va_end (args);
+  return retval;
+}
+
+DLL_EXPORTED
+int
+libintl_vswprintf (wchar_t *resultbuf, size_t length, const wchar_t *format, va_list args)
+{
+  if (wcschr (format, '$') == NULL)
+    return system_vswprintf (resultbuf, length, format, args);
+  else
+    {
+      size_t maxlength = length;
+      wchar_t *result = libintl_vasnwprintf (resultbuf, &length, format, args);
+      if (result != resultbuf)
+	{
+	  if (maxlength > 0)
+	    {
+	      size_t pruned_length =
+		(length < maxlength ? length : maxlength - 1);
+	      memcpy (resultbuf, result, pruned_length * sizeof (wchar_t));
+	      resultbuf[pruned_length] = 0;
+	    }
+	  free (result);
+	  /* Unlike vsnprintf, which has to return the number of character that
+	     would have been produced if the resultbuf had been sufficiently
+	     large, the vswprintf function has to return a negative value if
+	     the resultbuf was not sufficiently large.  */
+	  if (length >= maxlength)
+	    return -1;
+	}
+      if (length > INT_MAX)
+	{
+	  errno = EOVERFLOW;
+	  return -1;
+	}
+      else
+	return length;
+    }
+}
+
+DLL_EXPORTED
+int
+libintl_swprintf (wchar_t *resultbuf, size_t length, const wchar_t *format, ...)
+{
+  va_list args;
+  int retval;
+
+  va_start (args, format);
+  retval = libintl_vswprintf (resultbuf, length, format, args);
+  va_end (args);
+  return retval;
+}
+
+#endif
+
+#endif
diff --git a/intl/ref-add.sin b/intl/ref-add.sin
new file mode 100644
index 0000000..3678c28
--- /dev/null
+++ b/intl/ref-add.sin
@@ -0,0 +1,31 @@
+# Add this package to a list of references stored in a text file.
+#
+#   Copyright (C) 2000 Free Software Foundation, Inc.
+#
+#   This program is free software; you can redistribute it and/or modify it
+#   under the terms of the GNU Library General Public License as published
+#   by the Free Software Foundation; either version 2, 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
+#   Library General Public License for more details.
+#
+#   You should have received a copy of the GNU Library General Public
+#   License along with this program; if not, write to the Free Software
+#   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+#   USA.
+#
+# Written by Bruno Haible <haible at clisp.cons.org>.
+#
+/^# Packages using this file: / {
+  s/# Packages using this file://
+  ta
+  :a
+  s/ @PACKAGE@ / @PACKAGE@ /
+  tb
+  s/ $/ @PACKAGE@ /
+  :b
+  s/^/# Packages using this file:/
+}
diff --git a/intl/ref-del.sin b/intl/ref-del.sin
new file mode 100644
index 0000000..0c12d8e
--- /dev/null
+++ b/intl/ref-del.sin
@@ -0,0 +1,26 @@
+# Remove this package from a list of references stored in a text file.
+#
+#   Copyright (C) 2000 Free Software Foundation, Inc.
+#
+#   This program is free software; you can redistribute it and/or modify it
+#   under the terms of the GNU Library General Public License as published
+#   by the Free Software Foundation; either version 2, 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
+#   Library General Public License for more details.
+#
+#   You should have received a copy of the GNU Library General Public
+#   License along with this program; if not, write to the Free Software
+#   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+#   USA.
+#
+# Written by Bruno Haible <haible at clisp.cons.org>.
+#
+/^# Packages using this file: / {
+  s/# Packages using this file://
+  s/ @PACKAGE@ / /
+  s/^/# Packages using this file:/
+}
diff --git a/intl/relocatable.c b/intl/relocatable.c
new file mode 100644
index 0000000..5e1dde6
--- /dev/null
+++ b/intl/relocatable.c
@@ -0,0 +1,468 @@
+/* Provide relocatable packages.
+   Copyright (C) 2003-2006 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno at clisp.org>, 2003.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+
+/* Tell glibc's <stdio.h> to provide a prototype for getline().
+   This must come before <config.h> because <config.h> may include
+   <features.h>, and once <features.h> has been included, it's too late.  */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE	1
+#endif
+
+#include <config.h>
+
+/* Specification.  */
+#include "relocatable.h"
+
+#if ENABLE_RELOCATABLE
+
+#include <stddef.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifdef NO_XMALLOC
+# define xmalloc malloc
+#else
+# include "xalloc.h"
+#endif
+
+#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+#endif
+
+#if DEPENDS_ON_LIBCHARSET
+# include <libcharset.h>
+#endif
+#if DEPENDS_ON_LIBICONV && HAVE_ICONV
+# include <iconv.h>
+#endif
+#if DEPENDS_ON_LIBINTL && ENABLE_NLS
+# include <libintl.h>
+#endif
+
+/* Faked cheap 'bool'.  */
+#undef bool
+#undef false
+#undef true
+#define bool int
+#define false 0
+#define true 1
+
+/* Pathname support.
+   ISSLASH(C)           tests whether C is a directory separator character.
+   IS_PATH_WITH_DIR(P)  tests whether P contains a directory specification.
+ */
+#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__
+  /* Win32, Cygwin, OS/2, DOS */
+# define ISSLASH(C) ((C) == '/' || (C) == '\\')
+# define HAS_DEVICE(P) \
+    ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \
+     && (P)[1] == ':')
+# define IS_PATH_WITH_DIR(P) \
+    (strchr (P, '/') != NULL || strchr (P, '\\') != NULL || HAS_DEVICE (P))
+# define FILE_SYSTEM_PREFIX_LEN(P) (HAS_DEVICE (P) ? 2 : 0)
+#else
+  /* Unix */
+# define ISSLASH(C) ((C) == '/')
+# define IS_PATH_WITH_DIR(P) (strchr (P, '/') != NULL)
+# define FILE_SYSTEM_PREFIX_LEN(P) 0
+#endif
+
+/* Original installation prefix.  */
+static char *orig_prefix;
+static size_t orig_prefix_len;
+/* Current installation prefix.  */
+static char *curr_prefix;
+static size_t curr_prefix_len;
+/* These prefixes do not end in a slash.  Anything that will be concatenated
+   to them must start with a slash.  */
+
+/* Sets the original and the current installation prefix of this module.
+   Relocation simply replaces a pathname starting with the original prefix
+   by the corresponding pathname with the current prefix instead.  Both
+   prefixes should be directory names without trailing slash (i.e. use ""
+   instead of "/").  */
+static void
+set_this_relocation_prefix (const char *orig_prefix_arg,
+			    const char *curr_prefix_arg)
+{
+  if (orig_prefix_arg != NULL && curr_prefix_arg != NULL
+      /* Optimization: if orig_prefix and curr_prefix are equal, the
+	 relocation is a nop.  */
+      && strcmp (orig_prefix_arg, curr_prefix_arg) != 0)
+    {
+      /* Duplicate the argument strings.  */
+      char *memory;
+
+      orig_prefix_len = strlen (orig_prefix_arg);
+      curr_prefix_len = strlen (curr_prefix_arg);
+      memory = (char *) xmalloc (orig_prefix_len + 1 + curr_prefix_len + 1);
+#ifdef NO_XMALLOC
+      if (memory != NULL)
+#endif
+	{
+	  memcpy (memory, orig_prefix_arg, orig_prefix_len + 1);
+	  orig_prefix = memory;
+	  memory += orig_prefix_len + 1;
+	  memcpy (memory, curr_prefix_arg, curr_prefix_len + 1);
+	  curr_prefix = memory;
+	  return;
+	}
+    }
+  orig_prefix = NULL;
+  curr_prefix = NULL;
+  /* Don't worry about wasted memory here - this function is usually only
+     called once.  */
+}
+
+/* Sets the original and the current installation prefix of the package.
+   Relocation simply replaces a pathname starting with the original prefix
+   by the corresponding pathname with the current prefix instead.  Both
+   prefixes should be directory names without trailing slash (i.e. use ""
+   instead of "/").  */
+void
+set_relocation_prefix (const char *orig_prefix_arg, const char *curr_prefix_arg)
+{
+  set_this_relocation_prefix (orig_prefix_arg, curr_prefix_arg);
+
+  /* Now notify all dependent libraries.  */
+#if DEPENDS_ON_LIBCHARSET
+  libcharset_set_relocation_prefix (orig_prefix_arg, curr_prefix_arg);
+#endif
+#if DEPENDS_ON_LIBICONV && HAVE_ICONV && _LIBICONV_VERSION >= 0x0109
+  libiconv_set_relocation_prefix (orig_prefix_arg, curr_prefix_arg);
+#endif
+#if DEPENDS_ON_LIBINTL && ENABLE_NLS && defined libintl_set_relocation_prefix
+  libintl_set_relocation_prefix (orig_prefix_arg, curr_prefix_arg);
+#endif
+}
+
+#if !defined IN_LIBRARY || (defined PIC && defined INSTALLDIR)
+
+/* Convenience function:
+   Computes the current installation prefix, based on the original
+   installation prefix, the original installation directory of a particular
+   file, and the current pathname of this file.  Returns NULL upon failure.  */
+#ifdef IN_LIBRARY
+#define compute_curr_prefix local_compute_curr_prefix
+static
+#endif
+const char *
+compute_curr_prefix (const char *orig_installprefix,
+		     const char *orig_installdir,
+		     const char *curr_pathname)
+{
+  const char *curr_installdir;
+  const char *rel_installdir;
+
+  if (curr_pathname == NULL)
+    return NULL;
+
+  /* Determine the relative installation directory, relative to the prefix.
+     This is simply the difference between orig_installprefix and
+     orig_installdir.  */
+  if (strncmp (orig_installprefix, orig_installdir, strlen (orig_installprefix))
+      != 0)
+    /* Shouldn't happen - nothing should be installed outside $(prefix).  */
+    return NULL;
+  rel_installdir = orig_installdir + strlen (orig_installprefix);
+
+  /* Determine the current installation directory.  */
+  {
+    const char *p_base = curr_pathname + FILE_SYSTEM_PREFIX_LEN (curr_pathname);
+    const char *p = curr_pathname + strlen (curr_pathname);
+    char *q;
+
+    while (p > p_base)
+      {
+	p--;
+	if (ISSLASH (*p))
+	  break;
+      }
+
+    q = (char *) xmalloc (p - curr_pathname + 1);
+#ifdef NO_XMALLOC
+    if (q == NULL)
+      return NULL;
+#endif
+    memcpy (q, curr_pathname, p - curr_pathname);
+    q[p - curr_pathname] = '\0';
+    curr_installdir = q;
+  }
+
+  /* Compute the current installation prefix by removing the trailing
+     rel_installdir from it.  */
+  {
+    const char *rp = rel_installdir + strlen (rel_installdir);
+    const char *cp = curr_installdir + strlen (curr_installdir);
+    const char *cp_base =
+      curr_installdir + FILE_SYSTEM_PREFIX_LEN (curr_installdir);
+
+    while (rp > rel_installdir && cp > cp_base)
+      {
+	bool same = false;
+	const char *rpi = rp;
+	const char *cpi = cp;
+
+	while (rpi > rel_installdir && cpi > cp_base)
+	  {
+	    rpi--;
+	    cpi--;
+	    if (ISSLASH (*rpi) || ISSLASH (*cpi))
+	      {
+		if (ISSLASH (*rpi) && ISSLASH (*cpi))
+		  same = true;
+		break;
+	      }
+	    /* Do case-insensitive comparison if the filesystem is always or
+	       often case-insensitive.  It's better to accept the comparison
+	       if the difference is only in case, rather than to fail.  */
+#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__
+	    /* Win32, Cygwin, OS/2, DOS - case insignificant filesystem */
+	    if ((*rpi >= 'a' && *rpi <= 'z' ? *rpi - 'a' + 'A' : *rpi)
+		!= (*cpi >= 'a' && *cpi <= 'z' ? *cpi - 'a' + 'A' : *cpi))
+	      break;
+#else
+	    if (*rpi != *cpi)
+	      break;
+#endif
+	  }
+	if (!same)
+	  break;
+	/* The last pathname component was the same.  opi and cpi now point
+	   to the slash before it.  */
+	rp = rpi;
+	cp = cpi;
+      }
+
+    if (rp > rel_installdir)
+      /* Unexpected: The curr_installdir does not end with rel_installdir.  */
+      return NULL;
+
+    {
+      size_t curr_prefix_len = cp - curr_installdir;
+      char *curr_prefix;
+
+      curr_prefix = (char *) xmalloc (curr_prefix_len + 1);
+#ifdef NO_XMALLOC
+      if (curr_prefix == NULL)
+	return NULL;
+#endif
+      memcpy (curr_prefix, curr_installdir, curr_prefix_len);
+      curr_prefix[curr_prefix_len] = '\0';
+
+      return curr_prefix;
+    }
+  }
+}
+
+#endif /* !IN_LIBRARY || PIC */
+
+#if defined PIC && defined INSTALLDIR
+
+/* Full pathname of shared library, or NULL.  */
+static char *shared_library_fullname;
+
+#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__
+
+/* Determine the full pathname of the shared library when it is loaded.  */
+
+BOOL WINAPI
+DllMain (HINSTANCE module_handle, DWORD event, LPVOID reserved)
+{
+  (void) reserved;
+
+  if (event == DLL_PROCESS_ATTACH)
+    {
+      /* The DLL is being loaded into an application's address range.  */
+      static char location[MAX_PATH];
+
+      if (!GetModuleFileName (module_handle, location, sizeof (location)))
+	/* Shouldn't happen.  */
+	return FALSE;
+
+      if (!IS_PATH_WITH_DIR (location))
+	/* Shouldn't happen.  */
+	return FALSE;
+
+      {
+#if defined __CYGWIN__
+	/* On Cygwin, we need to convert paths coming from Win32 system calls
+	   to the Unix-like slashified notation.  */
+	static char location_as_posix_path[2 * MAX_PATH];
+	/* There's no error return defined for cygwin_conv_to_posix_path.
+	   See cygwin-api/func-cygwin-conv-to-posix-path.html.
+	   Does it overflow the buffer of expected size MAX_PATH or does it
+	   truncate the path?  I don't know.  Let's catch both.  */
+	cygwin_conv_to_posix_path (location, location_as_posix_path);
+	location_as_posix_path[MAX_PATH - 1] = '\0';
+	if (strlen (location_as_posix_path) >= MAX_PATH - 1)
+	  /* A sign of buffer overflow or path truncation.  */
+	  return FALSE;
+	shared_library_fullname = strdup (location_as_posix_path);
+#else
+	shared_library_fullname = strdup (location);
+#endif
+      }
+    }
+
+  return TRUE;
+}
+
+#else /* Unix except Cygwin */
+
+static void
+find_shared_library_fullname ()
+{
+#if defined __linux__ && __GLIBC__ >= 2
+  /* Linux has /proc/self/maps. glibc 2 has the getline() function.  */
+  FILE *fp;
+
+  /* Open the current process' maps file.  It describes one VMA per line.  */
+  fp = fopen ("/proc/self/maps", "r");
+  if (fp)
+    {
+      unsigned long address = (unsigned long) &find_shared_library_fullname;
+      for (;;)
+	{
+	  unsigned long start, end;
+	  int c;
+
+	  if (fscanf (fp, "%lx-%lx", &start, &end) != 2)
+	    break;
+	  if (address >= start && address <= end - 1)
+	    {
+	      /* Found it.  Now see if this line contains a filename.  */
+	      while (c = getc (fp), c != EOF && c != '\n' && c != '/')
+		continue;
+	      if (c == '/')
+		{
+		  size_t size;
+		  int len;
+
+		  ungetc (c, fp);
+		  shared_library_fullname = NULL; size = 0;
+		  len = getline (&shared_library_fullname, &size, fp);
+		  if (len >= 0)
+		    {
+		      /* Success: filled shared_library_fullname.  */
+		      if (len > 0 && shared_library_fullname[len - 1] == '\n')
+			shared_library_fullname[len - 1] = '\0';
+		    }
+		}
+	      break;
+	    }
+	  while (c = getc (fp), c != EOF && c != '\n')
+	    continue;
+	}
+      fclose (fp);
+    }
+#endif
+}
+
+#endif /* (WIN32 or Cygwin) / (Unix except Cygwin) */
+
+/* Return the full pathname of the current shared library.
+   Return NULL if unknown.
+   Guaranteed to work only on Linux, Cygwin and Woe32.  */
+static char *
+get_shared_library_fullname ()
+{
+#if !(defined _WIN32 || defined __WIN32__ || defined __CYGWIN__)
+  static bool tried_find_shared_library_fullname;
+  if (!tried_find_shared_library_fullname)
+    {
+      find_shared_library_fullname ();
+      tried_find_shared_library_fullname = true;
+    }
+#endif
+  return shared_library_fullname;
+}
+
+#endif /* PIC */
+
+/* Returns the pathname, relocated according to the current installation
+   directory.  */
+const char *
+relocate (const char *pathname)
+{
+#if defined PIC && defined INSTALLDIR
+  static int initialized;
+
+  /* Initialization code for a shared library.  */
+  if (!initialized)
+    {
+      /* At this point, orig_prefix and curr_prefix likely have already been
+	 set through the main program's set_program_name_and_installdir
+	 function.  This is sufficient in the case that the library has
+	 initially been installed in the same orig_prefix.  But we can do
+	 better, to also cover the cases that 1. it has been installed
+	 in a different prefix before being moved to orig_prefix and (later)
+	 to curr_prefix, 2. unlike the program, it has not moved away from
+	 orig_prefix.  */
+      const char *orig_installprefix = INSTALLPREFIX;
+      const char *orig_installdir = INSTALLDIR;
+      const char *curr_prefix_better;
+
+      curr_prefix_better =
+	compute_curr_prefix (orig_installprefix, orig_installdir,
+			     get_shared_library_fullname ());
+      if (curr_prefix_better == NULL)
+	curr_prefix_better = curr_prefix;
+
+      set_relocation_prefix (orig_installprefix, curr_prefix_better);
+
+      initialized = 1;
+    }
+#endif
+
+  /* Note: It is not necessary to perform case insensitive comparison here,
+     even for DOS-like filesystems, because the pathname argument was
+     typically created from the same Makefile variable as orig_prefix came
+     from.  */
+  if (orig_prefix != NULL && curr_prefix != NULL
+      && strncmp (pathname, orig_prefix, orig_prefix_len) == 0)
+    {
+      if (pathname[orig_prefix_len] == '\0')
+	/* pathname equals orig_prefix.  */
+	return curr_prefix;
+      if (ISSLASH (pathname[orig_prefix_len]))
+	{
+	  /* pathname starts with orig_prefix.  */
+	  const char *pathname_tail = &pathname[orig_prefix_len];
+	  char *result =
+	    (char *) xmalloc (curr_prefix_len + strlen (pathname_tail) + 1);
+
+#ifdef NO_XMALLOC
+	  if (result != NULL)
+#endif
+	    {
+	      memcpy (result, curr_prefix, curr_prefix_len);
+	      strcpy (result + curr_prefix_len, pathname_tail);
+	      return result;
+	    }
+	}
+    }
+  /* Nothing to relocate.  */
+  return pathname;
+}
+
+#endif
diff --git a/intl/relocatable.h b/intl/relocatable.h
new file mode 100644
index 0000000..f6d3832
--- /dev/null
+++ b/intl/relocatable.h
@@ -0,0 +1,79 @@
+/* Provide relocatable packages.
+   Copyright (C) 2003, 2005 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno at clisp.org>, 2003.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+#ifndef _RELOCATABLE_H
+#define _RELOCATABLE_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* This can be enabled through the configure --enable-relocatable option.  */
+#if ENABLE_RELOCATABLE
+
+/* When building a DLL, we must export some functions.  Note that because
+   this is a private .h file, we don't need to use __declspec(dllimport)
+   in any case.  */
+#if HAVE_VISIBILITY && BUILDING_DLL
+# define RELOCATABLE_DLL_EXPORTED __attribute__((__visibility__("default")))
+#elif defined _MSC_VER && BUILDING_DLL
+# define RELOCATABLE_DLL_EXPORTED __declspec(dllexport)
+#else
+# define RELOCATABLE_DLL_EXPORTED
+#endif
+
+/* Sets the original and the current installation prefix of the package.
+   Relocation simply replaces a pathname starting with the original prefix
+   by the corresponding pathname with the current prefix instead.  Both
+   prefixes should be directory names without trailing slash (i.e. use ""
+   instead of "/").  */
+extern RELOCATABLE_DLL_EXPORTED void
+       set_relocation_prefix (const char *orig_prefix,
+			      const char *curr_prefix);
+
+/* Returns the pathname, relocated according to the current installation
+   directory.  */
+extern const char * relocate (const char *pathname);
+
+/* Memory management: relocate() leaks memory, because it has to construct
+   a fresh pathname.  If this is a problem because your program calls
+   relocate() frequently, think about caching the result.  */
+
+/* Convenience function:
+   Computes the current installation prefix, based on the original
+   installation prefix, the original installation directory of a particular
+   file, and the current pathname of this file.  Returns NULL upon failure.  */
+extern const char * compute_curr_prefix (const char *orig_installprefix,
+					 const char *orig_installdir,
+					 const char *curr_pathname);
+
+#else
+
+/* By default, we use the hardwired pathnames.  */
+#define relocate(pathname) (pathname)
+
+#endif
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _RELOCATABLE_H */
diff --git a/intl/textdomain.c b/intl/textdomain.c
new file mode 100644
index 0000000..70131bc
--- /dev/null
+++ b/intl/textdomain.c
@@ -0,0 +1,127 @@
+/* Implementation of the textdomain(3) function.
+   Copyright (C) 1995-1998, 2000-2003, 2005-2006 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "gettextP.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+
+/* Handle multi-threaded applications.  */
+#ifdef _LIBC
+# include <bits/libc-lock.h>
+# define gl_rwlock_define __libc_rwlock_define
+# define gl_rwlock_wrlock __libc_rwlock_wrlock
+# define gl_rwlock_unlock __libc_rwlock_unlock
+#else
+# include "lock.h"
+#endif
+
+/* @@ end of prolog @@ */
+
+
+/* Names for the libintl functions are a problem.  They must not clash
+   with existing names and they should follow ANSI C.  But this source
+   code is also used in GNU C Library where the names have a __
+   prefix.  So we have to make a difference here.  */
+#ifdef _LIBC
+# define TEXTDOMAIN __textdomain
+# ifndef strdup
+#  define strdup(str) __strdup (str)
+# endif
+#else
+# define TEXTDOMAIN libintl_textdomain
+#endif
+
+/* Lock variable to protect the global data in the gettext implementation.  */
+gl_rwlock_define (extern, _nl_state_lock attribute_hidden)
+
+/* Set the current default message catalog to DOMAINNAME.
+   If DOMAINNAME is null, return the current default.
+   If DOMAINNAME is "", reset to the default of "messages".  */
+char *
+TEXTDOMAIN (const char *domainname)
+{
+  char *new_domain;
+  char *old_domain;
+
+  /* A NULL pointer requests the current setting.  */
+  if (domainname == NULL)
+    return (char *) _nl_current_default_domain;
+
+  gl_rwlock_wrlock (_nl_state_lock);
+
+  old_domain = (char *) _nl_current_default_domain;
+
+  /* If domain name is the null string set to default domain "messages".  */
+  if (domainname[0] == '\0'
+      || strcmp (domainname, _nl_default_default_domain) == 0)
+    {
+      _nl_current_default_domain = _nl_default_default_domain;
+      new_domain = (char *) _nl_current_default_domain;
+    }
+  else if (strcmp (domainname, old_domain) == 0)
+    /* This can happen and people will use it to signal that some
+       environment variable changed.  */
+    new_domain = old_domain;
+  else
+    {
+      /* If the following malloc fails `_nl_current_default_domain'
+	 will be NULL.  This value will be returned and so signals we
+	 are out of core.  */
+#if defined _LIBC || defined HAVE_STRDUP
+      new_domain = strdup (domainname);
+#else
+      size_t len = strlen (domainname) + 1;
+      new_domain = (char *) malloc (len);
+      if (new_domain != NULL)
+	memcpy (new_domain, domainname, len);
+#endif
+
+      if (new_domain != NULL)
+	_nl_current_default_domain = new_domain;
+    }
+
+  /* We use this possibility to signal a change of the loaded catalogs
+     since this is most likely the case and there is no other easy we
+     to do it.  Do it only when the call was successful.  */
+  if (new_domain != NULL)
+    {
+      ++_nl_msg_cat_cntr;
+
+      if (old_domain != new_domain && old_domain != _nl_default_default_domain)
+	free (old_domain);
+    }
+
+  gl_rwlock_unlock (_nl_state_lock);
+
+  return new_domain;
+}
+
+#ifdef _LIBC
+/* Alias for function name in GNU C Library.  */
+weak_alias (__textdomain, textdomain);
+#endif
diff --git a/intl/tsearch.c b/intl/tsearch.c
new file mode 100644
index 0000000..d549dd4
--- /dev/null
+++ b/intl/tsearch.c
@@ -0,0 +1,684 @@
+/* Copyright (C) 1995, 1996, 1997, 2000, 2006 Free Software Foundation, Inc.
+   Contributed by Bernd Schmidt <crux at Pool.Informatik.RWTH-Aachen.DE>, 1997.
+
+   NOTE: The canonical source of this file is maintained with the GNU C
+   Library.  Bugs can be reported to bug-glibc at gnu.org.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+/* Tree search for red/black trees.
+   The algorithm for adding nodes is taken from one of the many "Algorithms"
+   books by Robert Sedgewick, although the implementation differs.
+   The algorithm for deleting nodes can probably be found in a book named
+   "Introduction to Algorithms" by Cormen/Leiserson/Rivest.  At least that's
+   the book that my professor took most algorithms from during the "Data
+   Structures" course...
+
+   Totally public domain.  */
+
+/* Red/black trees are binary trees in which the edges are colored either red
+   or black.  They have the following properties:
+   1. The number of black edges on every path from the root to a leaf is
+      constant.
+   2. No two red edges are adjacent.
+   Therefore there is an upper bound on the length of every path, it's
+   O(log n) where n is the number of nodes in the tree.  No path can be longer
+   than 1+2*P where P is the length of the shortest path in the tree.
+   Useful for the implementation:
+   3. If one of the children of a node is NULL, then the other one is red
+      (if it exists).
+
+   In the implementation, not the edges are colored, but the nodes.  The color
+   interpreted as the color of the edge leading to this node.  The color is
+   meaningless for the root node, but we color the root node black for
+   convenience.  All added nodes are red initially.
+
+   Adding to a red/black tree is rather easy.  The right place is searched
+   with a usual binary tree search.  Additionally, whenever a node N is
+   reached that has two red successors, the successors are colored black and
+   the node itself colored red.  This moves red edges up the tree where they
+   pose less of a problem once we get to really insert the new node.  Changing
+   N's color to red may violate rule 2, however, so rotations may become
+   necessary to restore the invariants.  Adding a new red leaf may violate
+   the same rule, so afterwards an additional check is run and the tree
+   possibly rotated.
+
+   Deleting is hairy.  There are mainly two nodes involved: the node to be
+   deleted (n1), and another node that is to be unchained from the tree (n2).
+   If n1 has a successor (the node with a smallest key that is larger than
+   n1), then the successor becomes n2 and its contents are copied into n1,
+   otherwise n1 becomes n2.
+   Unchaining a node may violate rule 1: if n2 is black, one subtree is
+   missing one black edge afterwards.  The algorithm must try to move this
+   error upwards towards the root, so that the subtree that does not have
+   enough black edges becomes the whole tree.  Once that happens, the error
+   has disappeared.  It may not be necessary to go all the way up, since it
+   is possible that rotations and recoloring can fix the error before that.
+
+   Although the deletion algorithm must walk upwards through the tree, we
+   do not store parent pointers in the nodes.  Instead, delete allocates a
+   small array of parent pointers and fills it while descending the tree.
+   Since we know that the length of a path is O(log n), where n is the number
+   of nodes, this is likely to use less memory.  */
+
+/* Tree rotations look like this:
+      A                C
+     / \              / \
+    B   C            A   G
+   / \ / \  -->     / \
+   D E F G         B   F
+                  / \
+                 D   E
+
+   In this case, A has been rotated left.  This preserves the ordering of the
+   binary tree.  */
+
+#include <config.h>
+
+/* Specification.  */
+#ifdef IN_LIBINTL
+# include "tsearch.h"
+#else
+# include <search.h>
+#endif
+
+#include <stdlib.h>
+
+typedef int (*__compar_fn_t) (const void *, const void *);
+typedef void (*__action_fn_t) (const void *, VISIT, int);
+
+#ifndef weak_alias
+# define __tsearch tsearch
+# define __tfind tfind
+# define __tdelete tdelete
+# define __twalk twalk
+#endif
+
+#ifndef internal_function
+/* Inside GNU libc we mark some function in a special way.  In other
+   environments simply ignore the marking.  */
+# define internal_function
+#endif
+
+typedef struct node_t
+{
+  /* Callers expect this to be the first element in the structure - do not
+     move!  */
+  const void *key;
+  struct node_t *left;
+  struct node_t *right;
+  unsigned int red:1;
+} *node;
+typedef const struct node_t *const_node;
+
+#undef DEBUGGING
+
+#ifdef DEBUGGING
+
+/* Routines to check tree invariants.  */
+
+#include <assert.h>
+
+#define CHECK_TREE(a) check_tree(a)
+
+static void
+check_tree_recurse (node p, int d_sofar, int d_total)
+{
+  if (p == NULL)
+    {
+      assert (d_sofar == d_total);
+      return;
+    }
+
+  check_tree_recurse (p->left, d_sofar + (p->left && !p->left->red), d_total);
+  check_tree_recurse (p->right, d_sofar + (p->right && !p->right->red), d_total);
+  if (p->left)
+    assert (!(p->left->red && p->red));
+  if (p->right)
+    assert (!(p->right->red && p->red));
+}
+
+static void
+check_tree (node root)
+{
+  int cnt = 0;
+  node p;
+  if (root == NULL)
+    return;
+  root->red = 0;
+  for(p = root->left; p; p = p->left)
+    cnt += !p->red;
+  check_tree_recurse (root, 0, cnt);
+}
+
+
+#else
+
+#define CHECK_TREE(a)
+
+#endif
+
+/* Possibly "split" a node with two red successors, and/or fix up two red
+   edges in a row.  ROOTP is a pointer to the lowest node we visited, PARENTP
+   and GPARENTP pointers to its parent/grandparent.  P_R and GP_R contain the
+   comparison values that determined which way was taken in the tree to reach
+   ROOTP.  MODE is 1 if we need not do the split, but must check for two red
+   edges between GPARENTP and ROOTP.  */
+static void
+maybe_split_for_insert (node *rootp, node *parentp, node *gparentp,
+			int p_r, int gp_r, int mode)
+{
+  node root = *rootp;
+  node *rp, *lp;
+  rp = &(*rootp)->right;
+  lp = &(*rootp)->left;
+
+  /* See if we have to split this node (both successors red).  */
+  if (mode == 1
+      || ((*rp) != NULL && (*lp) != NULL && (*rp)->red && (*lp)->red))
+    {
+      /* This node becomes red, its successors black.  */
+      root->red = 1;
+      if (*rp)
+	(*rp)->red = 0;
+      if (*lp)
+	(*lp)->red = 0;
+
+      /* If the parent of this node is also red, we have to do
+	 rotations.  */
+      if (parentp != NULL && (*parentp)->red)
+	{
+	  node gp = *gparentp;
+	  node p = *parentp;
+	  /* There are two main cases:
+	     1. The edge types (left or right) of the two red edges differ.
+	     2. Both red edges are of the same type.
+	     There exist two symmetries of each case, so there is a total of
+	     4 cases.  */
+	  if ((p_r > 0) != (gp_r > 0))
+	    {
+	      /* Put the child at the top of the tree, with its parent
+		 and grandparent as successors.  */
+	      p->red = 1;
+	      gp->red = 1;
+	      root->red = 0;
+	      if (p_r < 0)
+		{
+		  /* Child is left of parent.  */
+		  p->left = *rp;
+		  *rp = p;
+		  gp->right = *lp;
+		  *lp = gp;
+		}
+	      else
+		{
+		  /* Child is right of parent.  */
+		  p->right = *lp;
+		  *lp = p;
+		  gp->left = *rp;
+		  *rp = gp;
+		}
+	      *gparentp = root;
+	    }
+	  else
+	    {
+	      *gparentp = *parentp;
+	      /* Parent becomes the top of the tree, grandparent and
+		 child are its successors.  */
+	      p->red = 0;
+	      gp->red = 1;
+	      if (p_r < 0)
+		{
+		  /* Left edges.  */
+		  gp->left = p->right;
+		  p->right = gp;
+		}
+	      else
+		{
+		  /* Right edges.  */
+		  gp->right = p->left;
+		  p->left = gp;
+		}
+	    }
+	}
+    }
+}
+
+/* Find or insert datum into search tree.
+   KEY is the key to be located, ROOTP is the address of tree root,
+   COMPAR the ordering function.  */
+void *
+__tsearch (const void *key, void **vrootp, __compar_fn_t compar)
+{
+  node q;
+  node *parentp = NULL, *gparentp = NULL;
+  node *rootp = (node *) vrootp;
+  node *nextp;
+  int r = 0, p_r = 0, gp_r = 0; /* No they might not, Mr Compiler.  */
+
+  if (rootp == NULL)
+    return NULL;
+
+  /* This saves some additional tests below.  */
+  if (*rootp != NULL)
+    (*rootp)->red = 0;
+
+  CHECK_TREE (*rootp);
+
+  nextp = rootp;
+  while (*nextp != NULL)
+    {
+      node root = *rootp;
+      r = (*compar) (key, root->key);
+      if (r == 0)
+	return root;
+
+      maybe_split_for_insert (rootp, parentp, gparentp, p_r, gp_r, 0);
+      /* If that did any rotations, parentp and gparentp are now garbage.
+	 That doesn't matter, because the values they contain are never
+	 used again in that case.  */
+
+      nextp = r < 0 ? &root->left : &root->right;
+      if (*nextp == NULL)
+	break;
+
+      gparentp = parentp;
+      parentp = rootp;
+      rootp = nextp;
+
+      gp_r = p_r;
+      p_r = r;
+    }
+
+  q = (struct node_t *) malloc (sizeof (struct node_t));
+  if (q != NULL)
+    {
+      *nextp = q;			/* link new node to old */
+      q->key = key;			/* initialize new node */
+      q->red = 1;
+      q->left = q->right = NULL;
+
+      if (nextp != rootp)
+	/* There may be two red edges in a row now, which we must avoid by
+	   rotating the tree.  */
+	maybe_split_for_insert (nextp, rootp, parentp, r, p_r, 1);
+    }
+
+  return q;
+}
+#ifdef weak_alias
+weak_alias (__tsearch, tsearch)
+#endif
+
+
+/* Find datum in search tree.
+   KEY is the key to be located, ROOTP is the address of tree root,
+   COMPAR the ordering function.  */
+void *
+__tfind (key, vrootp, compar)
+     const void *key;
+     void *const *vrootp;
+     __compar_fn_t compar;
+{
+  node *rootp = (node *) vrootp;
+
+  if (rootp == NULL)
+    return NULL;
+
+  CHECK_TREE (*rootp);
+
+  while (*rootp != NULL)
+    {
+      node root = *rootp;
+      int r;
+
+      r = (*compar) (key, root->key);
+      if (r == 0)
+	return root;
+
+      rootp = r < 0 ? &root->left : &root->right;
+    }
+  return NULL;
+}
+#ifdef weak_alias
+weak_alias (__tfind, tfind)
+#endif
+
+
+/* Delete node with given key.
+   KEY is the key to be deleted, ROOTP is the address of the root of tree,
+   COMPAR the comparison function.  */
+void *
+__tdelete (const void *key, void **vrootp, __compar_fn_t compar)
+{
+  node p, q, r, retval;
+  int cmp;
+  node *rootp = (node *) vrootp;
+  node root, unchained;
+  /* Stack of nodes so we remember the parents without recursion.  It's
+     _very_ unlikely that there are paths longer than 40 nodes.  The tree
+     would need to have around 250.000 nodes.  */
+  int stacksize = 100;
+  int sp = 0;
+  node *nodestack[100];
+
+  if (rootp == NULL)
+    return NULL;
+  p = *rootp;
+  if (p == NULL)
+    return NULL;
+
+  CHECK_TREE (p);
+
+  while ((cmp = (*compar) (key, (*rootp)->key)) != 0)
+    {
+      if (sp == stacksize)
+	abort ();
+
+      nodestack[sp++] = rootp;
+      p = *rootp;
+      rootp = ((cmp < 0)
+	       ? &(*rootp)->left
+	       : &(*rootp)->right);
+      if (*rootp == NULL)
+	return NULL;
+    }
+
+  /* This is bogus if the node to be deleted is the root... this routine
+     really should return an integer with 0 for success, -1 for failure
+     and errno = ESRCH or something.  */
+  retval = p;
+
+  /* We don't unchain the node we want to delete. Instead, we overwrite
+     it with its successor and unchain the successor.  If there is no
+     successor, we really unchain the node to be deleted.  */
+
+  root = *rootp;
+
+  r = root->right;
+  q = root->left;
+
+  if (q == NULL || r == NULL)
+    unchained = root;
+  else
+    {
+      node *parent = rootp, *up = &root->right;
+      for (;;)
+	{
+	  if (sp == stacksize)
+	    abort ();
+	  nodestack[sp++] = parent;
+	  parent = up;
+	  if ((*up)->left == NULL)
+	    break;
+	  up = &(*up)->left;
+	}
+      unchained = *up;
+    }
+
+  /* We know that either the left or right successor of UNCHAINED is NULL.
+     R becomes the other one, it is chained into the parent of UNCHAINED.  */
+  r = unchained->left;
+  if (r == NULL)
+    r = unchained->right;
+  if (sp == 0)
+    *rootp = r;
+  else
+    {
+      q = *nodestack[sp-1];
+      if (unchained == q->right)
+	q->right = r;
+      else
+	q->left = r;
+    }
+
+  if (unchained != root)
+    root->key = unchained->key;
+  if (!unchained->red)
+    {
+      /* Now we lost a black edge, which means that the number of black
+	 edges on every path is no longer constant.  We must balance the
+	 tree.  */
+      /* NODESTACK now contains all parents of R.  R is likely to be NULL
+	 in the first iteration.  */
+      /* NULL nodes are considered black throughout - this is necessary for
+	 correctness.  */
+      while (sp > 0 && (r == NULL || !r->red))
+	{
+	  node *pp = nodestack[sp - 1];
+	  p = *pp;
+	  /* Two symmetric cases.  */
+	  if (r == p->left)
+	    {
+	      /* Q is R's brother, P is R's parent.  The subtree with root
+		 R has one black edge less than the subtree with root Q.  */
+	      q = p->right;
+	      if (q->red)
+		{
+		  /* If Q is red, we know that P is black. We rotate P left
+		     so that Q becomes the top node in the tree, with P below
+		     it.  P is colored red, Q is colored black.
+		     This action does not change the black edge count for any
+		     leaf in the tree, but we will be able to recognize one
+		     of the following situations, which all require that Q
+		     is black.  */
+		  q->red = 0;
+		  p->red = 1;
+		  /* Left rotate p.  */
+		  p->right = q->left;
+		  q->left = p;
+		  *pp = q;
+		  /* Make sure pp is right if the case below tries to use
+		     it.  */
+		  nodestack[sp++] = pp = &q->left;
+		  q = p->right;
+		}
+	      /* We know that Q can't be NULL here.  We also know that Q is
+		 black.  */
+	      if ((q->left == NULL || !q->left->red)
+		  && (q->right == NULL || !q->right->red))
+		{
+		  /* Q has two black successors.  We can simply color Q red.
+		     The whole subtree with root P is now missing one black
+		     edge.  Note that this action can temporarily make the
+		     tree invalid (if P is red).  But we will exit the loop
+		     in that case and set P black, which both makes the tree
+		     valid and also makes the black edge count come out
+		     right.  If P is black, we are at least one step closer
+		     to the root and we'll try again the next iteration.  */
+		  q->red = 1;
+		  r = p;
+		}
+	      else
+		{
+		  /* Q is black, one of Q's successors is red.  We can
+		     repair the tree with one operation and will exit the
+		     loop afterwards.  */
+		  if (q->right == NULL || !q->right->red)
+		    {
+		      /* The left one is red.  We perform the same action as
+			 in maybe_split_for_insert where two red edges are
+			 adjacent but point in different directions:
+			 Q's left successor (let's call it Q2) becomes the
+			 top of the subtree we are looking at, its parent (Q)
+			 and grandparent (P) become its successors. The former
+			 successors of Q2 are placed below P and Q.
+			 P becomes black, and Q2 gets the color that P had.
+			 This changes the black edge count only for node R and
+			 its successors.  */
+		      node q2 = q->left;
+		      q2->red = p->red;
+		      p->right = q2->left;
+		      q->left = q2->right;
+		      q2->right = q;
+		      q2->left = p;
+		      *pp = q2;
+		      p->red = 0;
+		    }
+		  else
+		    {
+		      /* It's the right one.  Rotate P left. P becomes black,
+			 and Q gets the color that P had.  Q's right successor
+			 also becomes black.  This changes the black edge
+			 count only for node R and its successors.  */
+		      q->red = p->red;
+		      p->red = 0;
+
+		      q->right->red = 0;
+
+		      /* left rotate p */
+		      p->right = q->left;
+		      q->left = p;
+		      *pp = q;
+		    }
+
+		  /* We're done.  */
+		  sp = 1;
+		  r = NULL;
+		}
+	    }
+	  else
+	    {
+	      /* Comments: see above.  */
+	      q = p->left;
+	      if (q->red)
+		{
+		  q->red = 0;
+		  p->red = 1;
+		  p->left = q->right;
+		  q->right = p;
+		  *pp = q;
+		  nodestack[sp++] = pp = &q->right;
+		  q = p->left;
+		}
+	      if ((q->right == NULL || !q->right->red)
+		       && (q->left == NULL || !q->left->red))
+		{
+		  q->red = 1;
+		  r = p;
+		}
+	      else
+		{
+		  if (q->left == NULL || !q->left->red)
+		    {
+		      node q2 = q->right;
+		      q2->red = p->red;
+		      p->left = q2->right;
+		      q->right = q2->left;
+		      q2->left = q;
+		      q2->right = p;
+		      *pp = q2;
+		      p->red = 0;
+		    }
+		  else
+		    {
+		      q->red = p->red;
+		      p->red = 0;
+		      q->left->red = 0;
+		      p->left = q->right;
+		      q->right = p;
+		      *pp = q;
+		    }
+		  sp = 1;
+		  r = NULL;
+		}
+	    }
+	  --sp;
+	}
+      if (r != NULL)
+	r->red = 0;
+    }
+
+  free (unchained);
+  return retval;
+}
+#ifdef weak_alias
+weak_alias (__tdelete, tdelete)
+#endif
+
+
+/* Walk the nodes of a tree.
+   ROOT is the root of the tree to be walked, ACTION the function to be
+   called at each node.  LEVEL is the level of ROOT in the whole tree.  */
+static void
+internal_function
+trecurse (const void *vroot, __action_fn_t action, int level)
+{
+  const_node root = (const_node) vroot;
+
+  if (root->left == NULL && root->right == NULL)
+    (*action) (root, leaf, level);
+  else
+    {
+      (*action) (root, preorder, level);
+      if (root->left != NULL)
+	trecurse (root->left, action, level + 1);
+      (*action) (root, postorder, level);
+      if (root->right != NULL)
+	trecurse (root->right, action, level + 1);
+      (*action) (root, endorder, level);
+    }
+}
+
+
+/* Walk the nodes of a tree.
+   ROOT is the root of the tree to be walked, ACTION the function to be
+   called at each node.  */
+void
+__twalk (const void *vroot, __action_fn_t action)
+{
+  const_node root = (const_node) vroot;
+
+  CHECK_TREE (root);
+
+  if (root != NULL && action != NULL)
+    trecurse (root, action, 0);
+}
+#ifdef weak_alias
+weak_alias (__twalk, twalk)
+#endif
+
+
+#ifdef _LIBC
+
+/* The standardized functions miss an important functionality: the
+   tree cannot be removed easily.  We provide a function to do this.  */
+static void
+internal_function
+tdestroy_recurse (node root, __free_fn_t freefct)
+{
+  if (root->left != NULL)
+    tdestroy_recurse (root->left, freefct);
+  if (root->right != NULL)
+    tdestroy_recurse (root->right, freefct);
+  (*freefct) ((void *) root->key);
+  /* Free the node itself.  */
+  free (root);
+}
+
+void
+__tdestroy (void *vroot, __free_fn_t freefct)
+{
+  node root = (node) vroot;
+
+  CHECK_TREE (root);
+
+  if (root != NULL)
+    tdestroy_recurse (root, freefct);
+}
+weak_alias (__tdestroy, tdestroy)
+
+#endif /* _LIBC */
diff --git a/intl/tsearch.h b/intl/tsearch.h
new file mode 100644
index 0000000..f08e4a9
--- /dev/null
+++ b/intl/tsearch.h
@@ -0,0 +1,83 @@
+/* Binary tree data structure.
+   Copyright (C) 2006 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+#ifndef _TSEARCH_H
+#define _TSEARCH_H
+
+#if HAVE_TSEARCH
+
+/* Get tseach(), tfind(), tdelete(), twalk() declarations.  */
+#include <search.h>
+
+#else
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* See <http://www.opengroup.org/susv3xbd/search.h.html>,
+       <http://www.opengroup.org/susv3xsh/tsearch.html>
+   for details.  */
+
+typedef enum
+{ 
+  preorder,
+  postorder, 
+  endorder,
+  leaf
+}
+VISIT;
+
+/* Searches an element in the tree *VROOTP that compares equal to KEY.
+   If one is found, it is returned.  Otherwise, a new element equal to KEY
+   is inserted in the tree and is returned.  */
+extern void * tsearch (const void *key, void **vrootp,
+		       int (*compar) (const void *, const void *));
+
+/* Searches an element in the tree *VROOTP that compares equal to KEY.
+   If one is found, it is returned.  Otherwise, NULL is returned.  */
+extern void * tfind (const void *key, void *const *vrootp,
+		     int (*compar) (const void *, const void *));
+
+/* Searches an element in the tree *VROOTP that compares equal to KEY.
+   If one is found, it is removed from the tree, and its parent node is
+   returned.  Otherwise, NULL is returned.  */
+extern void * tdelete (const void *key, void **vrootp,
+		       int (*compar) (const void *, const void *));
+
+/* Perform a depth-first, left-to-right traversal of the tree VROOT.
+   The ACTION function is called:
+     - for non-leaf nodes: 3 times, before the left subtree traversal,
+       after the left subtree traversal but before the right subtree traversal,
+       and after the right subtree traversal,
+     - for leaf nodes: once.
+   The arguments passed to ACTION are:
+     1. the node; it can be casted to a 'const void * const *', i.e. into a
+        pointer to the key,
+     2. an indicator which visit of the node this is,
+     3. the level of the node in the tree (0 for the root).  */
+extern void twalk (const void *vroot,
+		   void (*action) (const void *, VISIT, int));
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+#endif /* _TSEARCH_H */
diff --git a/intl/vasnprintf.c b/intl/vasnprintf.c
new file mode 100644
index 0000000..4a8e7f0
--- /dev/null
+++ b/intl/vasnprintf.c
@@ -0,0 +1,4677 @@
+/* vsprintf with automatic memory allocation.
+   Copyright (C) 1999, 2002-2007 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+/* This file can be parametrized with the following macros:
+     VASNPRINTF         The name of the function being defined.
+     FCHAR_T            The element type of the format string.
+     DCHAR_T            The element type of the destination (result) string.
+     FCHAR_T_ONLY_ASCII Set to 1 to enable verification that all characters
+                        in the format string are ASCII. MUST be set if
+                        FCHAR_T and DCHAR_T are not the same type.
+     DIRECTIVE          Structure denoting a format directive.
+                        Depends on FCHAR_T.
+     DIRECTIVES         Structure denoting the set of format directives of a
+                        format string.  Depends on FCHAR_T.
+     PRINTF_PARSE       Function that parses a format string.
+                        Depends on FCHAR_T.
+     DCHAR_CPY          memcpy like function for DCHAR_T[] arrays.
+     DCHAR_SET          memset like function for DCHAR_T[] arrays.
+     DCHAR_MBSNLEN      mbsnlen like function for DCHAR_T[] arrays.
+     SNPRINTF           The system's snprintf (or similar) function.
+                        This may be either snprintf or swprintf.
+     TCHAR_T            The element type of the argument and result string
+                        of the said SNPRINTF function.  This may be either
+                        char or wchar_t.  The code exploits that
+                        sizeof (TCHAR_T) | sizeof (DCHAR_T) and
+                        alignof (TCHAR_T) <= alignof (DCHAR_T).
+     DCHAR_IS_TCHAR     Set to 1 if DCHAR_T and TCHAR_T are the same type.
+     DCHAR_CONV_FROM_ENCODING A function to convert from char[] to DCHAR[].
+     DCHAR_IS_UINT8_T   Set to 1 if DCHAR_T is uint8_t.
+     DCHAR_IS_UINT16_T  Set to 1 if DCHAR_T is uint16_t.
+     DCHAR_IS_UINT32_T  Set to 1 if DCHAR_T is uint32_t.  */
+
+/* Tell glibc's <stdio.h> to provide a prototype for snprintf().
+   This must come before <config.h> because <config.h> may include
+   <features.h>, and once <features.h> has been included, it's too late.  */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE    1
+#endif
+
+#ifndef VASNPRINTF
+# include <config.h>
+#endif
+#ifndef IN_LIBINTL
+# include <alloca.h>
+#endif
+
+/* Specification.  */
+#ifndef VASNPRINTF
+# if WIDE_CHAR_VERSION
+#  include "vasnwprintf.h"
+# else
+#  include "vasnprintf.h"
+# endif
+#endif
+
+#include <locale.h>	/* localeconv() */
+#include <stdio.h>	/* snprintf(), sprintf() */
+#include <stdlib.h>	/* abort(), malloc(), realloc(), free() */
+#include <string.h>	/* memcpy(), strlen() */
+#include <errno.h>	/* errno */
+#include <limits.h>	/* CHAR_BIT */
+#include <float.h>	/* DBL_MAX_EXP, LDBL_MAX_EXP */
+#if HAVE_NL_LANGINFO
+# include <langinfo.h>
+#endif
+#ifndef VASNPRINTF
+# if WIDE_CHAR_VERSION
+#  include "wprintf-parse.h"
+# else
+#  include "printf-parse.h"
+# endif
+#endif
+
+/* Checked size_t computations.  */
+#include "xsize.h"
+
+#if (NEED_PRINTF_DOUBLE || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL
+# include <math.h>
+# include "float+.h"
+#endif
+
+#if (NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && !defined IN_LIBINTL
+# include <math.h>
+# include "isnan.h"
+#endif
+
+#if (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE) && !defined IN_LIBINTL
+# include <math.h>
+# include "isnanl-nolibm.h"
+# include "fpucw.h"
+#endif
+
+#if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL
+# include <math.h>
+# include "isnan.h"
+# include "printf-frexp.h"
+#endif
+
+#if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL
+# include <math.h>
+# include "isnanl-nolibm.h"
+# include "printf-frexpl.h"
+# include "fpucw.h"
+#endif
+
+/* Some systems, like OSF/1 4.0 and Woe32, don't have EOVERFLOW.  */
+#ifndef EOVERFLOW
+# define EOVERFLOW E2BIG
+#endif
+
+#if HAVE_WCHAR_T
+# if HAVE_WCSLEN
+#  define local_wcslen wcslen
+# else
+   /* Solaris 2.5.1 has wcslen() in a separate library libw.so. To avoid
+      a dependency towards this library, here is a local substitute.
+      Define this substitute only once, even if this file is included
+      twice in the same compilation unit.  */
+#  ifndef local_wcslen_defined
+#   define local_wcslen_defined 1
+static size_t
+local_wcslen (const wchar_t *s)
+{
+  const wchar_t *ptr;
+
+  for (ptr = s; *ptr != (wchar_t) 0; ptr++)
+    ;
+  return ptr - s;
+}
+#  endif
+# endif
+#endif
+
+/* Default parameters.  */
+#ifndef VASNPRINTF
+# if WIDE_CHAR_VERSION
+#  define VASNPRINTF vasnwprintf
+#  define FCHAR_T wchar_t
+#  define DCHAR_T wchar_t
+#  define TCHAR_T wchar_t
+#  define DCHAR_IS_TCHAR 1
+#  define DIRECTIVE wchar_t_directive
+#  define DIRECTIVES wchar_t_directives
+#  define PRINTF_PARSE wprintf_parse
+#  define DCHAR_CPY wmemcpy
+# else
+#  define VASNPRINTF vasnprintf
+#  define FCHAR_T char
+#  define DCHAR_T char
+#  define TCHAR_T char
+#  define DCHAR_IS_TCHAR 1
+#  define DIRECTIVE char_directive
+#  define DIRECTIVES char_directives
+#  define PRINTF_PARSE printf_parse
+#  define DCHAR_CPY memcpy
+# endif
+#endif
+#if WIDE_CHAR_VERSION
+  /* TCHAR_T is wchar_t.  */
+# define USE_SNPRINTF 1
+# if HAVE_DECL__SNWPRINTF
+   /* On Windows, the function swprintf() has a different signature than
+      on Unix; we use the _snwprintf() function instead.  */
+#  define SNPRINTF _snwprintf
+# else
+   /* Unix.  */
+#  define SNPRINTF swprintf
+# endif
+#else
+  /* TCHAR_T is char.  */
+# /* Use snprintf if it exists under the name 'snprintf' or '_snprintf'.
+     But don't use it on BeOS, since BeOS snprintf produces no output if the
+     size argument is >= 0x3000000.  */
+# if (HAVE_DECL__SNPRINTF || HAVE_SNPRINTF) && !defined __BEOS__
+#  define USE_SNPRINTF 1
+# else
+#  define USE_SNPRINTF 0
+# endif
+# if HAVE_DECL__SNPRINTF
+   /* Windows.  */
+#  define SNPRINTF _snprintf
+# else
+   /* Unix.  */
+#  define SNPRINTF snprintf
+   /* Here we need to call the native snprintf, not rpl_snprintf.  */
+#  undef snprintf
+# endif
+#endif
+/* Here we need to call the native sprintf, not rpl_sprintf.  */
+#undef sprintf
+
+#if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && !defined IN_LIBINTL
+/* Determine the decimal-point character according to the current locale.  */
+# ifndef decimal_point_char_defined
+#  define decimal_point_char_defined 1
+static char
+decimal_point_char ()
+{
+  const char *point;
+  /* Determine it in a multithread-safe way.  We know nl_langinfo is
+     multithread-safe on glibc systems, but is not required to be multithread-
+     safe by POSIX.  sprintf(), however, is multithread-safe.  localeconv()
+     is rarely multithread-safe.  */
+#  if HAVE_NL_LANGINFO && __GLIBC__
+  point = nl_langinfo (RADIXCHAR);
+#  elif 1
+  char pointbuf[5];
+  sprintf (pointbuf, "%#.0f", 1.0);
+  point = &pointbuf[1];
+#  else
+  point = localeconv () -> decimal_point;
+#  endif
+  /* The decimal point is always a single byte: either '.' or ','.  */
+  return (point[0] != '\0' ? point[0] : '.');
+}
+# endif
+#endif
+
+#if NEED_PRINTF_INFINITE_DOUBLE && !NEED_PRINTF_DOUBLE && !defined IN_LIBINTL
+
+/* Equivalent to !isfinite(x) || x == 0, but does not require libm.  */
+static int
+is_infinite_or_zero (double x)
+{
+  return isnan (x) || x + x == x;
+}
+
+#endif
+
+#if NEED_PRINTF_INFINITE_LONG_DOUBLE && !NEED_PRINTF_LONG_DOUBLE && !defined IN_LIBINTL
+
+/* Equivalent to !isfinite(x), but does not require libm.  */
+static int
+is_infinitel (long double x)
+{
+  return isnanl (x) || (x + x == x && x != 0.0L);
+}
+
+#endif
+
+#if (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL
+
+/* Converting 'long double' to decimal without rare rounding bugs requires
+   real bignums.  We use the naming conventions of GNU gmp, but vastly simpler
+   (and slower) algorithms.  */
+
+typedef unsigned int mp_limb_t;
+# define GMP_LIMB_BITS 32
+typedef int mp_limb_verify[2 * (sizeof (mp_limb_t) * CHAR_BIT == GMP_LIMB_BITS) - 1];
+
+typedef unsigned long long mp_twolimb_t;
+# define GMP_TWOLIMB_BITS 64
+typedef int mp_twolimb_verify[2 * (sizeof (mp_twolimb_t) * CHAR_BIT == GMP_TWOLIMB_BITS) - 1];
+
+/* Representation of a bignum >= 0.  */
+typedef struct
+{
+  size_t nlimbs;
+  mp_limb_t *limbs; /* Bits in little-endian order, allocated with malloc().  */
+} mpn_t;
+
+/* Compute the product of two bignums >= 0.
+   Return the allocated memory in case of success, NULL in case of memory
+   allocation failure.  */
+static void *
+multiply (mpn_t src1, mpn_t src2, mpn_t *dest)
+{
+  const mp_limb_t *p1;
+  const mp_limb_t *p2;
+  size_t len1;
+  size_t len2;
+
+  if (src1.nlimbs <= src2.nlimbs)
+    {
+      len1 = src1.nlimbs;
+      p1 = src1.limbs;
+      len2 = src2.nlimbs;
+      p2 = src2.limbs;
+    }
+  else
+    {
+      len1 = src2.nlimbs;
+      p1 = src2.limbs;
+      len2 = src1.nlimbs;
+      p2 = src1.limbs;
+    }
+  /* Now 0 <= len1 <= len2.  */
+  if (len1 == 0)
+    {
+      /* src1 or src2 is zero.  */
+      dest->nlimbs = 0;
+      dest->limbs = (mp_limb_t *) malloc (1);
+    }
+  else
+    {
+      /* Here 1 <= len1 <= len2.  */
+      size_t dlen;
+      mp_limb_t *dp;
+      size_t k, i, j;
+
+      dlen = len1 + len2;
+      dp = (mp_limb_t *) malloc (dlen * sizeof (mp_limb_t));
+      if (dp == NULL)
+	return NULL;
+      for (k = len2; k > 0; )
+	dp[--k] = 0;
+      for (i = 0; i < len1; i++)
+	{
+	  mp_limb_t digit1 = p1[i];
+	  mp_twolimb_t carry = 0;
+	  for (j = 0; j < len2; j++)
+	    {
+	      mp_limb_t digit2 = p2[j];
+	      carry += (mp_twolimb_t) digit1 * (mp_twolimb_t) digit2;
+	      carry += dp[i + j];
+	      dp[i + j] = (mp_limb_t) carry;
+	      carry = carry >> GMP_LIMB_BITS;
+	    }
+	  dp[i + len2] = (mp_limb_t) carry;
+	}
+      /* Normalise.  */
+      while (dlen > 0 && dp[dlen - 1] == 0)
+	dlen--;
+      dest->nlimbs = dlen;
+      dest->limbs = dp;
+    }
+  return dest->limbs;
+}
+
+/* Compute the quotient of a bignum a >= 0 and a bignum b > 0.
+   a is written as  a = q * b + r  with 0 <= r < b.  q is the quotient, r
+   the remainder.
+   Finally, round-to-even is performed: If r > b/2 or if r = b/2 and q is odd,
+   q is incremented.
+   Return the allocated memory in case of success, NULL in case of memory
+   allocation failure.  */
+static void *
+divide (mpn_t a, mpn_t b, mpn_t *q)
+{
+  /* Algorithm:
+     First normalise a and b: a=[a[m-1],...,a[0]], b=[b[n-1],...,b[0]]
+     with m>=0 and n>0 (in base beta = 2^GMP_LIMB_BITS).
+     If m<n, then q:=0 and r:=a.
+     If m>=n=1, perform a single-precision division:
+       r:=0, j:=m,
+       while j>0 do
+         {Here (q[m-1]*beta^(m-1)+...+q[j]*beta^j) * b[0] + r*beta^j =
+               = a[m-1]*beta^(m-1)+...+a[j]*beta^j und 0<=r<b[0]<beta}
+         j:=j-1, r:=r*beta+a[j], q[j]:=floor(r/b[0]), r:=r-b[0]*q[j].
+       Normalise [q[m-1],...,q[0]], yields q.
+     If m>=n>1, perform a multiple-precision division:
+       We have a/b < beta^(m-n+1).
+       s:=intDsize-1-(hightest bit in b[n-1]), 0<=s<intDsize.
+       Shift a and b left by s bits, copying them. r:=a.
+       r=[r[m],...,r[0]], b=[b[n-1],...,b[0]] with b[n-1]>=beta/2.
+       For j=m-n,...,0: {Here 0 <= r < b*beta^(j+1).}
+         Compute q* :
+           q* := floor((r[j+n]*beta+r[j+n-1])/b[n-1]).
+           In case of overflow (q* >= beta) set q* := beta-1.
+           Compute c2 := ((r[j+n]*beta+r[j+n-1]) - q* * b[n-1])*beta + r[j+n-2]
+           and c3 := b[n-2] * q*.
+           {We have 0 <= c2 < 2*beta^2, even 0 <= c2 < beta^2 if no overflow
+            occurred.  Furthermore 0 <= c3 < beta^2.
+            If there was overflow and
+            r[j+n]*beta+r[j+n-1] - q* * b[n-1] >= beta, i.e. c2 >= beta^2,
+            the next test can be skipped.}
+           While c3 > c2, {Here 0 <= c2 < c3 < beta^2}
+             Put q* := q* - 1, c2 := c2 + b[n-1]*beta, c3 := c3 - b[n-2].
+           If q* > 0:
+             Put r := r - b * q* * beta^j. In detail:
+               [r[n+j],...,r[j]] := [r[n+j],...,r[j]] - q* * [b[n-1],...,b[0]].
+               hence: u:=0, for i:=0 to n-1 do
+                              u := u + q* * b[i],
+                              r[j+i]:=r[j+i]-(u mod beta) (+ beta, if carry),
+                              u:=u div beta (+ 1, if carry in subtraction)
+                      r[n+j]:=r[n+j]-u.
+               {Since always u = (q* * [b[i-1],...,b[0]] div beta^i) + 1
+                               < q* + 1 <= beta,
+                the carry u does not overflow.}
+             If a negative carry occurs, put q* := q* - 1
+               and [r[n+j],...,r[j]] := [r[n+j],...,r[j]] + [0,b[n-1],...,b[0]].
+         Set q[j] := q*.
+       Normalise [q[m-n],..,q[0]]; this yields the quotient q.
+       Shift [r[n-1],...,r[0]] right by s bits and normalise; this yields the
+       rest r.
+       The room for q[j] can be allocated at the memory location of r[n+j].
+     Finally, round-to-even:
+       Shift r left by 1 bit.
+       If r > b or if r = b and q[0] is odd, q := q+1.
+   */
+  const mp_limb_t *a_ptr = a.limbs;
+  size_t a_len = a.nlimbs;
+  const mp_limb_t *b_ptr = b.limbs;
+  size_t b_len = b.nlimbs;
+  mp_limb_t *roomptr;
+  mp_limb_t *tmp_roomptr = NULL;
+  mp_limb_t *q_ptr;
+  size_t q_len;
+  mp_limb_t *r_ptr;
+  size_t r_len;
+
+  /* Allocate room for a_len+2 digits.
+     (Need a_len+1 digits for the real division and 1 more digit for the
+     final rounding of q.)  */
+  roomptr = (mp_limb_t *) malloc ((a_len + 2) * sizeof (mp_limb_t));
+  if (roomptr == NULL)
+    return NULL;
+
+  /* Normalise a.  */
+  while (a_len > 0 && a_ptr[a_len - 1] == 0)
+    a_len--;
+
+  /* Normalise b.  */
+  for (;;)
+    {
+      if (b_len == 0)
+	/* Division by zero.  */
+	abort ();
+      if (b_ptr[b_len - 1] == 0)
+	b_len--;
+      else
+	break;
+    }
+
+  /* Here m = a_len >= 0 and n = b_len > 0.  */
+
+  if (a_len < b_len)
+    {
+      /* m<n: trivial case.  q=0, r := copy of a.  */
+      r_ptr = roomptr;
+      r_len = a_len;
+      memcpy (r_ptr, a_ptr, a_len * sizeof (mp_limb_t));
+      q_ptr = roomptr + a_len;
+      q_len = 0;
+    }
+  else if (b_len == 1)
+    {
+      /* n=1: single precision division.
+	 beta^(m-1) <= a < beta^m  ==>  beta^(m-2) <= a/b < beta^m  */
+      r_ptr = roomptr;
+      q_ptr = roomptr + 1;
+      {
+	mp_limb_t den = b_ptr[0];
+	mp_limb_t remainder = 0;
+	const mp_limb_t *sourceptr = a_ptr + a_len;
+	mp_limb_t *destptr = q_ptr + a_len;
+	size_t count;
+	for (count = a_len; count > 0; count--)
+	  {
+	    mp_twolimb_t num =
+	      ((mp_twolimb_t) remainder << GMP_LIMB_BITS) | *--sourceptr;
+	    *--destptr = num / den;
+	    remainder = num % den;
+	  }
+	/* Normalise and store r.  */
+	if (remainder > 0)
+	  {
+	    r_ptr[0] = remainder;
+	    r_len = 1;
+	  }
+	else
+	  r_len = 0;
+	/* Normalise q.  */
+	q_len = a_len;
+	if (q_ptr[q_len - 1] == 0)
+	  q_len--;
+      }
+    }
+  else
+    {
+      /* n>1: multiple precision division.
+	 beta^(m-1) <= a < beta^m, beta^(n-1) <= b < beta^n  ==>
+	 beta^(m-n-1) <= a/b < beta^(m-n+1).  */
+      /* Determine s.  */
+      size_t s;
+      {
+	mp_limb_t msd = b_ptr[b_len - 1]; /* = b[n-1], > 0 */
+	s = 31;
+	if (msd >= 0x10000)
+	  {
+	    msd = msd >> 16;
+	    s -= 16;
+	  }
+	if (msd >= 0x100)
+	  {
+	    msd = msd >> 8;
+	    s -= 8;
+	  }
+	if (msd >= 0x10)
+	  {
+	    msd = msd >> 4;
+	    s -= 4;
+	  }
+	if (msd >= 0x4)
+	  {
+	    msd = msd >> 2;
+	    s -= 2;
+	  }
+	if (msd >= 0x2)
+	  {
+	    msd = msd >> 1;
+	    s -= 1;
+	  }
+      }
+      /* 0 <= s < GMP_LIMB_BITS.
+	 Copy b, shifting it left by s bits.  */
+      if (s > 0)
+	{
+	  tmp_roomptr = (mp_limb_t *) malloc (b_len * sizeof (mp_limb_t));
+	  if (tmp_roomptr == NULL)
+	    {
+	      free (roomptr);
+	      return NULL;
+	    }
+	  {
+	    const mp_limb_t *sourceptr = b_ptr;
+	    mp_limb_t *destptr = tmp_roomptr;
+	    mp_twolimb_t accu = 0;
+	    size_t count;
+	    for (count = b_len; count > 0; count--)
+	      {
+		accu += (mp_twolimb_t) *sourceptr++ << s;
+		*destptr++ = (mp_limb_t) accu;
+		accu = accu >> GMP_LIMB_BITS;
+	      }
+	    /* accu must be zero, since that was how s was determined.  */
+	    if (accu != 0)
+	      abort ();
+	  }
+	  b_ptr = tmp_roomptr;
+	}
+      /* Copy a, shifting it left by s bits, yields r.
+	 Memory layout:
+	 At the beginning: r = roomptr[0..a_len],
+	 at the end: r = roomptr[0..b_len-1], q = roomptr[b_len..a_len]  */
+      r_ptr = roomptr;
+      if (s == 0)
+	{
+	  memcpy (r_ptr, a_ptr, a_len * sizeof (mp_limb_t));
+	  r_ptr[a_len] = 0;
+	}
+      else
+	{
+	  const mp_limb_t *sourceptr = a_ptr;
+	  mp_limb_t *destptr = r_ptr;
+	  mp_twolimb_t accu = 0;
+	  size_t count;
+	  for (count = a_len; count > 0; count--)
+	    {
+	      accu += (mp_twolimb_t) *sourceptr++ << s;
+	      *destptr++ = (mp_limb_t) accu;
+	      accu = accu >> GMP_LIMB_BITS;
+	    }
+	  *destptr++ = (mp_limb_t) accu;
+	}
+      q_ptr = roomptr + b_len;
+      q_len = a_len - b_len + 1; /* q will have m-n+1 limbs */
+      {
+	size_t j = a_len - b_len; /* m-n */
+	mp_limb_t b_msd = b_ptr[b_len - 1]; /* b[n-1] */
+	mp_limb_t b_2msd = b_ptr[b_len - 2]; /* b[n-2] */
+	mp_twolimb_t b_msdd = /* b[n-1]*beta+b[n-2] */
+	  ((mp_twolimb_t) b_msd << GMP_LIMB_BITS) | b_2msd;
+	/* Division loop, traversed m-n+1 times.
+	   j counts down, b is unchanged, beta/2 <= b[n-1] < beta.  */
+	for (;;)
+	  {
+	    mp_limb_t q_star;
+	    mp_limb_t c1;
+	    if (r_ptr[j + b_len] < b_msd) /* r[j+n] < b[n-1] ? */
+	      {
+		/* Divide r[j+n]*beta+r[j+n-1] by b[n-1], no overflow.  */
+		mp_twolimb_t num =
+		  ((mp_twolimb_t) r_ptr[j + b_len] << GMP_LIMB_BITS)
+		  | r_ptr[j + b_len - 1];
+		q_star = num / b_msd;
+		c1 = num % b_msd;
+	      }
+	    else
+	      {
+		/* Overflow, hence r[j+n]*beta+r[j+n-1] >= beta*b[n-1].  */
+		q_star = (mp_limb_t)~(mp_limb_t)0; /* q* = beta-1 */
+		/* Test whether r[j+n]*beta+r[j+n-1] - (beta-1)*b[n-1] >= beta
+		   <==> r[j+n]*beta+r[j+n-1] + b[n-1] >= beta*b[n-1]+beta
+		   <==> b[n-1] < floor((r[j+n]*beta+r[j+n-1]+b[n-1])/beta)
+		        {<= beta !}.
+		   If yes, jump directly to the subtraction loop.
+		   (Otherwise, r[j+n]*beta+r[j+n-1] - (beta-1)*b[n-1] < beta
+		    <==> floor((r[j+n]*beta+r[j+n-1]+b[n-1])/beta) = b[n-1] ) */
+		if (r_ptr[j + b_len] > b_msd
+		    || (c1 = r_ptr[j + b_len - 1] + b_msd) < b_msd)
+		  /* r[j+n] >= b[n-1]+1 or
+		     r[j+n] = b[n-1] and the addition r[j+n-1]+b[n-1] gives a
+		     carry.  */
+		  goto subtract;
+	      }
+	    /* q_star = q*,
+	       c1 = (r[j+n]*beta+r[j+n-1]) - q* * b[n-1] (>=0, <beta).  */
+	    {
+	      mp_twolimb_t c2 = /* c1*beta+r[j+n-2] */
+		((mp_twolimb_t) c1 << GMP_LIMB_BITS) | r_ptr[j + b_len - 2];
+	      mp_twolimb_t c3 = /* b[n-2] * q* */
+		(mp_twolimb_t) b_2msd * (mp_twolimb_t) q_star;
+	      /* While c2 < c3, increase c2 and decrease c3.
+		 Consider c3-c2.  While it is > 0, decrease it by
+		 b[n-1]*beta+b[n-2].  Because of b[n-1]*beta+b[n-2] >= beta^2/2
+		 this can happen only twice.  */
+	      if (c3 > c2)
+		{
+		  q_star = q_star - 1; /* q* := q* - 1 */
+		  if (c3 - c2 > b_msdd)
+		    q_star = q_star - 1; /* q* := q* - 1 */
+		}
+	    }
+	    if (q_star > 0)
+	      subtract:
+	      {
+		/* Subtract r := r - b * q* * beta^j.  */
+		mp_limb_t cr;
+		{
+		  const mp_limb_t *sourceptr = b_ptr;
+		  mp_limb_t *destptr = r_ptr + j;
+		  mp_twolimb_t carry = 0;
+		  size_t count;
+		  for (count = b_len; count > 0; count--)
+		    {
+		      /* Here 0 <= carry <= q*.  */
+		      carry =
+			carry
+			+ (mp_twolimb_t) q_star * (mp_twolimb_t) *sourceptr++
+			+ (mp_limb_t) ~(*destptr);
+		      /* Here 0 <= carry <= beta*q* + beta-1.  */
+		      *destptr++ = ~(mp_limb_t) carry;
+		      carry = carry >> GMP_LIMB_BITS; /* <= q* */
+		    }
+		  cr = (mp_limb_t) carry;
+		}
+		/* Subtract cr from r_ptr[j + b_len], then forget about
+		   r_ptr[j + b_len].  */
+		if (cr > r_ptr[j + b_len])
+		  {
+		    /* Subtraction gave a carry.  */
+		    q_star = q_star - 1; /* q* := q* - 1 */
+		    /* Add b back.  */
+		    {
+		      const mp_limb_t *sourceptr = b_ptr;
+		      mp_limb_t *destptr = r_ptr + j;
+		      mp_limb_t carry = 0;
+		      size_t count;
+		      for (count = b_len; count > 0; count--)
+			{
+			  mp_limb_t source1 = *sourceptr++;
+			  mp_limb_t source2 = *destptr;
+			  *destptr++ = source1 + source2 + carry;
+			  carry =
+			    (carry
+			     ? source1 >= (mp_limb_t) ~source2
+			     : source1 > (mp_limb_t) ~source2);
+			}
+		    }
+		    /* Forget about the carry and about r[j+n].  */
+		  }
+	      }
+	    /* q* is determined.  Store it as q[j].  */
+	    q_ptr[j] = q_star;
+	    if (j == 0)
+	      break;
+	    j--;
+	  }
+      }
+      r_len = b_len;
+      /* Normalise q.  */
+      if (q_ptr[q_len - 1] == 0)
+	q_len--;
+# if 0 /* Not needed here, since we need r only to compare it with b/2, and
+	  b is shifted left by s bits.  */
+      /* Shift r right by s bits.  */
+      if (s > 0)
+	{
+	  mp_limb_t ptr = r_ptr + r_len;
+	  mp_twolimb_t accu = 0;
+	  size_t count;
+	  for (count = r_len; count > 0; count--)
+	    {
+	      accu = (mp_twolimb_t) (mp_limb_t) accu << GMP_LIMB_BITS;
+	      accu += (mp_twolimb_t) *--ptr << (GMP_LIMB_BITS - s);
+	      *ptr = (mp_limb_t) (accu >> GMP_LIMB_BITS);
+	    }
+	}
+# endif
+      /* Normalise r.  */
+      while (r_len > 0 && r_ptr[r_len - 1] == 0)
+	r_len--;
+    }
+  /* Compare r << 1 with b.  */
+  if (r_len > b_len)
+    goto increment_q;
+  {
+    size_t i;
+    for (i = b_len;;)
+      {
+	mp_limb_t r_i =
+	  (i <= r_len && i > 0 ? r_ptr[i - 1] >> (GMP_LIMB_BITS - 1) : 0)
+	  | (i < r_len ? r_ptr[i] << 1 : 0);
+	mp_limb_t b_i = (i < b_len ? b_ptr[i] : 0);
+	if (r_i > b_i)
+	  goto increment_q;
+	if (r_i < b_i)
+	  goto keep_q;
+	if (i == 0)
+	  break;
+	i--;
+      }
+  }
+  if (q_len > 0 && ((q_ptr[0] & 1) != 0))
+    /* q is odd.  */
+    increment_q:
+    {
+      size_t i;
+      for (i = 0; i < q_len; i++)
+	if (++(q_ptr[i]) != 0)
+	  goto keep_q;
+      q_ptr[q_len++] = 1;
+    }
+  keep_q:
+  if (tmp_roomptr != NULL)
+    free (tmp_roomptr);
+  q->limbs = q_ptr;
+  q->nlimbs = q_len;
+  return roomptr;
+}
+
+/* Convert a bignum a >= 0, multiplied with 10^extra_zeroes, to decimal
+   representation.
+   Destroys the contents of a.
+   Return the allocated memory - containing the decimal digits in low-to-high
+   order, terminated with a NUL character - in case of success, NULL in case
+   of memory allocation failure.  */
+static char *
+convert_to_decimal (mpn_t a, size_t extra_zeroes)
+{
+  mp_limb_t *a_ptr = a.limbs;
+  size_t a_len = a.nlimbs;
+  /* 0.03345 is slightly larger than log(2)/(9*log(10)).  */
+  size_t c_len = 9 * ((size_t)(a_len * (GMP_LIMB_BITS * 0.03345f)) + 1);
+  char *c_ptr = (char *) malloc (xsum (c_len, extra_zeroes));
+  if (c_ptr != NULL)
+    {
+      char *d_ptr = c_ptr;
+      for (; extra_zeroes > 0; extra_zeroes--)
+	*d_ptr++ = '0';
+      while (a_len > 0)
+	{
+	  /* Divide a by 10^9, in-place.  */
+	  mp_limb_t remainder = 0;
+	  mp_limb_t *ptr = a_ptr + a_len;
+	  size_t count;
+	  for (count = a_len; count > 0; count--)
+	    {
+	      mp_twolimb_t num =
+		((mp_twolimb_t) remainder << GMP_LIMB_BITS) | *--ptr;
+	      *ptr = num / 1000000000;
+	      remainder = num % 1000000000;
+	    }
+	  /* Store the remainder as 9 decimal digits.  */
+	  for (count = 9; count > 0; count--)
+	    {
+	      *d_ptr++ = '0' + (remainder % 10);
+	      remainder = remainder / 10;
+	    }
+	  /* Normalize a.  */
+	  if (a_ptr[a_len - 1] == 0)
+	    a_len--;
+	}
+      /* Remove leading zeroes.  */
+      while (d_ptr > c_ptr && d_ptr[-1] == '0')
+	d_ptr--;
+      /* But keep at least one zero.  */
+      if (d_ptr == c_ptr)
+	*d_ptr++ = '0';
+      /* Terminate the string.  */
+      *d_ptr = '\0';
+    }
+  return c_ptr;
+}
+
+# if NEED_PRINTF_LONG_DOUBLE
+
+/* Assuming x is finite and >= 0:
+   write x as x = 2^e * m, where m is a bignum.
+   Return the allocated memory in case of success, NULL in case of memory
+   allocation failure.  */
+static void *
+decode_long_double (long double x, int *ep, mpn_t *mp)
+{
+  mpn_t m;
+  int exp;
+  long double y;
+  size_t i;
+
+  /* Allocate memory for result.  */
+  m.nlimbs = (LDBL_MANT_BIT + GMP_LIMB_BITS - 1) / GMP_LIMB_BITS;
+  m.limbs = (mp_limb_t *) malloc (m.nlimbs * sizeof (mp_limb_t));
+  if (m.limbs == NULL)
+    return NULL;
+  /* Split into exponential part and mantissa.  */
+  y = frexpl (x, &exp);
+  if (!(y >= 0.0L && y < 1.0L))
+    abort ();
+  /* x = 2^exp * y = 2^(exp - LDBL_MANT_BIT) * (y * LDBL_MANT_BIT), and the
+     latter is an integer.  */
+  /* Convert the mantissa (y * LDBL_MANT_BIT) to a sequence of limbs.
+     I'm not sure whether it's safe to cast a 'long double' value between
+     2^31 and 2^32 to 'unsigned int', therefore play safe and cast only
+     'long double' values between 0 and 2^16 (to 'unsigned int' or 'int',
+     doesn't matter).  */
+#  if (LDBL_MANT_BIT % GMP_LIMB_BITS) != 0
+#   if (LDBL_MANT_BIT % GMP_LIMB_BITS) > GMP_LIMB_BITS / 2
+    {
+      mp_limb_t hi, lo;
+      y *= (mp_limb_t) 1 << (LDBL_MANT_BIT % (GMP_LIMB_BITS / 2));
+      hi = (int) y;
+      y -= hi;
+      if (!(y >= 0.0L && y < 1.0L))
+	abort ();
+      y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2);
+      lo = (int) y;
+      y -= lo;
+      if (!(y >= 0.0L && y < 1.0L))
+	abort ();
+      m.limbs[LDBL_MANT_BIT / GMP_LIMB_BITS] = (hi << (GMP_LIMB_BITS / 2)) | lo;
+    }
+#   else
+    {
+      mp_limb_t d;
+      y *= (mp_limb_t) 1 << (LDBL_MANT_BIT % GMP_LIMB_BITS);
+      d = (int) y;
+      y -= d;
+      if (!(y >= 0.0L && y < 1.0L))
+	abort ();
+      m.limbs[LDBL_MANT_BIT / GMP_LIMB_BITS] = d;
+    }
+#   endif
+#  endif
+  for (i = LDBL_MANT_BIT / GMP_LIMB_BITS; i > 0; )
+    {
+      mp_limb_t hi, lo;
+      y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2);
+      hi = (int) y;
+      y -= hi;
+      if (!(y >= 0.0L && y < 1.0L))
+	abort ();
+      y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2);
+      lo = (int) y;
+      y -= lo;
+      if (!(y >= 0.0L && y < 1.0L))
+	abort ();
+      m.limbs[--i] = (hi << (GMP_LIMB_BITS / 2)) | lo;
+    }
+  if (!(y == 0.0L))
+    abort ();
+  /* Normalise.  */
+  while (m.nlimbs > 0 && m.limbs[m.nlimbs - 1] == 0)
+    m.nlimbs--;
+  *mp = m;
+  *ep = exp - LDBL_MANT_BIT;
+  return m.limbs;
+}
+
+# endif
+
+# if NEED_PRINTF_DOUBLE
+
+/* Assuming x is finite and >= 0:
+   write x as x = 2^e * m, where m is a bignum.
+   Return the allocated memory in case of success, NULL in case of memory
+   allocation failure.  */
+static void *
+decode_double (double x, int *ep, mpn_t *mp)
+{
+  mpn_t m;
+  int exp;
+  double y;
+  size_t i;
+
+  /* Allocate memory for result.  */
+  m.nlimbs = (DBL_MANT_BIT + GMP_LIMB_BITS - 1) / GMP_LIMB_BITS;
+  m.limbs = (mp_limb_t *) malloc (m.nlimbs * sizeof (mp_limb_t));
+  if (m.limbs == NULL)
+    return NULL;
+  /* Split into exponential part and mantissa.  */
+  y = frexp (x, &exp);
+  if (!(y >= 0.0 && y < 1.0))
+    abort ();
+  /* x = 2^exp * y = 2^(exp - DBL_MANT_BIT) * (y * DBL_MANT_BIT), and the
+     latter is an integer.  */
+  /* Convert the mantissa (y * DBL_MANT_BIT) to a sequence of limbs.
+     I'm not sure whether it's safe to cast a 'double' value between
+     2^31 and 2^32 to 'unsigned int', therefore play safe and cast only
+     'double' values between 0 and 2^16 (to 'unsigned int' or 'int',
+     doesn't matter).  */
+#  if (DBL_MANT_BIT % GMP_LIMB_BITS) != 0
+#   if (DBL_MANT_BIT % GMP_LIMB_BITS) > GMP_LIMB_BITS / 2
+    {
+      mp_limb_t hi, lo;
+      y *= (mp_limb_t) 1 << (DBL_MANT_BIT % (GMP_LIMB_BITS / 2));
+      hi = (int) y;
+      y -= hi;
+      if (!(y >= 0.0 && y < 1.0))
+	abort ();
+      y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2);
+      lo = (int) y;
+      y -= lo;
+      if (!(y >= 0.0 && y < 1.0))
+	abort ();
+      m.limbs[DBL_MANT_BIT / GMP_LIMB_BITS] = (hi << (GMP_LIMB_BITS / 2)) | lo;
+    }
+#   else
+    {
+      mp_limb_t d;
+      y *= (mp_limb_t) 1 << (DBL_MANT_BIT % GMP_LIMB_BITS);
+      d = (int) y;
+      y -= d;
+      if (!(y >= 0.0 && y < 1.0))
+	abort ();
+      m.limbs[DBL_MANT_BIT / GMP_LIMB_BITS] = d;
+    }
+#   endif
+#  endif
+  for (i = DBL_MANT_BIT / GMP_LIMB_BITS; i > 0; )
+    {
+      mp_limb_t hi, lo;
+      y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2);
+      hi = (int) y;
+      y -= hi;
+      if (!(y >= 0.0 && y < 1.0))
+	abort ();
+      y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2);
+      lo = (int) y;
+      y -= lo;
+      if (!(y >= 0.0 && y < 1.0))
+	abort ();
+      m.limbs[--i] = (hi << (GMP_LIMB_BITS / 2)) | lo;
+    }
+  if (!(y == 0.0))
+    abort ();
+  /* Normalise.  */
+  while (m.nlimbs > 0 && m.limbs[m.nlimbs - 1] == 0)
+    m.nlimbs--;
+  *mp = m;
+  *ep = exp - DBL_MANT_BIT;
+  return m.limbs;
+}
+
+# endif
+
+/* Assuming x = 2^e * m is finite and >= 0, and n is an integer:
+   Returns the decimal representation of round (x * 10^n).
+   Return the allocated memory - containing the decimal digits in low-to-high
+   order, terminated with a NUL character - in case of success, NULL in case
+   of memory allocation failure.  */
+static char *
+scale10_round_decimal_decoded (int e, mpn_t m, void *memory, int n)
+{
+  int s;
+  size_t extra_zeroes;
+  unsigned int abs_n;
+  unsigned int abs_s;
+  mp_limb_t *pow5_ptr;
+  size_t pow5_len;
+  unsigned int s_limbs;
+  unsigned int s_bits;
+  mpn_t pow5;
+  mpn_t z;
+  void *z_memory;
+  char *digits;
+
+  if (memory == NULL)
+    return NULL;
+  /* x = 2^e * m, hence
+     y = round (2^e * 10^n * m) = round (2^(e+n) * 5^n * m)
+       = round (2^s * 5^n * m).  */
+  s = e + n;
+  extra_zeroes = 0;
+  /* Factor out a common power of 10 if possible.  */
+  if (s > 0 && n > 0)
+    {
+      extra_zeroes = (s < n ? s : n);
+      s -= extra_zeroes;
+      n -= extra_zeroes;
+    }
+  /* Here y = round (2^s * 5^n * m) * 10^extra_zeroes.
+     Before converting to decimal, we need to compute
+     z = round (2^s * 5^n * m).  */
+  /* Compute 5^|n|, possibly shifted by |s| bits if n and s have the same
+     sign.  2.322 is slightly larger than log(5)/log(2).  */
+  abs_n = (n >= 0 ? n : -n);
+  abs_s = (s >= 0 ? s : -s);
+  pow5_ptr = (mp_limb_t *) malloc (((int)(abs_n * (2.322f / GMP_LIMB_BITS)) + 1
+				    + abs_s / GMP_LIMB_BITS + 1)
+				   * sizeof (mp_limb_t));
+  if (pow5_ptr == NULL)
+    {
+      free (memory);
+      return NULL;
+    }
+  /* Initialize with 1.  */
+  pow5_ptr[0] = 1;
+  pow5_len = 1;
+  /* Multiply with 5^|n|.  */
+  if (abs_n > 0)
+    {
+      static mp_limb_t const small_pow5[13 + 1] =
+	{
+	  1, 5, 25, 125, 625, 3125, 15625, 78125, 390625, 1953125, 9765625,
+	  48828125, 244140625, 1220703125
+	};
+      unsigned int n13;
+      for (n13 = 0; n13 <= abs_n; n13 += 13)
+	{
+	  mp_limb_t digit1 = small_pow5[n13 + 13 <= abs_n ? 13 : abs_n - n13];
+	  size_t j;
+	  mp_twolimb_t carry = 0;
+	  for (j = 0; j < pow5_len; j++)
+	    {
+	      mp_limb_t digit2 = pow5_ptr[j];
+	      carry += (mp_twolimb_t) digit1 * (mp_twolimb_t) digit2;
+	      pow5_ptr[j] = (mp_limb_t) carry;
+	      carry = carry >> GMP_LIMB_BITS;
+	    }
+	  if (carry > 0)
+	    pow5_ptr[pow5_len++] = (mp_limb_t) carry;
+	}
+    }
+  s_limbs = abs_s / GMP_LIMB_BITS;
+  s_bits = abs_s % GMP_LIMB_BITS;
+  if (n >= 0 ? s >= 0 : s <= 0)
+    {
+      /* Multiply with 2^|s|.  */
+      if (s_bits > 0)
+	{
+	  mp_limb_t *ptr = pow5_ptr;
+	  mp_twolimb_t accu = 0;
+	  size_t count;
+	  for (count = pow5_len; count > 0; count--)
+	    {
+	      accu += (mp_twolimb_t) *ptr << s_bits;
+	      *ptr++ = (mp_limb_t) accu;
+	      accu = accu >> GMP_LIMB_BITS;
+	    }
+	  if (accu > 0)
+	    {
+	      *ptr = (mp_limb_t) accu;
+	      pow5_len++;
+	    }
+	}
+      if (s_limbs > 0)
+	{
+	  size_t count;
+	  for (count = pow5_len; count > 0;)
+	    {
+	      count--;
+	      pow5_ptr[s_limbs + count] = pow5_ptr[count];
+	    }
+	  for (count = s_limbs; count > 0;)
+	    {
+	      count--;
+	      pow5_ptr[count] = 0;
+	    }
+	  pow5_len += s_limbs;
+	}
+      pow5.limbs = pow5_ptr;
+      pow5.nlimbs = pow5_len;
+      if (n >= 0)
+	{
+	  /* Multiply m with pow5.  No division needed.  */
+	  z_memory = multiply (m, pow5, &z);
+	}
+      else
+	{
+	  /* Divide m by pow5 and round.  */
+	  z_memory = divide (m, pow5, &z);
+	}
+    }
+  else
+    {
+      pow5.limbs = pow5_ptr;
+      pow5.nlimbs = pow5_len;
+      if (n >= 0)
+	{
+	  /* n >= 0, s < 0.
+	     Multiply m with pow5, then divide by 2^|s|.  */
+	  mpn_t numerator;
+	  mpn_t denominator;
+	  void *tmp_memory;
+	  tmp_memory = multiply (m, pow5, &numerator);
+	  if (tmp_memory == NULL)
+	    {
+	      free (pow5_ptr);
+	      free (memory);
+	      return NULL;
+	    }
+	  /* Construct 2^|s|.  */
+	  {
+	    mp_limb_t *ptr = pow5_ptr + pow5_len;
+	    size_t i;
+	    for (i = 0; i < s_limbs; i++)
+	      ptr[i] = 0;
+	    ptr[s_limbs] = (mp_limb_t) 1 << s_bits;
+	    denominator.limbs = ptr;
+	    denominator.nlimbs = s_limbs + 1;
+	  }
+	  z_memory = divide (numerator, denominator, &z);
+	  free (tmp_memory);
+	}
+      else
+	{
+	  /* n < 0, s > 0.
+	     Multiply m with 2^s, then divide by pow5.  */
+	  mpn_t numerator;
+	  mp_limb_t *num_ptr;
+	  num_ptr = (mp_limb_t *) malloc ((m.nlimbs + s_limbs + 1)
+					  * sizeof (mp_limb_t));
+	  if (num_ptr == NULL)
+	    {
+	      free (pow5_ptr);
+	      free (memory);
+	      return NULL;
+	    }
+	  {
+	    mp_limb_t *destptr = num_ptr;
+	    {
+	      size_t i;
+	      for (i = 0; i < s_limbs; i++)
+		*destptr++ = 0;
+	    }
+	    if (s_bits > 0)
+	      {
+		const mp_limb_t *sourceptr = m.limbs;
+		mp_twolimb_t accu = 0;
+		size_t count;
+		for (count = m.nlimbs; count > 0; count--)
+		  {
+		    accu += (mp_twolimb_t) *sourceptr++ << s_bits;
+		    *destptr++ = (mp_limb_t) accu;
+		    accu = accu >> GMP_LIMB_BITS;
+		  }
+		if (accu > 0)
+		  *destptr++ = (mp_limb_t) accu;
+	      }
+	    else
+	      {
+		const mp_limb_t *sourceptr = m.limbs;
+		size_t count;
+		for (count = m.nlimbs; count > 0; count--)
+		  *destptr++ = *sourceptr++;
+	      }
+	    numerator.limbs = num_ptr;
+	    numerator.nlimbs = destptr - num_ptr;
+	  }
+	  z_memory = divide (numerator, pow5, &z);
+	  free (num_ptr);
+	}
+    }
+  free (pow5_ptr);
+  free (memory);
+
+  /* Here y = round (x * 10^n) = z * 10^extra_zeroes.  */
+
+  if (z_memory == NULL)
+    return NULL;
+  digits = convert_to_decimal (z, extra_zeroes);
+  free (z_memory);
+  return digits;
+}
+
+# if NEED_PRINTF_LONG_DOUBLE
+
+/* Assuming x is finite and >= 0, and n is an integer:
+   Returns the decimal representation of round (x * 10^n).
+   Return the allocated memory - containing the decimal digits in low-to-high
+   order, terminated with a NUL character - in case of success, NULL in case
+   of memory allocation failure.  */
+static char *
+scale10_round_decimal_long_double (long double x, int n)
+{
+  int e;
+  mpn_t m;
+  void *memory = decode_long_double (x, &e, &m);
+  return scale10_round_decimal_decoded (e, m, memory, n);
+}
+
+# endif
+
+# if NEED_PRINTF_DOUBLE
+
+/* Assuming x is finite and >= 0, and n is an integer:
+   Returns the decimal representation of round (x * 10^n).
+   Return the allocated memory - containing the decimal digits in low-to-high
+   order, terminated with a NUL character - in case of success, NULL in case
+   of memory allocation failure.  */
+static char *
+scale10_round_decimal_double (double x, int n)
+{
+  int e;
+  mpn_t m;
+  void *memory = decode_double (x, &e, &m);
+  return scale10_round_decimal_decoded (e, m, memory, n);
+}
+
+# endif
+
+# if NEED_PRINTF_LONG_DOUBLE
+
+/* Assuming x is finite and > 0:
+   Return an approximation for n with 10^n <= x < 10^(n+1).
+   The approximation is usually the right n, but may be off by 1 sometimes.  */
+static int
+floorlog10l (long double x)
+{
+  int exp;
+  long double y;
+  double z;
+  double l;
+
+  /* Split into exponential part and mantissa.  */
+  y = frexpl (x, &exp);
+  if (!(y >= 0.0L && y < 1.0L))
+    abort ();
+  if (y == 0.0L)
+    return INT_MIN;
+  if (y < 0.5L)
+    {
+      while (y < (1.0L / (1 << (GMP_LIMB_BITS / 2)) / (1 << (GMP_LIMB_BITS / 2))))
+	{
+	  y *= 1.0L * (1 << (GMP_LIMB_BITS / 2)) * (1 << (GMP_LIMB_BITS / 2));
+	  exp -= GMP_LIMB_BITS;
+	}
+      if (y < (1.0L / (1 << 16)))
+	{
+	  y *= 1.0L * (1 << 16);
+	  exp -= 16;
+	}
+      if (y < (1.0L / (1 << 8)))
+	{
+	  y *= 1.0L * (1 << 8);
+	  exp -= 8;
+	}
+      if (y < (1.0L / (1 << 4)))
+	{
+	  y *= 1.0L * (1 << 4);
+	  exp -= 4;
+	}
+      if (y < (1.0L / (1 << 2)))
+	{
+	  y *= 1.0L * (1 << 2);
+	  exp -= 2;
+	}
+      if (y < (1.0L / (1 << 1)))
+	{
+	  y *= 1.0L * (1 << 1);
+	  exp -= 1;
+	}
+    }
+  if (!(y >= 0.5L && y < 1.0L))
+    abort ();
+  /* Compute an approximation for l = log2(x) = exp + log2(y).  */
+  l = exp;
+  z = y;
+  if (z < 0.70710678118654752444)
+    {
+      z *= 1.4142135623730950488;
+      l -= 0.5;
+    }
+  if (z < 0.8408964152537145431)
+    {
+      z *= 1.1892071150027210667;
+      l -= 0.25;
+    }
+  if (z < 0.91700404320467123175)
+    {
+      z *= 1.0905077326652576592;
+      l -= 0.125;
+    }
+  if (z < 0.9576032806985736469)
+    {
+      z *= 1.0442737824274138403;
+      l -= 0.0625;
+    }
+  /* Now 0.95 <= z <= 1.01.  */
+  z = 1 - z;
+  /* log(1-z) = - z - z^2/2 - z^3/3 - z^4/4 - ...
+     Four terms are enough to get an approximation with error < 10^-7.  */
+  l -= z * (1.0 + z * (0.5 + z * ((1.0 / 3) + z * 0.25)));
+  /* Finally multiply with log(2)/log(10), yields an approximation for
+     log10(x).  */
+  l *= 0.30102999566398119523;
+  /* Round down to the next integer.  */
+  return (int) l + (l < 0 ? -1 : 0);
+}
+
+# endif
+
+# if NEED_PRINTF_DOUBLE
+
+/* Assuming x is finite and > 0:
+   Return an approximation for n with 10^n <= x < 10^(n+1).
+   The approximation is usually the right n, but may be off by 1 sometimes.  */
+static int
+floorlog10 (double x)
+{
+  int exp;
+  double y;
+  double z;
+  double l;
+
+  /* Split into exponential part and mantissa.  */
+  y = frexp (x, &exp);
+  if (!(y >= 0.0 && y < 1.0))
+    abort ();
+  if (y == 0.0)
+    return INT_MIN;
+  if (y < 0.5)
+    {
+      while (y < (1.0 / (1 << (GMP_LIMB_BITS / 2)) / (1 << (GMP_LIMB_BITS / 2))))
+	{
+	  y *= 1.0 * (1 << (GMP_LIMB_BITS / 2)) * (1 << (GMP_LIMB_BITS / 2));
+	  exp -= GMP_LIMB_BITS;
+	}
+      if (y < (1.0 / (1 << 16)))
+	{
+	  y *= 1.0 * (1 << 16);
+	  exp -= 16;
+	}
+      if (y < (1.0 / (1 << 8)))
+	{
+	  y *= 1.0 * (1 << 8);
+	  exp -= 8;
+	}
+      if (y < (1.0 / (1 << 4)))
+	{
+	  y *= 1.0 * (1 << 4);
+	  exp -= 4;
+	}
+      if (y < (1.0 / (1 << 2)))
+	{
+	  y *= 1.0 * (1 << 2);
+	  exp -= 2;
+	}
+      if (y < (1.0 / (1 << 1)))
+	{
+	  y *= 1.0 * (1 << 1);
+	  exp -= 1;
+	}
+    }
+  if (!(y >= 0.5 && y < 1.0))
+    abort ();
+  /* Compute an approximation for l = log2(x) = exp + log2(y).  */
+  l = exp;
+  z = y;
+  if (z < 0.70710678118654752444)
+    {
+      z *= 1.4142135623730950488;
+      l -= 0.5;
+    }
+  if (z < 0.8408964152537145431)
+    {
+      z *= 1.1892071150027210667;
+      l -= 0.25;
+    }
+  if (z < 0.91700404320467123175)
+    {
+      z *= 1.0905077326652576592;
+      l -= 0.125;
+    }
+  if (z < 0.9576032806985736469)
+    {
+      z *= 1.0442737824274138403;
+      l -= 0.0625;
+    }
+  /* Now 0.95 <= z <= 1.01.  */
+  z = 1 - z;
+  /* log(1-z) = - z - z^2/2 - z^3/3 - z^4/4 - ...
+     Four terms are enough to get an approximation with error < 10^-7.  */
+  l -= z * (1.0 + z * (0.5 + z * ((1.0 / 3) + z * 0.25)));
+  /* Finally multiply with log(2)/log(10), yields an approximation for
+     log10(x).  */
+  l *= 0.30102999566398119523;
+  /* Round down to the next integer.  */
+  return (int) l + (l < 0 ? -1 : 0);
+}
+
+# endif
+
+#endif
+
+DCHAR_T *
+VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp,
+	    const FCHAR_T *format, va_list args)
+{
+  DIRECTIVES d;
+  arguments a;
+
+  if (PRINTF_PARSE (format, &d, &a) < 0)
+    /* errno is already set.  */
+    return NULL;
+
+#define CLEANUP() \
+  free (d.dir);								\
+  if (a.arg)								\
+    free (a.arg);
+
+  if (PRINTF_FETCHARGS (args, &a) < 0)
+    {
+      CLEANUP ();
+      errno = EINVAL;
+      return NULL;
+    }
+
+  {
+    size_t buf_neededlength;
+    TCHAR_T *buf;
+    TCHAR_T *buf_malloced;
+    const FCHAR_T *cp;
+    size_t i;
+    DIRECTIVE *dp;
+    /* Output string accumulator.  */
+    DCHAR_T *result;
+    size_t allocated;
+    size_t length;
+
+    /* Allocate a small buffer that will hold a directive passed to
+       sprintf or snprintf.  */
+    buf_neededlength =
+      xsum4 (7, d.max_width_length, d.max_precision_length, 6);
+#if HAVE_ALLOCA
+    if (buf_neededlength < 4000 / sizeof (TCHAR_T))
+      {
+	buf = (TCHAR_T *) alloca (buf_neededlength * sizeof (TCHAR_T));
+	buf_malloced = NULL;
+      }
+    else
+#endif
+      {
+	size_t buf_memsize = xtimes (buf_neededlength, sizeof (TCHAR_T));
+	if (size_overflow_p (buf_memsize))
+	  goto out_of_memory_1;
+	buf = (TCHAR_T *) malloc (buf_memsize);
+	if (buf == NULL)
+	  goto out_of_memory_1;
+	buf_malloced = buf;
+      }
+
+    if (resultbuf != NULL)
+      {
+	result = resultbuf;
+	allocated = *lengthp;
+      }
+    else
+      {
+	result = NULL;
+	allocated = 0;
+      }
+    length = 0;
+    /* Invariants:
+       result is either == resultbuf or == NULL or malloc-allocated.
+       If length > 0, then result != NULL.  */
+
+    /* Ensures that allocated >= needed.  Aborts through a jump to
+       out_of_memory if needed is SIZE_MAX or otherwise too big.  */
+#define ENSURE_ALLOCATION(needed) \
+    if ((needed) > allocated)						     \
+      {									     \
+	size_t memory_size;						     \
+	DCHAR_T *memory;						     \
+									     \
+	allocated = (allocated > 0 ? xtimes (allocated, 2) : 12);	     \
+	if ((needed) > allocated)					     \
+	  allocated = (needed);						     \
+	memory_size = xtimes (allocated, sizeof (DCHAR_T));		     \
+	if (size_overflow_p (memory_size))				     \
+	  goto out_of_memory;						     \
+	if (result == resultbuf || result == NULL)			     \
+	  memory = (DCHAR_T *) malloc (memory_size);			     \
+	else								     \
+	  memory = (DCHAR_T *) realloc (result, memory_size);		     \
+	if (memory == NULL)						     \
+	  goto out_of_memory;						     \
+	if (result == resultbuf && length > 0)				     \
+	  DCHAR_CPY (memory, result, length);				     \
+	result = memory;						     \
+      }
+
+    for (cp = format, i = 0, dp = &d.dir[0]; ; cp = dp->dir_end, i++, dp++)
+      {
+	if (cp != dp->dir_start)
+	  {
+	    size_t n = dp->dir_start - cp;
+	    size_t augmented_length = xsum (length, n);
+
+	    ENSURE_ALLOCATION (augmented_length);
+	    /* This copies a piece of FCHAR_T[] into a DCHAR_T[].  Here we
+	       need that the format string contains only ASCII characters
+	       if FCHAR_T and DCHAR_T are not the same type.  */
+	    if (sizeof (FCHAR_T) == sizeof (DCHAR_T))
+	      {
+		DCHAR_CPY (result + length, (const DCHAR_T *) cp, n);
+		length = augmented_length;
+	      }
+	    else
+	      {
+		do
+		  result[length++] = (unsigned char) *cp++;
+		while (--n > 0);
+	      }
+	  }
+	if (i == d.count)
+	  break;
+
+	/* Execute a single directive.  */
+	if (dp->conversion == '%')
+	  {
+	    size_t augmented_length;
+
+	    if (!(dp->arg_index == ARG_NONE))
+	      abort ();
+	    augmented_length = xsum (length, 1);
+	    ENSURE_ALLOCATION (augmented_length);
+	    result[length] = '%';
+	    length = augmented_length;
+	  }
+	else
+	  {
+	    if (!(dp->arg_index != ARG_NONE))
+	      abort ();
+
+	    if (dp->conversion == 'n')
+	      {
+		switch (a.arg[dp->arg_index].type)
+		  {
+		  case TYPE_COUNT_SCHAR_POINTER:
+		    *a.arg[dp->arg_index].a.a_count_schar_pointer = length;
+		    break;
+		  case TYPE_COUNT_SHORT_POINTER:
+		    *a.arg[dp->arg_index].a.a_count_short_pointer = length;
+		    break;
+		  case TYPE_COUNT_INT_POINTER:
+		    *a.arg[dp->arg_index].a.a_count_int_pointer = length;
+		    break;
+		  case TYPE_COUNT_LONGINT_POINTER:
+		    *a.arg[dp->arg_index].a.a_count_longint_pointer = length;
+		    break;
+#if HAVE_LONG_LONG_INT
+		  case TYPE_COUNT_LONGLONGINT_POINTER:
+		    *a.arg[dp->arg_index].a.a_count_longlongint_pointer = length;
+		    break;
+#endif
+		  default:
+		    abort ();
+		  }
+	      }
+#if ENABLE_UNISTDIO
+	    /* The unistdio extensions.  */
+	    else if (dp->conversion == 'U')
+	      {
+		arg_type type = a.arg[dp->arg_index].type;
+		int flags = dp->flags;
+		int has_width;
+		size_t width;
+		int has_precision;
+		size_t precision;
+
+		has_width = 0;
+		width = 0;
+		if (dp->width_start != dp->width_end)
+		  {
+		    if (dp->width_arg_index != ARG_NONE)
+		      {
+			int arg;
+
+			if (!(a.arg[dp->width_arg_index].type == TYPE_INT))
+			  abort ();
+			arg = a.arg[dp->width_arg_index].a.a_int;
+			if (arg < 0)
+			  {
+			    /* "A negative field width is taken as a '-' flag
+			        followed by a positive field width."  */
+			    flags |= FLAG_LEFT;
+			    width = (unsigned int) (-arg);
+			  }
+			else
+			  width = arg;
+		      }
+		    else
+		      {
+			const FCHAR_T *digitp = dp->width_start;
+
+			do
+			  width = xsum (xtimes (width, 10), *digitp++ - '0');
+			while (digitp != dp->width_end);
+		      }
+		    has_width = 1;
+		  }
+
+		has_precision = 0;
+		precision = 0;
+		if (dp->precision_start != dp->precision_end)
+		  {
+		    if (dp->precision_arg_index != ARG_NONE)
+		      {
+			int arg;
+
+			if (!(a.arg[dp->precision_arg_index].type == TYPE_INT))
+			  abort ();
+			arg = a.arg[dp->precision_arg_index].a.a_int;
+			/* "A negative precision is taken as if the precision
+			    were omitted."  */
+			if (arg >= 0)
+			  {
+			    precision = arg;
+			    has_precision = 1;
+			  }
+		      }
+		    else
+		      {
+			const FCHAR_T *digitp = dp->precision_start + 1;
+
+			precision = 0;
+			while (digitp != dp->precision_end)
+			  precision = xsum (xtimes (precision, 10), *digitp++ - '0');
+			has_precision = 1;
+		      }
+		  }
+
+		switch (type)
+		  {
+		  case TYPE_U8_STRING:
+		    {
+		      const uint8_t *arg = a.arg[dp->arg_index].a.a_u8_string;
+		      const uint8_t *arg_end;
+		      size_t characters;
+
+		      if (has_precision)
+			{
+			  /* Use only PRECISION characters, from the left.  */
+			  arg_end = arg;
+			  characters = 0;
+			  for (; precision > 0; precision--)
+			    {
+			      int count = u8_strmblen (arg_end);
+			      if (count == 0)
+				break;
+			      if (count < 0)
+				{
+				  if (!(result == resultbuf || result == NULL))
+				    free (result);
+				  if (buf_malloced != NULL)
+				    free (buf_malloced);
+				  CLEANUP ();
+				  errno = EILSEQ;
+				  return NULL;
+				}
+			      arg_end += count;
+			      characters++;
+			    }
+			}
+		      else if (has_width)
+			{
+			  /* Use the entire string, and count the number of
+			     characters.  */
+			  arg_end = arg;
+			  characters = 0;
+			  for (;;)
+			    {
+			      int count = u8_strmblen (arg_end);
+			      if (count == 0)
+				break;
+			      if (count < 0)
+				{
+				  if (!(result == resultbuf || result == NULL))
+				    free (result);
+				  if (buf_malloced != NULL)
+				    free (buf_malloced);
+				  CLEANUP ();
+				  errno = EILSEQ;
+				  return NULL;
+				}
+			      arg_end += count;
+			      characters++;
+			    }
+			}
+		      else
+			{
+			  /* Use the entire string.  */
+			  arg_end = arg + u8_strlen (arg);
+			  /* The number of characters doesn't matter.  */
+			  characters = 0;
+			}
+
+		      if (has_width && width > characters
+			  && !(dp->flags & FLAG_LEFT))
+			{
+			  size_t n = width - characters;
+			  ENSURE_ALLOCATION (xsum (length, n));
+			  DCHAR_SET (result + length, ' ', n);
+			  length += n;
+			}
+
+# if DCHAR_IS_UINT8_T
+		      {
+			size_t n = arg_end - arg;
+			ENSURE_ALLOCATION (xsum (length, n));
+			DCHAR_CPY (result + length, arg, n);
+			length += n;
+		      }
+# else
+		      { /* Convert.  */
+			DCHAR_T *converted = result + length;
+			size_t converted_len = allocated - length;
+#  if DCHAR_IS_TCHAR
+			/* Convert from UTF-8 to locale encoding.  */
+			if (u8_conv_to_encoding (locale_charset (),
+						 iconveh_question_mark,
+						 arg, arg_end - arg, NULL,
+						 &converted, &converted_len)
+			    < 0)
+#  else
+			/* Convert from UTF-8 to UTF-16/UTF-32.  */
+			converted =
+			  U8_TO_DCHAR (arg, arg_end - arg,
+				       converted, &converted_len);
+			if (converted == NULL)
+#  endif
+			  {
+			    int saved_errno = errno;
+			    if (!(result == resultbuf || result == NULL))
+			      free (result);
+			    if (buf_malloced != NULL)
+			      free (buf_malloced);
+			    CLEANUP ();
+			    errno = saved_errno;
+			    return NULL;
+			  }
+			if (converted != result + length)
+			  {
+			    ENSURE_ALLOCATION (xsum (length, converted_len));
+			    DCHAR_CPY (result + length, converted, converted_len);
+			    free (converted);
+			  }
+			length += converted_len;
+		      }
+# endif
+
+		      if (has_width && width > characters
+			  && (dp->flags & FLAG_LEFT))
+			{
+			  size_t n = width - characters;
+			  ENSURE_ALLOCATION (xsum (length, n));
+			  DCHAR_SET (result + length, ' ', n);
+			  length += n;
+			}
+		    }
+		    break;
+
+		  case TYPE_U16_STRING:
+		    {
+		      const uint16_t *arg = a.arg[dp->arg_index].a.a_u16_string;
+		      const uint16_t *arg_end;
+		      size_t characters;
+
+		      if (has_precision)
+			{
+			  /* Use only PRECISION characters, from the left.  */
+			  arg_end = arg;
+			  characters = 0;
+			  for (; precision > 0; precision--)
+			    {
+			      int count = u16_strmblen (arg_end);
+			      if (count == 0)
+				break;
+			      if (count < 0)
+				{
+				  if (!(result == resultbuf || result == NULL))
+				    free (result);
+				  if (buf_malloced != NULL)
+				    free (buf_malloced);
+				  CLEANUP ();
+				  errno = EILSEQ;
+				  return NULL;
+				}
+			      arg_end += count;
+			      characters++;
+			    }
+			}
+		      else if (has_width)
+			{
+			  /* Use the entire string, and count the number of
+			     characters.  */
+			  arg_end = arg;
+			  characters = 0;
+			  for (;;)
+			    {
+			      int count = u16_strmblen (arg_end);
+			      if (count == 0)
+				break;
+			      if (count < 0)
+				{
+				  if (!(result == resultbuf || result == NULL))
+				    free (result);
+				  if (buf_malloced != NULL)
+				    free (buf_malloced);
+				  CLEANUP ();
+				  errno = EILSEQ;
+				  return NULL;
+				}
+			      arg_end += count;
+			      characters++;
+			    }
+			}
+		      else
+			{
+			  /* Use the entire string.  */
+			  arg_end = arg + u16_strlen (arg);
+			  /* The number of characters doesn't matter.  */
+			  characters = 0;
+			}
+
+		      if (has_width && width > characters
+			  && !(dp->flags & FLAG_LEFT))
+			{
+			  size_t n = width - characters;
+			  ENSURE_ALLOCATION (xsum (length, n));
+			  DCHAR_SET (result + length, ' ', n);
+			  length += n;
+			}
+
+# if DCHAR_IS_UINT16_T
+		      {
+			size_t n = arg_end - arg;
+			ENSURE_ALLOCATION (xsum (length, n));
+			DCHAR_CPY (result + length, arg, n);
+			length += n;
+		      }
+# else
+		      { /* Convert.  */
+			DCHAR_T *converted = result + length;
+			size_t converted_len = allocated - length;
+#  if DCHAR_IS_TCHAR
+			/* Convert from UTF-16 to locale encoding.  */
+			if (u16_conv_to_encoding (locale_charset (),
+						  iconveh_question_mark,
+						  arg, arg_end - arg, NULL,
+						  &converted, &converted_len)
+			    < 0)
+#  else
+			/* Convert from UTF-16 to UTF-8/UTF-32.  */
+			converted =
+			  U16_TO_DCHAR (arg, arg_end - arg,
+					converted, &converted_len);
+			if (converted == NULL)
+#  endif
+			  {
+			    int saved_errno = errno;
+			    if (!(result == resultbuf || result == NULL))
+			      free (result);
+			    if (buf_malloced != NULL)
+			      free (buf_malloced);
+			    CLEANUP ();
+			    errno = saved_errno;
+			    return NULL;
+			  }
+			if (converted != result + length)
+			  {
+			    ENSURE_ALLOCATION (xsum (length, converted_len));
+			    DCHAR_CPY (result + length, converted, converted_len);
+			    free (converted);
+			  }
+			length += converted_len;
+		      }
+# endif
+
+		      if (has_width && width > characters
+			  && (dp->flags & FLAG_LEFT))
+			{
+			  size_t n = width - characters;
+			  ENSURE_ALLOCATION (xsum (length, n));
+			  DCHAR_SET (result + length, ' ', n);
+			  length += n;
+			}
+		    }
+		    break;
+
+		  case TYPE_U32_STRING:
+		    {
+		      const uint32_t *arg = a.arg[dp->arg_index].a.a_u32_string;
+		      const uint32_t *arg_end;
+		      size_t characters;
+
+		      if (has_precision)
+			{
+			  /* Use only PRECISION characters, from the left.  */
+			  arg_end = arg;
+			  characters = 0;
+			  for (; precision > 0; precision--)
+			    {
+			      int count = u32_strmblen (arg_end);
+			      if (count == 0)
+				break;
+			      if (count < 0)
+				{
+				  if (!(result == resultbuf || result == NULL))
+				    free (result);
+				  if (buf_malloced != NULL)
+				    free (buf_malloced);
+				  CLEANUP ();
+				  errno = EILSEQ;
+				  return NULL;
+				}
+			      arg_end += count;
+			      characters++;
+			    }
+			}
+		      else if (has_width)
+			{
+			  /* Use the entire string, and count the number of
+			     characters.  */
+			  arg_end = arg;
+			  characters = 0;
+			  for (;;)
+			    {
+			      int count = u32_strmblen (arg_end);
+			      if (count == 0)
+				break;
+			      if (count < 0)
+				{
+				  if (!(result == resultbuf || result == NULL))
+				    free (result);
+				  if (buf_malloced != NULL)
+				    free (buf_malloced);
+				  CLEANUP ();
+				  errno = EILSEQ;
+				  return NULL;
+				}
+			      arg_end += count;
+			      characters++;
+			    }
+			}
+		      else
+			{
+			  /* Use the entire string.  */
+			  arg_end = arg + u32_strlen (arg);
+			  /* The number of characters doesn't matter.  */
+			  characters = 0;
+			}
+
+		      if (has_width && width > characters
+			  && !(dp->flags & FLAG_LEFT))
+			{
+			  size_t n = width - characters;
+			  ENSURE_ALLOCATION (xsum (length, n));
+			  DCHAR_SET (result + length, ' ', n);
+			  length += n;
+			}
+
+# if DCHAR_IS_UINT32_T
+		      {
+			size_t n = arg_end - arg;
+			ENSURE_ALLOCATION (xsum (length, n));
+			DCHAR_CPY (result + length, arg, n);
+			length += n;
+		      }
+# else
+		      { /* Convert.  */
+			DCHAR_T *converted = result + length;
+			size_t converted_len = allocated - length;
+#  if DCHAR_IS_TCHAR
+			/* Convert from UTF-32 to locale encoding.  */
+			if (u32_conv_to_encoding (locale_charset (),
+						  iconveh_question_mark,
+						  arg, arg_end - arg, NULL,
+						  &converted, &converted_len)
+			    < 0)
+#  else
+			/* Convert from UTF-32 to UTF-8/UTF-16.  */
+			converted =
+			  U32_TO_DCHAR (arg, arg_end - arg,
+					converted, &converted_len);
+			if (converted == NULL)
+#  endif
+			  {
+			    int saved_errno = errno;
+			    if (!(result == resultbuf || result == NULL))
+			      free (result);
+			    if (buf_malloced != NULL)
+			      free (buf_malloced);
+			    CLEANUP ();
+			    errno = saved_errno;
+			    return NULL;
+			  }
+			if (converted != result + length)
+			  {
+			    ENSURE_ALLOCATION (xsum (length, converted_len));
+			    DCHAR_CPY (result + length, converted, converted_len);
+			    free (converted);
+			  }
+			length += converted_len;
+		      }
+# endif
+
+		      if (has_width && width > characters
+			  && (dp->flags & FLAG_LEFT))
+			{
+			  size_t n = width - characters;
+			  ENSURE_ALLOCATION (xsum (length, n));
+			  DCHAR_SET (result + length, ' ', n);
+			  length += n;
+			}
+		    }
+		    break;
+
+		  default:
+		    abort ();
+		  }
+	      }
+#endif
+#if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL
+	    else if ((dp->conversion == 'a' || dp->conversion == 'A')
+# if !(NEED_PRINTF_DIRECTIVE_A || (NEED_PRINTF_LONG_DOUBLE && NEED_PRINTF_DOUBLE))
+		     && (0
+#  if NEED_PRINTF_DOUBLE
+			 || a.arg[dp->arg_index].type == TYPE_DOUBLE
+#  endif
+#  if NEED_PRINTF_LONG_DOUBLE
+			 || a.arg[dp->arg_index].type == TYPE_LONGDOUBLE
+#  endif
+			)
+# endif
+		    )
+	      {
+		arg_type type = a.arg[dp->arg_index].type;
+		int flags = dp->flags;
+		int has_width;
+		size_t width;
+		int has_precision;
+		size_t precision;
+		size_t tmp_length;
+		DCHAR_T tmpbuf[700];
+		DCHAR_T *tmp;
+		DCHAR_T *pad_ptr;
+		DCHAR_T *p;
+
+		has_width = 0;
+		width = 0;
+		if (dp->width_start != dp->width_end)
+		  {
+		    if (dp->width_arg_index != ARG_NONE)
+		      {
+			int arg;
+
+			if (!(a.arg[dp->width_arg_index].type == TYPE_INT))
+			  abort ();
+			arg = a.arg[dp->width_arg_index].a.a_int;
+			if (arg < 0)
+			  {
+			    /* "A negative field width is taken as a '-' flag
+			        followed by a positive field width."  */
+			    flags |= FLAG_LEFT;
+			    width = (unsigned int) (-arg);
+			  }
+			else
+			  width = arg;
+		      }
+		    else
+		      {
+			const FCHAR_T *digitp = dp->width_start;
+
+			do
+			  width = xsum (xtimes (width, 10), *digitp++ - '0');
+			while (digitp != dp->width_end);
+		      }
+		    has_width = 1;
+		  }
+
+		has_precision = 0;
+		precision = 0;
+		if (dp->precision_start != dp->precision_end)
+		  {
+		    if (dp->precision_arg_index != ARG_NONE)
+		      {
+			int arg;
+
+			if (!(a.arg[dp->precision_arg_index].type == TYPE_INT))
+			  abort ();
+			arg = a.arg[dp->precision_arg_index].a.a_int;
+			/* "A negative precision is taken as if the precision
+			    were omitted."  */
+			if (arg >= 0)
+			  {
+			    precision = arg;
+			    has_precision = 1;
+			  }
+		      }
+		    else
+		      {
+			const FCHAR_T *digitp = dp->precision_start + 1;
+
+			precision = 0;
+			while (digitp != dp->precision_end)
+			  precision = xsum (xtimes (precision, 10), *digitp++ - '0');
+			has_precision = 1;
+		      }
+		  }
+
+		/* Allocate a temporary buffer of sufficient size.  */
+		if (type == TYPE_LONGDOUBLE)
+		  tmp_length =
+		    (unsigned int) ((LDBL_DIG + 1)
+				    * 0.831 /* decimal -> hexadecimal */
+				   )
+		    + 1; /* turn floor into ceil */
+		else
+		  tmp_length =
+		    (unsigned int) ((DBL_DIG + 1)
+				    * 0.831 /* decimal -> hexadecimal */
+				   )
+		    + 1; /* turn floor into ceil */
+		if (tmp_length < precision)
+		  tmp_length = precision;
+		/* Account for sign, decimal point etc. */
+		tmp_length = xsum (tmp_length, 12);
+
+		if (tmp_length < width)
+		  tmp_length = width;
+
+		tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */
+
+		if (tmp_length <= sizeof (tmpbuf) / sizeof (DCHAR_T))
+		  tmp = tmpbuf;
+		else
+		  {
+		    size_t tmp_memsize = xtimes (tmp_length, sizeof (DCHAR_T));
+
+		    if (size_overflow_p (tmp_memsize))
+		      /* Overflow, would lead to out of memory.  */
+		      goto out_of_memory;
+		    tmp = (DCHAR_T *) malloc (tmp_memsize);
+		    if (tmp == NULL)
+		      /* Out of memory.  */
+		      goto out_of_memory;
+		  }
+
+		pad_ptr = NULL;
+		p = tmp;
+		if (type == TYPE_LONGDOUBLE)
+		  {
+# if NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE
+		    long double arg = a.arg[dp->arg_index].a.a_longdouble;
+
+		    if (isnanl (arg))
+		      {
+			if (dp->conversion == 'A')
+			  {
+			    *p++ = 'N'; *p++ = 'A'; *p++ = 'N';
+			  }
+			else
+			  {
+			    *p++ = 'n'; *p++ = 'a'; *p++ = 'n';
+			  }
+		      }
+		    else
+		      {
+			int sign = 0;
+			DECL_LONG_DOUBLE_ROUNDING
+
+			BEGIN_LONG_DOUBLE_ROUNDING ();
+
+			if (signbit (arg)) /* arg < 0.0L or negative zero */
+			  {
+			    sign = -1;
+			    arg = -arg;
+			  }
+
+			if (sign < 0)
+			  *p++ = '-';
+			else if (flags & FLAG_SHOWSIGN)
+			  *p++ = '+';
+			else if (flags & FLAG_SPACE)
+			  *p++ = ' ';
+
+			if (arg > 0.0L && arg + arg == arg)
+			  {
+			    if (dp->conversion == 'A')
+			      {
+				*p++ = 'I'; *p++ = 'N'; *p++ = 'F';
+			      }
+			    else
+			      {
+				*p++ = 'i'; *p++ = 'n'; *p++ = 'f';
+			      }
+			  }
+			else
+			  {
+			    int exponent;
+			    long double mantissa;
+
+			    if (arg > 0.0L)
+			      mantissa = printf_frexpl (arg, &exponent);
+			    else
+			      {
+				exponent = 0;
+				mantissa = 0.0L;
+			      }
+
+			    if (has_precision
+				&& precision < (unsigned int) ((LDBL_DIG + 1) * 0.831) + 1)
+			      {
+				/* Round the mantissa.  */
+				long double tail = mantissa;
+				size_t q;
+
+				for (q = precision; ; q--)
+				  {
+				    int digit = (int) tail;
+				    tail -= digit;
+				    if (q == 0)
+				      {
+					if (digit & 1 ? tail >= 0.5L : tail > 0.5L)
+					  tail = 1 - tail;
+					else
+					  tail = - tail;
+					break;
+				      }
+				    tail *= 16.0L;
+				  }
+				if (tail != 0.0L)
+				  for (q = precision; q > 0; q--)
+				    tail *= 0.0625L;
+				mantissa += tail;
+			      }
+
+			    *p++ = '0';
+			    *p++ = dp->conversion - 'A' + 'X';
+			    pad_ptr = p;
+			    {
+			      int digit;
+
+			      digit = (int) mantissa;
+			      mantissa -= digit;
+			      *p++ = '0' + digit;
+			      if ((flags & FLAG_ALT)
+				  || mantissa > 0.0L || precision > 0)
+				{
+				  *p++ = decimal_point_char ();
+				  /* This loop terminates because we assume
+				     that FLT_RADIX is a power of 2.  */
+				  while (mantissa > 0.0L)
+				    {
+				      mantissa *= 16.0L;
+				      digit = (int) mantissa;
+				      mantissa -= digit;
+				      *p++ = digit
+					     + (digit < 10
+						? '0'
+						: dp->conversion - 10);
+				      if (precision > 0)
+					precision--;
+				    }
+				  while (precision > 0)
+				    {
+				      *p++ = '0';
+				      precision--;
+				    }
+				}
+			      }
+			      *p++ = dp->conversion - 'A' + 'P';
+#  if WIDE_CHAR_VERSION
+			      {
+				static const wchar_t decimal_format[] =
+				  { '%', '+', 'd', '\0' };
+				SNPRINTF (p, 6 + 1, decimal_format, exponent);
+			      }
+			      while (*p != '\0')
+				p++;
+#  else
+			      if (sizeof (DCHAR_T) == 1)
+				{
+				  sprintf ((char *) p, "%+d", exponent);
+				  while (*p != '\0')
+				    p++;
+				}
+			      else
+				{
+				  char expbuf[6 + 1];
+				  const char *ep;
+				  sprintf (expbuf, "%+d", exponent);
+				  for (ep = expbuf; (*p = *ep) != '\0'; ep++)
+				    p++;
+				}
+#  endif
+			  }
+
+			END_LONG_DOUBLE_ROUNDING ();
+		      }
+# else
+		    abort ();
+# endif
+		  }
+		else
+		  {
+# if NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_DOUBLE
+		    double arg = a.arg[dp->arg_index].a.a_double;
+
+		    if (isnan (arg))
+		      {
+			if (dp->conversion == 'A')
+			  {
+			    *p++ = 'N'; *p++ = 'A'; *p++ = 'N';
+			  }
+			else
+			  {
+			    *p++ = 'n'; *p++ = 'a'; *p++ = 'n';
+			  }
+		      }
+		    else
+		      {
+			int sign = 0;
+
+			if (signbit (arg)) /* arg < 0.0 or negative zero */
+			  {
+			    sign = -1;
+			    arg = -arg;
+			  }
+
+			if (sign < 0)
+			  *p++ = '-';
+			else if (flags & FLAG_SHOWSIGN)
+			  *p++ = '+';
+			else if (flags & FLAG_SPACE)
+			  *p++ = ' ';
+
+			if (arg > 0.0 && arg + arg == arg)
+			  {
+			    if (dp->conversion == 'A')
+			      {
+				*p++ = 'I'; *p++ = 'N'; *p++ = 'F';
+			      }
+			    else
+			      {
+				*p++ = 'i'; *p++ = 'n'; *p++ = 'f';
+			      }
+			  }
+			else
+			  {
+			    int exponent;
+			    double mantissa;
+
+			    if (arg > 0.0)
+			      mantissa = printf_frexp (arg, &exponent);
+			    else
+			      {
+				exponent = 0;
+				mantissa = 0.0;
+			      }
+
+			    if (has_precision
+				&& precision < (unsigned int) ((DBL_DIG + 1) * 0.831) + 1)
+			      {
+				/* Round the mantissa.  */
+				double tail = mantissa;
+				size_t q;
+
+				for (q = precision; ; q--)
+				  {
+				    int digit = (int) tail;
+				    tail -= digit;
+				    if (q == 0)
+				      {
+					if (digit & 1 ? tail >= 0.5 : tail > 0.5)
+					  tail = 1 - tail;
+					else
+					  tail = - tail;
+					break;
+				      }
+				    tail *= 16.0;
+				  }
+				if (tail != 0.0)
+				  for (q = precision; q > 0; q--)
+				    tail *= 0.0625;
+				mantissa += tail;
+			      }
+
+			    *p++ = '0';
+			    *p++ = dp->conversion - 'A' + 'X';
+			    pad_ptr = p;
+			    {
+			      int digit;
+
+			      digit = (int) mantissa;
+			      mantissa -= digit;
+			      *p++ = '0' + digit;
+			      if ((flags & FLAG_ALT)
+				  || mantissa > 0.0 || precision > 0)
+				{
+				  *p++ = decimal_point_char ();
+				  /* This loop terminates because we assume
+				     that FLT_RADIX is a power of 2.  */
+				  while (mantissa > 0.0)
+				    {
+				      mantissa *= 16.0;
+				      digit = (int) mantissa;
+				      mantissa -= digit;
+				      *p++ = digit
+					     + (digit < 10
+						? '0'
+						: dp->conversion - 10);
+				      if (precision > 0)
+					precision--;
+				    }
+				  while (precision > 0)
+				    {
+				      *p++ = '0';
+				      precision--;
+				    }
+				}
+			      }
+			      *p++ = dp->conversion - 'A' + 'P';
+#  if WIDE_CHAR_VERSION
+			      {
+				static const wchar_t decimal_format[] =
+				  { '%', '+', 'd', '\0' };
+				SNPRINTF (p, 6 + 1, decimal_format, exponent);
+			      }
+			      while (*p != '\0')
+				p++;
+#  else
+			      if (sizeof (DCHAR_T) == 1)
+				{
+				  sprintf ((char *) p, "%+d", exponent);
+				  while (*p != '\0')
+				    p++;
+				}
+			      else
+				{
+				  char expbuf[6 + 1];
+				  const char *ep;
+				  sprintf (expbuf, "%+d", exponent);
+				  for (ep = expbuf; (*p = *ep) != '\0'; ep++)
+				    p++;
+				}
+#  endif
+			  }
+		      }
+# else
+		    abort ();
+# endif
+		  }
+		/* The generated string now extends from tmp to p, with the
+		   zero padding insertion point being at pad_ptr.  */
+		if (has_width && p - tmp < width)
+		  {
+		    size_t pad = width - (p - tmp);
+		    DCHAR_T *end = p + pad;
+
+		    if (flags & FLAG_LEFT)
+		      {
+			/* Pad with spaces on the right.  */
+			for (; pad > 0; pad--)
+			  *p++ = ' ';
+		      }
+		    else if ((flags & FLAG_ZERO) && pad_ptr != NULL)
+		      {
+			/* Pad with zeroes.  */
+			DCHAR_T *q = end;
+
+			while (p > pad_ptr)
+			  *--q = *--p;
+			for (; pad > 0; pad--)
+			  *p++ = '0';
+		      }
+		    else
+		      {
+			/* Pad with spaces on the left.  */
+			DCHAR_T *q = end;
+
+			while (p > tmp)
+			  *--q = *--p;
+			for (; pad > 0; pad--)
+			  *p++ = ' ';
+		      }
+
+		    p = end;
+		  }
+
+		{
+		  size_t count = p - tmp;
+
+		  if (count >= tmp_length)
+		    /* tmp_length was incorrectly calculated - fix the
+		       code above!  */
+		    abort ();
+
+		  /* Make room for the result.  */
+		  if (count >= allocated - length)
+		    {
+		      size_t n = xsum (length, count);
+
+		      ENSURE_ALLOCATION (n);
+		    }
+
+		  /* Append the result.  */
+		  memcpy (result + length, tmp, count * sizeof (DCHAR_T));
+		  if (tmp != tmpbuf)
+		    free (tmp);
+		  length += count;
+		}
+	      }
+#endif
+#if (NEED_PRINTF_INFINITE_DOUBLE || NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL
+	    else if ((dp->conversion == 'f' || dp->conversion == 'F'
+		      || dp->conversion == 'e' || dp->conversion == 'E'
+		      || dp->conversion == 'g' || dp->conversion == 'G'
+		      || dp->conversion == 'a' || dp->conversion == 'A')
+		     && (0
+# if NEED_PRINTF_DOUBLE
+			 || a.arg[dp->arg_index].type == TYPE_DOUBLE
+# elif NEED_PRINTF_INFINITE_DOUBLE
+			 || (a.arg[dp->arg_index].type == TYPE_DOUBLE
+			     /* The systems (mingw) which produce wrong output
+				for Inf, -Inf, and NaN also do so for -0.0.
+				Therefore we treat this case here as well.  */
+			     && is_infinite_or_zero (a.arg[dp->arg_index].a.a_double))
+# endif
+# if NEED_PRINTF_LONG_DOUBLE
+			 || a.arg[dp->arg_index].type == TYPE_LONGDOUBLE
+# elif NEED_PRINTF_INFINITE_LONG_DOUBLE
+			 || (a.arg[dp->arg_index].type == TYPE_LONGDOUBLE
+			     /* Some systems produce wrong output for Inf,
+				-Inf, and NaN.  */
+			     && is_infinitel (a.arg[dp->arg_index].a.a_longdouble))
+# endif
+			))
+	      {
+# if (NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE)
+		arg_type type = a.arg[dp->arg_index].type;
+# endif
+		int flags = dp->flags;
+		int has_width;
+		size_t width;
+		int has_precision;
+		size_t precision;
+		size_t tmp_length;
+		DCHAR_T tmpbuf[700];
+		DCHAR_T *tmp;
+		DCHAR_T *pad_ptr;
+		DCHAR_T *p;
+
+		has_width = 0;
+		width = 0;
+		if (dp->width_start != dp->width_end)
+		  {
+		    if (dp->width_arg_index != ARG_NONE)
+		      {
+			int arg;
+
+			if (!(a.arg[dp->width_arg_index].type == TYPE_INT))
+			  abort ();
+			arg = a.arg[dp->width_arg_index].a.a_int;
+			if (arg < 0)
+			  {
+			    /* "A negative field width is taken as a '-' flag
+			        followed by a positive field width."  */
+			    flags |= FLAG_LEFT;
+			    width = (unsigned int) (-arg);
+			  }
+			else
+			  width = arg;
+		      }
+		    else
+		      {
+			const FCHAR_T *digitp = dp->width_start;
+
+			do
+			  width = xsum (xtimes (width, 10), *digitp++ - '0');
+			while (digitp != dp->width_end);
+		      }
+		    has_width = 1;
+		  }
+
+		has_precision = 0;
+		precision = 0;
+		if (dp->precision_start != dp->precision_end)
+		  {
+		    if (dp->precision_arg_index != ARG_NONE)
+		      {
+			int arg;
+
+			if (!(a.arg[dp->precision_arg_index].type == TYPE_INT))
+			  abort ();
+			arg = a.arg[dp->precision_arg_index].a.a_int;
+			/* "A negative precision is taken as if the precision
+			    were omitted."  */
+			if (arg >= 0)
+			  {
+			    precision = arg;
+			    has_precision = 1;
+			  }
+		      }
+		    else
+		      {
+			const FCHAR_T *digitp = dp->precision_start + 1;
+
+			precision = 0;
+			while (digitp != dp->precision_end)
+			  precision = xsum (xtimes (precision, 10), *digitp++ - '0');
+			has_precision = 1;
+		      }
+		  }
+
+		/* POSIX specifies the default precision to be 6 for %f, %F,
+		   %e, %E, but not for %g, %G.  Implementations appear to use
+		   the same default precision also for %g, %G.  */
+		if (!has_precision)
+		  precision = 6;
+
+		/* Allocate a temporary buffer of sufficient size.  */
+# if NEED_PRINTF_DOUBLE && NEED_PRINTF_LONG_DOUBLE
+		tmp_length = (type == TYPE_LONGDOUBLE ? LDBL_DIG + 1 : DBL_DIG + 1);
+# elif NEED_PRINTF_INFINITE_DOUBLE && NEED_PRINTF_LONG_DOUBLE
+		tmp_length = (type == TYPE_LONGDOUBLE ? LDBL_DIG + 1 : 0);
+# elif NEED_PRINTF_LONG_DOUBLE
+		tmp_length = LDBL_DIG + 1;
+# elif NEED_PRINTF_DOUBLE
+		tmp_length = DBL_DIG + 1;
+# else
+		tmp_length = 0;
+# endif
+		if (tmp_length < precision)
+		  tmp_length = precision;
+# if NEED_PRINTF_LONG_DOUBLE
+#  if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE
+		if (type == TYPE_LONGDOUBLE)
+#  endif
+		  if (dp->conversion == 'f' || dp->conversion == 'F')
+		    {
+		      long double arg = a.arg[dp->arg_index].a.a_longdouble;
+		      if (!(isnanl (arg) || arg + arg == arg))
+			{
+			  /* arg is finite and nonzero.  */
+			  int exponent = floorlog10l (arg < 0 ? -arg : arg);
+			  if (exponent >= 0 && tmp_length < exponent + precision)
+			    tmp_length = exponent + precision;
+			}
+		    }
+# endif
+# if NEED_PRINTF_DOUBLE
+#  if NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE
+		if (type == TYPE_DOUBLE)
+#  endif
+		  if (dp->conversion == 'f' || dp->conversion == 'F')
+		    {
+		      double arg = a.arg[dp->arg_index].a.a_double;
+		      if (!(isnan (arg) || arg + arg == arg))
+			{
+			  /* arg is finite and nonzero.  */
+			  int exponent = floorlog10 (arg < 0 ? -arg : arg);
+			  if (exponent >= 0 && tmp_length < exponent + precision)
+			    tmp_length = exponent + precision;
+			}
+		    }
+# endif
+		/* Account for sign, decimal point etc. */
+		tmp_length = xsum (tmp_length, 12);
+
+		if (tmp_length < width)
+		  tmp_length = width;
+
+		tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */
+
+		if (tmp_length <= sizeof (tmpbuf) / sizeof (DCHAR_T))
+		  tmp = tmpbuf;
+		else
+		  {
+		    size_t tmp_memsize = xtimes (tmp_length, sizeof (DCHAR_T));
+
+		    if (size_overflow_p (tmp_memsize))
+		      /* Overflow, would lead to out of memory.  */
+		      goto out_of_memory;
+		    tmp = (DCHAR_T *) malloc (tmp_memsize);
+		    if (tmp == NULL)
+		      /* Out of memory.  */
+		      goto out_of_memory;
+		  }
+
+		pad_ptr = NULL;
+		p = tmp;
+
+# if NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE
+#  if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE
+		if (type == TYPE_LONGDOUBLE)
+#  endif
+		  {
+		    long double arg = a.arg[dp->arg_index].a.a_longdouble;
+
+		    if (isnanl (arg))
+		      {
+			if (dp->conversion >= 'A' && dp->conversion <= 'Z')
+			  {
+			    *p++ = 'N'; *p++ = 'A'; *p++ = 'N';
+			  }
+			else
+			  {
+			    *p++ = 'n'; *p++ = 'a'; *p++ = 'n';
+			  }
+		      }
+		    else
+		      {
+			int sign = 0;
+			DECL_LONG_DOUBLE_ROUNDING
+
+			BEGIN_LONG_DOUBLE_ROUNDING ();
+
+			if (signbit (arg)) /* arg < 0.0L or negative zero */
+			  {
+			    sign = -1;
+			    arg = -arg;
+			  }
+
+			if (sign < 0)
+			  *p++ = '-';
+			else if (flags & FLAG_SHOWSIGN)
+			  *p++ = '+';
+			else if (flags & FLAG_SPACE)
+			  *p++ = ' ';
+
+			if (arg > 0.0L && arg + arg == arg)
+			  {
+			    if (dp->conversion >= 'A' && dp->conversion <= 'Z')
+			      {
+				*p++ = 'I'; *p++ = 'N'; *p++ = 'F';
+			      }
+			    else
+			      {
+				*p++ = 'i'; *p++ = 'n'; *p++ = 'f';
+			      }
+			  }
+			else
+			  {
+#  if NEED_PRINTF_LONG_DOUBLE
+			    pad_ptr = p;
+
+			    if (dp->conversion == 'f' || dp->conversion == 'F')
+			      {
+				char *digits;
+				size_t ndigits;
+
+				digits =
+				  scale10_round_decimal_long_double (arg, precision);
+				if (digits == NULL)
+				  {
+				    END_LONG_DOUBLE_ROUNDING ();
+				    goto out_of_memory;
+				  }
+				ndigits = strlen (digits);
+
+				if (ndigits > precision)
+				  do
+				    {
+				      --ndigits;
+				      *p++ = digits[ndigits];
+				    }
+				  while (ndigits > precision);
+				else
+				  *p++ = '0';
+				/* Here ndigits <= precision.  */
+				if ((flags & FLAG_ALT) || precision > 0)
+				  {
+				    *p++ = decimal_point_char ();
+				    for (; precision > ndigits; precision--)
+				      *p++ = '0';
+				    while (ndigits > 0)
+				      {
+					--ndigits;
+					*p++ = digits[ndigits];
+				      }
+				  }
+
+				free (digits);
+			      }
+			    else if (dp->conversion == 'e' || dp->conversion == 'E')
+			      {
+				int exponent;
+
+				if (arg == 0.0L)
+				  {
+				    exponent = 0;
+				    *p++ = '0';
+				    if ((flags & FLAG_ALT) || precision > 0)
+				      {
+					*p++ = decimal_point_char ();
+					for (; precision > 0; precision--)
+					  *p++ = '0';
+				      }
+				  }
+				else
+				  {
+				    /* arg > 0.0L.  */
+				    int adjusted;
+				    char *digits;
+				    size_t ndigits;
+
+				    exponent = floorlog10l (arg);
+				    adjusted = 0;
+				    for (;;)
+				      {
+					digits =
+					  scale10_round_decimal_long_double (arg,
+									     (int)precision - exponent);
+					if (digits == NULL)
+					  {
+					    END_LONG_DOUBLE_ROUNDING ();
+					    goto out_of_memory;
+					  }
+					ndigits = strlen (digits);
+
+					if (ndigits == precision + 1)
+					  break;
+					if (ndigits < precision
+					    || ndigits > precision + 2)
+					  /* The exponent was not guessed
+					     precisely enough.  */
+					  abort ();
+					if (adjusted)
+					  /* None of two values of exponent is
+					     the right one.  Prevent an endless
+					     loop.  */
+					  abort ();
+					free (digits);
+					if (ndigits == precision)
+					  exponent -= 1;
+					else
+					  exponent += 1;
+					adjusted = 1;
+				      }
+
+				    /* Here ndigits = precision+1.  */
+				    *p++ = digits[--ndigits];
+				    if ((flags & FLAG_ALT) || precision > 0)
+				      {
+					*p++ = decimal_point_char ();
+					while (ndigits > 0)
+					  {
+					    --ndigits;
+					    *p++ = digits[ndigits];
+					  }
+				      }
+
+				    free (digits);
+				  }
+
+				*p++ = dp->conversion; /* 'e' or 'E' */
+#   if WIDE_CHAR_VERSION
+				{
+				  static const wchar_t decimal_format[] =
+				    { '%', '+', '.', '2', 'd', '\0' };
+				  SNPRINTF (p, 6 + 1, decimal_format, exponent);
+				}
+				while (*p != '\0')
+				  p++;
+#   else
+				if (sizeof (DCHAR_T) == 1)
+				  {
+				    sprintf ((char *) p, "%+.2d", exponent);
+				    while (*p != '\0')
+				      p++;
+				  }
+				else
+				  {
+				    char expbuf[6 + 1];
+				    const char *ep;
+				    sprintf (expbuf, "%+.2d", exponent);
+				    for (ep = expbuf; (*p = *ep) != '\0'; ep++)
+				      p++;
+				  }
+#   endif
+			      }
+			    else if (dp->conversion == 'g' || dp->conversion == 'G')
+			      {
+				if (precision == 0)
+				  precision = 1;
+				/* precision >= 1.  */
+
+				if (arg == 0.0L)
+				  /* The exponent is 0, >= -4, < precision.
+				     Use fixed-point notation.  */
+				  {
+				    size_t ndigits = precision;
+				    /* Number of trailing zeroes that have to be
+				       dropped.  */
+				    size_t nzeroes =
+				      (flags & FLAG_ALT ? 0 : precision - 1);
+
+				    --ndigits;
+				    *p++ = '0';
+				    if ((flags & FLAG_ALT) || ndigits > nzeroes)
+				      {
+					*p++ = decimal_point_char ();
+					while (ndigits > nzeroes)
+					  {
+					    --ndigits;
+					    *p++ = '0';
+					  }
+				      }
+				  }
+				else
+				  {
+				    /* arg > 0.0L.  */
+				    int exponent;
+				    int adjusted;
+				    char *digits;
+				    size_t ndigits;
+				    size_t nzeroes;
+
+				    exponent = floorlog10l (arg);
+				    adjusted = 0;
+				    for (;;)
+				      {
+					digits =
+					  scale10_round_decimal_long_double (arg,
+									     (int)(precision - 1) - exponent);
+					if (digits == NULL)
+					  {
+					    END_LONG_DOUBLE_ROUNDING ();
+					    goto out_of_memory;
+					  }
+					ndigits = strlen (digits);
+
+					if (ndigits == precision)
+					  break;
+					if (ndigits < precision - 1
+					    || ndigits > precision + 1)
+					  /* The exponent was not guessed
+					     precisely enough.  */
+					  abort ();
+					if (adjusted)
+					  /* None of two values of exponent is
+					     the right one.  Prevent an endless
+					     loop.  */
+					  abort ();
+					free (digits);
+					if (ndigits < precision)
+					  exponent -= 1;
+					else
+					  exponent += 1;
+					adjusted = 1;
+				      }
+				    /* Here ndigits = precision.  */
+
+				    /* Determine the number of trailing zeroes
+				       that have to be dropped.  */
+				    nzeroes = 0;
+				    if ((flags & FLAG_ALT) == 0)
+				      while (nzeroes < ndigits
+					     && digits[nzeroes] == '0')
+					nzeroes++;
+
+				    /* The exponent is now determined.  */
+				    if (exponent >= -4
+					&& exponent < (long)precision)
+				      {
+					/* Fixed-point notation:
+					   max(exponent,0)+1 digits, then the
+					   decimal point, then the remaining
+					   digits without trailing zeroes.  */
+					if (exponent >= 0)
+					  {
+					    size_t count = exponent + 1;
+					    /* Note: count <= precision = ndigits.  */
+					    for (; count > 0; count--)
+					      *p++ = digits[--ndigits];
+					    if ((flags & FLAG_ALT) || ndigits > nzeroes)
+					      {
+						*p++ = decimal_point_char ();
+						while (ndigits > nzeroes)
+						  {
+						    --ndigits;
+						    *p++ = digits[ndigits];
+						  }
+					      }
+					  }
+					else
+					  {
+					    size_t count = -exponent - 1;
+					    *p++ = '0';
+					    *p++ = decimal_point_char ();
+					    for (; count > 0; count--)
+					      *p++ = '0';
+					    while (ndigits > nzeroes)
+					      {
+						--ndigits;
+						*p++ = digits[ndigits];
+					      }
+					  }
+				      }
+				    else
+				      {
+					/* Exponential notation.  */
+					*p++ = digits[--ndigits];
+					if ((flags & FLAG_ALT) || ndigits > nzeroes)
+					  {
+					    *p++ = decimal_point_char ();
+					    while (ndigits > nzeroes)
+					      {
+						--ndigits;
+						*p++ = digits[ndigits];
+					      }
+					  }
+					*p++ = dp->conversion - 'G' + 'E'; /* 'e' or 'E' */
+#   if WIDE_CHAR_VERSION
+					{
+					  static const wchar_t decimal_format[] =
+					    { '%', '+', '.', '2', 'd', '\0' };
+					  SNPRINTF (p, 6 + 1, decimal_format, exponent);
+					}
+					while (*p != '\0')
+					  p++;
+#   else
+					if (sizeof (DCHAR_T) == 1)
+					  {
+					    sprintf ((char *) p, "%+.2d", exponent);
+					    while (*p != '\0')
+					      p++;
+					  }
+					else
+					  {
+					    char expbuf[6 + 1];
+					    const char *ep;
+					    sprintf (expbuf, "%+.2d", exponent);
+					    for (ep = expbuf; (*p = *ep) != '\0'; ep++)
+					      p++;
+					  }
+#   endif
+				      }
+
+				    free (digits);
+				  }
+			      }
+			    else
+			      abort ();
+#  else
+			    /* arg is finite.  */
+			    abort ();
+#  endif
+			  }
+
+			END_LONG_DOUBLE_ROUNDING ();
+		      }
+		  }
+#  if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE
+		else
+#  endif
+# endif
+# if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE
+		  {
+		    double arg = a.arg[dp->arg_index].a.a_double;
+
+		    if (isnan (arg))
+		      {
+			if (dp->conversion >= 'A' && dp->conversion <= 'Z')
+			  {
+			    *p++ = 'N'; *p++ = 'A'; *p++ = 'N';
+			  }
+			else
+			  {
+			    *p++ = 'n'; *p++ = 'a'; *p++ = 'n';
+			  }
+		      }
+		    else
+		      {
+			int sign = 0;
+
+			if (signbit (arg)) /* arg < 0.0 or negative zero */
+			  {
+			    sign = -1;
+			    arg = -arg;
+			  }
+
+			if (sign < 0)
+			  *p++ = '-';
+			else if (flags & FLAG_SHOWSIGN)
+			  *p++ = '+';
+			else if (flags & FLAG_SPACE)
+			  *p++ = ' ';
+
+			if (arg > 0.0 && arg + arg == arg)
+			  {
+			    if (dp->conversion >= 'A' && dp->conversion <= 'Z')
+			      {
+				*p++ = 'I'; *p++ = 'N'; *p++ = 'F';
+			      }
+			    else
+			      {
+				*p++ = 'i'; *p++ = 'n'; *p++ = 'f';
+			      }
+			  }
+			else
+			  {
+#  if NEED_PRINTF_DOUBLE
+			    pad_ptr = p;
+
+			    if (dp->conversion == 'f' || dp->conversion == 'F')
+			      {
+				char *digits;
+				size_t ndigits;
+
+				digits =
+				  scale10_round_decimal_double (arg, precision);
+				if (digits == NULL)
+				  goto out_of_memory;
+				ndigits = strlen (digits);
+
+				if (ndigits > precision)
+				  do
+				    {
+				      --ndigits;
+				      *p++ = digits[ndigits];
+				    }
+				  while (ndigits > precision);
+				else
+				  *p++ = '0';
+				/* Here ndigits <= precision.  */
+				if ((flags & FLAG_ALT) || precision > 0)
+				  {
+				    *p++ = decimal_point_char ();
+				    for (; precision > ndigits; precision--)
+				      *p++ = '0';
+				    while (ndigits > 0)
+				      {
+					--ndigits;
+					*p++ = digits[ndigits];
+				      }
+				  }
+
+				free (digits);
+			      }
+			    else if (dp->conversion == 'e' || dp->conversion == 'E')
+			      {
+				int exponent;
+
+				if (arg == 0.0)
+				  {
+				    exponent = 0;
+				    *p++ = '0';
+				    if ((flags & FLAG_ALT) || precision > 0)
+				      {
+					*p++ = decimal_point_char ();
+					for (; precision > 0; precision--)
+					  *p++ = '0';
+				      }
+				  }
+				else
+				  {
+				    /* arg > 0.0.  */
+				    int adjusted;
+				    char *digits;
+				    size_t ndigits;
+
+				    exponent = floorlog10 (arg);
+				    adjusted = 0;
+				    for (;;)
+				      {
+					digits =
+					  scale10_round_decimal_double (arg,
+									(int)precision - exponent);
+					if (digits == NULL)
+					  goto out_of_memory;
+					ndigits = strlen (digits);
+
+					if (ndigits == precision + 1)
+					  break;
+					if (ndigits < precision
+					    || ndigits > precision + 2)
+					  /* The exponent was not guessed
+					     precisely enough.  */
+					  abort ();
+					if (adjusted)
+					  /* None of two values of exponent is
+					     the right one.  Prevent an endless
+					     loop.  */
+					  abort ();
+					free (digits);
+					if (ndigits == precision)
+					  exponent -= 1;
+					else
+					  exponent += 1;
+					adjusted = 1;
+				      }
+
+				    /* Here ndigits = precision+1.  */
+				    *p++ = digits[--ndigits];
+				    if ((flags & FLAG_ALT) || precision > 0)
+				      {
+					*p++ = decimal_point_char ();
+					while (ndigits > 0)
+					  {
+					    --ndigits;
+					    *p++ = digits[ndigits];
+					  }
+				      }
+
+				    free (digits);
+				  }
+
+				*p++ = dp->conversion; /* 'e' or 'E' */
+#   if WIDE_CHAR_VERSION
+				{
+				  static const wchar_t decimal_format[] =
+				    /* Produce the same number of exponent digits
+				       as the native printf implementation.  */
+#    if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+				    { '%', '+', '.', '3', 'd', '\0' };
+#    else
+				    { '%', '+', '.', '2', 'd', '\0' };
+#    endif
+				  SNPRINTF (p, 6 + 1, decimal_format, exponent);
+				}
+				while (*p != '\0')
+				  p++;
+#   else
+				{
+				  static const char decimal_format[] =
+				    /* Produce the same number of exponent digits
+				       as the native printf implementation.  */
+#    if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+				    "%+.3d";
+#    else
+				    "%+.2d";
+#    endif
+				  if (sizeof (DCHAR_T) == 1)
+				    {
+				      sprintf ((char *) p, decimal_format, exponent);
+				      while (*p != '\0')
+					p++;
+				    }
+				  else
+				    {
+				      char expbuf[6 + 1];
+				      const char *ep;
+				      sprintf (expbuf, decimal_format, exponent);
+				      for (ep = expbuf; (*p = *ep) != '\0'; ep++)
+					p++;
+				    }
+				}
+#   endif
+			      }
+			    else if (dp->conversion == 'g' || dp->conversion == 'G')
+			      {
+				if (precision == 0)
+				  precision = 1;
+				/* precision >= 1.  */
+
+				if (arg == 0.0)
+				  /* The exponent is 0, >= -4, < precision.
+				     Use fixed-point notation.  */
+				  {
+				    size_t ndigits = precision;
+				    /* Number of trailing zeroes that have to be
+				       dropped.  */
+				    size_t nzeroes =
+				      (flags & FLAG_ALT ? 0 : precision - 1);
+
+				    --ndigits;
+				    *p++ = '0';
+				    if ((flags & FLAG_ALT) || ndigits > nzeroes)
+				      {
+					*p++ = decimal_point_char ();
+					while (ndigits > nzeroes)
+					  {
+					    --ndigits;
+					    *p++ = '0';
+					  }
+				      }
+				  }
+				else
+				  {
+				    /* arg > 0.0.  */
+				    int exponent;
+				    int adjusted;
+				    char *digits;
+				    size_t ndigits;
+				    size_t nzeroes;
+
+				    exponent = floorlog10 (arg);
+				    adjusted = 0;
+				    for (;;)
+				      {
+					digits =
+					  scale10_round_decimal_double (arg,
+									(int)(precision - 1) - exponent);
+					if (digits == NULL)
+					  goto out_of_memory;
+					ndigits = strlen (digits);
+
+					if (ndigits == precision)
+					  break;
+					if (ndigits < precision - 1
+					    || ndigits > precision + 1)
+					  /* The exponent was not guessed
+					     precisely enough.  */
+					  abort ();
+					if (adjusted)
+					  /* None of two values of exponent is
+					     the right one.  Prevent an endless
+					     loop.  */
+					  abort ();
+					free (digits);
+					if (ndigits < precision)
+					  exponent -= 1;
+					else
+					  exponent += 1;
+					adjusted = 1;
+				      }
+				    /* Here ndigits = precision.  */
+
+				    /* Determine the number of trailing zeroes
+				       that have to be dropped.  */
+				    nzeroes = 0;
+				    if ((flags & FLAG_ALT) == 0)
+				      while (nzeroes < ndigits
+					     && digits[nzeroes] == '0')
+					nzeroes++;
+
+				    /* The exponent is now determined.  */
+				    if (exponent >= -4
+					&& exponent < (long)precision)
+				      {
+					/* Fixed-point notation:
+					   max(exponent,0)+1 digits, then the
+					   decimal point, then the remaining
+					   digits without trailing zeroes.  */
+					if (exponent >= 0)
+					  {
+					    size_t count = exponent + 1;
+					    /* Note: count <= precision = ndigits.  */
+					    for (; count > 0; count--)
+					      *p++ = digits[--ndigits];
+					    if ((flags & FLAG_ALT) || ndigits > nzeroes)
+					      {
+						*p++ = decimal_point_char ();
+						while (ndigits > nzeroes)
+						  {
+						    --ndigits;
+						    *p++ = digits[ndigits];
+						  }
+					      }
+					  }
+					else
+					  {
+					    size_t count = -exponent - 1;
+					    *p++ = '0';
+					    *p++ = decimal_point_char ();
+					    for (; count > 0; count--)
+					      *p++ = '0';
+					    while (ndigits > nzeroes)
+					      {
+						--ndigits;
+						*p++ = digits[ndigits];
+					      }
+					  }
+				      }
+				    else
+				      {
+					/* Exponential notation.  */
+					*p++ = digits[--ndigits];
+					if ((flags & FLAG_ALT) || ndigits > nzeroes)
+					  {
+					    *p++ = decimal_point_char ();
+					    while (ndigits > nzeroes)
+					      {
+						--ndigits;
+						*p++ = digits[ndigits];
+					      }
+					  }
+					*p++ = dp->conversion - 'G' + 'E'; /* 'e' or 'E' */
+#   if WIDE_CHAR_VERSION
+					{
+					  static const wchar_t decimal_format[] =
+					    /* Produce the same number of exponent digits
+					       as the native printf implementation.  */
+#    if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+					    { '%', '+', '.', '3', 'd', '\0' };
+#    else
+					    { '%', '+', '.', '2', 'd', '\0' };
+#    endif
+					  SNPRINTF (p, 6 + 1, decimal_format, exponent);
+					}
+					while (*p != '\0')
+					  p++;
+#   else
+					{
+					  static const char decimal_format[] =
+					    /* Produce the same number of exponent digits
+					       as the native printf implementation.  */
+#    if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+					    "%+.3d";
+#    else
+					    "%+.2d";
+#    endif
+					  if (sizeof (DCHAR_T) == 1)
+					    {
+					      sprintf ((char *) p, decimal_format, exponent);
+					      while (*p != '\0')
+						p++;
+					    }
+					  else
+					    {
+					      char expbuf[6 + 1];
+					      const char *ep;
+					      sprintf (expbuf, decimal_format, exponent);
+					      for (ep = expbuf; (*p = *ep) != '\0'; ep++)
+						p++;
+					    }
+					}
+#   endif
+				      }
+
+				    free (digits);
+				  }
+			      }
+			    else
+			      abort ();
+#  else
+			    /* arg is finite.  */
+			    if (!(arg == 0.0))
+			      abort ();
+
+			    pad_ptr = p;
+
+			    if (dp->conversion == 'f' || dp->conversion == 'F')
+			      {
+				*p++ = '0';
+				if ((flags & FLAG_ALT) || precision > 0)
+				  {
+				    *p++ = decimal_point_char ();
+				    for (; precision > 0; precision--)
+				      *p++ = '0';
+				  }
+			      }
+			    else if (dp->conversion == 'e' || dp->conversion == 'E')
+			      {
+				*p++ = '0';
+				if ((flags & FLAG_ALT) || precision > 0)
+				  {
+				    *p++ = decimal_point_char ();
+				    for (; precision > 0; precision--)
+				      *p++ = '0';
+				  }
+				*p++ = dp->conversion; /* 'e' or 'E' */
+				*p++ = '+';
+				/* Produce the same number of exponent digits as
+				   the native printf implementation.  */
+#   if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+				*p++ = '0';
+#   endif
+				*p++ = '0';
+				*p++ = '0';
+			      }
+			    else if (dp->conversion == 'g' || dp->conversion == 'G')
+			      {
+				*p++ = '0';
+				if (flags & FLAG_ALT)
+				  {
+				    size_t ndigits =
+				      (precision > 0 ? precision - 1 : 0);
+				    *p++ = decimal_point_char ();
+				    for (; ndigits > 0; --ndigits)
+				      *p++ = '0';
+				  }
+			      }
+			    else
+			      abort ();
+#  endif
+			  }
+		      }
+		  }
+# endif
+
+		/* The generated string now extends from tmp to p, with the
+		   zero padding insertion point being at pad_ptr.  */
+		if (has_width && p - tmp < width)
+		  {
+		    size_t pad = width - (p - tmp);
+		    DCHAR_T *end = p + pad;
+
+		    if (flags & FLAG_LEFT)
+		      {
+			/* Pad with spaces on the right.  */
+			for (; pad > 0; pad--)
+			  *p++ = ' ';
+		      }
+		    else if ((flags & FLAG_ZERO) && pad_ptr != NULL)
+		      {
+			/* Pad with zeroes.  */
+			DCHAR_T *q = end;
+
+			while (p > pad_ptr)
+			  *--q = *--p;
+			for (; pad > 0; pad--)
+			  *p++ = '0';
+		      }
+		    else
+		      {
+			/* Pad with spaces on the left.  */
+			DCHAR_T *q = end;
+
+			while (p > tmp)
+			  *--q = *--p;
+			for (; pad > 0; pad--)
+			  *p++ = ' ';
+		      }
+
+		    p = end;
+		  }
+
+		{
+		  size_t count = p - tmp;
+
+		  if (count >= tmp_length)
+		    /* tmp_length was incorrectly calculated - fix the
+		       code above!  */
+		    abort ();
+
+		  /* Make room for the result.  */
+		  if (count >= allocated - length)
+		    {
+		      size_t n = xsum (length, count);
+
+		      ENSURE_ALLOCATION (n);
+		    }
+
+		  /* Append the result.  */
+		  memcpy (result + length, tmp, count * sizeof (DCHAR_T));
+		  if (tmp != tmpbuf)
+		    free (tmp);
+		  length += count;
+		}
+	      }
+#endif
+	    else
+	      {
+		arg_type type = a.arg[dp->arg_index].type;
+		int flags = dp->flags;
+#if !USE_SNPRINTF || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION
+		int has_width;
+		size_t width;
+#endif
+#if !USE_SNPRINTF || NEED_PRINTF_UNBOUNDED_PRECISION
+		int has_precision;
+		size_t precision;
+#endif
+#if NEED_PRINTF_UNBOUNDED_PRECISION
+		int prec_ourselves;
+#else
+#		define prec_ourselves 0
+#endif
+#if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION
+		int pad_ourselves;
+#else
+#		define pad_ourselves 0
+#endif
+		TCHAR_T *fbp;
+		unsigned int prefix_count;
+		int prefixes[2];
+#if !USE_SNPRINTF
+		size_t tmp_length;
+		TCHAR_T tmpbuf[700];
+		TCHAR_T *tmp;
+#endif
+
+#if !USE_SNPRINTF || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION
+		has_width = 0;
+		width = 0;
+		if (dp->width_start != dp->width_end)
+		  {
+		    if (dp->width_arg_index != ARG_NONE)
+		      {
+			int arg;
+
+			if (!(a.arg[dp->width_arg_index].type == TYPE_INT))
+			  abort ();
+			arg = a.arg[dp->width_arg_index].a.a_int;
+			if (arg < 0)
+			  {
+			    /* "A negative field width is taken as a '-' flag
+			        followed by a positive field width."  */
+			    flags |= FLAG_LEFT;
+			    width = (unsigned int) (-arg);
+			  }
+			else
+			  width = arg;
+		      }
+		    else
+		      {
+			const FCHAR_T *digitp = dp->width_start;
+
+			do
+			  width = xsum (xtimes (width, 10), *digitp++ - '0');
+			while (digitp != dp->width_end);
+		      }
+		    has_width = 1;
+		  }
+#endif
+
+#if !USE_SNPRINTF || NEED_PRINTF_UNBOUNDED_PRECISION
+		has_precision = 0;
+		precision = 6;
+		if (dp->precision_start != dp->precision_end)
+		  {
+		    if (dp->precision_arg_index != ARG_NONE)
+		      {
+			int arg;
+
+			if (!(a.arg[dp->precision_arg_index].type == TYPE_INT))
+			  abort ();
+			arg = a.arg[dp->precision_arg_index].a.a_int;
+			/* "A negative precision is taken as if the precision
+			    were omitted."  */
+			if (arg >= 0)
+			  {
+			    precision = arg;
+			    has_precision = 1;
+			  }
+		      }
+		    else
+		      {
+			const FCHAR_T *digitp = dp->precision_start + 1;
+
+			precision = 0;
+			while (digitp != dp->precision_end)
+			  precision = xsum (xtimes (precision, 10), *digitp++ - '0');
+			has_precision = 1;
+		      }
+		  }
+#endif
+
+#if !USE_SNPRINTF
+		/* Allocate a temporary buffer of sufficient size for calling
+		   sprintf.  */
+		{
+		  switch (dp->conversion)
+		    {
+
+		    case 'd': case 'i': case 'u':
+# if HAVE_LONG_LONG_INT
+		      if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT)
+			tmp_length =
+			  (unsigned int) (sizeof (unsigned long long) * CHAR_BIT
+					  * 0.30103 /* binary -> decimal */
+					 )
+			  + 1; /* turn floor into ceil */
+		      else
+# endif
+		      if (type == TYPE_LONGINT || type == TYPE_ULONGINT)
+			tmp_length =
+			  (unsigned int) (sizeof (unsigned long) * CHAR_BIT
+					  * 0.30103 /* binary -> decimal */
+					 )
+			  + 1; /* turn floor into ceil */
+		      else
+			tmp_length =
+			  (unsigned int) (sizeof (unsigned int) * CHAR_BIT
+					  * 0.30103 /* binary -> decimal */
+					 )
+			  + 1; /* turn floor into ceil */
+		      if (tmp_length < precision)
+			tmp_length = precision;
+		      /* Multiply by 2, as an estimate for FLAG_GROUP.  */
+		      tmp_length = xsum (tmp_length, tmp_length);
+		      /* Add 1, to account for a leading sign.  */
+		      tmp_length = xsum (tmp_length, 1);
+		      break;
+
+		    case 'o':
+# if HAVE_LONG_LONG_INT
+		      if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT)
+			tmp_length =
+			  (unsigned int) (sizeof (unsigned long long) * CHAR_BIT
+					  * 0.333334 /* binary -> octal */
+					 )
+			  + 1; /* turn floor into ceil */
+		      else
+# endif
+		      if (type == TYPE_LONGINT || type == TYPE_ULONGINT)
+			tmp_length =
+			  (unsigned int) (sizeof (unsigned long) * CHAR_BIT
+					  * 0.333334 /* binary -> octal */
+					 )
+			  + 1; /* turn floor into ceil */
+		      else
+			tmp_length =
+			  (unsigned int) (sizeof (unsigned int) * CHAR_BIT
+					  * 0.333334 /* binary -> octal */
+					 )
+			  + 1; /* turn floor into ceil */
+		      if (tmp_length < precision)
+			tmp_length = precision;
+		      /* Add 1, to account for a leading sign.  */
+		      tmp_length = xsum (tmp_length, 1);
+		      break;
+
+		    case 'x': case 'X':
+# if HAVE_LONG_LONG_INT
+		      if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT)
+			tmp_length =
+			  (unsigned int) (sizeof (unsigned long long) * CHAR_BIT
+					  * 0.25 /* binary -> hexadecimal */
+					 )
+			  + 1; /* turn floor into ceil */
+		      else
+# endif
+		      if (type == TYPE_LONGINT || type == TYPE_ULONGINT)
+			tmp_length =
+			  (unsigned int) (sizeof (unsigned long) * CHAR_BIT
+					  * 0.25 /* binary -> hexadecimal */
+					 )
+			  + 1; /* turn floor into ceil */
+		      else
+			tmp_length =
+			  (unsigned int) (sizeof (unsigned int) * CHAR_BIT
+					  * 0.25 /* binary -> hexadecimal */
+					 )
+			  + 1; /* turn floor into ceil */
+		      if (tmp_length < precision)
+			tmp_length = precision;
+		      /* Add 2, to account for a leading sign or alternate form.  */
+		      tmp_length = xsum (tmp_length, 2);
+		      break;
+
+		    case 'f': case 'F':
+		      if (type == TYPE_LONGDOUBLE)
+			tmp_length =
+			  (unsigned int) (LDBL_MAX_EXP
+					  * 0.30103 /* binary -> decimal */
+					  * 2 /* estimate for FLAG_GROUP */
+					 )
+			  + 1 /* turn floor into ceil */
+			  + 10; /* sign, decimal point etc. */
+		      else
+			tmp_length =
+			  (unsigned int) (DBL_MAX_EXP
+					  * 0.30103 /* binary -> decimal */
+					  * 2 /* estimate for FLAG_GROUP */
+					 )
+			  + 1 /* turn floor into ceil */
+			  + 10; /* sign, decimal point etc. */
+		      tmp_length = xsum (tmp_length, precision);
+		      break;
+
+		    case 'e': case 'E': case 'g': case 'G':
+		      tmp_length =
+			12; /* sign, decimal point, exponent etc. */
+		      tmp_length = xsum (tmp_length, precision);
+		      break;
+
+		    case 'a': case 'A':
+		      if (type == TYPE_LONGDOUBLE)
+			tmp_length =
+			  (unsigned int) (LDBL_DIG
+					  * 0.831 /* decimal -> hexadecimal */
+					 )
+			  + 1; /* turn floor into ceil */
+		      else
+			tmp_length =
+			  (unsigned int) (DBL_DIG
+					  * 0.831 /* decimal -> hexadecimal */
+					 )
+			  + 1; /* turn floor into ceil */
+		      if (tmp_length < precision)
+			tmp_length = precision;
+		      /* Account for sign, decimal point etc. */
+		      tmp_length = xsum (tmp_length, 12);
+		      break;
+
+		    case 'c':
+# if HAVE_WINT_T && !WIDE_CHAR_VERSION
+		      if (type == TYPE_WIDE_CHAR)
+			tmp_length = MB_CUR_MAX;
+		      else
+# endif
+			tmp_length = 1;
+		      break;
+
+		    case 's':
+# if HAVE_WCHAR_T
+		      if (type == TYPE_WIDE_STRING)
+			{
+			  tmp_length =
+			    local_wcslen (a.arg[dp->arg_index].a.a_wide_string);
+
+#  if !WIDE_CHAR_VERSION
+			  tmp_length = xtimes (tmp_length, MB_CUR_MAX);
+#  endif
+			}
+		      else
+# endif
+			tmp_length = strlen (a.arg[dp->arg_index].a.a_string);
+		      break;
+
+		    case 'p':
+		      tmp_length =
+			(unsigned int) (sizeof (void *) * CHAR_BIT
+					* 0.25 /* binary -> hexadecimal */
+				       )
+			  + 1 /* turn floor into ceil */
+			  + 2; /* account for leading 0x */
+		      break;
+
+		    default:
+		      abort ();
+		    }
+
+# if ENABLE_UNISTDIO
+		  /* Padding considers the number of characters, therefore the
+		     number of elements after padding may be
+		       > max (tmp_length, width)
+		     but is certainly
+		       <= tmp_length + width.  */
+		  tmp_length = xsum (tmp_length, width);
+# else
+		  /* Padding considers the number of elements, says POSIX.  */
+		  if (tmp_length < width)
+		    tmp_length = width;
+# endif
+
+		  tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */
+		}
+
+		if (tmp_length <= sizeof (tmpbuf) / sizeof (TCHAR_T))
+		  tmp = tmpbuf;
+		else
+		  {
+		    size_t tmp_memsize = xtimes (tmp_length, sizeof (TCHAR_T));
+
+		    if (size_overflow_p (tmp_memsize))
+		      /* Overflow, would lead to out of memory.  */
+		      goto out_of_memory;
+		    tmp = (TCHAR_T *) malloc (tmp_memsize);
+		    if (tmp == NULL)
+		      /* Out of memory.  */
+		      goto out_of_memory;
+		  }
+#endif
+
+		/* Decide whether to handle the precision ourselves.  */
+#if NEED_PRINTF_UNBOUNDED_PRECISION
+		switch (dp->conversion)
+		  {
+		  case 'd': case 'i': case 'u':
+		  case 'o':
+		  case 'x': case 'X': case 'p':
+		    prec_ourselves = has_precision && (precision > 0);
+		    break;
+		  default:
+		    prec_ourselves = 0;
+		    break;
+		  }
+#endif
+
+		/* Decide whether to perform the padding ourselves.  */
+#if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION
+		switch (dp->conversion)
+		  {
+# if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO
+		  /* If we need conversion from TCHAR_T[] to DCHAR_T[], we need
+		     to perform the padding after this conversion.  Functions
+		     with unistdio extensions perform the padding based on
+		     character count rather than element count.  */
+		  case 'c': case 's':
+# endif
+# if NEED_PRINTF_FLAG_ZERO
+		  case 'f': case 'F': case 'e': case 'E': case 'g': case 'G':
+		  case 'a': case 'A':
+# endif
+		    pad_ourselves = 1;
+		    break;
+		  default:
+		    pad_ourselves = prec_ourselves;
+		    break;
+		  }
+#endif
+
+		/* Construct the format string for calling snprintf or
+		   sprintf.  */
+		fbp = buf;
+		*fbp++ = '%';
+#if NEED_PRINTF_FLAG_GROUPING
+		/* The underlying implementation doesn't support the ' flag.
+		   Produce no grouping characters in this case; this is
+		   acceptable because the grouping is locale dependent.  */
+#else
+		if (flags & FLAG_GROUP)
+		  *fbp++ = '\'';
+#endif
+		if (flags & FLAG_LEFT)
+		  *fbp++ = '-';
+		if (flags & FLAG_SHOWSIGN)
+		  *fbp++ = '+';
+		if (flags & FLAG_SPACE)
+		  *fbp++ = ' ';
+		if (flags & FLAG_ALT)
+		  *fbp++ = '#';
+		if (!pad_ourselves)
+		  {
+		    if (flags & FLAG_ZERO)
+		      *fbp++ = '0';
+		    if (dp->width_start != dp->width_end)
+		      {
+			size_t n = dp->width_end - dp->width_start;
+			/* The width specification is known to consist only
+			   of standard ASCII characters.  */
+			if (sizeof (FCHAR_T) == sizeof (TCHAR_T))
+			  {
+			    memcpy (fbp, dp->width_start, n * sizeof (TCHAR_T));
+			    fbp += n;
+			  }
+			else
+			  {
+			    const FCHAR_T *mp = dp->width_start;
+			    do
+			      *fbp++ = (unsigned char) *mp++;
+			    while (--n > 0);
+			  }
+		      }
+		  }
+		if (!prec_ourselves)
+		  {
+		    if (dp->precision_start != dp->precision_end)
+		      {
+			size_t n = dp->precision_end - dp->precision_start;
+			/* The precision specification is known to consist only
+			   of standard ASCII characters.  */
+			if (sizeof (FCHAR_T) == sizeof (TCHAR_T))
+			  {
+			    memcpy (fbp, dp->precision_start, n * sizeof (TCHAR_T));
+			    fbp += n;
+			  }
+			else
+			  {
+			    const FCHAR_T *mp = dp->precision_start;
+			    do
+			      *fbp++ = (unsigned char) *mp++;
+			    while (--n > 0);
+			  }
+		      }
+		  }
+
+		switch (type)
+		  {
+#if HAVE_LONG_LONG_INT
+		  case TYPE_LONGLONGINT:
+		  case TYPE_ULONGLONGINT:
+# if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
+		    *fbp++ = 'I';
+		    *fbp++ = '6';
+		    *fbp++ = '4';
+		    break;
+# else
+		    *fbp++ = 'l';
+		    /*FALLTHROUGH*/
+# endif
+#endif
+		  case TYPE_LONGINT:
+		  case TYPE_ULONGINT:
+#if HAVE_WINT_T
+		  case TYPE_WIDE_CHAR:
+#endif
+#if HAVE_WCHAR_T
+		  case TYPE_WIDE_STRING:
+#endif
+		    *fbp++ = 'l';
+		    break;
+		  case TYPE_LONGDOUBLE:
+		    *fbp++ = 'L';
+		    break;
+		  default:
+		    break;
+		  }
+#if NEED_PRINTF_DIRECTIVE_F
+		if (dp->conversion == 'F')
+		  *fbp = 'f';
+		else
+#endif
+		  *fbp = dp->conversion;
+#if USE_SNPRINTF
+# if !(__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3))
+		fbp[1] = '%';
+		fbp[2] = 'n';
+		fbp[3] = '\0';
+# else
+		/* On glibc2 systems from glibc >= 2.3 - probably also older
+		   ones - we know that snprintf's returns value conforms to
+		   ISO C 99: the gl_SNPRINTF_DIRECTIVE_N test passes.
+		   Therefore we can avoid using %n in this situation.
+		   On glibc2 systems from 2004-10-18 or newer, the use of %n
+		   in format strings in writable memory may crash the program
+		   (if compiled with _FORTIFY_SOURCE=2), so we should avoid it
+		   in this situation.  */
+		fbp[1] = '\0';
+# endif
+#else
+		fbp[1] = '\0';
+#endif
+
+		/* Construct the arguments for calling snprintf or sprintf.  */
+		prefix_count = 0;
+		if (!pad_ourselves && dp->width_arg_index != ARG_NONE)
+		  {
+		    if (!(a.arg[dp->width_arg_index].type == TYPE_INT))
+		      abort ();
+		    prefixes[prefix_count++] = a.arg[dp->width_arg_index].a.a_int;
+		  }
+		if (dp->precision_arg_index != ARG_NONE)
+		  {
+		    if (!(a.arg[dp->precision_arg_index].type == TYPE_INT))
+		      abort ();
+		    prefixes[prefix_count++] = a.arg[dp->precision_arg_index].a.a_int;
+		  }
+
+#if USE_SNPRINTF
+		/* The SNPRINTF result is appended after result[0..length].
+		   The latter is an array of DCHAR_T; SNPRINTF appends an
+		   array of TCHAR_T to it.  This is possible because
+		   sizeof (TCHAR_T) divides sizeof (DCHAR_T) and
+		   alignof (TCHAR_T) <= alignof (DCHAR_T).  */
+# define TCHARS_PER_DCHAR (sizeof (DCHAR_T) / sizeof (TCHAR_T))
+		/* Prepare checking whether snprintf returns the count
+		   via %n.  */
+		ENSURE_ALLOCATION (xsum (length, 1));
+		*(TCHAR_T *) (result + length) = '\0';
+#endif
+
+		for (;;)
+		  {
+		    int count = -1;
+
+#if USE_SNPRINTF
+		    int retcount = 0;
+		    size_t maxlen = allocated - length;
+		    /* SNPRINTF can fail if its second argument is
+		       > INT_MAX.  */
+		    if (maxlen > INT_MAX / TCHARS_PER_DCHAR)
+		      maxlen = INT_MAX / TCHARS_PER_DCHAR;
+		    maxlen = maxlen * TCHARS_PER_DCHAR;
+# define SNPRINTF_BUF(arg) \
+		    switch (prefix_count)				    \
+		      {							    \
+		      case 0:						    \
+			retcount = SNPRINTF ((TCHAR_T *) (result + length), \
+					     maxlen, buf,		    \
+					     arg, &count);		    \
+			break;						    \
+		      case 1:						    \
+			retcount = SNPRINTF ((TCHAR_T *) (result + length), \
+					     maxlen, buf,		    \
+					     prefixes[0], arg, &count);	    \
+			break;						    \
+		      case 2:						    \
+			retcount = SNPRINTF ((TCHAR_T *) (result + length), \
+					     maxlen, buf,		    \
+					     prefixes[0], prefixes[1], arg, \
+					     &count);			    \
+			break;						    \
+		      default:						    \
+			abort ();					    \
+		      }
+#else
+# define SNPRINTF_BUF(arg) \
+		    switch (prefix_count)				    \
+		      {							    \
+		      case 0:						    \
+			count = sprintf (tmp, buf, arg);		    \
+			break;						    \
+		      case 1:						    \
+			count = sprintf (tmp, buf, prefixes[0], arg);	    \
+			break;						    \
+		      case 2:						    \
+			count = sprintf (tmp, buf, prefixes[0], prefixes[1],\
+					 arg);				    \
+			break;						    \
+		      default:						    \
+			abort ();					    \
+		      }
+#endif
+
+		    switch (type)
+		      {
+		      case TYPE_SCHAR:
+			{
+			  int arg = a.arg[dp->arg_index].a.a_schar;
+			  SNPRINTF_BUF (arg);
+			}
+			break;
+		      case TYPE_UCHAR:
+			{
+			  unsigned int arg = a.arg[dp->arg_index].a.a_uchar;
+			  SNPRINTF_BUF (arg);
+			}
+			break;
+		      case TYPE_SHORT:
+			{
+			  int arg = a.arg[dp->arg_index].a.a_short;
+			  SNPRINTF_BUF (arg);
+			}
+			break;
+		      case TYPE_USHORT:
+			{
+			  unsigned int arg = a.arg[dp->arg_index].a.a_ushort;
+			  SNPRINTF_BUF (arg);
+			}
+			break;
+		      case TYPE_INT:
+			{
+			  int arg = a.arg[dp->arg_index].a.a_int;
+			  SNPRINTF_BUF (arg);
+			}
+			break;
+		      case TYPE_UINT:
+			{
+			  unsigned int arg = a.arg[dp->arg_index].a.a_uint;
+			  SNPRINTF_BUF (arg);
+			}
+			break;
+		      case TYPE_LONGINT:
+			{
+			  long int arg = a.arg[dp->arg_index].a.a_longint;
+			  SNPRINTF_BUF (arg);
+			}
+			break;
+		      case TYPE_ULONGINT:
+			{
+			  unsigned long int arg = a.arg[dp->arg_index].a.a_ulongint;
+			  SNPRINTF_BUF (arg);
+			}
+			break;
+#if HAVE_LONG_LONG_INT
+		      case TYPE_LONGLONGINT:
+			{
+			  long long int arg = a.arg[dp->arg_index].a.a_longlongint;
+			  SNPRINTF_BUF (arg);
+			}
+			break;
+		      case TYPE_ULONGLONGINT:
+			{
+			  unsigned long long int arg = a.arg[dp->arg_index].a.a_ulonglongint;
+			  SNPRINTF_BUF (arg);
+			}
+			break;
+#endif
+		      case TYPE_DOUBLE:
+			{
+			  double arg = a.arg[dp->arg_index].a.a_double;
+			  SNPRINTF_BUF (arg);
+			}
+			break;
+		      case TYPE_LONGDOUBLE:
+			{
+			  long double arg = a.arg[dp->arg_index].a.a_longdouble;
+			  SNPRINTF_BUF (arg);
+			}
+			break;
+		      case TYPE_CHAR:
+			{
+			  int arg = a.arg[dp->arg_index].a.a_char;
+			  SNPRINTF_BUF (arg);
+			}
+			break;
+#if HAVE_WINT_T
+		      case TYPE_WIDE_CHAR:
+			{
+			  wint_t arg = a.arg[dp->arg_index].a.a_wide_char;
+			  SNPRINTF_BUF (arg);
+			}
+			break;
+#endif
+		      case TYPE_STRING:
+			{
+			  const char *arg = a.arg[dp->arg_index].a.a_string;
+			  SNPRINTF_BUF (arg);
+			}
+			break;
+#if HAVE_WCHAR_T
+		      case TYPE_WIDE_STRING:
+			{
+			  const wchar_t *arg = a.arg[dp->arg_index].a.a_wide_string;
+			  SNPRINTF_BUF (arg);
+			}
+			break;
+#endif
+		      case TYPE_POINTER:
+			{
+			  void *arg = a.arg[dp->arg_index].a.a_pointer;
+			  SNPRINTF_BUF (arg);
+			}
+			break;
+		      default:
+			abort ();
+		      }
+
+#if USE_SNPRINTF
+		    /* Portability: Not all implementations of snprintf()
+		       are ISO C 99 compliant.  Determine the number of
+		       bytes that snprintf() has produced or would have
+		       produced.  */
+		    if (count >= 0)
+		      {
+			/* Verify that snprintf() has NUL-terminated its
+			   result.  */
+			if (count < maxlen
+			    && ((TCHAR_T *) (result + length)) [count] != '\0')
+			  abort ();
+			/* Portability hack.  */
+			if (retcount > count)
+			  count = retcount;
+		      }
+		    else
+		      {
+			/* snprintf() doesn't understand the '%n'
+			   directive.  */
+			if (fbp[1] != '\0')
+			  {
+			    /* Don't use the '%n' directive; instead, look
+			       at the snprintf() return value.  */
+			    fbp[1] = '\0';
+			    continue;
+			  }
+			else
+			  {
+			    /* Look at the snprintf() return value.  */
+			    if (retcount < 0)
+			      {
+				/* HP-UX 10.20 snprintf() is doubly deficient:
+				   It doesn't understand the '%n' directive,
+				   *and* it returns -1 (rather than the length
+				   that would have been required) when the
+				   buffer is too small.  */
+				size_t bigger_need =
+				  xsum (xtimes (allocated, 2), 12);
+				ENSURE_ALLOCATION (bigger_need);
+				continue;
+			      }
+			    else
+			      count = retcount;
+			  }
+		      }
+#endif
+
+		    /* Attempt to handle failure.  */
+		    if (count < 0)
+		      {
+			if (!(result == resultbuf || result == NULL))
+			  free (result);
+			if (buf_malloced != NULL)
+			  free (buf_malloced);
+			CLEANUP ();
+			errno = EINVAL;
+			return NULL;
+		      }
+
+#if USE_SNPRINTF
+		    /* Handle overflow of the allocated buffer.
+		       If such an overflow occurs, a C99 compliant snprintf()
+		       returns a count >= maxlen.  However, a non-compliant
+		       snprintf() function returns only count = maxlen - 1.  To
+		       cover both cases, test whether count >= maxlen - 1.  */
+		    if ((unsigned int) count + 1 >= maxlen)
+		      {
+			/* If maxlen already has attained its allowed maximum,
+			   allocating more memory will not increase maxlen.
+			   Instead of looping, bail out.  */
+			if (maxlen == INT_MAX / TCHARS_PER_DCHAR)
+			  goto overflow;
+			else
+			  {
+			    /* Need at least count * sizeof (TCHAR_T) bytes.
+			       But allocate proportionally, to avoid looping
+			       eternally if snprintf() reports a too small
+			       count.  */
+			    size_t n =
+			      xmax (xsum (length,
+					  (count + TCHARS_PER_DCHAR - 1)
+					  / TCHARS_PER_DCHAR),
+				    xtimes (allocated, 2));
+
+			    ENSURE_ALLOCATION (n);
+			    continue;
+			  }
+		      }
+#endif
+
+#if NEED_PRINTF_UNBOUNDED_PRECISION
+		    if (prec_ourselves)
+		      {
+			/* Handle the precision.  */
+			TCHAR_T *prec_ptr = 
+# if USE_SNPRINTF
+			  (TCHAR_T *) (result + length);
+# else
+			  tmp;
+# endif
+			size_t prefix_count;
+			size_t move;
+
+			prefix_count = 0;
+			/* Put the additional zeroes after the sign.  */
+			if (count >= 1
+			    && (*prec_ptr == '-' || *prec_ptr == '+'
+				|| *prec_ptr == ' '))
+			  prefix_count = 1;
+			/* Put the additional zeroes after the 0x prefix if
+			   (flags & FLAG_ALT) || (dp->conversion == 'p').  */
+			else if (count >= 2
+				 && prec_ptr[0] == '0'
+				 && (prec_ptr[1] == 'x' || prec_ptr[1] == 'X'))
+			  prefix_count = 2;
+
+			move = count - prefix_count;
+			if (precision > move)
+			  {
+			    /* Insert zeroes.  */
+			    size_t insert = precision - move;
+			    TCHAR_T *prec_end;
+
+# if USE_SNPRINTF
+			    size_t n =
+			      xsum (length,
+				    (count + insert + TCHARS_PER_DCHAR - 1)
+				    / TCHARS_PER_DCHAR);
+			    length += (count + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR;
+			    ENSURE_ALLOCATION (n);
+			    length -= (count + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR;
+			    prec_ptr = (TCHAR_T *) (result + length);
+# endif
+
+			    prec_end = prec_ptr + count;
+			    prec_ptr += prefix_count;
+
+			    while (prec_end > prec_ptr)
+			      {
+				prec_end--;
+				prec_end[insert] = prec_end[0];
+			      }
+
+			    prec_end += insert;
+			    do
+			      *--prec_end = '0';
+			    while (prec_end > prec_ptr);
+
+			    count += insert;
+			  }
+		      }
+#endif
+
+#if !DCHAR_IS_TCHAR
+# if !USE_SNPRINTF
+		    if (count >= tmp_length)
+		      /* tmp_length was incorrectly calculated - fix the
+			 code above!  */
+		      abort ();
+# endif
+
+		    /* Convert from TCHAR_T[] to DCHAR_T[].  */
+		    if (dp->conversion == 'c' || dp->conversion == 's')
+		      {
+			/* type = TYPE_CHAR or TYPE_WIDE_CHAR or TYPE_STRING
+			   TYPE_WIDE_STRING.
+			   The result string is not certainly ASCII.  */
+			const TCHAR_T *tmpsrc;
+			DCHAR_T *tmpdst;
+			size_t tmpdst_len;
+			/* This code assumes that TCHAR_T is 'char'.  */
+			typedef int TCHAR_T_verify
+				    [2 * (sizeof (TCHAR_T) == 1) - 1];
+# if USE_SNPRINTF
+			tmpsrc = (TCHAR_T *) (result + length);
+# else
+			tmpsrc = tmp;
+# endif
+			tmpdst = NULL;
+			tmpdst_len = 0;
+			if (DCHAR_CONV_FROM_ENCODING (locale_charset (),
+						      iconveh_question_mark,
+						      tmpsrc, count,
+						      NULL,
+						      &tmpdst, &tmpdst_len)
+			    < 0)
+			  {
+			    int saved_errno = errno;
+			    if (!(result == resultbuf || result == NULL))
+			      free (result);
+			    if (buf_malloced != NULL)
+			      free (buf_malloced);
+			    CLEANUP ();
+			    errno = saved_errno;
+			    return NULL;
+			  }
+			ENSURE_ALLOCATION (xsum (length, tmpdst_len));
+			DCHAR_CPY (result + length, tmpdst, tmpdst_len);
+			free (tmpdst);
+			count = tmpdst_len;
+		      }
+		    else
+		      {
+			/* The result string is ASCII.
+			   Simple 1:1 conversion.  */
+# if USE_SNPRINTF
+			/* If sizeof (DCHAR_T) == sizeof (TCHAR_T), it's a
+			   no-op conversion, in-place on the array starting
+			   at (result + length).  */
+			if (sizeof (DCHAR_T) != sizeof (TCHAR_T))
+# endif
+			  {
+			    const TCHAR_T *tmpsrc;
+			    DCHAR_T *tmpdst;
+			    size_t n;
+
+# if USE_SNPRINTF
+			    if (result == resultbuf)
+			      {
+				tmpsrc = (TCHAR_T *) (result + length);
+				/* ENSURE_ALLOCATION will not move tmpsrc
+				   (because it's part of resultbuf).  */
+				ENSURE_ALLOCATION (xsum (length, count));
+			      }
+			    else
+			      {
+				/* ENSURE_ALLOCATION will move the array
+				   (because it uses realloc().  */
+				ENSURE_ALLOCATION (xsum (length, count));
+				tmpsrc = (TCHAR_T *) (result + length);
+			      }
+# else
+			    tmpsrc = tmp;
+			    ENSURE_ALLOCATION (xsum (length, count));
+# endif
+			    tmpdst = result + length;
+			    /* Copy backwards, because of overlapping.  */
+			    tmpsrc += count;
+			    tmpdst += count;
+			    for (n = count; n > 0; n--)
+			      *--tmpdst = (unsigned char) *--tmpsrc;
+			  }
+		      }
+#endif
+
+#if DCHAR_IS_TCHAR && !USE_SNPRINTF
+		    /* Make room for the result.  */
+		    if (count > allocated - length)
+		      {
+			/* Need at least count elements.  But allocate
+			   proportionally.  */
+			size_t n =
+			  xmax (xsum (length, count), xtimes (allocated, 2));
+
+			ENSURE_ALLOCATION (n);
+		      }
+#endif
+
+		    /* Here count <= allocated - length.  */
+
+		    /* Perform padding.  */
+#if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION
+		    if (pad_ourselves && has_width)
+		      {
+			size_t w;
+# if ENABLE_UNISTDIO
+			/* Outside POSIX, it's preferrable to compare the width
+			   against the number of _characters_ of the converted
+			   value.  */
+			w = DCHAR_MBSNLEN (result + length, count);
+# else
+			/* The width is compared against the number of _bytes_
+			   of the converted value, says POSIX.  */
+			w = count;
+# endif
+			if (w < width)
+			  {
+			    size_t pad = width - w;
+# if USE_SNPRINTF
+			    /* Make room for the result.  */
+			    if (xsum (count, pad) > allocated - length)
+			      {
+				/* Need at least count + pad elements.  But
+				   allocate proportionally.  */
+				size_t n =
+				  xmax (xsum3 (length, count, pad),
+					xtimes (allocated, 2));
+
+				length += count;
+				ENSURE_ALLOCATION (n);
+				length -= count;
+			      }
+			    /* Here count + pad <= allocated - length.  */
+# endif
+			    {
+# if !DCHAR_IS_TCHAR || USE_SNPRINTF
+			      DCHAR_T * const rp = result + length;
+# else
+			      DCHAR_T * const rp = tmp;
+# endif
+			      DCHAR_T *p = rp + count;
+			      DCHAR_T *end = p + pad;
+# if NEED_PRINTF_FLAG_ZERO
+			      DCHAR_T *pad_ptr;
+#  if !DCHAR_IS_TCHAR
+			      if (dp->conversion == 'c'
+				  || dp->conversion == 's')
+				/* No zero-padding for string directives.  */
+				pad_ptr = NULL;
+			      else
+#  endif
+				{
+				  pad_ptr = (*rp == '-' ? rp + 1 : rp);
+				  /* No zero-padding of "inf" and "nan".  */
+				  if ((*pad_ptr >= 'A' && *pad_ptr <= 'Z')
+				      || (*pad_ptr >= 'a' && *pad_ptr <= 'z'))
+				    pad_ptr = NULL;
+				}
+# endif
+			      /* The generated string now extends from rp to p,
+				 with the zero padding insertion point being at
+				 pad_ptr.  */
+
+			      count = count + pad; /* = end - rp */
+
+			      if (flags & FLAG_LEFT)
+				{
+				  /* Pad with spaces on the right.  */
+				  for (; pad > 0; pad--)
+				    *p++ = ' ';
+				}
+# if NEED_PRINTF_FLAG_ZERO
+			      else if ((flags & FLAG_ZERO) && pad_ptr != NULL)
+				{
+				  /* Pad with zeroes.  */
+				  DCHAR_T *q = end;
+
+				  while (p > pad_ptr)
+				    *--q = *--p;
+				  for (; pad > 0; pad--)
+				    *p++ = '0';
+				}
+# endif
+			      else
+				{
+				  /* Pad with spaces on the left.  */
+				  DCHAR_T *q = end;
+
+				  while (p > rp)
+				    *--q = *--p;
+				  for (; pad > 0; pad--)
+				    *p++ = ' ';
+				}
+			    }
+			  }
+		      }
+#endif
+
+#if DCHAR_IS_TCHAR && !USE_SNPRINTF
+		    if (count >= tmp_length)
+		      /* tmp_length was incorrectly calculated - fix the
+			 code above!  */
+		      abort ();
+#endif
+
+		    /* Here still count <= allocated - length.  */
+
+#if !DCHAR_IS_TCHAR || USE_SNPRINTF
+		    /* The snprintf() result did fit.  */
+#else
+		    /* Append the sprintf() result.  */
+		    memcpy (result + length, tmp, count * sizeof (DCHAR_T));
+#endif
+#if !USE_SNPRINTF
+		    if (tmp != tmpbuf)
+		      free (tmp);
+#endif
+
+#if NEED_PRINTF_DIRECTIVE_F
+		    if (dp->conversion == 'F')
+		      {
+			/* Convert the %f result to upper case for %F.  */
+			DCHAR_T *rp = result + length;
+			size_t rc;
+			for (rc = count; rc > 0; rc--, rp++)
+			  if (*rp >= 'a' && *rp <= 'z')
+			    *rp = *rp - 'a' + 'A';
+		      }
+#endif
+
+		    length += count;
+		    break;
+		  }
+	      }
+	  }
+      }
+
+    /* Add the final NUL.  */
+    ENSURE_ALLOCATION (xsum (length, 1));
+    result[length] = '\0';
+
+    if (result != resultbuf && length + 1 < allocated)
+      {
+	/* Shrink the allocated memory if possible.  */
+	DCHAR_T *memory;
+
+	memory = (DCHAR_T *) realloc (result, (length + 1) * sizeof (DCHAR_T));
+	if (memory != NULL)
+	  result = memory;
+      }
+
+    if (buf_malloced != NULL)
+      free (buf_malloced);
+    CLEANUP ();
+    *lengthp = length;
+    /* Note that we can produce a big string of a length > INT_MAX.  POSIX
+       says that snprintf() fails with errno = EOVERFLOW in this case, but
+       that's only because snprintf() returns an 'int'.  This function does
+       not have this limitation.  */
+    return result;
+
+  overflow:
+    if (!(result == resultbuf || result == NULL))
+      free (result);
+    if (buf_malloced != NULL)
+      free (buf_malloced);
+    CLEANUP ();
+    errno = EOVERFLOW;
+    return NULL;
+
+  out_of_memory:
+    if (!(result == resultbuf || result == NULL))
+      free (result);
+    if (buf_malloced != NULL)
+      free (buf_malloced);
+  out_of_memory_1:
+    CLEANUP ();
+    errno = ENOMEM;
+    return NULL;
+  }
+}
+
+#undef TCHARS_PER_DCHAR
+#undef SNPRINTF
+#undef USE_SNPRINTF
+#undef DCHAR_CPY
+#undef PRINTF_PARSE
+#undef DIRECTIVES
+#undef DIRECTIVE
+#undef DCHAR_IS_TCHAR
+#undef TCHAR_T
+#undef DCHAR_T
+#undef FCHAR_T
+#undef VASNPRINTF
diff --git a/intl/vasnprintf.h b/intl/vasnprintf.h
new file mode 100644
index 0000000..ff1d183
--- /dev/null
+++ b/intl/vasnprintf.h
@@ -0,0 +1,78 @@
+/* vsprintf with automatic memory allocation.
+   Copyright (C) 2002-2004 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+#ifndef _VASNPRINTF_H
+#define _VASNPRINTF_H
+
+/* Get va_list.  */
+#include <stdarg.h>
+
+/* Get size_t.  */
+#include <stddef.h>
+
+#ifndef __attribute__
+/* This feature is available in gcc versions 2.5 and later.  */
+# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__
+#  define __attribute__(Spec) /* empty */
+# endif
+/* The __-protected variants of `format' and `printf' attributes
+   are accepted by gcc versions 2.6.4 (effectively 2.7) and later.  */
+# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7)
+#  define __format__ format
+#  define __printf__ printf
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Write formatted output to a string dynamically allocated with malloc().
+   You can pass a preallocated buffer for the result in RESULTBUF and its
+   size in *LENGTHP; otherwise you pass RESULTBUF = NULL.
+   If successful, return the address of the string (this may be = RESULTBUF
+   if no dynamic memory allocation was necessary) and set *LENGTHP to the
+   number of resulting bytes, excluding the trailing NUL.  Upon error, set
+   errno and return NULL.
+
+   When dynamic memory allocation occurs, the preallocated buffer is left
+   alone (with possibly modified contents).  This makes it possible to use
+   a statically allocated or stack-allocated buffer, like this:
+
+          char buf[100];
+          size_t len = sizeof (buf);
+          char *output = vasnprintf (buf, &len, format, args);
+          if (output == NULL)
+            ... error handling ...;
+          else
+            {
+              ... use the output string ...;
+              if (output != buf)
+                free (output);
+            }
+  */
+extern char * asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...)
+       __attribute__ ((__format__ (__printf__, 3, 4)));
+extern char * vasnprintf (char *resultbuf, size_t *lengthp, const char *format, va_list args)
+       __attribute__ ((__format__ (__printf__, 3, 0)));
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _VASNPRINTF_H */
diff --git a/intl/vasnwprintf.h b/intl/vasnwprintf.h
new file mode 100644
index 0000000..6ff03ce
--- /dev/null
+++ b/intl/vasnwprintf.h
@@ -0,0 +1,46 @@
+/* vswprintf with automatic memory allocation.
+   Copyright (C) 2002-2003 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+#ifndef _VASNWPRINTF_H
+#define _VASNWPRINTF_H
+
+/* Get va_list.  */
+#include <stdarg.h>
+
+/* Get wchar_t, size_t.  */
+#include <stddef.h>
+
+#ifdef	__cplusplus
+extern "C" {
+#endif
+
+/* Write formatted output to a string dynamically allocated with malloc().
+   You can pass a preallocated buffer for the result in RESULTBUF and its
+   size in *LENGTHP; otherwise you pass RESULTBUF = NULL.
+   If successful, return the address of the string (this may be = RESULTBUF
+   if no dynamic memory allocation was necessary) and set *LENGTHP to the
+   number of resulting bytes, excluding the trailing NUL.  Upon error, set
+   errno and return NULL.  */
+extern wchar_t * asnwprintf (wchar_t *resultbuf, size_t *lengthp, const wchar_t *format, ...);
+extern wchar_t * vasnwprintf (wchar_t *resultbuf, size_t *lengthp, const wchar_t *format, va_list args);
+
+#ifdef	__cplusplus
+}
+#endif
+
+#endif /* _VASNWPRINTF_H */
diff --git a/intl/version.c b/intl/version.c
new file mode 100644
index 0000000..a968cf7
--- /dev/null
+++ b/intl/version.c
@@ -0,0 +1,26 @@
+/* libintl library version.
+   Copyright (C) 2005 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "libgnuintl.h"
+
+/* Version number: (major<<16) + (minor<<8) + subminor */
+int libintl_version = LIBINTL_VERSION;
diff --git a/intl/wprintf-parse.h b/intl/wprintf-parse.h
new file mode 100644
index 0000000..600b89a
--- /dev/null
+++ b/intl/wprintf-parse.h
@@ -0,0 +1,75 @@
+/* Parse printf format string.
+   Copyright (C) 1999, 2002-2003 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+#ifndef _WPRINTF_PARSE_H
+#define _WPRINTF_PARSE_H
+
+#include "printf-args.h"
+
+
+/* Flags */
+#define FLAG_GROUP	 1	/* ' flag */
+#define FLAG_LEFT	 2	/* - flag */
+#define FLAG_SHOWSIGN	 4	/* + flag */
+#define FLAG_SPACE	 8	/* space flag */
+#define FLAG_ALT	16	/* # flag */
+#define FLAG_ZERO	32
+
+/* arg_index value indicating that no argument is consumed.  */
+#define ARG_NONE	(~(size_t)0)
+
+/* A parsed directive.  */
+typedef struct
+{
+  const wchar_t* dir_start;
+  const wchar_t* dir_end;
+  int flags;
+  const wchar_t* width_start;
+  const wchar_t* width_end;
+  size_t width_arg_index;
+  const wchar_t* precision_start;
+  const wchar_t* precision_end;
+  size_t precision_arg_index;
+  wchar_t conversion; /* d i o u x X f e E g G c s p n U % but not C S */
+  size_t arg_index;
+}
+wchar_t_directive;
+
+/* A parsed format string.  */
+typedef struct
+{
+  size_t count;
+  wchar_t_directive *dir;
+  size_t max_width_length;
+  size_t max_precision_length;
+}
+wchar_t_directives;
+
+
+/* Parses the format string.  Fills in the number N of directives, and fills
+   in directives[0], ..., directives[N-1], and sets directives[N].dir_start
+   to the end of the format string.  Also fills in the arg_type fields of the
+   arguments and the needed count of arguments.  */
+#ifdef STATIC
+STATIC
+#else
+extern
+#endif
+int wprintf_parse (const wchar_t *format, wchar_t_directives *d, arguments *a);
+
+#endif /* _WPRINTF_PARSE_H */
diff --git a/intl/xsize.h b/intl/xsize.h
new file mode 100644
index 0000000..b3023a7
--- /dev/null
+++ b/intl/xsize.h
@@ -0,0 +1,109 @@
+/* xsize.h -- Checked size_t computations.
+
+   Copyright (C) 2003 Free Software Foundation, Inc.
+
+   This program is free software; you can redistribute it and/or modify it
+   under the terms of the GNU Library General Public License as published
+   by the Free Software Foundation; either version 2, 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
+   Library General Public License for more details.
+
+   You should have received a copy of the GNU Library General Public
+   License along with this program; if not, write to the Free Software
+   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
+   USA.  */
+
+#ifndef _XSIZE_H
+#define _XSIZE_H
+
+/* Get size_t.  */
+#include <stddef.h>
+
+/* Get SIZE_MAX.  */
+#include <limits.h>
+#if HAVE_STDINT_H
+# include <stdint.h>
+#endif
+
+/* The size of memory objects is often computed through expressions of
+   type size_t. Example:
+      void* p = malloc (header_size + n * element_size).
+   These computations can lead to overflow.  When this happens, malloc()
+   returns a piece of memory that is way too small, and the program then
+   crashes while attempting to fill the memory.
+   To avoid this, the functions and macros in this file check for overflow.
+   The convention is that SIZE_MAX represents overflow.
+   malloc (SIZE_MAX) is not guaranteed to fail -- think of a malloc
+   implementation that uses mmap --, it's recommended to use size_overflow_p()
+   or size_in_bounds_p() before invoking malloc().
+   The example thus becomes:
+      size_t size = xsum (header_size, xtimes (n, element_size));
+      void *p = (size_in_bounds_p (size) ? malloc (size) : NULL);
+*/
+
+/* Convert an arbitrary value >= 0 to type size_t.  */
+#define xcast_size_t(N) \
+  ((N) <= SIZE_MAX ? (size_t) (N) : SIZE_MAX)
+
+/* Sum of two sizes, with overflow check.  */
+static inline size_t
+#if __GNUC__ >= 3
+__attribute__ ((__pure__))
+#endif
+xsum (size_t size1, size_t size2)
+{
+  size_t sum = size1 + size2;
+  return (sum >= size1 ? sum : SIZE_MAX);
+}
+
+/* Sum of three sizes, with overflow check.  */
+static inline size_t
+#if __GNUC__ >= 3
+__attribute__ ((__pure__))
+#endif
+xsum3 (size_t size1, size_t size2, size_t size3)
+{
+  return xsum (xsum (size1, size2), size3);
+}
+
+/* Sum of four sizes, with overflow check.  */
+static inline size_t
+#if __GNUC__ >= 3
+__attribute__ ((__pure__))
+#endif
+xsum4 (size_t size1, size_t size2, size_t size3, size_t size4)
+{
+  return xsum (xsum (xsum (size1, size2), size3), size4);
+}
+
+/* Maximum of two sizes, with overflow check.  */
+static inline size_t
+#if __GNUC__ >= 3
+__attribute__ ((__pure__))
+#endif
+xmax (size_t size1, size_t size2)
+{
+  /* No explicit check is needed here, because for any n:
+     max (SIZE_MAX, n) == SIZE_MAX and max (n, SIZE_MAX) == SIZE_MAX.  */
+  return (size1 >= size2 ? size1 : size2);
+}
+
+/* Multiplication of a count with an element size, with overflow check.
+   The count must be >= 0 and the element size must be > 0.
+   This is a macro, not an inline function, so that it works correctly even
+   when N is of a wider tupe and N > SIZE_MAX.  */
+#define xtimes(N, ELSIZE) \
+  ((N) <= SIZE_MAX / (ELSIZE) ? (size_t) (N) * (ELSIZE) : SIZE_MAX)
+
+/* Check for overflow.  */
+#define size_overflow_p(SIZE) \
+  ((SIZE) == SIZE_MAX)
+/* Check against overflow.  */
+#define size_in_bounds_p(SIZE) \
+  ((SIZE) != SIZE_MAX)
+
+#endif /* _XSIZE_H */
diff --git a/m4/ChangeLog b/m4/ChangeLog
new file mode 100644
index 0000000..0d29e69
--- /dev/null
+++ b/m4/ChangeLog
@@ -0,0 +1,62 @@
+2012-07-02  gettextize  <bug-gnu-gettext at gnu.org>
+
+	* gettext.m4: Upgrade to gettext-0.17.
+	* iconv.m4: Upgrade to gettext-0.17.
+	* lib-ld.m4: Upgrade to gettext-0.17.
+	* lib-link.m4: Upgrade to gettext-0.17.
+	* lib-prefix.m4: Upgrade to gettext-0.17.
+	* nls.m4: New file, from gettext-0.17.
+	* po.m4: New file, from gettext-0.17.
+	* progtest.m4: Upgrade to gettext-0.17.
+	* codeset.m4: Upgrade to gettext-0.17.
+	* glibc2.m4: New file, from gettext-0.17.
+	* glibc21.m4: Upgrade to gettext-0.17.
+	* intdiv0.m4: Upgrade to gettext-0.17.
+	* intl.m4: New file, from gettext-0.17.
+	* intldir.m4: New file, from gettext-0.17.
+	* intlmacosx.m4: New file, from gettext-0.17.
+	* intmax.m4: New file, from gettext-0.17.
+	* inttypes_h.m4: Upgrade to gettext-0.17.
+	* inttypes-pri.m4: Upgrade to gettext-0.17.
+	* lcmessage.m4: Upgrade to gettext-0.17.
+	* lock.m4: New file, from gettext-0.17.
+	* longlong.m4: New file, from gettext-0.17.
+	* printf-posix.m4: New file, from gettext-0.17.
+	* size_max.m4: New file, from gettext-0.17.
+	* stdint_h.m4: Upgrade to gettext-0.17.
+	* uintmax_t.m4: Upgrade to gettext-0.17.
+	* visibility.m4: New file, from gettext-0.17.
+	* wchar_t.m4: New file, from gettext-0.17.
+	* wint_t.m4: New file, from gettext-0.17.
+	* xsize.m4: New file, from gettext-0.17.
+	* Makefile.am (EXTRA_DIST): Add the new files.
+
+2002-08-17  gettextize  <bug-gnu-gettext at gnu.org>
+
+	* gettext.m4: Upgrade to gettext-0.11.5.
+	* iconv.m4: Upgrade to gettext-0.11.5.
+	* intdiv0.m4: New file, from gettext-0.11.5.
+	* inttypes.m4: New file, from gettext-0.11.5.
+	* inttypes_h.m4: New file, from gettext-0.11.5.
+	* inttypes-pri.m4: New file, from gettext-0.11.5.
+	* lcmessage.m4: Upgrade to gettext-0.11.5.
+	* lib-link.m4: Upgrade to gettext-0.11.5.
+	* stdint_h.m4: New file, from gettext-0.11.5.
+	* uintmax_t.m4: New file, from gettext-0.11.5.
+	* ulonglong.m4: New file, from gettext-0.11.5.
+	* Makefile.am (EXTRA_DIST): Add the new files.
+
+2002-08-17  gettextize  <bug-gnu-gettext at gnu.org>
+
+	* codeset.m4: New file, from gettext-0.11.2.
+	* gettext.m4: New file, from gettext-0.11.2.
+	* glibc21.m4: New file, from gettext-0.11.2.
+	* iconv.m4: New file, from gettext-0.11.2.
+	* isc-posix.m4: New file, from gettext-0.11.2.
+	* lcmessage.m4: New file, from gettext-0.11.2.
+	* lib-ld.m4: New file, from gettext-0.11.2.
+	* lib-link.m4: New file, from gettext-0.11.2.
+	* lib-prefix.m4: New file, from gettext-0.11.2.
+	* progtest.m4: New file, from gettext-0.11.2.
+	* Makefile.am: New file.
+
diff --git a/m4/Makefile.am b/m4/Makefile.am
new file mode 100644
index 0000000..ba61141
--- /dev/null
+++ b/m4/Makefile.am
@@ -0,0 +1,2 @@
+#made by autogen.sh ...
+EXTRA_DIST = nls.m4 po.m4 glibc2.m4 intl.m4 intldir.m4 intlmacosx.m4 intmax.m4 lock.m4 longlong.m4 printf-posix.m4 size_max.m4 visibility.m4 wchar_t.m4 wint_t.m4 xsize.m4 codeset.m4 gettext.m4 glibc21.m4 iconv.m4 intdiv0.m4 inttypes_h.m4 inttypes.m4 inttypes-pri.m4 isc-posix.m4 lcmessage.m4 lib-ld.m4 lib-link.m4 lib-prefix.m4 progtest.m4 stdint_h.m4 uintmax_t.m4 ulonglong.m4
diff --git a/m4/Makefile.in b/m4/Makefile.in
new file mode 100644
index 0000000..06b19aa
--- /dev/null
+++ b/m4/Makefile.in
@@ -0,0 +1,381 @@
+# Makefile.in generated by automake 1.10.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = m4
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ChangeLog
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/codeset.m4 \
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/glibc2.m4 \
+	$(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intdiv0.m4 $(top_srcdir)/m4/intl.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax.m4 \
+	$(top_srcdir)/m4/inttypes-pri.m4 \
+	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/isc-posix.m4 \
+	$(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/lock.m4 $(top_srcdir)/m4/longlong.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/printf-posix.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/stdint_h.m4 \
+	$(top_srcdir)/m4/uintmax_t.m4 $(top_srcdir)/m4/visibility.m4 \
+	$(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wint_t.m4 \
+	$(top_srcdir)/m4/xsize.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CFLAG_VISIBILITY = @CFLAG_VISIBILITY@
+COIN_ARCH = @COIN_ARCH@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GENCAT = @GENCAT@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIBC2 = @GLIBC2@
+GLIBC21 = @GLIBC21@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+HAVE_ASPRINTF = @HAVE_ASPRINTF@
+HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@
+HAVE_SNPRINTF = @HAVE_SNPRINTF@
+HAVE_VISIBILITY = @HAVE_VISIBILITY@
+HAVE_WPRINTF = @HAVE_WPRINTF@
+IMLIB2_CONFIG_IN_PATH = @IMLIB2_CONFIG_IN_PATH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLBISON = @INTLBISON@
+INTLLIBS = @INTLLIBS@
+INTLOBJS = @INTLOBJS@
+INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMULTITHREAD = @LIBMULTITHREAD@
+LIBOBJS = @LIBOBJS@
+LIBPTH = @LIBPTH@
+LIBPTH_PREFIX = @LIBPTH_PREFIX@
+LIBS = @LIBS@
+LIBTHREAD = @LIBTHREAD@
+LTLIBC = @LTLIBC@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBMULTITHREAD = @LTLIBMULTITHREAD@
+LTLIBOBJS = @LTLIBOBJS@
+LTLIBPTH = @LTLIBPTH@
+LTLIBTHREAD = @LTLIBTHREAD@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_CFLAGS = @PACKAGE_CFLAGS@
+PACKAGE_LIBS = @PACKAGE_LIBS@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POSUB = @POSUB@
+PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+WINDRES = @WINDRES@
+WMCCC = @WMCCC@
+WMCOINCOIN_PLAYER = @WMCOINCOIN_PLAYER@
+WOE32 = @WOE32@
+WOE32DLL = @WOE32DLL@
+XFT_CFLAGS = @XFT_CFLAGS@
+XFT_LIBS = @XFT_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+#made by autogen.sh ...
+EXTRA_DIST = nls.m4 po.m4 glibc2.m4 intl.m4 intldir.m4 intlmacosx.m4 intmax.m4 lock.m4 longlong.m4 printf-posix.m4 size_max.m4 visibility.m4 wchar_t.m4 wint_t.m4 xsize.m4 codeset.m4 gettext.m4 glibc21.m4 iconv.m4 intdiv0.m4 inttypes_h.m4 inttypes.m4 inttypes-pri.m4 isc-posix.m4 lcmessage.m4 lib-ld.m4 lib-link.m4 lib-prefix.m4 progtest.m4 stdint_h.m4 uintmax_t.m4 ulonglong.m4
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  m4/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  m4/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    fi; \
+	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic distclean \
+	distclean-generic distdir dvi dvi-am html html-am info info-am \
+	install install-am install-data install-data-am install-dvi \
+	install-dvi-am install-exec install-exec-am install-html \
+	install-html-am install-info install-info-am install-man \
+	install-pdf install-pdf-am install-ps install-ps-am \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/m4/codeset.m4 b/m4/codeset.m4
new file mode 100644
index 0000000..223955b
--- /dev/null
+++ b/m4/codeset.m4
@@ -0,0 +1,21 @@
+# codeset.m4 serial 2 (gettext-0.16)
+dnl Copyright (C) 2000-2002, 2006 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_DEFUN([AM_LANGINFO_CODESET],
+[
+  AC_CACHE_CHECK([for nl_langinfo and CODESET], am_cv_langinfo_codeset,
+    [AC_TRY_LINK([#include <langinfo.h>],
+      [char* cs = nl_langinfo(CODESET); return !cs;],
+      am_cv_langinfo_codeset=yes,
+      am_cv_langinfo_codeset=no)
+    ])
+  if test $am_cv_langinfo_codeset = yes; then
+    AC_DEFINE(HAVE_LANGINFO_CODESET, 1,
+      [Define if you have <langinfo.h> and nl_langinfo(CODESET).])
+  fi
+])
diff --git a/m4/gettext.m4 b/m4/gettext.m4
new file mode 100644
index 0000000..c9ae1f7
--- /dev/null
+++ b/m4/gettext.m4
@@ -0,0 +1,381 @@
+# gettext.m4 serial 60 (gettext-0.17)
+dnl Copyright (C) 1995-2007 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl   Ulrich Drepper <drepper at cygnus.com>, 1995-2000.
+dnl   Bruno Haible <haible at clisp.cons.org>, 2000-2006.
+
+dnl Macro to add for using GNU gettext.
+
+dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]).
+dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The
+dnl    default (if it is not specified or empty) is 'no-libtool'.
+dnl    INTLSYMBOL should be 'external' for packages with no intl directory,
+dnl    and 'no-libtool' or 'use-libtool' for packages with an intl directory.
+dnl    If INTLSYMBOL is 'use-libtool', then a libtool library
+dnl    $(top_builddir)/intl/libintl.la will be created (shared and/or static,
+dnl    depending on --{enable,disable}-{shared,static} and on the presence of
+dnl    AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library
+dnl    $(top_builddir)/intl/libintl.a will be created.
+dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext
+dnl    implementations (in libc or libintl) without the ngettext() function
+dnl    will be ignored.  If NEEDSYMBOL is specified and is
+dnl    'need-formatstring-macros', then GNU gettext implementations that don't
+dnl    support the ISO C 99 <inttypes.h> formatstring macros will be ignored.
+dnl INTLDIR is used to find the intl libraries.  If empty,
+dnl    the value `$(top_builddir)/intl/' is used.
+dnl
+dnl The result of the configuration is one of three cases:
+dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled
+dnl    and used.
+dnl    Catalog format: GNU --> install in $(datadir)
+dnl    Catalog extension: .mo after installation, .gmo in source tree
+dnl 2) GNU gettext has been found in the system's C library.
+dnl    Catalog format: GNU --> install in $(datadir)
+dnl    Catalog extension: .mo after installation, .gmo in source tree
+dnl 3) No internationalization, always use English msgid.
+dnl    Catalog format: none
+dnl    Catalog extension: none
+dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur.
+dnl The use of .gmo is historical (it was needed to avoid overwriting the
+dnl GNU format catalogs when building on a platform with an X/Open gettext),
+dnl but we keep it in order not to force irrelevant filename changes on the
+dnl maintainers.
+dnl
+AC_DEFUN([AM_GNU_GETTEXT],
+[
+  dnl Argument checking.
+  ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], ,
+    [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT
+])])])])])
+  ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], ,
+    [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT
+])])])])
+  define([gt_included_intl],
+    ifelse([$1], [external],
+      ifdef([AM_GNU_GETTEXT_][INTL_SUBDIR], [yes], [no]),
+      [yes]))
+  define([gt_libtool_suffix_prefix], ifelse([$1], [use-libtool], [l], []))
+  gt_NEEDS_INIT
+  AM_GNU_GETTEXT_NEED([$2])
+
+  AC_REQUIRE([AM_PO_SUBDIRS])dnl
+  ifelse(gt_included_intl, yes, [
+    AC_REQUIRE([AM_INTL_SUBDIR])dnl
+  ])
+
+  dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+  AC_REQUIRE([AC_LIB_RPATH])
+
+  dnl Sometimes libintl requires libiconv, so first search for libiconv.
+  dnl Ideally we would do this search only after the
+  dnl      if test "$USE_NLS" = "yes"; then
+  dnl        if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
+  dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT
+  dnl the configure script would need to contain the same shell code
+  dnl again, outside any 'if'. There are two solutions:
+  dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'.
+  dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE.
+  dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not
+  dnl documented, we avoid it.
+  ifelse(gt_included_intl, yes, , [
+    AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
+  ])
+
+  dnl Sometimes, on MacOS X, libintl requires linking with CoreFoundation.
+  gt_INTL_MACOSX
+
+  dnl Set USE_NLS.
+  AC_REQUIRE([AM_NLS])
+
+  ifelse(gt_included_intl, yes, [
+    BUILD_INCLUDED_LIBINTL=no
+    USE_INCLUDED_LIBINTL=no
+  ])
+  LIBINTL=
+  LTLIBINTL=
+  POSUB=
+
+  dnl Add a version number to the cache macros.
+  case " $gt_needs " in
+    *" need-formatstring-macros "*) gt_api_version=3 ;;
+    *" need-ngettext "*) gt_api_version=2 ;;
+    *) gt_api_version=1 ;;
+  esac
+  gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc"
+  gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl"
+
+  dnl If we use NLS figure out what method
+  if test "$USE_NLS" = "yes"; then
+    gt_use_preinstalled_gnugettext=no
+    ifelse(gt_included_intl, yes, [
+      AC_MSG_CHECKING([whether included gettext is requested])
+      AC_ARG_WITH(included-gettext,
+        [  --with-included-gettext use the GNU gettext library included here],
+        nls_cv_force_use_gnu_gettext=$withval,
+        nls_cv_force_use_gnu_gettext=no)
+      AC_MSG_RESULT($nls_cv_force_use_gnu_gettext)
+
+      nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext"
+      if test "$nls_cv_force_use_gnu_gettext" != "yes"; then
+    ])
+        dnl User does not insist on using GNU NLS library.  Figure out what
+        dnl to use.  If GNU gettext is available we use this.  Else we have
+        dnl to fall back to GNU NLS library.
+
+        if test $gt_api_version -ge 3; then
+          gt_revision_test_code='
+#ifndef __GNU_GETTEXT_SUPPORTED_REVISION
+#define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1)
+#endif
+changequote(,)dnl
+typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1];
+changequote([,])dnl
+'
+        else
+          gt_revision_test_code=
+        fi
+        if test $gt_api_version -ge 2; then
+          gt_expression_test_code=' + * ngettext ("", "", 0)'
+        else
+          gt_expression_test_code=
+        fi
+
+        AC_CACHE_CHECK([for GNU gettext in libc], [$gt_func_gnugettext_libc],
+         [AC_TRY_LINK([#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern int *_nl_domain_bindings;],
+            [bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings],
+            [eval "$gt_func_gnugettext_libc=yes"],
+            [eval "$gt_func_gnugettext_libc=no"])])
+
+        if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then
+          dnl Sometimes libintl requires libiconv, so first search for libiconv.
+          ifelse(gt_included_intl, yes, , [
+            AM_ICONV_LINK
+          ])
+          dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL
+          dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv])
+          dnl because that would add "-liconv" to LIBINTL and LTLIBINTL
+          dnl even if libiconv doesn't exist.
+          AC_LIB_LINKFLAGS_BODY([intl])
+          AC_CACHE_CHECK([for GNU gettext in libintl],
+            [$gt_func_gnugettext_libintl],
+           [gt_save_CPPFLAGS="$CPPFLAGS"
+            CPPFLAGS="$CPPFLAGS $INCINTL"
+            gt_save_LIBS="$LIBS"
+            LIBS="$LIBS $LIBINTL"
+            dnl Now see whether libintl exists and does not depend on libiconv.
+            AC_TRY_LINK([#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);],
+              [bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")],
+              [eval "$gt_func_gnugettext_libintl=yes"],
+              [eval "$gt_func_gnugettext_libintl=no"])
+            dnl Now see whether libintl exists and depends on libiconv.
+            if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then
+              LIBS="$LIBS $LIBICONV"
+              AC_TRY_LINK([#include <libintl.h>
+$gt_revision_test_code
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);],
+                [bindtextdomain ("", "");
+return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")],
+               [LIBINTL="$LIBINTL $LIBICONV"
+                LTLIBINTL="$LTLIBINTL $LTLIBICONV"
+                eval "$gt_func_gnugettext_libintl=yes"
+               ])
+            fi
+            CPPFLAGS="$gt_save_CPPFLAGS"
+            LIBS="$gt_save_LIBS"])
+        fi
+
+        dnl If an already present or preinstalled GNU gettext() is found,
+        dnl use it.  But if this macro is used in GNU gettext, and GNU
+        dnl gettext is already preinstalled in libintl, we update this
+        dnl libintl.  (Cf. the install rule in intl/Makefile.in.)
+        if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \
+           || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \
+                && test "$PACKAGE" != gettext-runtime \
+                && test "$PACKAGE" != gettext-tools; }; then
+          gt_use_preinstalled_gnugettext=yes
+        else
+          dnl Reset the values set by searching for libintl.
+          LIBINTL=
+          LTLIBINTL=
+          INCINTL=
+        fi
+
+    ifelse(gt_included_intl, yes, [
+        if test "$gt_use_preinstalled_gnugettext" != "yes"; then
+          dnl GNU gettext is not found in the C library.
+          dnl Fall back on included GNU gettext library.
+          nls_cv_use_gnu_gettext=yes
+        fi
+      fi
+
+      if test "$nls_cv_use_gnu_gettext" = "yes"; then
+        dnl Mark actions used to generate GNU NLS library.
+        BUILD_INCLUDED_LIBINTL=yes
+        USE_INCLUDED_LIBINTL=yes
+        LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV $LIBTHREAD"
+        LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV $LTLIBTHREAD"
+        LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
+      fi
+
+      CATOBJEXT=
+      if test "$gt_use_preinstalled_gnugettext" = "yes" \
+         || test "$nls_cv_use_gnu_gettext" = "yes"; then
+        dnl Mark actions to use GNU gettext tools.
+        CATOBJEXT=.gmo
+      fi
+    ])
+
+    if test -n "$INTL_MACOSX_LIBS"; then
+      if test "$gt_use_preinstalled_gnugettext" = "yes" \
+         || test "$nls_cv_use_gnu_gettext" = "yes"; then
+        dnl Some extra flags are needed during linking.
+        LIBINTL="$LIBINTL $INTL_MACOSX_LIBS"
+        LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS"
+      fi
+    fi
+
+    if test "$gt_use_preinstalled_gnugettext" = "yes" \
+       || test "$nls_cv_use_gnu_gettext" = "yes"; then
+      AC_DEFINE(ENABLE_NLS, 1,
+        [Define to 1 if translation of program messages to the user's native language
+   is requested.])
+    else
+      USE_NLS=no
+    fi
+  fi
+
+  AC_MSG_CHECKING([whether to use NLS])
+  AC_MSG_RESULT([$USE_NLS])
+  if test "$USE_NLS" = "yes"; then
+    AC_MSG_CHECKING([where the gettext function comes from])
+    if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+      if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
+        gt_source="external libintl"
+      else
+        gt_source="libc"
+      fi
+    else
+      gt_source="included intl directory"
+    fi
+    AC_MSG_RESULT([$gt_source])
+  fi
+
+  if test "$USE_NLS" = "yes"; then
+
+    if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+      if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then
+        AC_MSG_CHECKING([how to link with libintl])
+        AC_MSG_RESULT([$LIBINTL])
+        AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL])
+      fi
+
+      dnl For backward compatibility. Some packages may be using this.
+      AC_DEFINE(HAVE_GETTEXT, 1,
+       [Define if the GNU gettext() function is already present or preinstalled.])
+      AC_DEFINE(HAVE_DCGETTEXT, 1,
+       [Define if the GNU dcgettext() function is already present or preinstalled.])
+    fi
+
+    dnl We need to process the po/ directory.
+    POSUB=po
+  fi
+
+  ifelse(gt_included_intl, yes, [
+    dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL
+    dnl to 'yes' because some of the testsuite requires it.
+    if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then
+      BUILD_INCLUDED_LIBINTL=yes
+    fi
+
+    dnl Make all variables we use known to autoconf.
+    AC_SUBST(BUILD_INCLUDED_LIBINTL)
+    AC_SUBST(USE_INCLUDED_LIBINTL)
+    AC_SUBST(CATOBJEXT)
+
+    dnl For backward compatibility. Some configure.ins may be using this.
+    nls_cv_header_intl=
+    nls_cv_header_libgt=
+
+    dnl For backward compatibility. Some Makefiles may be using this.
+    DATADIRNAME=share
+    AC_SUBST(DATADIRNAME)
+
+    dnl For backward compatibility. Some Makefiles may be using this.
+    INSTOBJEXT=.mo
+    AC_SUBST(INSTOBJEXT)
+
+    dnl For backward compatibility. Some Makefiles may be using this.
+    GENCAT=gencat
+    AC_SUBST(GENCAT)
+
+    dnl For backward compatibility. Some Makefiles may be using this.
+    INTLOBJS=
+    if test "$USE_INCLUDED_LIBINTL" = yes; then
+      INTLOBJS="\$(GETTOBJS)"
+    fi
+    AC_SUBST(INTLOBJS)
+
+    dnl Enable libtool support if the surrounding package wishes it.
+    INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix
+    AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX)
+  ])
+
+  dnl For backward compatibility. Some Makefiles may be using this.
+  INTLLIBS="$LIBINTL"
+  AC_SUBST(INTLLIBS)
+
+  dnl Make all documented variables known to autoconf.
+  AC_SUBST(LIBINTL)
+  AC_SUBST(LTLIBINTL)
+  AC_SUBST(POSUB)
+])
+
+
+dnl gt_NEEDS_INIT ensures that the gt_needs variable is initialized.
+m4_define([gt_NEEDS_INIT],
+[
+  m4_divert_text([DEFAULTS], [gt_needs=])
+  m4_define([gt_NEEDS_INIT], [])
+])
+
+
+dnl Usage: AM_GNU_GETTEXT_NEED([NEEDSYMBOL])
+AC_DEFUN([AM_GNU_GETTEXT_NEED],
+[
+  m4_divert_text([INIT_PREPARE], [gt_needs="$gt_needs $1"])
+])
+
+
+dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version])
+AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])
diff --git a/m4/glibc2.m4 b/m4/glibc2.m4
new file mode 100644
index 0000000..e8f5bfe
--- /dev/null
+++ b/m4/glibc2.m4
@@ -0,0 +1,30 @@
+# glibc2.m4 serial 1
+dnl Copyright (C) 2000-2002, 2004 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# Test for the GNU C Library, version 2.0 or newer.
+# From Bruno Haible.
+
+AC_DEFUN([gt_GLIBC2],
+  [
+    AC_CACHE_CHECK(whether we are using the GNU C Library 2 or newer,
+      ac_cv_gnu_library_2,
+      [AC_EGREP_CPP([Lucky GNU user],
+	[
+#include <features.h>
+#ifdef __GNU_LIBRARY__
+ #if (__GLIBC__ >= 2)
+  Lucky GNU user
+ #endif
+#endif
+	],
+	ac_cv_gnu_library_2=yes,
+	ac_cv_gnu_library_2=no)
+      ]
+    )
+    AC_SUBST(GLIBC2)
+    GLIBC2="$ac_cv_gnu_library_2"
+  ]
+)
diff --git a/m4/glibc21.m4 b/m4/glibc21.m4
new file mode 100644
index 0000000..d95fd98
--- /dev/null
+++ b/m4/glibc21.m4
@@ -0,0 +1,30 @@
+# glibc21.m4 serial 3
+dnl Copyright (C) 2000-2002, 2004 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# Test for the GNU C Library, version 2.1 or newer.
+# From Bruno Haible.
+
+AC_DEFUN([gl_GLIBC21],
+  [
+    AC_CACHE_CHECK(whether we are using the GNU C Library 2.1 or newer,
+      ac_cv_gnu_library_2_1,
+      [AC_EGREP_CPP([Lucky GNU user],
+	[
+#include <features.h>
+#ifdef __GNU_LIBRARY__
+ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2)
+  Lucky GNU user
+ #endif
+#endif
+	],
+	ac_cv_gnu_library_2_1=yes,
+	ac_cv_gnu_library_2_1=no)
+      ]
+    )
+    AC_SUBST(GLIBC21)
+    GLIBC21="$ac_cv_gnu_library_2_1"
+  ]
+)
diff --git a/m4/iconv.m4 b/m4/iconv.m4
new file mode 100644
index 0000000..66bc76f
--- /dev/null
+++ b/m4/iconv.m4
@@ -0,0 +1,180 @@
+# iconv.m4 serial AM6 (gettext-0.17)
+dnl Copyright (C) 2000-2002, 2007 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_DEFUN([AM_ICONV_LINKFLAGS_BODY],
+[
+  dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+  AC_REQUIRE([AC_LIB_RPATH])
+
+  dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
+  dnl accordingly.
+  AC_LIB_LINKFLAGS_BODY([iconv])
+])
+
+AC_DEFUN([AM_ICONV_LINK],
+[
+  dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
+  dnl those with the standalone portable GNU libiconv installed).
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+
+  dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
+  dnl accordingly.
+  AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
+
+  dnl Add $INCICONV to CPPFLAGS before performing the following checks,
+  dnl because if the user has installed libiconv and not disabled its use
+  dnl via --without-libiconv-prefix, he wants to use it. The first
+  dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed.
+  am_save_CPPFLAGS="$CPPFLAGS"
+  AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV])
+
+  AC_CACHE_CHECK([for iconv], am_cv_func_iconv, [
+    am_cv_func_iconv="no, consider installing GNU libiconv"
+    am_cv_lib_iconv=no
+    AC_TRY_LINK([#include <stdlib.h>
+#include <iconv.h>],
+      [iconv_t cd = iconv_open("","");
+       iconv(cd,NULL,NULL,NULL,NULL);
+       iconv_close(cd);],
+      am_cv_func_iconv=yes)
+    if test "$am_cv_func_iconv" != yes; then
+      am_save_LIBS="$LIBS"
+      LIBS="$LIBS $LIBICONV"
+      AC_TRY_LINK([#include <stdlib.h>
+#include <iconv.h>],
+        [iconv_t cd = iconv_open("","");
+         iconv(cd,NULL,NULL,NULL,NULL);
+         iconv_close(cd);],
+        am_cv_lib_iconv=yes
+        am_cv_func_iconv=yes)
+      LIBS="$am_save_LIBS"
+    fi
+  ])
+  if test "$am_cv_func_iconv" = yes; then
+    AC_CACHE_CHECK([for working iconv], am_cv_func_iconv_works, [
+      dnl This tests against bugs in AIX 5.1 and HP-UX 11.11.
+      am_save_LIBS="$LIBS"
+      if test $am_cv_lib_iconv = yes; then
+        LIBS="$LIBS $LIBICONV"
+      fi
+      AC_TRY_RUN([
+#include <iconv.h>
+#include <string.h>
+int main ()
+{
+  /* Test against AIX 5.1 bug: Failures are not distinguishable from successful
+     returns.  */
+  {
+    iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8");
+    if (cd_utf8_to_88591 != (iconv_t)(-1))
+      {
+        static const char input[] = "\342\202\254"; /* EURO SIGN */
+        char buf[10];
+        const char *inptr = input;
+        size_t inbytesleft = strlen (input);
+        char *outptr = buf;
+        size_t outbytesleft = sizeof (buf);
+        size_t res = iconv (cd_utf8_to_88591,
+                            (char **) &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if (res == 0)
+          return 1;
+      }
+  }
+#if 0 /* This bug could be worked around by the caller.  */
+  /* Test against HP-UX 11.11 bug: Positive return value instead of 0.  */
+  {
+    iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591");
+    if (cd_88591_to_utf8 != (iconv_t)(-1))
+      {
+        static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
+        char buf[50];
+        const char *inptr = input;
+        size_t inbytesleft = strlen (input);
+        char *outptr = buf;
+        size_t outbytesleft = sizeof (buf);
+        size_t res = iconv (cd_88591_to_utf8,
+                            (char **) &inptr, &inbytesleft,
+                            &outptr, &outbytesleft);
+        if ((int)res > 0)
+          return 1;
+      }
+  }
+#endif
+  /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is
+     provided.  */
+  if (/* Try standardized names.  */
+      iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1)
+      /* Try IRIX, OSF/1 names.  */
+      && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1)
+      /* Try AIX names.  */
+      && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1)
+      /* Try HP-UX names.  */
+      && iconv_open ("utf8", "eucJP") == (iconv_t)(-1))
+    return 1;
+  return 0;
+}], [am_cv_func_iconv_works=yes], [am_cv_func_iconv_works=no],
+        [case "$host_os" in
+           aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
+           *)            am_cv_func_iconv_works="guessing yes" ;;
+         esac])
+      LIBS="$am_save_LIBS"
+    ])
+    case "$am_cv_func_iconv_works" in
+      *no) am_func_iconv=no am_cv_lib_iconv=no ;;
+      *)   am_func_iconv=yes ;;
+    esac
+  else
+    am_func_iconv=no am_cv_lib_iconv=no
+  fi
+  if test "$am_func_iconv" = yes; then
+    AC_DEFINE(HAVE_ICONV, 1,
+      [Define if you have the iconv() function and it works.])
+  fi
+  if test "$am_cv_lib_iconv" = yes; then
+    AC_MSG_CHECKING([how to link with libiconv])
+    AC_MSG_RESULT([$LIBICONV])
+  else
+    dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV
+    dnl either.
+    CPPFLAGS="$am_save_CPPFLAGS"
+    LIBICONV=
+    LTLIBICONV=
+  fi
+  AC_SUBST(LIBICONV)
+  AC_SUBST(LTLIBICONV)
+])
+
+AC_DEFUN([AM_ICONV],
+[
+  AM_ICONV_LINK
+  if test "$am_cv_func_iconv" = yes; then
+    AC_MSG_CHECKING([for iconv declaration])
+    AC_CACHE_VAL(am_cv_proto_iconv, [
+      AC_TRY_COMPILE([
+#include <stdlib.h>
+#include <iconv.h>
+extern
+#ifdef __cplusplus
+"C"
+#endif
+#if defined(__STDC__) || defined(__cplusplus)
+size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
+#else
+size_t iconv();
+#endif
+], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const")
+      am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"])
+    am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
+    AC_MSG_RESULT([$]{ac_t:-
+         }[$]am_cv_proto_iconv)
+    AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1,
+      [Define as const if the declaration of iconv() needs const.])
+  fi
+])
diff --git a/m4/intdiv0.m4 b/m4/intdiv0.m4
new file mode 100644
index 0000000..8c8a670
--- /dev/null
+++ b/m4/intdiv0.m4
@@ -0,0 +1,84 @@
+# intdiv0.m4 serial 2 (gettext-0.17)
+dnl Copyright (C) 2002, 2007 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_DEFUN([gt_INTDIV0],
+[
+  AC_REQUIRE([AC_PROG_CC])dnl
+  AC_REQUIRE([AC_CANONICAL_HOST])dnl
+
+  AC_CACHE_CHECK([whether integer division by zero raises SIGFPE],
+    gt_cv_int_divbyzero_sigfpe,
+    [
+      gt_cv_int_divbyzero_sigfpe=
+changequote(,)dnl
+      case "$host_os" in
+        macos* | darwin[6-9]* | darwin[1-9][0-9]*)
+          # On MacOS X 10.2 or newer, just assume the same as when cross-
+          # compiling. If we were to perform the real test, 1 Crash Report
+          # dialog window would pop up.
+          case "$host_cpu" in
+            i[34567]86 | x86_64)
+              gt_cv_int_divbyzero_sigfpe="guessing yes" ;;
+          esac
+          ;;
+      esac
+changequote([,])dnl
+      if test -z "$gt_cv_int_divbyzero_sigfpe"; then
+        AC_TRY_RUN([
+#include <stdlib.h>
+#include <signal.h>
+
+static void
+sigfpe_handler (int sig)
+{
+  /* Exit with code 0 if SIGFPE, with code 1 if any other signal.  */
+  exit (sig != SIGFPE);
+}
+
+int x = 1;
+int y = 0;
+int z;
+int nan;
+
+int main ()
+{
+  signal (SIGFPE, sigfpe_handler);
+/* IRIX and AIX (when "xlc -qcheck" is used) yield signal SIGTRAP.  */
+#if (defined (__sgi) || defined (_AIX)) && defined (SIGTRAP)
+  signal (SIGTRAP, sigfpe_handler);
+#endif
+/* Linux/SPARC yields signal SIGILL.  */
+#if defined (__sparc__) && defined (__linux__)
+  signal (SIGILL, sigfpe_handler);
+#endif
+
+  z = x / y;
+  nan = y / y;
+  exit (1);
+}
+], gt_cv_int_divbyzero_sigfpe=yes, gt_cv_int_divbyzero_sigfpe=no,
+          [
+            # Guess based on the CPU.
+changequote(,)dnl
+            case "$host_cpu" in
+              alpha* | i[34567]86 | x86_64 | m68k | s390*)
+                gt_cv_int_divbyzero_sigfpe="guessing yes";;
+              *)
+                gt_cv_int_divbyzero_sigfpe="guessing no";;
+            esac
+changequote([,])dnl
+          ])
+      fi
+    ])
+  case "$gt_cv_int_divbyzero_sigfpe" in
+    *yes) value=1;;
+    *) value=0;;
+  esac
+  AC_DEFINE_UNQUOTED(INTDIV0_RAISES_SIGFPE, $value,
+    [Define if integer division by zero raises signal SIGFPE.])
+])
diff --git a/m4/intl.m4 b/m4/intl.m4
new file mode 100644
index 0000000..934408b
--- /dev/null
+++ b/m4/intl.m4
@@ -0,0 +1,285 @@
+# intl.m4 serial 8 (gettext-0.17)
+dnl Copyright (C) 1995-2007 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl   Ulrich Drepper <drepper at cygnus.com>, 1995-2000.
+dnl   Bruno Haible <haible at clisp.cons.org>, 2000-2006.
+
+AC_PREREQ(2.52)
+
+dnl Checks for all prerequisites of the intl subdirectory,
+dnl except for INTL_LIBTOOL_SUFFIX_PREFIX (and possibly LIBTOOL), INTLOBJS,
+dnl            USE_INCLUDED_LIBINTL, BUILD_INCLUDED_LIBINTL.
+AC_DEFUN([AM_INTL_SUBDIR],
+[
+  AC_REQUIRE([AC_PROG_INSTALL])dnl
+  AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake
+  AC_REQUIRE([AC_PROG_CC])dnl
+  AC_REQUIRE([AC_CANONICAL_HOST])dnl
+  AC_REQUIRE([gt_GLIBC2])dnl
+  AC_REQUIRE([AC_PROG_RANLIB])dnl
+  AC_REQUIRE([gl_VISIBILITY])dnl
+  AC_REQUIRE([gt_INTL_SUBDIR_CORE])dnl
+  AC_REQUIRE([AC_TYPE_LONG_LONG_INT])dnl
+  AC_REQUIRE([gt_TYPE_WCHAR_T])dnl
+  AC_REQUIRE([gt_TYPE_WINT_T])dnl
+  AC_REQUIRE([gl_AC_HEADER_INTTYPES_H])
+  AC_REQUIRE([gt_TYPE_INTMAX_T])
+  AC_REQUIRE([gt_PRINTF_POSIX])
+  AC_REQUIRE([gl_GLIBC21])dnl
+  AC_REQUIRE([gl_XSIZE])dnl
+  AC_REQUIRE([gt_INTL_MACOSX])dnl
+
+  AC_CHECK_TYPE([ptrdiff_t], ,
+    [AC_DEFINE([ptrdiff_t], [long],
+       [Define as the type of the result of subtracting two pointers, if the system doesn't define it.])
+    ])
+  AC_CHECK_HEADERS([stddef.h stdlib.h string.h])
+  AC_CHECK_FUNCS([asprintf fwprintf putenv setenv setlocale snprintf wcslen])
+
+  dnl Use the _snprintf function only if it is declared (because on NetBSD it
+  dnl is defined as a weak alias of snprintf; we prefer to use the latter).
+  gt_CHECK_DECL(_snprintf, [#include <stdio.h>])
+  gt_CHECK_DECL(_snwprintf, [#include <stdio.h>])
+
+  dnl Use the *_unlocked functions only if they are declared.
+  dnl (because some of them were defined without being declared in Solaris
+  dnl 2.5.1 but were removed in Solaris 2.6, whereas we want binaries built
+  dnl on Solaris 2.5.1 to run on Solaris 2.6).
+  dnl Don't use AC_CHECK_DECLS because it isn't supported in autoconf-2.13.
+  gt_CHECK_DECL(getc_unlocked, [#include <stdio.h>])
+
+  case $gt_cv_func_printf_posix in
+    *yes) HAVE_POSIX_PRINTF=1 ;;
+    *) HAVE_POSIX_PRINTF=0 ;;
+  esac
+  AC_SUBST([HAVE_POSIX_PRINTF])
+  if test "$ac_cv_func_asprintf" = yes; then
+    HAVE_ASPRINTF=1
+  else
+    HAVE_ASPRINTF=0
+  fi
+  AC_SUBST([HAVE_ASPRINTF])
+  if test "$ac_cv_func_snprintf" = yes; then
+    HAVE_SNPRINTF=1
+  else
+    HAVE_SNPRINTF=0
+  fi
+  AC_SUBST([HAVE_SNPRINTF])
+  if test "$ac_cv_func_wprintf" = yes; then
+    HAVE_WPRINTF=1
+  else
+    HAVE_WPRINTF=0
+  fi
+  AC_SUBST([HAVE_WPRINTF])
+
+  AM_LANGINFO_CODESET
+  gt_LC_MESSAGES
+
+  dnl Compilation on mingw and Cygwin needs special Makefile rules, because
+  dnl 1. when we install a shared library, we must arrange to export
+  dnl    auxiliary pointer variables for every exported variable,
+  dnl 2. when we install a shared library and a static library simultaneously,
+  dnl    the include file specifies __declspec(dllimport) and therefore we
+  dnl    must arrange to define the auxiliary pointer variables for the
+  dnl    exported variables _also_ in the static library.
+  if test "$enable_shared" = yes; then
+    case "$host_os" in
+      mingw* | cygwin*) is_woe32dll=yes ;;
+      *) is_woe32dll=no ;;
+    esac
+  else
+    is_woe32dll=no
+  fi
+  WOE32DLL=$is_woe32dll
+  AC_SUBST([WOE32DLL])
+
+  dnl On mingw and Cygwin, we can activate special Makefile rules which add
+  dnl version information to the shared libraries and executables.
+  case "$host_os" in
+    mingw* | cygwin*) is_woe32=yes ;;
+    *) is_woe32=no ;;
+  esac
+  WOE32=$is_woe32
+  AC_SUBST([WOE32])
+  if test $WOE32 = yes; then
+    dnl Check for a program that compiles Windows resource files.
+    AC_CHECK_TOOL([WINDRES], [windres])
+  fi
+
+  dnl Determine whether when creating a library, "-lc" should be passed to
+  dnl libtool or not. On many platforms, it is required for the libtool option
+  dnl -no-undefined to work. On HP-UX, however, the -lc - stored by libtool
+  dnl in the *.la files - makes it impossible to create multithreaded programs,
+  dnl because libtool also reorders the -lc to come before the -pthread, and
+  dnl this disables pthread_create() <http://docs.hp.com/en/1896/pthreads.html>.
+  case "$host_os" in
+    hpux*) LTLIBC="" ;;
+    *)     LTLIBC="-lc" ;;
+  esac
+  AC_SUBST([LTLIBC])
+
+  dnl Rename some macros and functions used for locking.
+  AH_BOTTOM([
+#define __libc_lock_t                   gl_lock_t
+#define __libc_lock_define              gl_lock_define
+#define __libc_lock_define_initialized  gl_lock_define_initialized
+#define __libc_lock_init                gl_lock_init
+#define __libc_lock_lock                gl_lock_lock
+#define __libc_lock_unlock              gl_lock_unlock
+#define __libc_lock_recursive_t                   gl_recursive_lock_t
+#define __libc_lock_define_recursive              gl_recursive_lock_define
+#define __libc_lock_define_initialized_recursive  gl_recursive_lock_define_initialized
+#define __libc_lock_init_recursive                gl_recursive_lock_init
+#define __libc_lock_lock_recursive                gl_recursive_lock_lock
+#define __libc_lock_unlock_recursive              gl_recursive_lock_unlock
+#define glthread_in_use  libintl_thread_in_use
+#define glthread_lock_init     libintl_lock_init
+#define glthread_lock_lock     libintl_lock_lock
+#define glthread_lock_unlock   libintl_lock_unlock
+#define glthread_lock_destroy  libintl_lock_destroy
+#define glthread_rwlock_init     libintl_rwlock_init
+#define glthread_rwlock_rdlock   libintl_rwlock_rdlock
+#define glthread_rwlock_wrlock   libintl_rwlock_wrlock
+#define glthread_rwlock_unlock   libintl_rwlock_unlock
+#define glthread_rwlock_destroy  libintl_rwlock_destroy
+#define glthread_recursive_lock_init     libintl_recursive_lock_init
+#define glthread_recursive_lock_lock     libintl_recursive_lock_lock
+#define glthread_recursive_lock_unlock   libintl_recursive_lock_unlock
+#define glthread_recursive_lock_destroy  libintl_recursive_lock_destroy
+#define glthread_once                 libintl_once
+#define glthread_once_call            libintl_once_call
+#define glthread_once_singlethreaded  libintl_once_singlethreaded
+])
+])
+
+
+dnl Checks for the core files of the intl subdirectory:
+dnl   dcigettext.c
+dnl   eval-plural.h
+dnl   explodename.c
+dnl   finddomain.c
+dnl   gettextP.h
+dnl   gmo.h
+dnl   hash-string.h hash-string.c
+dnl   l10nflist.c
+dnl   libgnuintl.h.in (except the *printf stuff)
+dnl   loadinfo.h
+dnl   loadmsgcat.c
+dnl   localealias.c
+dnl   log.c
+dnl   plural-exp.h plural-exp.c
+dnl   plural.y
+dnl Used by libglocale.
+AC_DEFUN([gt_INTL_SUBDIR_CORE],
+[
+  AC_REQUIRE([AC_C_INLINE])dnl
+  AC_REQUIRE([AC_TYPE_SIZE_T])dnl
+  AC_REQUIRE([gl_AC_HEADER_STDINT_H])
+  AC_REQUIRE([AC_FUNC_ALLOCA])dnl
+  AC_REQUIRE([AC_FUNC_MMAP])dnl
+  AC_REQUIRE([gt_INTDIV0])dnl
+  AC_REQUIRE([gl_AC_TYPE_UINTMAX_T])dnl
+  AC_REQUIRE([gt_INTTYPES_PRI])dnl
+  AC_REQUIRE([gl_LOCK])dnl
+
+  AC_TRY_LINK(
+    [int foo (int a) { a = __builtin_expect (a, 10); return a == 10 ? 0 : 1; }],
+    [],
+    [AC_DEFINE([HAVE_BUILTIN_EXPECT], 1,
+       [Define to 1 if the compiler understands __builtin_expect.])])
+
+  AC_CHECK_HEADERS([argz.h inttypes.h limits.h unistd.h sys/param.h])
+  AC_CHECK_FUNCS([getcwd getegid geteuid getgid getuid mempcpy munmap \
+    stpcpy strcasecmp strdup strtoul tsearch argz_count argz_stringify \
+    argz_next __fsetlocking])
+
+  dnl Use the *_unlocked functions only if they are declared.
+  dnl (because some of them were defined without being declared in Solaris
+  dnl 2.5.1 but were removed in Solaris 2.6, whereas we want binaries built
+  dnl on Solaris 2.5.1 to run on Solaris 2.6).
+  dnl Don't use AC_CHECK_DECLS because it isn't supported in autoconf-2.13.
+  gt_CHECK_DECL(feof_unlocked, [#include <stdio.h>])
+  gt_CHECK_DECL(fgets_unlocked, [#include <stdio.h>])
+
+  AM_ICONV
+
+  dnl glibc >= 2.4 has a NL_LOCALE_NAME macro when _GNU_SOURCE is defined,
+  dnl and a _NL_LOCALE_NAME macro always.
+  AC_CACHE_CHECK([for NL_LOCALE_NAME macro], gt_cv_nl_locale_name,
+    [AC_TRY_LINK([#include <langinfo.h>
+#include <locale.h>],
+      [char* cs = nl_langinfo(_NL_LOCALE_NAME(LC_MESSAGES));
+       return !cs;
+      ],
+      gt_cv_nl_locale_name=yes,
+      gt_cv_nl_locale_name=no)
+    ])
+  if test $gt_cv_nl_locale_name = yes; then
+    AC_DEFINE(HAVE_NL_LOCALE_NAME, 1,
+      [Define if you have <langinfo.h> and it defines the NL_LOCALE_NAME macro if _GNU_SOURCE is defined.])
+  fi
+
+  dnl intl/plural.c is generated from intl/plural.y. It requires bison,
+  dnl because plural.y uses bison specific features. It requires at least
+  dnl bison-1.26 because earlier versions generate a plural.c that doesn't
+  dnl compile.
+  dnl bison is only needed for the maintainer (who touches plural.y). But in
+  dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put
+  dnl the rule in general Makefile. Now, some people carelessly touch the
+  dnl files or have a broken "make" program, hence the plural.c rule will
+  dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not
+  dnl present or too old.
+  AC_CHECK_PROGS([INTLBISON], [bison])
+  if test -z "$INTLBISON"; then
+    ac_verc_fail=yes
+  else
+    dnl Found it, now check the version.
+    AC_MSG_CHECKING([version of bison])
+changequote(<<,>>)dnl
+    ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
+    case $ac_prog_version in
+      '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
+      1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*)
+changequote([,])dnl
+         ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
+      *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
+    esac
+    AC_MSG_RESULT([$ac_prog_version])
+  fi
+  if test $ac_verc_fail = yes; then
+    INTLBISON=:
+  fi
+])
+
+
+dnl gt_CHECK_DECL(FUNC, INCLUDES)
+dnl Check whether a function is declared.
+AC_DEFUN([gt_CHECK_DECL],
+[
+  AC_CACHE_CHECK([whether $1 is declared], ac_cv_have_decl_$1,
+    [AC_TRY_COMPILE([$2], [
+#ifndef $1
+  char *p = (char *) $1;
+#endif
+], ac_cv_have_decl_$1=yes, ac_cv_have_decl_$1=no)])
+  if test $ac_cv_have_decl_$1 = yes; then
+    gt_value=1
+  else
+    gt_value=0
+  fi
+  AC_DEFINE_UNQUOTED([HAVE_DECL_]translit($1, [a-z], [A-Z]), [$gt_value],
+    [Define to 1 if you have the declaration of `$1', and to 0 if you don't.])
+])
diff --git a/m4/intldir.m4 b/m4/intldir.m4
new file mode 100644
index 0000000..7a28843
--- /dev/null
+++ b/m4/intldir.m4
@@ -0,0 +1,19 @@
+# intldir.m4 serial 1 (gettext-0.16)
+dnl Copyright (C) 2006 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+AC_PREREQ(2.52)
+
+dnl Tells the AM_GNU_GETTEXT macro to consider an intl/ directory.
+AC_DEFUN([AM_GNU_GETTEXT_INTL_SUBDIR], [])
diff --git a/m4/intlmacosx.m4 b/m4/intlmacosx.m4
new file mode 100644
index 0000000..d3f0d90
--- /dev/null
+++ b/m4/intlmacosx.m4
@@ -0,0 +1,51 @@
+# intlmacosx.m4 serial 1 (gettext-0.17)
+dnl Copyright (C) 2004-2007 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Checks for special options needed on MacOS X.
+dnl Defines INTL_MACOSX_LIBS.
+AC_DEFUN([gt_INTL_MACOSX],
+[
+  dnl Check for API introduced in MacOS X 10.2.
+  AC_CACHE_CHECK([for CFPreferencesCopyAppValue],
+    gt_cv_func_CFPreferencesCopyAppValue,
+    [gt_save_LIBS="$LIBS"
+     LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+     AC_TRY_LINK([#include <CoreFoundation/CFPreferences.h>],
+       [CFPreferencesCopyAppValue(NULL, NULL)],
+       [gt_cv_func_CFPreferencesCopyAppValue=yes],
+       [gt_cv_func_CFPreferencesCopyAppValue=no])
+     LIBS="$gt_save_LIBS"])
+  if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then
+    AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], 1,
+      [Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in the CoreFoundation framework.])
+  fi
+  dnl Check for API introduced in MacOS X 10.3.
+  AC_CACHE_CHECK([for CFLocaleCopyCurrent], gt_cv_func_CFLocaleCopyCurrent,
+    [gt_save_LIBS="$LIBS"
+     LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation"
+     AC_TRY_LINK([#include <CoreFoundation/CFLocale.h>], [CFLocaleCopyCurrent();],
+       [gt_cv_func_CFLocaleCopyCurrent=yes],
+       [gt_cv_func_CFLocaleCopyCurrent=no])
+     LIBS="$gt_save_LIBS"])
+  if test $gt_cv_func_CFLocaleCopyCurrent = yes; then
+    AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], 1,
+      [Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the CoreFoundation framework.])
+  fi
+  INTL_MACOSX_LIBS=
+  if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then
+    INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation"
+  fi
+  AC_SUBST([INTL_MACOSX_LIBS])
+])
diff --git a/m4/intmax.m4 b/m4/intmax.m4
new file mode 100644
index 0000000..ce7a8a4
--- /dev/null
+++ b/m4/intmax.m4
@@ -0,0 +1,33 @@
+# intmax.m4 serial 3 (gettext-0.16)
+dnl Copyright (C) 2002-2005 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+dnl Test whether the system has the 'intmax_t' type, but don't attempt to
+dnl find a replacement if it is lacking.
+
+AC_DEFUN([gt_TYPE_INTMAX_T],
+[
+  AC_REQUIRE([gl_AC_HEADER_INTTYPES_H])
+  AC_REQUIRE([gl_AC_HEADER_STDINT_H])
+  AC_CACHE_CHECK(for intmax_t, gt_cv_c_intmax_t,
+    [AC_TRY_COMPILE([
+#include <stddef.h>
+#include <stdlib.h>
+#if HAVE_STDINT_H_WITH_UINTMAX
+#include <stdint.h>
+#endif
+#if HAVE_INTTYPES_H_WITH_UINTMAX
+#include <inttypes.h>
+#endif
+],     [intmax_t x = -1;
+        return !x;],
+       gt_cv_c_intmax_t=yes,
+       gt_cv_c_intmax_t=no)])
+  if test $gt_cv_c_intmax_t = yes; then
+    AC_DEFINE(HAVE_INTMAX_T, 1,
+      [Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>.])
+  fi
+])
diff --git a/m4/inttypes-pri.m4 b/m4/inttypes-pri.m4
new file mode 100644
index 0000000..7c7f894
--- /dev/null
+++ b/m4/inttypes-pri.m4
@@ -0,0 +1,36 @@
+# inttypes-pri.m4 serial 4 (gettext-0.16)
+dnl Copyright (C) 1997-2002, 2006 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_PREREQ(2.52)
+
+# Define PRI_MACROS_BROKEN if <inttypes.h> exists and defines the PRI*
+# macros to non-string values.  This is the case on AIX 4.3.3.
+
+AC_DEFUN([gt_INTTYPES_PRI],
+[
+  AC_CHECK_HEADERS([inttypes.h])
+  if test $ac_cv_header_inttypes_h = yes; then
+    AC_CACHE_CHECK([whether the inttypes.h PRIxNN macros are broken],
+      gt_cv_inttypes_pri_broken,
+      [
+        AC_TRY_COMPILE([#include <inttypes.h>
+#ifdef PRId32
+char *p = PRId32;
+#endif
+], [], gt_cv_inttypes_pri_broken=no, gt_cv_inttypes_pri_broken=yes)
+      ])
+  fi
+  if test "$gt_cv_inttypes_pri_broken" = yes; then
+    AC_DEFINE_UNQUOTED(PRI_MACROS_BROKEN, 1,
+      [Define if <inttypes.h> exists and defines unusable PRI* macros.])
+    PRI_MACROS_BROKEN=1
+  else
+    PRI_MACROS_BROKEN=0
+  fi
+  AC_SUBST([PRI_MACROS_BROKEN])
+])
diff --git a/m4/inttypes.m4 b/m4/inttypes.m4
new file mode 100644
index 0000000..ab370ff
--- /dev/null
+++ b/m4/inttypes.m4
@@ -0,0 +1,27 @@
+# inttypes.m4 serial 1 (gettext-0.11.4)
+dnl Copyright (C) 1997-2002 Free Software Foundation, Inc.
+dnl This file is free software, distributed under the terms of the GNU
+dnl General Public License.  As a special exception to the GNU General
+dnl Public License, this file may be distributed as part of a program
+dnl that contains a configuration script generated by Autoconf, under
+dnl the same distribution terms as the rest of that program.
+
+dnl From Paul Eggert.
+
+# Define HAVE_INTTYPES_H if <inttypes.h> exists and doesn't clash with
+# <sys/types.h>.
+
+AC_DEFUN([gt_HEADER_INTTYPES_H],
+[
+  AC_CACHE_CHECK([for inttypes.h], gt_cv_header_inttypes_h,
+  [
+    AC_TRY_COMPILE(
+      [#include <sys/types.h>
+#include <inttypes.h>],
+      [], gt_cv_header_inttypes_h=yes, gt_cv_header_inttypes_h=no)
+  ])
+  if test $gt_cv_header_inttypes_h = yes; then
+    AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H, 1,
+      [Define if <inttypes.h> exists and doesn't clash with <sys/types.h>.])
+  fi
+])
diff --git a/m4/inttypes_h.m4 b/m4/inttypes_h.m4
new file mode 100644
index 0000000..edc8ecb
--- /dev/null
+++ b/m4/inttypes_h.m4
@@ -0,0 +1,26 @@
+# inttypes_h.m4 serial 7
+dnl Copyright (C) 1997-2004, 2006 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Paul Eggert.
+
+# Define HAVE_INTTYPES_H_WITH_UINTMAX if <inttypes.h> exists,
+# doesn't clash with <sys/types.h>, and declares uintmax_t.
+
+AC_DEFUN([gl_AC_HEADER_INTTYPES_H],
+[
+  AC_CACHE_CHECK([for inttypes.h], gl_cv_header_inttypes_h,
+  [AC_TRY_COMPILE(
+    [#include <sys/types.h>
+#include <inttypes.h>],
+    [uintmax_t i = (uintmax_t) -1; return !i;],
+    gl_cv_header_inttypes_h=yes,
+    gl_cv_header_inttypes_h=no)])
+  if test $gl_cv_header_inttypes_h = yes; then
+    AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H_WITH_UINTMAX, 1,
+      [Define if <inttypes.h> exists, doesn't clash with <sys/types.h>,
+       and declares uintmax_t. ])
+  fi
+])
diff --git a/m4/isc-posix.m4 b/m4/isc-posix.m4
new file mode 100644
index 0000000..1319dd1
--- /dev/null
+++ b/m4/isc-posix.m4
@@ -0,0 +1,26 @@
+# isc-posix.m4 serial 2 (gettext-0.11.2)
+dnl Copyright (C) 1995-2002 Free Software Foundation, Inc.
+dnl This file is free software, distributed under the terms of the GNU
+dnl General Public License.  As a special exception to the GNU General
+dnl Public License, this file may be distributed as part of a program
+dnl that contains a configuration script generated by Autoconf, under
+dnl the same distribution terms as the rest of that program.
+
+# This file is not needed with autoconf-2.53 and newer.  Remove it in 2005.
+
+# This test replaces the one in autoconf.
+# Currently this macro should have the same name as the autoconf macro
+# because gettext's gettext.m4 (distributed in the automake package)
+# still uses it.  Otherwise, the use in gettext.m4 makes autoheader
+# give these diagnostics:
+#   configure.in:556: AC_TRY_COMPILE was called before AC_ISC_POSIX
+#   configure.in:556: AC_TRY_RUN was called before AC_ISC_POSIX
+
+undefine([AC_ISC_POSIX])
+
+AC_DEFUN([AC_ISC_POSIX],
+  [
+    dnl This test replaces the obsolescent AC_ISC_POSIX kludge.
+    AC_CHECK_LIB(cposix, strerror, [LIBS="$LIBS -lcposix"])
+  ]
+)
diff --git a/m4/lcmessage.m4 b/m4/lcmessage.m4
new file mode 100644
index 0000000..19aa77e
--- /dev/null
+++ b/m4/lcmessage.m4
@@ -0,0 +1,30 @@
+# lcmessage.m4 serial 4 (gettext-0.14.2)
+dnl Copyright (C) 1995-2002, 2004-2005 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl   Ulrich Drepper <drepper at cygnus.com>, 1995.
+
+# Check whether LC_MESSAGES is available in <locale.h>.
+
+AC_DEFUN([gt_LC_MESSAGES],
+[
+  AC_CACHE_CHECK([for LC_MESSAGES], gt_cv_val_LC_MESSAGES,
+    [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
+       gt_cv_val_LC_MESSAGES=yes, gt_cv_val_LC_MESSAGES=no)])
+  if test $gt_cv_val_LC_MESSAGES = yes; then
+    AC_DEFINE(HAVE_LC_MESSAGES, 1,
+      [Define if your <locale.h> file defines LC_MESSAGES.])
+  fi
+])
diff --git a/m4/lib-ld.m4 b/m4/lib-ld.m4
new file mode 100644
index 0000000..96c4e2c
--- /dev/null
+++ b/m4/lib-ld.m4
@@ -0,0 +1,110 @@
+# lib-ld.m4 serial 3 (gettext-0.13)
+dnl Copyright (C) 1996-2003 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Subroutines of libtool.m4,
+dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision
+dnl with libtool.m4.
+
+dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no.
+AC_DEFUN([AC_LIB_PROG_LD_GNU],
+[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld,
+[# I'd rather use --version here, but apparently some GNU ld's only accept -v.
+case `$LD -v 2>&1 </dev/null` in
+*GNU* | *'with BFD'*)
+  acl_cv_prog_gnu_ld=yes ;;
+*)
+  acl_cv_prog_gnu_ld=no ;;
+esac])
+with_gnu_ld=$acl_cv_prog_gnu_ld
+])
+
+dnl From libtool-1.4. Sets the variable LD.
+AC_DEFUN([AC_LIB_PROG_LD],
+[AC_ARG_WITH(gnu-ld,
+[  --with-gnu-ld           assume the C compiler uses GNU ld [default=no]],
+test "$withval" = no || with_gnu_ld=yes, with_gnu_ld=no)
+AC_REQUIRE([AC_PROG_CC])dnl
+AC_REQUIRE([AC_CANONICAL_HOST])dnl
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+ac_prog=ld
+if test "$GCC" = yes; then
+  # Check if gcc -print-prog-name=ld gives a path.
+  AC_MSG_CHECKING([for ld used by GCC])
+  case $host in
+  *-*-mingw*)
+    # gcc leaves a trailing carriage return which upsets mingw
+    ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
+  *)
+    ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
+  esac
+  case $ac_prog in
+    # Accept absolute paths.
+    [[\\/]* | [A-Za-z]:[\\/]*)]
+      [re_direlt='/[^/][^/]*/\.\./']
+      # Canonicalize the path of ld
+      ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'`
+      while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do
+	ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"`
+      done
+      test -z "$LD" && LD="$ac_prog"
+      ;;
+  "")
+    # If it fails, then pretend we aren't using GCC.
+    ac_prog=ld
+    ;;
+  *)
+    # If it is relative, then search for the first ld in PATH.
+    with_gnu_ld=unknown
+    ;;
+  esac
+elif test "$with_gnu_ld" = yes; then
+  AC_MSG_CHECKING([for GNU ld])
+else
+  AC_MSG_CHECKING([for non-GNU ld])
+fi
+AC_CACHE_VAL(acl_cv_path_LD,
+[if test -z "$LD"; then
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
+      acl_cv_path_LD="$ac_dir/$ac_prog"
+      # Check to see if the program is GNU ld.  I'd rather use --version,
+      # but apparently some GNU ld's only accept -v.
+      # Break only if it was the GNU/non-GNU ld that we prefer.
+      case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in
+      *GNU* | *'with BFD'*)
+	test "$with_gnu_ld" != no && break ;;
+      *)
+	test "$with_gnu_ld" != yes && break ;;
+      esac
+    fi
+  done
+  IFS="$ac_save_ifs"
+else
+  acl_cv_path_LD="$LD" # Let the user override the test with a path.
+fi])
+LD="$acl_cv_path_LD"
+if test -n "$LD"; then
+  AC_MSG_RESULT($LD)
+else
+  AC_MSG_RESULT(no)
+fi
+test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
+AC_LIB_PROG_LD_GNU
+])
diff --git a/m4/lib-link.m4 b/m4/lib-link.m4
new file mode 100644
index 0000000..e3d26fc
--- /dev/null
+++ b/m4/lib-link.m4
@@ -0,0 +1,709 @@
+# lib-link.m4 serial 13 (gettext-0.17)
+dnl Copyright (C) 2001-2007 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_PREREQ(2.54)
+
+dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and
+dnl the libraries corresponding to explicit and implicit dependencies.
+dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and
+dnl augments the CPPFLAGS variable.
+dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname
+dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
+AC_DEFUN([AC_LIB_LINKFLAGS],
+[
+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+  AC_REQUIRE([AC_LIB_RPATH])
+  define([Name],[translit([$1],[./-], [___])])
+  define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+                               [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+  AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [
+    AC_LIB_LINKFLAGS_BODY([$1], [$2])
+    ac_cv_lib[]Name[]_libs="$LIB[]NAME"
+    ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME"
+    ac_cv_lib[]Name[]_cppflags="$INC[]NAME"
+    ac_cv_lib[]Name[]_prefix="$LIB[]NAME[]_PREFIX"
+  ])
+  LIB[]NAME="$ac_cv_lib[]Name[]_libs"
+  LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs"
+  INC[]NAME="$ac_cv_lib[]Name[]_cppflags"
+  LIB[]NAME[]_PREFIX="$ac_cv_lib[]Name[]_prefix"
+  AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
+  AC_SUBST([LIB]NAME)
+  AC_SUBST([LTLIB]NAME)
+  AC_SUBST([LIB]NAME[_PREFIX])
+  dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the
+  dnl results of this search when this library appears as a dependency.
+  HAVE_LIB[]NAME=yes
+  undefine([Name])
+  undefine([NAME])
+])
+
+dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode)
+dnl searches for libname and the libraries corresponding to explicit and
+dnl implicit dependencies, together with the specified include files and
+dnl the ability to compile and link the specified testcode. If found, it
+dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and
+dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and
+dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs
+dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty.
+dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname
+dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
+AC_DEFUN([AC_LIB_HAVE_LINKFLAGS],
+[
+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+  AC_REQUIRE([AC_LIB_RPATH])
+  define([Name],[translit([$1],[./-], [___])])
+  define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+                               [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+
+  dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME
+  dnl accordingly.
+  AC_LIB_LINKFLAGS_BODY([$1], [$2])
+
+  dnl Add $INC[]NAME to CPPFLAGS before performing the following checks,
+  dnl because if the user has installed lib[]Name and not disabled its use
+  dnl via --without-lib[]Name-prefix, he wants to use it.
+  ac_save_CPPFLAGS="$CPPFLAGS"
+  AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
+
+  AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [
+    ac_save_LIBS="$LIBS"
+    LIBS="$LIBS $LIB[]NAME"
+    AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no])
+    LIBS="$ac_save_LIBS"
+  ])
+  if test "$ac_cv_lib[]Name" = yes; then
+    HAVE_LIB[]NAME=yes
+    AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.])
+    AC_MSG_CHECKING([how to link with lib[]$1])
+    AC_MSG_RESULT([$LIB[]NAME])
+  else
+    HAVE_LIB[]NAME=no
+    dnl If $LIB[]NAME didn't lead to a usable library, we don't need
+    dnl $INC[]NAME either.
+    CPPFLAGS="$ac_save_CPPFLAGS"
+    LIB[]NAME=
+    LTLIB[]NAME=
+    LIB[]NAME[]_PREFIX=
+  fi
+  AC_SUBST([HAVE_LIB]NAME)
+  AC_SUBST([LIB]NAME)
+  AC_SUBST([LTLIB]NAME)
+  AC_SUBST([LIB]NAME[_PREFIX])
+  undefine([Name])
+  undefine([NAME])
+])
+
+dnl Determine the platform dependent parameters needed to use rpath:
+dnl   acl_libext,
+dnl   acl_shlibext,
+dnl   acl_hardcode_libdir_flag_spec,
+dnl   acl_hardcode_libdir_separator,
+dnl   acl_hardcode_direct,
+dnl   acl_hardcode_minus_L.
+AC_DEFUN([AC_LIB_RPATH],
+[
+  dnl Tell automake >= 1.10 to complain if config.rpath is missing.
+  m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])])
+  AC_REQUIRE([AC_PROG_CC])                dnl we use $CC, $GCC, $LDFLAGS
+  AC_REQUIRE([AC_LIB_PROG_LD])            dnl we use $LD, $with_gnu_ld
+  AC_REQUIRE([AC_CANONICAL_HOST])         dnl we use $host
+  AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir
+  AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [
+    CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \
+    ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh
+    . ./conftest.sh
+    rm -f ./conftest.sh
+    acl_cv_rpath=done
+  ])
+  wl="$acl_cv_wl"
+  acl_libext="$acl_cv_libext"
+  acl_shlibext="$acl_cv_shlibext"
+  acl_libname_spec="$acl_cv_libname_spec"
+  acl_library_names_spec="$acl_cv_library_names_spec"
+  acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
+  acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
+  acl_hardcode_direct="$acl_cv_hardcode_direct"
+  acl_hardcode_minus_L="$acl_cv_hardcode_minus_L"
+  dnl Determine whether the user wants rpath handling at all.
+  AC_ARG_ENABLE(rpath,
+    [  --disable-rpath         do not hardcode runtime library paths],
+    :, enable_rpath=yes)
+])
+
+dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and
+dnl the libraries corresponding to explicit and implicit dependencies.
+dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables.
+dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found
+dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem.
+AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
+[
+  AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+  define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+                               [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+  dnl Autoconf >= 2.61 supports dots in --with options.
+  define([N_A_M_E],[m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.61]),[-1],[translit([$1],[.],[_])],[$1])])
+  dnl By default, look in $includedir and $libdir.
+  use_additional=yes
+  AC_LIB_WITH_FINAL_PREFIX([
+    eval additional_includedir=\"$includedir\"
+    eval additional_libdir=\"$libdir\"
+  ])
+  AC_LIB_ARG_WITH([lib]N_A_M_E[-prefix],
+[  --with-lib]N_A_M_E[-prefix[=DIR]  search for lib$1 in DIR/include and DIR/lib
+  --without-lib]N_A_M_E[-prefix     don't search for lib$1 in includedir and libdir],
+[
+    if test "X$withval" = "Xno"; then
+      use_additional=no
+    else
+      if test "X$withval" = "X"; then
+        AC_LIB_WITH_FINAL_PREFIX([
+          eval additional_includedir=\"$includedir\"
+          eval additional_libdir=\"$libdir\"
+        ])
+      else
+        additional_includedir="$withval/include"
+        additional_libdir="$withval/$acl_libdirstem"
+      fi
+    fi
+])
+  dnl Search the library and its dependencies in $additional_libdir and
+  dnl $LDFLAGS. Using breadth-first-seach.
+  LIB[]NAME=
+  LTLIB[]NAME=
+  INC[]NAME=
+  LIB[]NAME[]_PREFIX=
+  rpathdirs=
+  ltrpathdirs=
+  names_already_handled=
+  names_next_round='$1 $2'
+  while test -n "$names_next_round"; do
+    names_this_round="$names_next_round"
+    names_next_round=
+    for name in $names_this_round; do
+      already_handled=
+      for n in $names_already_handled; do
+        if test "$n" = "$name"; then
+          already_handled=yes
+          break
+        fi
+      done
+      if test -z "$already_handled"; then
+        names_already_handled="$names_already_handled $name"
+        dnl See if it was already located by an earlier AC_LIB_LINKFLAGS
+        dnl or AC_LIB_HAVE_LINKFLAGS call.
+        uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'`
+        eval value=\"\$HAVE_LIB$uppername\"
+        if test -n "$value"; then
+          if test "$value" = yes; then
+            eval value=\"\$LIB$uppername\"
+            test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value"
+            eval value=\"\$LTLIB$uppername\"
+            test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value"
+          else
+            dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined
+            dnl that this library doesn't exist. So just drop it.
+            :
+          fi
+        else
+          dnl Search the library lib$name in $additional_libdir and $LDFLAGS
+          dnl and the already constructed $LIBNAME/$LTLIBNAME.
+          found_dir=
+          found_la=
+          found_so=
+          found_a=
+          eval libname=\"$acl_libname_spec\"    # typically: libname=lib$name
+          if test -n "$acl_shlibext"; then
+            shrext=".$acl_shlibext"             # typically: shrext=.so
+          else
+            shrext=
+          fi
+          if test $use_additional = yes; then
+            dir="$additional_libdir"
+            dnl The same code as in the loop below:
+            dnl First look for a shared library.
+            if test -n "$acl_shlibext"; then
+              if test -f "$dir/$libname$shrext"; then
+                found_dir="$dir"
+                found_so="$dir/$libname$shrext"
+              else
+                if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+                  ver=`(cd "$dir" && \
+                        for f in "$libname$shrext".*; do echo "$f"; done \
+                        | sed -e "s,^$libname$shrext\\\\.,," \
+                        | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+                        | sed 1q ) 2>/dev/null`
+                  if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+                    found_dir="$dir"
+                    found_so="$dir/$libname$shrext.$ver"
+                  fi
+                else
+                  eval library_names=\"$acl_library_names_spec\"
+                  for f in $library_names; do
+                    if test -f "$dir/$f"; then
+                      found_dir="$dir"
+                      found_so="$dir/$f"
+                      break
+                    fi
+                  done
+                fi
+              fi
+            fi
+            dnl Then look for a static library.
+            if test "X$found_dir" = "X"; then
+              if test -f "$dir/$libname.$acl_libext"; then
+                found_dir="$dir"
+                found_a="$dir/$libname.$acl_libext"
+              fi
+            fi
+            if test "X$found_dir" != "X"; then
+              if test -f "$dir/$libname.la"; then
+                found_la="$dir/$libname.la"
+              fi
+            fi
+          fi
+          if test "X$found_dir" = "X"; then
+            for x in $LDFLAGS $LTLIB[]NAME; do
+              AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+              case "$x" in
+                -L*)
+                  dir=`echo "X$x" | sed -e 's/^X-L//'`
+                  dnl First look for a shared library.
+                  if test -n "$acl_shlibext"; then
+                    if test -f "$dir/$libname$shrext"; then
+                      found_dir="$dir"
+                      found_so="$dir/$libname$shrext"
+                    else
+                      if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then
+                        ver=`(cd "$dir" && \
+                              for f in "$libname$shrext".*; do echo "$f"; done \
+                              | sed -e "s,^$libname$shrext\\\\.,," \
+                              | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \
+                              | sed 1q ) 2>/dev/null`
+                        if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then
+                          found_dir="$dir"
+                          found_so="$dir/$libname$shrext.$ver"
+                        fi
+                      else
+                        eval library_names=\"$acl_library_names_spec\"
+                        for f in $library_names; do
+                          if test -f "$dir/$f"; then
+                            found_dir="$dir"
+                            found_so="$dir/$f"
+                            break
+                          fi
+                        done
+                      fi
+                    fi
+                  fi
+                  dnl Then look for a static library.
+                  if test "X$found_dir" = "X"; then
+                    if test -f "$dir/$libname.$acl_libext"; then
+                      found_dir="$dir"
+                      found_a="$dir/$libname.$acl_libext"
+                    fi
+                  fi
+                  if test "X$found_dir" != "X"; then
+                    if test -f "$dir/$libname.la"; then
+                      found_la="$dir/$libname.la"
+                    fi
+                  fi
+                  ;;
+              esac
+              if test "X$found_dir" != "X"; then
+                break
+              fi
+            done
+          fi
+          if test "X$found_dir" != "X"; then
+            dnl Found the library.
+            LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name"
+            if test "X$found_so" != "X"; then
+              dnl Linking with a shared library. We attempt to hardcode its
+              dnl directory into the executable's runpath, unless it's the
+              dnl standard /usr/lib.
+              if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/$acl_libdirstem"; then
+                dnl No hardcoding is needed.
+                LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+              else
+                dnl Use an explicit option to hardcode DIR into the resulting
+                dnl binary.
+                dnl Potentially add DIR to ltrpathdirs.
+                dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
+                haveit=
+                for x in $ltrpathdirs; do
+                  if test "X$x" = "X$found_dir"; then
+                    haveit=yes
+                    break
+                  fi
+                done
+                if test -z "$haveit"; then
+                  ltrpathdirs="$ltrpathdirs $found_dir"
+                fi
+                dnl The hardcoding into $LIBNAME is system dependent.
+                if test "$acl_hardcode_direct" = yes; then
+                  dnl Using DIR/libNAME.so during linking hardcodes DIR into the
+                  dnl resulting binary.
+                  LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+                else
+                  if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
+                    dnl Use an explicit option to hardcode DIR into the resulting
+                    dnl binary.
+                    LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+                    dnl Potentially add DIR to rpathdirs.
+                    dnl The rpathdirs will be appended to $LIBNAME at the end.
+                    haveit=
+                    for x in $rpathdirs; do
+                      if test "X$x" = "X$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      rpathdirs="$rpathdirs $found_dir"
+                    fi
+                  else
+                    dnl Rely on "-L$found_dir".
+                    dnl But don't add it if it's already contained in the LDFLAGS
+                    dnl or the already constructed $LIBNAME
+                    haveit=
+                    for x in $LDFLAGS $LIB[]NAME; do
+                      AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+                      if test "X$x" = "X-L$found_dir"; then
+                        haveit=yes
+                        break
+                      fi
+                    done
+                    if test -z "$haveit"; then
+                      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir"
+                    fi
+                    if test "$acl_hardcode_minus_L" != no; then
+                      dnl FIXME: Not sure whether we should use
+                      dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
+                      dnl here.
+                      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so"
+                    else
+                      dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH
+                      dnl here, because this doesn't fit in flags passed to the
+                      dnl compiler. So give up. No hardcoding. This affects only
+                      dnl very old systems.
+                      dnl FIXME: Not sure whether we should use
+                      dnl "-L$found_dir -l$name" or "-L$found_dir $found_so"
+                      dnl here.
+                      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
+                    fi
+                  fi
+                fi
+              fi
+            else
+              if test "X$found_a" != "X"; then
+                dnl Linking with a static library.
+                LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a"
+              else
+                dnl We shouldn't come here, but anyway it's good to have a
+                dnl fallback.
+                LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name"
+              fi
+            fi
+            dnl Assume the include files are nearby.
+            additional_includedir=
+            case "$found_dir" in
+              */$acl_libdirstem | */$acl_libdirstem/)
+                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'`
+                LIB[]NAME[]_PREFIX="$basedir"
+                additional_includedir="$basedir/include"
+                ;;
+            esac
+            if test "X$additional_includedir" != "X"; then
+              dnl Potentially add $additional_includedir to $INCNAME.
+              dnl But don't add it
+              dnl   1. if it's the standard /usr/include,
+              dnl   2. if it's /usr/local/include and we are using GCC on Linux,
+              dnl   3. if it's already present in $CPPFLAGS or the already
+              dnl      constructed $INCNAME,
+              dnl   4. if it doesn't exist as a directory.
+              if test "X$additional_includedir" != "X/usr/include"; then
+                haveit=
+                if test "X$additional_includedir" = "X/usr/local/include"; then
+                  if test -n "$GCC"; then
+                    case $host_os in
+                      linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+                    esac
+                  fi
+                fi
+                if test -z "$haveit"; then
+                  for x in $CPPFLAGS $INC[]NAME; do
+                    AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+                    if test "X$x" = "X-I$additional_includedir"; then
+                      haveit=yes
+                      break
+                    fi
+                  done
+                  if test -z "$haveit"; then
+                    if test -d "$additional_includedir"; then
+                      dnl Really add $additional_includedir to $INCNAME.
+                      INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir"
+                    fi
+                  fi
+                fi
+              fi
+            fi
+            dnl Look for dependencies.
+            if test -n "$found_la"; then
+              dnl Read the .la file. It defines the variables
+              dnl dlname, library_names, old_library, dependency_libs, current,
+              dnl age, revision, installed, dlopen, dlpreopen, libdir.
+              save_libdir="$libdir"
+              case "$found_la" in
+                */* | *\\*) . "$found_la" ;;
+                *) . "./$found_la" ;;
+              esac
+              libdir="$save_libdir"
+              dnl We use only dependency_libs.
+              for dep in $dependency_libs; do
+                case "$dep" in
+                  -L*)
+                    additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'`
+                    dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME.
+                    dnl But don't add it
+                    dnl   1. if it's the standard /usr/lib,
+                    dnl   2. if it's /usr/local/lib and we are using GCC on Linux,
+                    dnl   3. if it's already present in $LDFLAGS or the already
+                    dnl      constructed $LIBNAME,
+                    dnl   4. if it doesn't exist as a directory.
+                    if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then
+                      haveit=
+                      if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then
+                        if test -n "$GCC"; then
+                          case $host_os in
+                            linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+                          esac
+                        fi
+                      fi
+                      if test -z "$haveit"; then
+                        haveit=
+                        for x in $LDFLAGS $LIB[]NAME; do
+                          AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                            dnl Really add $additional_libdir to $LIBNAME.
+                            LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir"
+                          fi
+                        fi
+                        haveit=
+                        for x in $LDFLAGS $LTLIB[]NAME; do
+                          AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+                          if test "X$x" = "X-L$additional_libdir"; then
+                            haveit=yes
+                            break
+                          fi
+                        done
+                        if test -z "$haveit"; then
+                          if test -d "$additional_libdir"; then
+                            dnl Really add $additional_libdir to $LTLIBNAME.
+                            LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir"
+                          fi
+                        fi
+                      fi
+                    fi
+                    ;;
+                  -R*)
+                    dir=`echo "X$dep" | sed -e 's/^X-R//'`
+                    if test "$enable_rpath" != no; then
+                      dnl Potentially add DIR to rpathdirs.
+                      dnl The rpathdirs will be appended to $LIBNAME at the end.
+                      haveit=
+                      for x in $rpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        rpathdirs="$rpathdirs $dir"
+                      fi
+                      dnl Potentially add DIR to ltrpathdirs.
+                      dnl The ltrpathdirs will be appended to $LTLIBNAME at the end.
+                      haveit=
+                      for x in $ltrpathdirs; do
+                        if test "X$x" = "X$dir"; then
+                          haveit=yes
+                          break
+                        fi
+                      done
+                      if test -z "$haveit"; then
+                        ltrpathdirs="$ltrpathdirs $dir"
+                      fi
+                    fi
+                    ;;
+                  -l*)
+                    dnl Handle this in the next round.
+                    names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'`
+                    ;;
+                  *.la)
+                    dnl Handle this in the next round. Throw away the .la's
+                    dnl directory; it is already contained in a preceding -L
+                    dnl option.
+                    names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'`
+                    ;;
+                  *)
+                    dnl Most likely an immediate library name.
+                    LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep"
+                    LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep"
+                    ;;
+                esac
+              done
+            fi
+          else
+            dnl Didn't find the library; assume it is in the system directories
+            dnl known to the linker and runtime loader. (All the system
+            dnl directories known to the linker should also be known to the
+            dnl runtime loader, otherwise the system is severely misconfigured.)
+            LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name"
+            LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name"
+          fi
+        fi
+      fi
+    done
+  done
+  if test "X$rpathdirs" != "X"; then
+    if test -n "$acl_hardcode_libdir_separator"; then
+      dnl Weird platform: only the last -rpath option counts, the user must
+      dnl pass all path elements in one option. We can arrange that for a
+      dnl single library, but not when more than one $LIBNAMEs are used.
+      alldirs=
+      for found_dir in $rpathdirs; do
+        alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir"
+      done
+      dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl.
+      acl_save_libdir="$libdir"
+      libdir="$alldirs"
+      eval flag=\"$acl_hardcode_libdir_flag_spec\"
+      libdir="$acl_save_libdir"
+      LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
+    else
+      dnl The -rpath options are cumulative.
+      for found_dir in $rpathdirs; do
+        acl_save_libdir="$libdir"
+        libdir="$found_dir"
+        eval flag=\"$acl_hardcode_libdir_flag_spec\"
+        libdir="$acl_save_libdir"
+        LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag"
+      done
+    fi
+  fi
+  if test "X$ltrpathdirs" != "X"; then
+    dnl When using libtool, the option that works for both libraries and
+    dnl executables is -R. The -R options are cumulative.
+    for found_dir in $ltrpathdirs; do
+      LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir"
+    done
+  fi
+])
+
+dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR,
+dnl unless already present in VAR.
+dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes
+dnl contains two or three consecutive elements that belong together.
+AC_DEFUN([AC_LIB_APPENDTOVAR],
+[
+  for element in [$2]; do
+    haveit=
+    for x in $[$1]; do
+      AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+      if test "X$x" = "X$element"; then
+        haveit=yes
+        break
+      fi
+    done
+    if test -z "$haveit"; then
+      [$1]="${[$1]}${[$1]:+ }$element"
+    fi
+  done
+])
+
+dnl For those cases where a variable contains several -L and -l options
+dnl referring to unknown libraries and directories, this macro determines the
+dnl necessary additional linker options for the runtime path.
+dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL])
+dnl sets LDADDVAR to linker options needed together with LIBSVALUE.
+dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed,
+dnl otherwise linking without libtool is assumed.
+AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS],
+[
+  AC_REQUIRE([AC_LIB_RPATH])
+  AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+  $1=
+  if test "$enable_rpath" != no; then
+    if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then
+      dnl Use an explicit option to hardcode directories into the resulting
+      dnl binary.
+      rpathdirs=
+      next=
+      for opt in $2; do
+        if test -n "$next"; then
+          dir="$next"
+          dnl No need to hardcode the standard /usr/lib.
+          if test "X$dir" != "X/usr/$acl_libdirstem"; then
+            rpathdirs="$rpathdirs $dir"
+          fi
+          next=
+        else
+          case $opt in
+            -L) next=yes ;;
+            -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'`
+                 dnl No need to hardcode the standard /usr/lib.
+                 if test "X$dir" != "X/usr/$acl_libdirstem"; then
+                   rpathdirs="$rpathdirs $dir"
+                 fi
+                 next= ;;
+            *) next= ;;
+          esac
+        fi
+      done
+      if test "X$rpathdirs" != "X"; then
+        if test -n ""$3""; then
+          dnl libtool is used for linking. Use -R options.
+          for dir in $rpathdirs; do
+            $1="${$1}${$1:+ }-R$dir"
+          done
+        else
+          dnl The linker is used for linking directly.
+          if test -n "$acl_hardcode_libdir_separator"; then
+            dnl Weird platform: only the last -rpath option counts, the user
+            dnl must pass all path elements in one option.
+            alldirs=
+            for dir in $rpathdirs; do
+              alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir"
+            done
+            acl_save_libdir="$libdir"
+            libdir="$alldirs"
+            eval flag=\"$acl_hardcode_libdir_flag_spec\"
+            libdir="$acl_save_libdir"
+            $1="$flag"
+          else
+            dnl The -rpath options are cumulative.
+            for dir in $rpathdirs; do
+              acl_save_libdir="$libdir"
+              libdir="$dir"
+              eval flag=\"$acl_hardcode_libdir_flag_spec\"
+              libdir="$acl_save_libdir"
+              $1="${$1}${$1:+ }$flag"
+            done
+          fi
+        fi
+      fi
+    fi
+  fi
+  AC_SUBST([$1])
+])
diff --git a/m4/lib-prefix.m4 b/m4/lib-prefix.m4
new file mode 100644
index 0000000..a8684e1
--- /dev/null
+++ b/m4/lib-prefix.m4
@@ -0,0 +1,185 @@
+# lib-prefix.m4 serial 5 (gettext-0.15)
+dnl Copyright (C) 2001-2005 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and
+dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't
+dnl require excessive bracketing.
+ifdef([AC_HELP_STRING],
+[AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])],
+[AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])])
+
+dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed
+dnl to access previously installed libraries. The basic assumption is that
+dnl a user will want packages to use other packages he previously installed
+dnl with the same --prefix option.
+dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate
+dnl libraries, but is otherwise very convenient.
+AC_DEFUN([AC_LIB_PREFIX],
+[
+  AC_BEFORE([$0], [AC_LIB_LINKFLAGS])
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  AC_REQUIRE([AC_LIB_PREPARE_MULTILIB])
+  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
+  dnl By default, look in $includedir and $libdir.
+  use_additional=yes
+  AC_LIB_WITH_FINAL_PREFIX([
+    eval additional_includedir=\"$includedir\"
+    eval additional_libdir=\"$libdir\"
+  ])
+  AC_LIB_ARG_WITH([lib-prefix],
+[  --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib
+  --without-lib-prefix    don't search for libraries in includedir and libdir],
+[
+    if test "X$withval" = "Xno"; then
+      use_additional=no
+    else
+      if test "X$withval" = "X"; then
+        AC_LIB_WITH_FINAL_PREFIX([
+          eval additional_includedir=\"$includedir\"
+          eval additional_libdir=\"$libdir\"
+        ])
+      else
+        additional_includedir="$withval/include"
+        additional_libdir="$withval/$acl_libdirstem"
+      fi
+    fi
+])
+  if test $use_additional = yes; then
+    dnl Potentially add $additional_includedir to $CPPFLAGS.
+    dnl But don't add it
+    dnl   1. if it's the standard /usr/include,
+    dnl   2. if it's already present in $CPPFLAGS,
+    dnl   3. if it's /usr/local/include and we are using GCC on Linux,
+    dnl   4. if it doesn't exist as a directory.
+    if test "X$additional_includedir" != "X/usr/include"; then
+      haveit=
+      for x in $CPPFLAGS; do
+        AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+        if test "X$x" = "X-I$additional_includedir"; then
+          haveit=yes
+          break
+        fi
+      done
+      if test -z "$haveit"; then
+        if test "X$additional_includedir" = "X/usr/local/include"; then
+          if test -n "$GCC"; then
+            case $host_os in
+              linux* | gnu* | k*bsd*-gnu) haveit=yes;;
+            esac
+          fi
+        fi
+        if test -z "$haveit"; then
+          if test -d "$additional_includedir"; then
+            dnl Really add $additional_includedir to $CPPFLAGS.
+            CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir"
+          fi
+        fi
+      fi
+    fi
+    dnl Potentially add $additional_libdir to $LDFLAGS.
+    dnl But don't add it
+    dnl   1. if it's the standard /usr/lib,
+    dnl   2. if it's already present in $LDFLAGS,
+    dnl   3. if it's /usr/local/lib and we are using GCC on Linux,
+    dnl   4. if it doesn't exist as a directory.
+    if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then
+      haveit=
+      for x in $LDFLAGS; do
+        AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"])
+        if test "X$x" = "X-L$additional_libdir"; then
+          haveit=yes
+          break
+        fi
+      done
+      if test -z "$haveit"; then
+        if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then
+          if test -n "$GCC"; then
+            case $host_os in
+              linux*) haveit=yes;;
+            esac
+          fi
+        fi
+        if test -z "$haveit"; then
+          if test -d "$additional_libdir"; then
+            dnl Really add $additional_libdir to $LDFLAGS.
+            LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir"
+          fi
+        fi
+      fi
+    fi
+  fi
+])
+
+dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix,
+dnl acl_final_exec_prefix, containing the values to which $prefix and
+dnl $exec_prefix will expand at the end of the configure script.
+AC_DEFUN([AC_LIB_PREPARE_PREFIX],
+[
+  dnl Unfortunately, prefix and exec_prefix get only finally determined
+  dnl at the end of configure.
+  if test "X$prefix" = "XNONE"; then
+    acl_final_prefix="$ac_default_prefix"
+  else
+    acl_final_prefix="$prefix"
+  fi
+  if test "X$exec_prefix" = "XNONE"; then
+    acl_final_exec_prefix='${prefix}'
+  else
+    acl_final_exec_prefix="$exec_prefix"
+  fi
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  eval acl_final_exec_prefix=\"$acl_final_exec_prefix\"
+  prefix="$acl_save_prefix"
+])
+
+dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the
+dnl variables prefix and exec_prefix bound to the values they will have
+dnl at the end of the configure script.
+AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX],
+[
+  acl_save_prefix="$prefix"
+  prefix="$acl_final_prefix"
+  acl_save_exec_prefix="$exec_prefix"
+  exec_prefix="$acl_final_exec_prefix"
+  $1
+  exec_prefix="$acl_save_exec_prefix"
+  prefix="$acl_save_prefix"
+])
+
+dnl AC_LIB_PREPARE_MULTILIB creates a variable acl_libdirstem, containing
+dnl the basename of the libdir, either "lib" or "lib64".
+AC_DEFUN([AC_LIB_PREPARE_MULTILIB],
+[
+  dnl There is no formal standard regarding lib and lib64. The current
+  dnl practice is that on a system supporting 32-bit and 64-bit instruction
+  dnl sets or ABIs, 64-bit libraries go under $prefix/lib64 and 32-bit
+  dnl libraries go under $prefix/lib. We determine the compiler's default
+  dnl mode by looking at the compiler's library search path. If at least
+  dnl of its elements ends in /lib64 or points to a directory whose absolute
+  dnl pathname ends in /lib64, we assume a 64-bit ABI. Otherwise we use the
+  dnl default, namely "lib".
+  acl_libdirstem=lib
+  searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'`
+  if test -n "$searchpath"; then
+    acl_save_IFS="${IFS= 	}"; IFS=":"
+    for searchdir in $searchpath; do
+      if test -d "$searchdir"; then
+        case "$searchdir" in
+          */lib64/ | */lib64 ) acl_libdirstem=lib64 ;;
+          *) searchdir=`cd "$searchdir" && pwd`
+             case "$searchdir" in
+               */lib64 ) acl_libdirstem=lib64 ;;
+             esac ;;
+        esac
+      fi
+    done
+    IFS="$acl_save_IFS"
+  fi
+])
diff --git a/m4/lock.m4 b/m4/lock.m4
new file mode 100644
index 0000000..9111933
--- /dev/null
+++ b/m4/lock.m4
@@ -0,0 +1,316 @@
+# lock.m4 serial 7 (gettext-0.17)
+dnl Copyright (C) 2005-2007 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+dnl Tests for a multithreading library to be used.
+dnl Defines at most one of the macros USE_POSIX_THREADS, USE_SOLARIS_THREADS,
+dnl USE_PTH_THREADS, USE_WIN32_THREADS
+dnl Sets the variables LIBTHREAD and LTLIBTHREAD to the linker options for use
+dnl in a Makefile (LIBTHREAD for use without libtool, LTLIBTHREAD for use with
+dnl libtool).
+dnl Sets the variables LIBMULTITHREAD and LTLIBMULTITHREAD similarly, for
+dnl programs that really need multithread functionality. The difference
+dnl between LIBTHREAD and LIBMULTITHREAD is that on platforms supporting weak
+dnl symbols, typically LIBTHREAD="" whereas LIBMULTITHREAD="-lpthread".
+dnl Adds to CPPFLAGS the flag -D_REENTRANT or -D_THREAD_SAFE if needed for
+dnl multithread-safe programs.
+
+AC_DEFUN([gl_LOCK_EARLY],
+[
+  AC_REQUIRE([gl_LOCK_EARLY_BODY])
+])
+
+dnl The guts of gl_LOCK_EARLY. Needs to be expanded only once.
+
+AC_DEFUN([gl_LOCK_EARLY_BODY],
+[
+  dnl Ordering constraints: This macro modifies CPPFLAGS in a way that
+  dnl influences the result of the autoconf tests that test for *_unlocked
+  dnl declarations, on AIX 5 at least. Therefore it must come early.
+  AC_BEFORE([$0], [gl_FUNC_GLIBC_UNLOCKED_IO])dnl
+  AC_BEFORE([$0], [gl_ARGP])dnl
+
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  dnl _GNU_SOURCE is needed for pthread_rwlock_t on glibc systems.
+  dnl AC_USE_SYSTEM_EXTENSIONS was introduced in autoconf 2.60 and obsoletes
+  dnl AC_GNU_SOURCE.
+  m4_ifdef([AC_USE_SYSTEM_EXTENSIONS],
+    [AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])],
+    [AC_REQUIRE([AC_GNU_SOURCE])])
+  dnl Check for multithreading.
+  AC_ARG_ENABLE(threads,
+AC_HELP_STRING([--enable-threads={posix|solaris|pth|win32}], [specify multithreading API])
+AC_HELP_STRING([--disable-threads], [build without multithread safety]),
+    [gl_use_threads=$enableval],
+    [case "$host_os" in
+       dnl Disable multithreading by default on OSF/1, because it interferes
+       dnl with fork()/exec(): When msgexec is linked with -lpthread, its child
+       dnl process gets an endless segmentation fault inside execvp().
+       osf*) gl_use_threads=no ;;
+       *)    gl_use_threads=yes ;;
+     esac
+    ])
+  if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then
+    # For using <pthread.h>:
+    case "$host_os" in
+      osf*)
+        # On OSF/1, the compiler needs the flag -D_REENTRANT so that it
+        # groks <pthread.h>. cc also understands the flag -pthread, but
+        # we don't use it because 1. gcc-2.95 doesn't understand -pthread,
+        # 2. putting a flag into CPPFLAGS that has an effect on the linker
+        # causes the AC_TRY_LINK test below to succeed unexpectedly,
+        # leading to wrong values of LIBTHREAD and LTLIBTHREAD.
+        CPPFLAGS="$CPPFLAGS -D_REENTRANT"
+        ;;
+    esac
+    # Some systems optimize for single-threaded programs by default, and
+    # need special flags to disable these optimizations. For example, the
+    # definition of 'errno' in <errno.h>.
+    case "$host_os" in
+      aix* | freebsd*) CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" ;;
+      solaris*) CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;;
+    esac
+  fi
+])
+
+dnl The guts of gl_LOCK. Needs to be expanded only once.
+
+AC_DEFUN([gl_LOCK_BODY],
+[
+  AC_REQUIRE([gl_LOCK_EARLY_BODY])
+  gl_threads_api=none
+  LIBTHREAD=
+  LTLIBTHREAD=
+  LIBMULTITHREAD=
+  LTLIBMULTITHREAD=
+  if test "$gl_use_threads" != no; then
+    dnl Check whether the compiler and linker support weak declarations.
+    AC_MSG_CHECKING([whether imported symbols can be declared weak])
+    gl_have_weak=no
+    AC_TRY_LINK([extern void xyzzy ();
+#pragma weak xyzzy], [xyzzy();], [gl_have_weak=yes])
+    AC_MSG_RESULT([$gl_have_weak])
+    if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then
+      # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that
+      # it groks <pthread.h>. It's added above, in gl_LOCK_EARLY_BODY.
+      AC_CHECK_HEADER(pthread.h, gl_have_pthread_h=yes, gl_have_pthread_h=no)
+      if test "$gl_have_pthread_h" = yes; then
+        # Other possible tests:
+        #   -lpthreads (FSU threads, PCthreads)
+        #   -lgthreads
+        gl_have_pthread=
+        # Test whether both pthread_mutex_lock and pthread_mutexattr_init exist
+        # in libc. IRIX 6.5 has the first one in both libc and libpthread, but
+        # the second one only in libpthread, and lock.c needs it.
+        AC_TRY_LINK([#include <pthread.h>],
+          [pthread_mutex_lock((pthread_mutex_t*)0);
+           pthread_mutexattr_init((pthread_mutexattr_t*)0);],
+          [gl_have_pthread=yes])
+        # Test for libpthread by looking for pthread_kill. (Not pthread_self,
+        # since it is defined as a macro on OSF/1.)
+        if test -n "$gl_have_pthread"; then
+          # The program links fine without libpthread. But it may actually
+          # need to link with libpthread in order to create multiple threads.
+          AC_CHECK_LIB(pthread, pthread_kill,
+            [LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread
+             # On Solaris and HP-UX, most pthread functions exist also in libc.
+             # Therefore pthread_in_use() needs to actually try to create a
+             # thread: pthread_create from libc will fail, whereas
+             # pthread_create will actually create a thread.
+             case "$host_os" in
+               solaris* | hpux*)
+                 AC_DEFINE([PTHREAD_IN_USE_DETECTION_HARD], 1,
+                   [Define if the pthread_in_use() detection is hard.])
+             esac
+            ])
+        else
+          # Some library is needed. Try libpthread and libc_r.
+          AC_CHECK_LIB(pthread, pthread_kill,
+            [gl_have_pthread=yes
+             LIBTHREAD=-lpthread LTLIBTHREAD=-lpthread
+             LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread])
+          if test -z "$gl_have_pthread"; then
+            # For FreeBSD 4.
+            AC_CHECK_LIB(c_r, pthread_kill,
+              [gl_have_pthread=yes
+               LIBTHREAD=-lc_r LTLIBTHREAD=-lc_r
+               LIBMULTITHREAD=-lc_r LTLIBMULTITHREAD=-lc_r])
+          fi
+        fi
+        if test -n "$gl_have_pthread"; then
+          gl_threads_api=posix
+          AC_DEFINE([USE_POSIX_THREADS], 1,
+            [Define if the POSIX multithreading library can be used.])
+          if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then
+            if test $gl_have_weak = yes; then
+              AC_DEFINE([USE_POSIX_THREADS_WEAK], 1,
+                [Define if references to the POSIX multithreading library should be made weak.])
+              LIBTHREAD=
+              LTLIBTHREAD=
+            fi
+          fi
+          # OSF/1 4.0 and MacOS X 10.1 lack the pthread_rwlock_t type and the
+          # pthread_rwlock_* functions.
+          AC_CHECK_TYPE([pthread_rwlock_t],
+            [AC_DEFINE([HAVE_PTHREAD_RWLOCK], 1,
+               [Define if the POSIX multithreading library has read/write locks.])],
+            [],
+            [#include <pthread.h>])
+          # glibc defines PTHREAD_MUTEX_RECURSIVE as enum, not as a macro.
+          AC_TRY_COMPILE([#include <pthread.h>],
+            [#if __FreeBSD__ == 4
+error "No, in FreeBSD 4.0 recursive mutexes actually don't work."
+#else
+int x = (int)PTHREAD_MUTEX_RECURSIVE;
+return !x;
+#endif],
+            [AC_DEFINE([HAVE_PTHREAD_MUTEX_RECURSIVE], 1,
+               [Define if the <pthread.h> defines PTHREAD_MUTEX_RECURSIVE.])])
+        fi
+      fi
+    fi
+    if test -z "$gl_have_pthread"; then
+      if test "$gl_use_threads" = yes || test "$gl_use_threads" = solaris; then
+        gl_have_solaristhread=
+        gl_save_LIBS="$LIBS"
+        LIBS="$LIBS -lthread"
+        AC_TRY_LINK([#include <thread.h>
+#include <synch.h>],
+          [thr_self();],
+          [gl_have_solaristhread=yes])
+        LIBS="$gl_save_LIBS"
+        if test -n "$gl_have_solaristhread"; then
+          gl_threads_api=solaris
+          LIBTHREAD=-lthread
+          LTLIBTHREAD=-lthread
+          LIBMULTITHREAD="$LIBTHREAD"
+          LTLIBMULTITHREAD="$LTLIBTHREAD"
+          AC_DEFINE([USE_SOLARIS_THREADS], 1,
+            [Define if the old Solaris multithreading library can be used.])
+          if test $gl_have_weak = yes; then
+            AC_DEFINE([USE_SOLARIS_THREADS_WEAK], 1,
+              [Define if references to the old Solaris multithreading library should be made weak.])
+            LIBTHREAD=
+            LTLIBTHREAD=
+          fi
+        fi
+      fi
+    fi
+    if test "$gl_use_threads" = pth; then
+      gl_save_CPPFLAGS="$CPPFLAGS"
+      AC_LIB_LINKFLAGS(pth)
+      gl_have_pth=
+      gl_save_LIBS="$LIBS"
+      LIBS="$LIBS -lpth"
+      AC_TRY_LINK([#include <pth.h>], [pth_self();], gl_have_pth=yes)
+      LIBS="$gl_save_LIBS"
+      if test -n "$gl_have_pth"; then
+        gl_threads_api=pth
+        LIBTHREAD="$LIBPTH"
+        LTLIBTHREAD="$LTLIBPTH"
+        LIBMULTITHREAD="$LIBTHREAD"
+        LTLIBMULTITHREAD="$LTLIBTHREAD"
+        AC_DEFINE([USE_PTH_THREADS], 1,
+          [Define if the GNU Pth multithreading library can be used.])
+        if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then
+          if test $gl_have_weak = yes; then
+            AC_DEFINE([USE_PTH_THREADS_WEAK], 1,
+              [Define if references to the GNU Pth multithreading library should be made weak.])
+            LIBTHREAD=
+            LTLIBTHREAD=
+          fi
+        fi
+      else
+        CPPFLAGS="$gl_save_CPPFLAGS"
+      fi
+    fi
+    if test -z "$gl_have_pthread"; then
+      if test "$gl_use_threads" = yes || test "$gl_use_threads" = win32; then
+        if { case "$host_os" in
+               mingw*) true;;
+               *) false;;
+             esac
+           }; then
+          gl_threads_api=win32
+          AC_DEFINE([USE_WIN32_THREADS], 1,
+            [Define if the Win32 multithreading API can be used.])
+        fi
+      fi
+    fi
+  fi
+  AC_MSG_CHECKING([for multithread API to use])
+  AC_MSG_RESULT([$gl_threads_api])
+  AC_SUBST(LIBTHREAD)
+  AC_SUBST(LTLIBTHREAD)
+  AC_SUBST(LIBMULTITHREAD)
+  AC_SUBST(LTLIBMULTITHREAD)
+])
+
+AC_DEFUN([gl_LOCK],
+[
+  AC_REQUIRE([gl_LOCK_EARLY])
+  AC_REQUIRE([gl_LOCK_BODY])
+  gl_PREREQ_LOCK
+])
+
+# Prerequisites of lib/lock.c.
+AC_DEFUN([gl_PREREQ_LOCK], [
+  AC_REQUIRE([AC_C_INLINE])
+])
+
+dnl Survey of platforms:
+dnl
+dnl Platform          Available   Compiler    Supports   test-lock
+dnl                   flavours    option      weak       result
+dnl ---------------   ---------   ---------   --------   ---------
+dnl Linux 2.4/glibc   posix       -lpthread       Y      OK
+dnl
+dnl GNU Hurd/glibc    posix
+dnl
+dnl FreeBSD 5.3       posix       -lc_r           Y
+dnl                   posix       -lkse ?         Y
+dnl                   posix       -lpthread ?     Y
+dnl                   posix       -lthr           Y
+dnl
+dnl FreeBSD 5.2       posix       -lc_r           Y
+dnl                   posix       -lkse           Y
+dnl                   posix       -lthr           Y
+dnl
+dnl FreeBSD 4.0,4.10  posix       -lc_r           Y      OK
+dnl
+dnl NetBSD 1.6        --
+dnl
+dnl OpenBSD 3.4       posix       -lpthread       Y      OK
+dnl
+dnl MacOS X 10.[123]  posix       -lpthread       Y      OK
+dnl
+dnl Solaris 7,8,9     posix       -lpthread       Y      Sol 7,8: 0.0; Sol 9: OK
+dnl                   solaris     -lthread        Y      Sol 7,8: 0.0; Sol 9: OK
+dnl
+dnl HP-UX 11          posix       -lpthread       N (cc) OK
+dnl                                               Y (gcc)
+dnl
+dnl IRIX 6.5          posix       -lpthread       Y      0.5
+dnl
+dnl AIX 4.3,5.1       posix       -lpthread       N      AIX 4: 0.5; AIX 5: OK
+dnl
+dnl OSF/1 4.0,5.1     posix       -pthread (cc)   N      OK
+dnl                               -lpthread (gcc) Y
+dnl
+dnl Cygwin            posix       -lpthread       Y      OK
+dnl
+dnl Any of the above  pth         -lpth                  0.0
+dnl
+dnl Mingw             win32                       N      OK
+dnl
+dnl BeOS 5            --
+dnl
+dnl The test-lock result shows what happens if in test-lock.c EXPLICIT_YIELD is
+dnl turned off:
+dnl   OK if all three tests terminate OK,
+dnl   0.5 if the first test terminates OK but the second one loops endlessly,
+dnl   0.0 if the first test already loops endlessly.
diff --git a/m4/longlong.m4 b/m4/longlong.m4
new file mode 100644
index 0000000..a72e53b
--- /dev/null
+++ b/m4/longlong.m4
@@ -0,0 +1,109 @@
+# longlong.m4 serial 13
+dnl Copyright (C) 1999-2007 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Paul Eggert.
+
+# Define HAVE_LONG_LONG_INT if 'long long int' works.
+# This fixes a bug in Autoconf 2.61, but can be removed once we
+# assume 2.62 everywhere.
+
+# Note: If the type 'long long int' exists but is only 32 bits large
+# (as on some very old compilers), HAVE_LONG_LONG_INT will not be
+# defined. In this case you can treat 'long long int' like 'long int'.
+
+AC_DEFUN([AC_TYPE_LONG_LONG_INT],
+[
+  AC_CACHE_CHECK([for long long int], [ac_cv_type_long_long_int],
+    [AC_LINK_IFELSE(
+       [_AC_TYPE_LONG_LONG_SNIPPET],
+       [dnl This catches a bug in Tandem NonStop Kernel (OSS) cc -O circa 2004.
+	dnl If cross compiling, assume the bug isn't important, since
+	dnl nobody cross compiles for this platform as far as we know.
+	AC_RUN_IFELSE(
+	  [AC_LANG_PROGRAM(
+	     [[@%:@include <limits.h>
+	       @%:@ifndef LLONG_MAX
+	       @%:@ define HALF \
+			(1LL << (sizeof (long long int) * CHAR_BIT - 2))
+	       @%:@ define LLONG_MAX (HALF - 1 + HALF)
+	       @%:@endif]],
+	     [[long long int n = 1;
+	       int i;
+	       for (i = 0; ; i++)
+		 {
+		   long long int m = n << i;
+		   if (m >> i != n)
+		     return 1;
+		   if (LLONG_MAX / 2 < m)
+		     break;
+		 }
+	       return 0;]])],
+	  [ac_cv_type_long_long_int=yes],
+	  [ac_cv_type_long_long_int=no],
+	  [ac_cv_type_long_long_int=yes])],
+       [ac_cv_type_long_long_int=no])])
+  if test $ac_cv_type_long_long_int = yes; then
+    AC_DEFINE([HAVE_LONG_LONG_INT], 1,
+      [Define to 1 if the system has the type `long long int'.])
+  fi
+])
+
+# Define HAVE_UNSIGNED_LONG_LONG_INT if 'unsigned long long int' works.
+# This fixes a bug in Autoconf 2.61, but can be removed once we
+# assume 2.62 everywhere.
+
+# Note: If the type 'unsigned long long int' exists but is only 32 bits
+# large (as on some very old compilers), AC_TYPE_UNSIGNED_LONG_LONG_INT
+# will not be defined. In this case you can treat 'unsigned long long int'
+# like 'unsigned long int'.
+
+AC_DEFUN([AC_TYPE_UNSIGNED_LONG_LONG_INT],
+[
+  AC_CACHE_CHECK([for unsigned long long int],
+    [ac_cv_type_unsigned_long_long_int],
+    [AC_LINK_IFELSE(
+       [_AC_TYPE_LONG_LONG_SNIPPET],
+       [ac_cv_type_unsigned_long_long_int=yes],
+       [ac_cv_type_unsigned_long_long_int=no])])
+  if test $ac_cv_type_unsigned_long_long_int = yes; then
+    AC_DEFINE([HAVE_UNSIGNED_LONG_LONG_INT], 1,
+      [Define to 1 if the system has the type `unsigned long long int'.])
+  fi
+])
+
+# Expands to a C program that can be used to test for simultaneous support
+# of 'long long' and 'unsigned long long'. We don't want to say that
+# 'long long' is available if 'unsigned long long' is not, or vice versa,
+# because too many programs rely on the symmetry between signed and unsigned
+# integer types (excluding 'bool').
+AC_DEFUN([_AC_TYPE_LONG_LONG_SNIPPET],
+[
+  AC_LANG_PROGRAM(
+    [[/* Test preprocessor.  */
+      #if ! (-9223372036854775807LL < 0 && 0 < 9223372036854775807ll)
+        error in preprocessor;
+      #endif
+      #if ! (18446744073709551615ULL <= -1ull)
+        error in preprocessor;
+      #endif
+      /* Test literals.  */
+      long long int ll = 9223372036854775807ll;
+      long long int nll = -9223372036854775807LL;
+      unsigned long long int ull = 18446744073709551615ULL;
+      /* Test constant expressions.   */
+      typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll)
+		     ? 1 : -1)];
+      typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1
+		     ? 1 : -1)];
+      int i = 63;]],
+    [[/* Test availability of runtime routines for shift and division.  */
+      long long int llmax = 9223372036854775807ll;
+      unsigned long long int ullmax = 18446744073709551615ull;
+      return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i)
+	      | (llmax / ll) | (llmax % ll)
+	      | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i)
+	      | (ullmax / ull) | (ullmax % ull));]])
+])
diff --git a/m4/nls.m4 b/m4/nls.m4
new file mode 100644
index 0000000..7967cc2
--- /dev/null
+++ b/m4/nls.m4
@@ -0,0 +1,31 @@
+# nls.m4 serial 3 (gettext-0.15)
+dnl Copyright (C) 1995-2003, 2005-2006 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl   Ulrich Drepper <drepper at cygnus.com>, 1995-2000.
+dnl   Bruno Haible <haible at clisp.cons.org>, 2000-2003.
+
+AC_PREREQ(2.50)
+
+AC_DEFUN([AM_NLS],
+[
+  AC_MSG_CHECKING([whether NLS is requested])
+  dnl Default is enabled NLS
+  AC_ARG_ENABLE(nls,
+    [  --disable-nls           do not use Native Language Support],
+    USE_NLS=$enableval, USE_NLS=yes)
+  AC_MSG_RESULT($USE_NLS)
+  AC_SUBST(USE_NLS)
+])
diff --git a/m4/po.m4 b/m4/po.m4
new file mode 100644
index 0000000..0734762
--- /dev/null
+++ b/m4/po.m4
@@ -0,0 +1,449 @@
+# po.m4 serial 15 (gettext-0.17)
+dnl Copyright (C) 1995-2007 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl   Ulrich Drepper <drepper at cygnus.com>, 1995-2000.
+dnl   Bruno Haible <haible at clisp.cons.org>, 2000-2003.
+
+AC_PREREQ(2.50)
+
+dnl Checks for all prerequisites of the po subdirectory.
+AC_DEFUN([AM_PO_SUBDIRS],
+[
+  AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+  AC_REQUIRE([AC_PROG_INSTALL])dnl
+  AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake
+  AC_REQUIRE([AM_NLS])dnl
+
+  dnl Release version of the gettext macros. This is used to ensure that
+  dnl the gettext macros and po/Makefile.in.in are in sync.
+  AC_SUBST([GETTEXT_MACRO_VERSION], [0.17])
+
+  dnl Perform the following tests also if --disable-nls has been given,
+  dnl because they are needed for "make dist" to work.
+
+  dnl Search for GNU msgfmt in the PATH.
+  dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions.
+  dnl The second test excludes FreeBSD msgfmt.
+  AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt,
+    [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 &&
+     (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
+    :)
+  AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT)
+
+  dnl Test whether it is GNU msgfmt >= 0.15.
+changequote(,)dnl
+  case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+    '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;;
+    *) MSGFMT_015=$MSGFMT ;;
+  esac
+changequote([,])dnl
+  AC_SUBST([MSGFMT_015])
+changequote(,)dnl
+  case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+    '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;;
+    *) GMSGFMT_015=$GMSGFMT ;;
+  esac
+changequote([,])dnl
+  AC_SUBST([GMSGFMT_015])
+
+  dnl Search for GNU xgettext 0.12 or newer in the PATH.
+  dnl The first test excludes Solaris xgettext and early GNU xgettext versions.
+  dnl The second test excludes FreeBSD xgettext.
+  AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext,
+    [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 &&
+     (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)],
+    :)
+  dnl Remove leftover from FreeBSD xgettext call.
+  rm -f messages.po
+
+  dnl Test whether it is GNU xgettext >= 0.15.
+changequote(,)dnl
+  case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in
+    '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;;
+    *) XGETTEXT_015=$XGETTEXT ;;
+  esac
+changequote([,])dnl
+  AC_SUBST([XGETTEXT_015])
+
+  dnl Search for GNU msgmerge 0.11 or newer in the PATH.
+  AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge,
+    [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :)
+
+  dnl Installation directories.
+  dnl Autoconf >= 2.60 defines localedir. For older versions of autoconf, we
+  dnl have to define it here, so that it can be used in po/Makefile.
+  test -n "$localedir" || localedir='${datadir}/locale'
+  AC_SUBST([localedir])
+
+  dnl Support for AM_XGETTEXT_OPTION.
+  test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS=
+  AC_SUBST([XGETTEXT_EXTRA_OPTIONS])
+
+  AC_CONFIG_COMMANDS([po-directories], [[
+    for ac_file in $CONFIG_FILES; do
+      # Support "outfile[:infile[:infile...]]"
+      case "$ac_file" in
+        *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+      esac
+      # PO directories have a Makefile.in generated from Makefile.in.in.
+      case "$ac_file" in */Makefile.in)
+        # Adjust a relative srcdir.
+        ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+        ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
+        ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+        # In autoconf-2.13 it is called $ac_given_srcdir.
+        # In autoconf-2.50 it is called $srcdir.
+        test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+        case "$ac_given_srcdir" in
+          .)  top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+          /*) top_srcdir="$ac_given_srcdir" ;;
+          *)  top_srcdir="$ac_dots$ac_given_srcdir" ;;
+        esac
+        # Treat a directory as a PO directory if and only if it has a
+        # POTFILES.in file. This allows packages to have multiple PO
+        # directories under different names or in different locations.
+        if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then
+          rm -f "$ac_dir/POTFILES"
+          test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES"
+          cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ 	]*\$/d" -e "s,.*,     $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES"
+          POMAKEFILEDEPS="POTFILES.in"
+          # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend
+          # on $ac_dir but don't depend on user-specified configuration
+          # parameters.
+          if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+            # The LINGUAS file contains the set of available languages.
+            if test -n "$OBSOLETE_ALL_LINGUAS"; then
+              test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
+            fi
+            ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+            # Hide the ALL_LINGUAS assigment from automake < 1.5.
+            eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+            POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+          else
+            # The set of available languages was given in configure.in.
+            # Hide the ALL_LINGUAS assigment from automake < 1.5.
+            eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS'
+          fi
+          # Compute POFILES
+          # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
+          # Compute UPDATEPOFILES
+          # as      $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
+          # Compute DUMMYPOFILES
+          # as      $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
+          # Compute GMOFILES
+          # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
+          case "$ac_given_srcdir" in
+            .) srcdirpre= ;;
+            *) srcdirpre='$(srcdir)/' ;;
+          esac
+          POFILES=
+          UPDATEPOFILES=
+          DUMMYPOFILES=
+          GMOFILES=
+          for lang in $ALL_LINGUAS; do
+            POFILES="$POFILES $srcdirpre$lang.po"
+            UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+            DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+            GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+          done
+          # CATALOGS depends on both $ac_dir and the user's LINGUAS
+          # environment variable.
+          INST_LINGUAS=
+          if test -n "$ALL_LINGUAS"; then
+            for presentlang in $ALL_LINGUAS; do
+              useit=no
+              if test "%UNSET%" != "$LINGUAS"; then
+                desiredlanguages="$LINGUAS"
+              else
+                desiredlanguages="$ALL_LINGUAS"
+              fi
+              for desiredlang in $desiredlanguages; do
+                # Use the presentlang catalog if desiredlang is
+                #   a. equal to presentlang, or
+                #   b. a variant of presentlang (because in this case,
+                #      presentlang can be used as a fallback for messages
+                #      which are not translated in the desiredlang catalog).
+                case "$desiredlang" in
+                  "$presentlang"*) useit=yes;;
+                esac
+              done
+              if test $useit = yes; then
+                INST_LINGUAS="$INST_LINGUAS $presentlang"
+              fi
+            done
+          fi
+          CATALOGS=
+          if test -n "$INST_LINGUAS"; then
+            for lang in $INST_LINGUAS; do
+              CATALOGS="$CATALOGS $lang.gmo"
+            done
+          fi
+          test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile"
+          sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile"
+          for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do
+            if test -f "$f"; then
+              case "$f" in
+                *.orig | *.bak | *~) ;;
+                *) cat "$f" >> "$ac_dir/Makefile" ;;
+              esac
+            fi
+          done
+        fi
+        ;;
+      esac
+    done]],
+   [# Capture the value of obsolete ALL_LINGUAS because we need it to compute
+    # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it
+    # from automake < 1.5.
+    eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"'
+    # Capture the value of LINGUAS because we need it to compute CATALOGS.
+    LINGUAS="${LINGUAS-%UNSET%}"
+   ])
+])
+
+dnl Postprocesses a Makefile in a directory containing PO files.
+AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE],
+[
+  # When this code is run, in config.status, two variables have already been
+  # set:
+  # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in,
+  # - LINGUAS is the value of the environment variable LINGUAS at configure
+  #   time.
+
+changequote(,)dnl
+  # Adjust a relative srcdir.
+  ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'`
+  ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`"
+  ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'`
+  # In autoconf-2.13 it is called $ac_given_srcdir.
+  # In autoconf-2.50 it is called $srcdir.
+  test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir"
+  case "$ac_given_srcdir" in
+    .)  top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;;
+    /*) top_srcdir="$ac_given_srcdir" ;;
+    *)  top_srcdir="$ac_dots$ac_given_srcdir" ;;
+  esac
+
+  # Find a way to echo strings without interpreting backslash.
+  if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then
+    gt_echo='echo'
+  else
+    if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then
+      gt_echo='printf %s\n'
+    else
+      echo_func () {
+        cat <<EOT
+$*
+EOT
+      }
+      gt_echo='echo_func'
+    fi
+  fi
+
+  # A sed script that extracts the value of VARIABLE from a Makefile.
+  sed_x_variable='
+# Test if the hold space is empty.
+x
+s/P/P/
+x
+ta
+# Yes it was empty. Look if we have the expected variable definition.
+/^[	 ]*VARIABLE[	 ]*=/{
+  # Seen the first line of the variable definition.
+  s/^[	 ]*VARIABLE[	 ]*=//
+  ba
+}
+bd
+:a
+# Here we are processing a line from the variable definition.
+# Remove comment, more precisely replace it with a space.
+s/#.*$/ /
+# See if the line ends in a backslash.
+tb
+:b
+s/\\$//
+# Print the line, without the trailing backslash.
+p
+tc
+# There was no trailing backslash. The end of the variable definition is
+# reached. Clear the hold space.
+s/^.*$//
+x
+bd
+:c
+# A trailing backslash means that the variable definition continues in the
+# next line. Put a nonempty string into the hold space to indicate this.
+s/^.*$/P/
+x
+:d
+'
+changequote([,])dnl
+
+  # Set POTFILES to the value of the Makefile variable POTFILES.
+  sed_x_POTFILES=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/POTFILES/g'`
+  POTFILES=`sed -n -e "$sed_x_POTFILES" < "$ac_file"`
+  # Compute POTFILES_DEPS as
+  #   $(foreach file, $(POTFILES), $(top_srcdir)/$(file))
+  POTFILES_DEPS=
+  for file in $POTFILES; do
+    POTFILES_DEPS="$POTFILES_DEPS "'$(top_srcdir)/'"$file"
+  done
+  POMAKEFILEDEPS=""
+
+  if test -n "$OBSOLETE_ALL_LINGUAS"; then
+    test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete"
+  fi
+  if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then
+    # The LINGUAS file contains the set of available languages.
+    ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+    POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS"
+  else
+    # Set ALL_LINGUAS to the value of the Makefile variable LINGUAS.
+    sed_x_LINGUAS=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/LINGUAS/g'`
+    ALL_LINGUAS_=`sed -n -e "$sed_x_LINGUAS" < "$ac_file"`
+  fi
+  # Hide the ALL_LINGUAS assigment from automake < 1.5.
+  eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+  # Compute POFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po)
+  # Compute UPDATEPOFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(lang).po-update)
+  # Compute DUMMYPOFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(lang).nop)
+  # Compute GMOFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo)
+  # Compute PROPERTIESFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).properties)
+  # Compute CLASSFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).class)
+  # Compute QMFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).qm)
+  # Compute MSGFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang)).msg)
+  # Compute RESOURCESDLLFILES
+  # as      $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang))/$(DOMAIN).resources.dll)
+  case "$ac_given_srcdir" in
+    .) srcdirpre= ;;
+    *) srcdirpre='$(srcdir)/' ;;
+  esac
+  POFILES=
+  UPDATEPOFILES=
+  DUMMYPOFILES=
+  GMOFILES=
+  PROPERTIESFILES=
+  CLASSFILES=
+  QMFILES=
+  MSGFILES=
+  RESOURCESDLLFILES=
+  for lang in $ALL_LINGUAS; do
+    POFILES="$POFILES $srcdirpre$lang.po"
+    UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+    DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+    GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+    PROPERTIESFILES="$PROPERTIESFILES \$(top_srcdir)/\$(DOMAIN)_$lang.properties"
+    CLASSFILES="$CLASSFILES \$(top_srcdir)/\$(DOMAIN)_$lang.class"
+    QMFILES="$QMFILES $srcdirpre$lang.qm"
+    frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
+    MSGFILES="$MSGFILES $srcdirpre$frobbedlang.msg"
+    frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
+    RESOURCESDLLFILES="$RESOURCESDLLFILES $srcdirpre$frobbedlang/\$(DOMAIN).resources.dll"
+  done
+  # CATALOGS depends on both $ac_dir and the user's LINGUAS
+  # environment variable.
+  INST_LINGUAS=
+  if test -n "$ALL_LINGUAS"; then
+    for presentlang in $ALL_LINGUAS; do
+      useit=no
+      if test "%UNSET%" != "$LINGUAS"; then
+        desiredlanguages="$LINGUAS"
+      else
+        desiredlanguages="$ALL_LINGUAS"
+      fi
+      for desiredlang in $desiredlanguages; do
+        # Use the presentlang catalog if desiredlang is
+        #   a. equal to presentlang, or
+        #   b. a variant of presentlang (because in this case,
+        #      presentlang can be used as a fallback for messages
+        #      which are not translated in the desiredlang catalog).
+        case "$desiredlang" in
+          "$presentlang"*) useit=yes;;
+        esac
+      done
+      if test $useit = yes; then
+        INST_LINGUAS="$INST_LINGUAS $presentlang"
+      fi
+    done
+  fi
+  CATALOGS=
+  JAVACATALOGS=
+  QTCATALOGS=
+  TCLCATALOGS=
+  CSHARPCATALOGS=
+  if test -n "$INST_LINGUAS"; then
+    for lang in $INST_LINGUAS; do
+      CATALOGS="$CATALOGS $lang.gmo"
+      JAVACATALOGS="$JAVACATALOGS \$(DOMAIN)_$lang.properties"
+      QTCATALOGS="$QTCATALOGS $lang.qm"
+      frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
+      TCLCATALOGS="$TCLCATALOGS $frobbedlang.msg"
+      frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
+      CSHARPCATALOGS="$CSHARPCATALOGS $frobbedlang/\$(DOMAIN).resources.dll"
+    done
+  fi
+
+  sed -e "s|@POTFILES_DEPS@|$POTFILES_DEPS|g" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@PROPERTIESFILES@|$PROPERTIESFILES|g" -e "s|@CLASSFILES@|$CLASSFILES|g" -e "s|@QMFILES@|$QMFILES|g" -e "s|@MSGFILES@|$MSGFILES|g" -e "s|@RESOURCESDLLFILES@|$RESOURCESDLLFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@JAVACATALOGS@|$JAVACATALOGS|g" -e "s|@QTCATALOGS@|$QTCATALOGS|g" -e "s|@TCLCATALOGS@|$TCL [...]
+  if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then
+    # Add dependencies that cannot be formulated as a simple suffix rule.
+    for lang in $ALL_LINGUAS; do
+      frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'`
+      cat >> "$ac_file.tmp" <<EOF
+$frobbedlang.msg: $lang.po
+	@echo "\$(MSGFMT) -c --tcl -d \$(srcdir) -l $lang $srcdirpre$lang.po"; \
+	\$(MSGFMT) -c --tcl -d "\$(srcdir)" -l $lang $srcdirpre$lang.po || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
+EOF
+    done
+  fi
+  if grep -l '@CSHARPCATALOGS@' "$ac_file" > /dev/null; then
+    # Add dependencies that cannot be formulated as a simple suffix rule.
+    for lang in $ALL_LINGUAS; do
+      frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'`
+      cat >> "$ac_file.tmp" <<EOF
+$frobbedlang/\$(DOMAIN).resources.dll: $lang.po
+	@echo "\$(MSGFMT) -c --csharp -d \$(srcdir) -l $lang $srcdirpre$lang.po -r \$(DOMAIN)"; \
+	\$(MSGFMT) -c --csharp -d "\$(srcdir)" -l $lang $srcdirpre$lang.po -r "\$(DOMAIN)" || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; }
+EOF
+    done
+  fi
+  if test -n "$POMAKEFILEDEPS"; then
+    cat >> "$ac_file.tmp" <<EOF
+Makefile: $POMAKEFILEDEPS
+EOF
+  fi
+  mv "$ac_file.tmp" "$ac_file"
+])
+
+dnl Initializes the accumulator used by AM_XGETTEXT_OPTION.
+AC_DEFUN([AM_XGETTEXT_OPTION_INIT],
+[
+  XGETTEXT_EXTRA_OPTIONS=
+])
+
+dnl Registers an option to be passed to xgettext in the po subdirectory.
+AC_DEFUN([AM_XGETTEXT_OPTION],
+[
+  AC_REQUIRE([AM_XGETTEXT_OPTION_INIT])
+  XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS $1"
+])
diff --git a/m4/printf-posix.m4 b/m4/printf-posix.m4
new file mode 100644
index 0000000..14ba612
--- /dev/null
+++ b/m4/printf-posix.m4
@@ -0,0 +1,44 @@
+# printf-posix.m4 serial 3 (gettext-0.17)
+dnl Copyright (C) 2003, 2007 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+dnl Test whether the printf() function supports POSIX/XSI format strings with
+dnl positions.
+
+AC_DEFUN([gt_PRINTF_POSIX],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_CACHE_CHECK([whether printf() supports POSIX/XSI format strings],
+    gt_cv_func_printf_posix,
+    [
+      AC_TRY_RUN([
+#include <stdio.h>
+#include <string.h>
+/* The string "%2$d %1$d", with dollar characters protected from the shell's
+   dollar expansion (possibly an autoconf bug).  */
+static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' };
+static char buf[100];
+int main ()
+{
+  sprintf (buf, format, 33, 55);
+  return (strcmp (buf, "55 33") != 0);
+}], gt_cv_func_printf_posix=yes, gt_cv_func_printf_posix=no,
+      [
+        AC_EGREP_CPP(notposix, [
+#if defined __NetBSD__ || defined __BEOS__ || defined _MSC_VER || defined __MINGW32__ || defined __CYGWIN__
+  notposix
+#endif
+        ], gt_cv_func_printf_posix="guessing no",
+           gt_cv_func_printf_posix="guessing yes")
+      ])
+    ])
+  case $gt_cv_func_printf_posix in
+    *yes)
+      AC_DEFINE(HAVE_POSIX_PRINTF, 1,
+        [Define if your printf() function supports format strings with positions.])
+      ;;
+  esac
+])
diff --git a/m4/progtest.m4 b/m4/progtest.m4
new file mode 100644
index 0000000..a56365c
--- /dev/null
+++ b/m4/progtest.m4
@@ -0,0 +1,92 @@
+# progtest.m4 serial 4 (gettext-0.14.2)
+dnl Copyright (C) 1996-2003, 2005 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+dnl
+dnl This file can can be used in projects which are not available under
+dnl the GNU General Public License or the GNU Library General Public
+dnl License but which still want to provide support for the GNU gettext
+dnl functionality.
+dnl Please note that the actual code of the GNU gettext library is covered
+dnl by the GNU Library General Public License, and the rest of the GNU
+dnl gettext package package is covered by the GNU General Public License.
+dnl They are *not* in the public domain.
+
+dnl Authors:
+dnl   Ulrich Drepper <drepper at cygnus.com>, 1996.
+
+AC_PREREQ(2.50)
+
+# Search path for a program which passes the given test.
+
+dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR,
+dnl   TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]])
+AC_DEFUN([AM_PATH_PROG_WITH_TEST],
+[
+# Prepare PATH_SEPARATOR.
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+# Find out how to test for executable files. Don't use a zero-byte file,
+# as systems may use methods other than mode bits to determine executability.
+cat >conf$$.file <<_ASEOF
+#! /bin/sh
+exit 0
+_ASEOF
+chmod +x conf$$.file
+if test -x conf$$.file >/dev/null 2>&1; then
+  ac_executable_p="test -x"
+else
+  ac_executable_p="test -f"
+fi
+rm -f conf$$.file
+
+# Extract the first word of "$2", so it can be a program name with args.
+set dummy $2; ac_word=[$]2
+AC_MSG_CHECKING([for $ac_word])
+AC_CACHE_VAL(ac_cv_path_$1,
+[case "[$]$1" in
+  [[\\/]]* | ?:[[\\/]]*)
+    ac_cv_path_$1="[$]$1" # Let the user override the test with a path.
+    ;;
+  *)
+    ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR
+    for ac_dir in ifelse([$5], , $PATH, [$5]); do
+      IFS="$ac_save_IFS"
+      test -z "$ac_dir" && ac_dir=.
+      for ac_exec_ext in '' $ac_executable_extensions; do
+        if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then
+          echo "$as_me: trying $ac_dir/$ac_word..." >&AS_MESSAGE_LOG_FD
+          if [$3]; then
+            ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext"
+            break 2
+          fi
+        fi
+      done
+    done
+    IFS="$ac_save_IFS"
+dnl If no 4th arg is given, leave the cache variable unset,
+dnl so AC_PATH_PROGS will keep looking.
+ifelse([$4], , , [  test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4"
+])dnl
+    ;;
+esac])dnl
+$1="$ac_cv_path_$1"
+if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then
+  AC_MSG_RESULT([$]$1)
+else
+  AC_MSG_RESULT(no)
+fi
+AC_SUBST($1)dnl
+])
diff --git a/m4/size_max.m4 b/m4/size_max.m4
new file mode 100644
index 0000000..6cb4868
--- /dev/null
+++ b/m4/size_max.m4
@@ -0,0 +1,68 @@
+# size_max.m4 serial 6
+dnl Copyright (C) 2003, 2005-2006 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_DEFUN([gl_SIZE_MAX],
+[
+  AC_CHECK_HEADERS(stdint.h)
+  dnl First test whether the system already has SIZE_MAX.
+  AC_MSG_CHECKING([for SIZE_MAX])
+  AC_CACHE_VAL([gl_cv_size_max], [
+    gl_cv_size_max=
+    AC_EGREP_CPP([Found it], [
+#include <limits.h>
+#if HAVE_STDINT_H
+#include <stdint.h>
+#endif
+#ifdef SIZE_MAX
+Found it
+#endif
+], gl_cv_size_max=yes)
+    if test -z "$gl_cv_size_max"; then
+      dnl Define it ourselves. Here we assume that the type 'size_t' is not wider
+      dnl than the type 'unsigned long'. Try hard to find a definition that can
+      dnl be used in a preprocessor #if, i.e. doesn't contain a cast.
+      AC_COMPUTE_INT([size_t_bits_minus_1], [sizeof (size_t) * CHAR_BIT - 1],
+        [#include <stddef.h>
+#include <limits.h>], size_t_bits_minus_1=)
+      AC_COMPUTE_INT([fits_in_uint], [sizeof (size_t) <= sizeof (unsigned int)],
+        [#include <stddef.h>], fits_in_uint=)
+      if test -n "$size_t_bits_minus_1" && test -n "$fits_in_uint"; then
+        if test $fits_in_uint = 1; then
+          dnl Even though SIZE_MAX fits in an unsigned int, it must be of type
+          dnl 'unsigned long' if the type 'size_t' is the same as 'unsigned long'.
+          AC_TRY_COMPILE([#include <stddef.h>
+            extern size_t foo;
+            extern unsigned long foo;
+            ], [], fits_in_uint=0)
+        fi
+        dnl We cannot use 'expr' to simplify this expression, because 'expr'
+        dnl works only with 'long' integers in the host environment, while we
+        dnl might be cross-compiling from a 32-bit platform to a 64-bit platform.
+        if test $fits_in_uint = 1; then
+          gl_cv_size_max="(((1U << $size_t_bits_minus_1) - 1) * 2 + 1)"
+        else
+          gl_cv_size_max="(((1UL << $size_t_bits_minus_1) - 1) * 2 + 1)"
+        fi
+      else
+        dnl Shouldn't happen, but who knows...
+        gl_cv_size_max='((size_t)~(size_t)0)'
+      fi
+    fi
+  ])
+  AC_MSG_RESULT([$gl_cv_size_max])
+  if test "$gl_cv_size_max" != yes; then
+    AC_DEFINE_UNQUOTED([SIZE_MAX], [$gl_cv_size_max],
+      [Define as the maximum value of type 'size_t', if the system doesn't define it.])
+  fi
+])
+
+dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in.
+dnl Remove this when we can assume autoconf >= 2.61.
+m4_ifdef([AC_COMPUTE_INT], [], [
+  AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])])
+])
diff --git a/m4/stdint_h.m4 b/m4/stdint_h.m4
new file mode 100644
index 0000000..db9a8ac
--- /dev/null
+++ b/m4/stdint_h.m4
@@ -0,0 +1,26 @@
+# stdint_h.m4 serial 6
+dnl Copyright (C) 1997-2004, 2006 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Paul Eggert.
+
+# Define HAVE_STDINT_H_WITH_UINTMAX if <stdint.h> exists,
+# doesn't clash with <sys/types.h>, and declares uintmax_t.
+
+AC_DEFUN([gl_AC_HEADER_STDINT_H],
+[
+  AC_CACHE_CHECK([for stdint.h], gl_cv_header_stdint_h,
+  [AC_TRY_COMPILE(
+    [#include <sys/types.h>
+#include <stdint.h>],
+    [uintmax_t i = (uintmax_t) -1; return !i;],
+    gl_cv_header_stdint_h=yes,
+    gl_cv_header_stdint_h=no)])
+  if test $gl_cv_header_stdint_h = yes; then
+    AC_DEFINE_UNQUOTED(HAVE_STDINT_H_WITH_UINTMAX, 1,
+      [Define if <stdint.h> exists, doesn't clash with <sys/types.h>,
+       and declares uintmax_t. ])
+  fi
+])
diff --git a/m4/uintmax_t.m4 b/m4/uintmax_t.m4
new file mode 100644
index 0000000..641c489
--- /dev/null
+++ b/m4/uintmax_t.m4
@@ -0,0 +1,30 @@
+# uintmax_t.m4 serial 10
+dnl Copyright (C) 1997-2004, 2007 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Paul Eggert.
+
+AC_PREREQ(2.13)
+
+# Define uintmax_t to 'unsigned long' or 'unsigned long long'
+# if it is not already defined in <stdint.h> or <inttypes.h>.
+
+AC_DEFUN([gl_AC_TYPE_UINTMAX_T],
+[
+  AC_REQUIRE([gl_AC_HEADER_INTTYPES_H])
+  AC_REQUIRE([gl_AC_HEADER_STDINT_H])
+  if test $gl_cv_header_inttypes_h = no && test $gl_cv_header_stdint_h = no; then
+    AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT])
+    test $ac_cv_type_unsigned_long_long_int = yes \
+      && ac_type='unsigned long long' \
+      || ac_type='unsigned long'
+    AC_DEFINE_UNQUOTED(uintmax_t, $ac_type,
+      [Define to unsigned long or unsigned long long
+       if <stdint.h> and <inttypes.h> don't define.])
+  else
+    AC_DEFINE(HAVE_UINTMAX_T, 1,
+      [Define if you have the 'uintmax_t' type in <stdint.h> or <inttypes.h>.])
+  fi
+])
diff --git a/m4/ulonglong.m4 b/m4/ulonglong.m4
new file mode 100644
index 0000000..c375e47
--- /dev/null
+++ b/m4/ulonglong.m4
@@ -0,0 +1,23 @@
+# ulonglong.m4 serial 2 (fileutils-4.0.32, gettext-0.10.40)
+dnl Copyright (C) 1999-2002 Free Software Foundation, Inc.
+dnl This file is free software, distributed under the terms of the GNU
+dnl General Public License.  As a special exception to the GNU General
+dnl Public License, this file may be distributed as part of a program
+dnl that contains a configuration script generated by Autoconf, under
+dnl the same distribution terms as the rest of that program.
+
+dnl From Paul Eggert.
+
+AC_DEFUN([jm_AC_TYPE_UNSIGNED_LONG_LONG],
+[
+  AC_CACHE_CHECK([for unsigned long long], ac_cv_type_unsigned_long_long,
+  [AC_TRY_LINK([unsigned long long ull = 1; int i = 63;],
+    [unsigned long long ullmax = (unsigned long long) -1;
+     return ull << i | ull >> i | ullmax / ull | ullmax % ull;],
+    ac_cv_type_unsigned_long_long=yes,
+    ac_cv_type_unsigned_long_long=no)])
+  if test $ac_cv_type_unsigned_long_long = yes; then
+    AC_DEFINE(HAVE_UNSIGNED_LONG_LONG, 1,
+      [Define if you have the unsigned long long type.])
+  fi
+])
diff --git a/m4/visibility.m4 b/m4/visibility.m4
new file mode 100644
index 0000000..2ff6330
--- /dev/null
+++ b/m4/visibility.m4
@@ -0,0 +1,52 @@
+# visibility.m4 serial 1 (gettext-0.15)
+dnl Copyright (C) 2005 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+dnl Tests whether the compiler supports the command-line option
+dnl -fvisibility=hidden and the function and variable attributes
+dnl __attribute__((__visibility__("hidden"))) and
+dnl __attribute__((__visibility__("default"))).
+dnl Does *not* test for __visibility__("protected") - which has tricky
+dnl semantics (see the 'vismain' test in glibc) and does not exist e.g. on
+dnl MacOS X.
+dnl Does *not* test for __visibility__("internal") - which has processor
+dnl dependent semantics.
+dnl Does *not* test for #pragma GCC visibility push(hidden) - which is
+dnl "really only recommended for legacy code".
+dnl Set the variable CFLAG_VISIBILITY.
+dnl Defines and sets the variable HAVE_VISIBILITY.
+
+AC_DEFUN([gl_VISIBILITY],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  CFLAG_VISIBILITY=
+  HAVE_VISIBILITY=0
+  if test -n "$GCC"; then
+    AC_MSG_CHECKING([for simple visibility declarations])
+    AC_CACHE_VAL(gl_cv_cc_visibility, [
+      gl_save_CFLAGS="$CFLAGS"
+      CFLAGS="$CFLAGS -fvisibility=hidden"
+      AC_TRY_COMPILE(
+        [extern __attribute__((__visibility__("hidden"))) int hiddenvar;
+         extern __attribute__((__visibility__("default"))) int exportedvar;
+         extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void);
+         extern __attribute__((__visibility__("default"))) int exportedfunc (void);],
+        [],
+        gl_cv_cc_visibility=yes,
+        gl_cv_cc_visibility=no)
+      CFLAGS="$gl_save_CFLAGS"])
+    AC_MSG_RESULT([$gl_cv_cc_visibility])
+    if test $gl_cv_cc_visibility = yes; then
+      CFLAG_VISIBILITY="-fvisibility=hidden"
+      HAVE_VISIBILITY=1
+    fi
+  fi
+  AC_SUBST([CFLAG_VISIBILITY])
+  AC_SUBST([HAVE_VISIBILITY])
+  AC_DEFINE_UNQUOTED([HAVE_VISIBILITY], [$HAVE_VISIBILITY],
+    [Define to 1 or 0, depending whether the compiler supports simple visibility declarations.])
+])
diff --git a/m4/wchar_t.m4 b/m4/wchar_t.m4
new file mode 100644
index 0000000..cde2129
--- /dev/null
+++ b/m4/wchar_t.m4
@@ -0,0 +1,20 @@
+# wchar_t.m4 serial 1 (gettext-0.12)
+dnl Copyright (C) 2002-2003 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+dnl Test whether <stddef.h> has the 'wchar_t' type.
+dnl Prerequisite: AC_PROG_CC
+
+AC_DEFUN([gt_TYPE_WCHAR_T],
+[
+  AC_CACHE_CHECK([for wchar_t], gt_cv_c_wchar_t,
+    [AC_TRY_COMPILE([#include <stddef.h>
+       wchar_t foo = (wchar_t)'\0';], ,
+       gt_cv_c_wchar_t=yes, gt_cv_c_wchar_t=no)])
+  if test $gt_cv_c_wchar_t = yes; then
+    AC_DEFINE(HAVE_WCHAR_T, 1, [Define if you have the 'wchar_t' type.])
+  fi
+])
diff --git a/m4/wint_t.m4 b/m4/wint_t.m4
new file mode 100644
index 0000000..af5ed93
--- /dev/null
+++ b/m4/wint_t.m4
@@ -0,0 +1,28 @@
+# wint_t.m4 serial 2 (gettext-0.17)
+dnl Copyright (C) 2003, 2007 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+dnl Test whether <wchar.h> has the 'wint_t' type.
+dnl Prerequisite: AC_PROG_CC
+
+AC_DEFUN([gt_TYPE_WINT_T],
+[
+  AC_CACHE_CHECK([for wint_t], gt_cv_c_wint_t,
+    [AC_TRY_COMPILE([
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included
+   before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+       wint_t foo = (wchar_t)'\0';], ,
+       gt_cv_c_wint_t=yes, gt_cv_c_wint_t=no)])
+  if test $gt_cv_c_wint_t = yes; then
+    AC_DEFINE(HAVE_WINT_T, 1, [Define if you have the 'wint_t' type.])
+  fi
+])
diff --git a/m4/xsize.m4 b/m4/xsize.m4
new file mode 100644
index 0000000..85bb721
--- /dev/null
+++ b/m4/xsize.m4
@@ -0,0 +1,13 @@
+# xsize.m4 serial 3
+dnl Copyright (C) 2003-2004 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_XSIZE],
+[
+  dnl Prerequisites of lib/xsize.h.
+  AC_REQUIRE([gl_SIZE_MAX])
+  AC_REQUIRE([AC_C_INLINE])
+  AC_CHECK_HEADERS(stdint.h)
+])
diff --git a/missing b/missing
new file mode 100755
index 0000000..fc54c64
--- /dev/null
+++ b/missing
@@ -0,0 +1,336 @@
+#! /bin/sh
+# Common stub for a few missing GNU programs while installing.
+# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003 Free Software Foundation, Inc.
+# Originally by Fran,cois Pinard <pinard at iro.umontreal.ca>, 1996.
+
+# 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, 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., 59 Temple Place - Suite 330, Boston, MA
+# 02111-1307, USA.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+if test $# -eq 0; then
+  echo 1>&2 "Try \`$0 --help' for more information"
+  exit 1
+fi
+
+run=:
+
+# In the cases where this matters, `missing' is being run in the
+# srcdir already.
+if test -f configure.ac; then
+  configure_ac=configure.ac
+else
+  configure_ac=configure.in
+fi
+
+case "$1" in
+--run)
+  # Try to run requested program, and just exit if it succeeds.
+  run=
+  shift
+  "$@" && exit 0
+  ;;
+esac
+
+# If it does not exist, or fails to run (possibly an outdated version),
+# try to emulate it.
+case "$1" in
+
+  -h|--h|--he|--hel|--help)
+    echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
+error status if there is no known handling for PROGRAM.
+
+Options:
+  -h, --help      display this help and exit
+  -v, --version   output version information and exit
+  --run           try to run the given command, and emulate it if it fails
+
+Supported PROGRAM values:
+  aclocal      touch file \`aclocal.m4'
+  autoconf     touch file \`configure'
+  autoheader   touch file \`config.h.in'
+  automake     touch all \`Makefile.in' files
+  bison        create \`y.tab.[ch]', if possible, from existing .[ch]
+  flex         create \`lex.yy.c', if possible, from existing .c
+  help2man     touch the output file
+  lex          create \`lex.yy.c', if possible, from existing .c
+  makeinfo     touch the output file
+  tar          try tar, gnutar, gtar, then tar without non-portable flags
+  yacc         create \`y.tab.[ch]', if possible, from existing .[ch]"
+    ;;
+
+  -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+    echo "missing 0.4 - GNU automake"
+    ;;
+
+  -*)
+    echo 1>&2 "$0: Unknown \`$1' option"
+    echo 1>&2 "Try \`$0 --help' for more information"
+    exit 1
+    ;;
+
+  aclocal*)
+    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+       # We have it, but it failed.
+       exit 1
+    fi
+
+    echo 1>&2 "\
+WARNING: \`$1' is missing on your system.  You should only need it if
+         you modified \`acinclude.m4' or \`${configure_ac}'.  You might want
+         to install the \`Automake' and \`Perl' packages.  Grab them from
+         any GNU archive site."
+    touch aclocal.m4
+    ;;
+
+  autoconf)
+    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+       # We have it, but it failed.
+       exit 1
+    fi
+
+    echo 1>&2 "\
+WARNING: \`$1' is missing on your system.  You should only need it if
+         you modified \`${configure_ac}'.  You might want to install the
+         \`Autoconf' and \`GNU m4' packages.  Grab them from any GNU
+         archive site."
+    touch configure
+    ;;
+
+  autoheader)
+    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+       # We have it, but it failed.
+       exit 1
+    fi
+
+    echo 1>&2 "\
+WARNING: \`$1' is missing on your system.  You should only need it if
+         you modified \`acconfig.h' or \`${configure_ac}'.  You might want
+         to install the \`Autoconf' and \`GNU m4' packages.  Grab them
+         from any GNU archive site."
+    files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
+    test -z "$files" && files="config.h"
+    touch_files=
+    for f in $files; do
+      case "$f" in
+      *:*) touch_files="$touch_files "`echo "$f" |
+				       sed -e 's/^[^:]*://' -e 's/:.*//'`;;
+      *) touch_files="$touch_files $f.in";;
+      esac
+    done
+    touch $touch_files
+    ;;
+
+  automake*)
+    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+       # We have it, but it failed.
+       exit 1
+    fi
+
+    echo 1>&2 "\
+WARNING: \`$1' is missing on your system.  You should only need it if
+         you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
+         You might want to install the \`Automake' and \`Perl' packages.
+         Grab them from any GNU archive site."
+    find . -type f -name Makefile.am -print |
+	   sed 's/\.am$/.in/' |
+	   while read f; do touch "$f"; done
+    ;;
+
+  autom4te)
+    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+       # We have it, but it failed.
+       exit 1
+    fi
+
+    echo 1>&2 "\
+WARNING: \`$1' is needed, and you do not seem to have it handy on your
+         system.  You might have modified some files without having the
+         proper tools for further handling them.
+         You can get \`$1' as part of \`Autoconf' from any GNU
+         archive site."
+
+    file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'`
+    test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'`
+    if test -f "$file"; then
+	touch $file
+    else
+	test -z "$file" || exec >$file
+	echo "#! /bin/sh"
+	echo "# Created by GNU Automake missing as a replacement of"
+	echo "#  $ $@"
+	echo "exit 0"
+	chmod +x $file
+	exit 1
+    fi
+    ;;
+
+  bison|yacc)
+    echo 1>&2 "\
+WARNING: \`$1' is missing on your system.  You should only need it if
+         you modified a \`.y' file.  You may need the \`Bison' package
+         in order for those modifications to take effect.  You can get
+         \`Bison' from any GNU archive site."
+    rm -f y.tab.c y.tab.h
+    if [ $# -ne 1 ]; then
+        eval LASTARG="\${$#}"
+	case "$LASTARG" in
+	*.y)
+	    SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
+	    if [ -f "$SRCFILE" ]; then
+	         cp "$SRCFILE" y.tab.c
+	    fi
+	    SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
+	    if [ -f "$SRCFILE" ]; then
+	         cp "$SRCFILE" y.tab.h
+	    fi
+	  ;;
+	esac
+    fi
+    if [ ! -f y.tab.h ]; then
+	echo >y.tab.h
+    fi
+    if [ ! -f y.tab.c ]; then
+	echo 'main() { return 0; }' >y.tab.c
+    fi
+    ;;
+
+  lex|flex)
+    echo 1>&2 "\
+WARNING: \`$1' is missing on your system.  You should only need it if
+         you modified a \`.l' file.  You may need the \`Flex' package
+         in order for those modifications to take effect.  You can get
+         \`Flex' from any GNU archive site."
+    rm -f lex.yy.c
+    if [ $# -ne 1 ]; then
+        eval LASTARG="\${$#}"
+	case "$LASTARG" in
+	*.l)
+	    SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
+	    if [ -f "$SRCFILE" ]; then
+	         cp "$SRCFILE" lex.yy.c
+	    fi
+	  ;;
+	esac
+    fi
+    if [ ! -f lex.yy.c ]; then
+	echo 'main() { return 0; }' >lex.yy.c
+    fi
+    ;;
+
+  help2man)
+    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
+       # We have it, but it failed.
+       exit 1
+    fi
+
+    echo 1>&2 "\
+WARNING: \`$1' is missing on your system.  You should only need it if
+	 you modified a dependency of a manual page.  You may need the
+	 \`Help2man' package in order for those modifications to take
+	 effect.  You can get \`Help2man' from any GNU archive site."
+
+    file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
+    if test -z "$file"; then
+	file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'`
+    fi
+    if [ -f "$file" ]; then
+	touch $file
+    else
+	test -z "$file" || exec >$file
+	echo ".ab help2man is required to generate this page"
+	exit 1
+    fi
+    ;;
+
+  makeinfo)
+    if test -z "$run" && (makeinfo --version) > /dev/null 2>&1; then
+       # We have makeinfo, but it failed.
+       exit 1
+    fi
+
+    echo 1>&2 "\
+WARNING: \`$1' is missing on your system.  You should only need it if
+         you modified a \`.texi' or \`.texinfo' file, or any other file
+         indirectly affecting the aspect of the manual.  The spurious
+         call might also be the consequence of using a buggy \`make' (AIX,
+         DU, IRIX).  You might want to install the \`Texinfo' package or
+         the \`GNU make' package.  Grab either from any GNU archive site."
+    file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
+    if test -z "$file"; then
+      file=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
+      file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $file`
+    fi
+    touch $file
+    ;;
+
+  tar)
+    shift
+    if test -n "$run"; then
+      echo 1>&2 "ERROR: \`tar' requires --run"
+      exit 1
+    fi
+
+    # We have already tried tar in the generic part.
+    # Look for gnutar/gtar before invocation to avoid ugly error
+    # messages.
+    if (gnutar --version > /dev/null 2>&1); then
+       gnutar "$@" && exit 0
+    fi
+    if (gtar --version > /dev/null 2>&1); then
+       gtar "$@" && exit 0
+    fi
+    firstarg="$1"
+    if shift; then
+	case "$firstarg" in
+	*o*)
+	    firstarg=`echo "$firstarg" | sed s/o//`
+	    tar "$firstarg" "$@" && exit 0
+	    ;;
+	esac
+	case "$firstarg" in
+	*h*)
+	    firstarg=`echo "$firstarg" | sed s/h//`
+	    tar "$firstarg" "$@" && exit 0
+	    ;;
+	esac
+    fi
+
+    echo 1>&2 "\
+WARNING: I can't seem to be able to run \`tar' with the given arguments.
+         You may want to install GNU tar or Free paxutils, or check the
+         command line arguments."
+    exit 1
+    ;;
+
+  *)
+    echo 1>&2 "\
+WARNING: \`$1' is needed, and you do not seem to have it handy on your
+         system.  You might have modified some files without having the
+         proper tools for further handling them.  Check the \`README' file,
+         it often tells you about the needed prerequisites for installing
+         this package.  You may also peek at any GNU archive site, in case
+         some other package would contain this missing \`$1' program."
+    exit 1
+    ;;
+esac
+
+exit 0
diff --git a/options b/options
new file mode 100644
index 0000000..5ee55ae
--- /dev/null
+++ b/options
@@ -0,0 +1,530 @@
+### -*- mode: wmccoptions -*-
+###fichier d'options rcsid=$Id: options,v 1.66 2005/06/11 22:47:39 pouaite Exp $
+
+###vous pouvez decommenter des options et changer leur valeurs
+
+### A LIRE AVANT D'EDITER:
+### il y a trois type d'options:
+### * les options globales qui commence par une lettre, celles-ci affectent wmcoincoin dans 
+### son ensemble.
+### * les options de site, qui commencent par un point. Celles-ci n'affectent que le site en 
+### cours de definition.
+### * les options de site dont on peut definir la valeur par defaut (indiquee ici par '[.]nom_option')
+### si celles-ci sont utilisees sans point, elle affecteront tous les sites declares par la suite
+### (en gros elles definissent une valeur par defaut). Si elle sont utilisees avec le point, alors
+### elle agissent sur le site en cours de definition.
+
+
+### definition d'un nouveau site (le premier mot indique choisit le nom principal du site
+### et les suivants definissent des alias)
+
+### l'option 'site' est marquee obsolete, c'est un alias pour board_site
+#OBSOLETE#site: "dlfp","linuxfr"
+
+### Trois types de site sont disponibles:
+
+### debuter la definition d'une tribune classique
+#board_site: "dlfp", "linuxfr"
+### debuter la definition d'un fil RSS
+#rss_site: "k5"
+### debuter la definition d'un compte mail (pop3)
+#pop_site: "c0in at altern"
+
+### Option obsolete: les cookies doivent desormais etre stockes dans le fichier options.auth
+#OBSOLETE#.http.cookie: session_id=0sDSFdCo1nOF92fPl0p8
+
+### equivalent de l'option '-r' -> url de la page principale
+
+#OBSOLETE#[.]http.site_url: http://linuxfr.org
+#OBSOLETE#[.]http.path_tribune_backend: board/index.xml
+#OBSOLETE#[.]http.path_tribune_add: board
+#OBSOLETE#[.]http.board_post: board[message]=%s
+### les quatre options du dessus sont remplacees par:
+
+### pour essayer de gerer un peu mieux les variations saisonnieres de codage
+### du backend, cette option permet de le preciser 
+### 1 -> backend new style ('<b>' -> '<b>')
+### 2 -> backend old style ('<b>' -> '<b>')
+### 3 -> backend without slip ('<b>' -> ca depend)
+#[.]backend_flavour: 1,2 or 3
+#[.]backend.url: "http://linuxfr.org/board/remote.xml"
+#[.]post.url: "http://linuxfr.org/board/add.php"
+#[.]post.template: message=%s
+
+### pour les RSS dont le champ <description> est rempli de pub
+#[.]rss.ignore_description: off
+
+### active ou desactive une tribune
+#.check_board: on
+
+#[.]http.proxy: proxy:port
+#[.]http.proxy_auth: username:password
+
+### decommenter cette ligne si votre proxy a tendance a cacher comme un salaud
+#[.]http.proxy_use_nocache: on
+
+### decommenter si vous trouvez que ca rame un peu trop, ou bien si vous ne voyez pas
+### apparaitre vos messages dans le pinnipede tout de suite apres avoir poste 
+### (par contre c'est un peu moins gentil avec linuxfr)
+#[.]http.use_if_modified_since: off
+#http.timeout: 40
+
+### mettre ca a 4 pour ne resoudre qu'en addresses ipv4
+### ou a 6 pour n'avoir que de l'ipv6
+### ( 0 => elles sont toutes essayees )
+#http.inet_ip_version: 0
+
+### L'option 'http.browser' permet d'utiliser un navigateur externe, pour
+### lire les commentaires detecte par le flamophone, et pour afficher les [url] du
+### pinnipede teletype.
+
+### ATTENTION, ce genre de commande externe peut etre une source de vulnerabilite,
+### les caracteres bizarres dans les urls sont escapes avant d'etre envoyes
+### au browser externe, mais si le browser est lui-m�me bugge...
+### Par defaut, aucun browser n'est selectionne (ca peut rassurer les plus paranoiaques)
+### Le %s est remplace par l'url escapee, et la ligne de commande resultante est passee au shell
+
+### ATTENTION AUSSI: si vous lancez le browser par l'intermediaire d'un programme
+### du genre "kstart" (pour ouvrir dans un certain desktop sous kde) faites bien
+### attention: kstart interpr�te les caracteres comme un goret il faut donc mettre
+### '%s' a la place de %s
+#http.browser: opera %s &
+#http.browser: galeon -n %s &
+#http.browser: konqueror %s &
+#http.browser: netscape %s &
+#http.browser: mozilla %s &
+#http.browser: mozilla -remote openurl\(%s,new-tab\) &
+
+### nouveau (v2.2beta) -> un deuxieme browser, activable en cliquant avec le bouton
+### du milieu au lieu du bouton de gauche
+#http.browser2: xterm -fn 6x13 -bg white -fg black -geometry 120x80 -e w3m %s &
+
+### pour lancer des recherches sur google (ou autre) d'un clic,
+### faire alt+{left|middle} clic sur un mot/login/texte selectionne
+### le %s est remplace par le(s) mot(s) recherche(s)
+### /!\ par defaut cette option n'est pas activee
+#http.gogole_search_url: http://www.google.fr/search?q=%22%s%22
+#http.wikipedia_search_url: http://en.wikipedia.org/wiki/Special:Search?search=%s
+### par defaut le pinnipede est en helvetica, mais je trouve 'verdana' (en taille 11)
+### bien plus jolie. l'inconvenient, c'est qu'elle est plus lente a afficher...          
+### et qu'elle n'est pas dispo sur toutes les distribs
+pinnipede.font_family: unifont
+pinnipede.font_size: 11
+#[.]pinnipede.bg_color: dae6e6
+
+
+### options de transparence
+
+#pinnipede.start_in_transparency_mode: false
+### pour avoir aussi les fenetre d'arriere plan dans la transparence
+### (remarque: ca suce)
+#pinnipede.use_fake_real_transparency: false
+### transparence, complete, utilisez
+#pinnipede.transparency: full
+### transparence avec shading, (indiquez 2 chiffres croissants entre 0 et 100)
+#pinnipede.transparency: shading 20 70
+### transparence avec teinte, (indiquez la couleur du noir puis celle du blanc)
+#pinnipede.transparency: tinting 404020 e0e090
+
+### la plupart des options de couleur acceptent deux valeurs,
+### qui sont la couleur en mode normal, et la couleur
+### en mode transparent
+#[.]pinnipede.fg_color: 303030 d0d0d0
+#[.]pinnipede.clock_color: 004000 ffff80
+#[.]pinnipede.useragent_color: 800000 a0ffa0
+#[.]pinnipede.login_color: ffff00 c0ffc0
+#[.]pinnipede.url_color: 0000ff 80f0ff
+#[.]pinnipede.visited_url_color: 804080 808080
+#[.]pinnipede.trollscore_color: ff0000 ffff00
+#[.]pinnipede.strike_color: 800000
+#[.]pinnipede.clock_style: 
+#[.]pinnipede.login_style: IB
+#[.]pinnipede.useragent_style: I
+
+#pinnipede.emph_color: ffffff 505050
+#pinnipede.sel_bgcolor: ffd700 008080
+#pinnipede.popup_fgcolor: 000050 000050
+#pinnipede.popup_bgcolor: c0d0d0 c0d0d0
+
+#pinnipede.buttonbar.bgcolor: cdcdcd cdcdcd
+#pinnipede.buttonbar_fgcolor: 000000 000000
+#pinnipede.buttonbar_msgcnt_color: 7070af 7070af
+#pinnipede.buttonbar_updlcnt_color: 7070af 7070af
+#pinnipede.buttonbar_progressbar_color: ff0000 ff0000
+
+#pinnipede.hilight.my_msg_color: f07000 f07000
+#pinnipede.hilight.answer_my_msg_color: e0b080 e0b080
+
+### les couleurs pour les differentes categories de mots clefs
+### (0 -> categorie par defaut (en cliquant sur les mots etc),
+### mais vous pouvez en definir d'autres avec l'option
+### pinnipede.hilight_keywords, voir plus bas
+#pinnipede.hilight.keyword_color0: f00080
+#pinnipede.hilight.keyword_color1: ff8080
+#pinnipede.hilight.keyword_color2: f0ff80
+#pinnipede.hilight.keyword_color3: f000ff
+#pinnipede.hilight.keyword_color4: f08000
+#pinnipede.plopify_color: a0a0a0 a0a0a0
+
+#scrollcoin.bg_color:               cdcdcd cdcdcd
+#scrollcoin.bg_light_color:         ffffff ffffff
+#scrollcoin.bg_dark_color:          626262 626262
+#scrollcoin.arrow_normal_color:     0000ff 00ff00
+#scrollcoin.arrow_emphasized_color: 9c99cd 99cd99
+#scrollcoin.bar_color:              9c99cd 99cd99
+#scrollcoin.bar_light_color:        cdceff ceffce
+#scrollcoin.bar_dark_color:         62659c 649c64
+
+### location du pinnipede (sous la forme 'xpos:ypos' )
+#pinnipede.location: 128:64
+### dimension du pinnipede, au format largeur:hauteur
+#pinnipede.dimensions: 300:455
+#pinnipede.buttons: off
+
+### les 5 options suivantes correspondent aux boutons
+### du pinnipede
+#pinnipede.show_tags: on
+#pinnipede.show_seconds: on
+
+### nick_mode-> 0: n'affiche rien, 
+###		1: affiche les useragent raccourcis, 
+###     	2: affiche les logins, 
+###		3: affiche les deux, 
+###		4: affiche useragent ou login
+#pinnipede.nick_mode: 4
+#pinnipede.show_troll_score: on
+
+### pour retrouver un comportement 'classique' des tabs
+#pinnipede.use_classical_tabs: on
+
+### pour que les tabs aient la couleur de fond de leur tribune
+#pinnipede.use_colored_tabs: on
+
+### 1 -> tabs en bas, 2 -> tabs a gauche
+#pinnipede.tabs.position: 1
+
+### liste des elements declenchant la plopification (en plus de ceux
+### que vous pouvez ajouter en faisant shift+right clic dans le pinni)
+### la syntaxe est [LOGIN:|UA:|UA_NOLOGIN:|WORD:][numero de categorie:]"la phrase clef"
+### remarque: le niveau 0 correspond a une plopification normale, le
+### niveau 1 a un superplopification (le message est remplace par 'plop'
+### et le niveau 2 correspond a une Boitakon, les messages du malotru
+### deviennent invisibles
+### le niveau 3 est le niveau ultime de boitakonnage: la boitakon est contagieuse
+### et toutes le thread repondant sera boitakonne
+### remarque: pour l'ua et le login, il faut indiquer l'ua (/le login) complete.
+#pinnipede.plop_keywords: LOGIN:2:"gros boulet",  \
+#                        "communiste", "fasciste" # etc selon le troll saoulant du moment ;)
+
+### liste des element declenchant l'affichage des crochets colores
+### (en dehors de ceux que vous activez en faisant shift+left clic sur un mot/ua/etc)
+### on peut voir ca comme un bigornophone silencieux
+### le numero de categorie determine la couleur du crochet (definie dans
+### l'option pinnipede.hilight.keyword_color0/1/2/3/4)
+#pinnipede.hilight_keywords: LOGIN:1:"penso", \
+#                            UA:2:"poolpy", \ # ecoutez ce que dit poolpy !
+#                            3:"communiste", 3:"fasciste" # si vous aimez les trolls epais
+
+### liste des mots de substitution pour la plopification
+#pinnipede.plop_words: "plop","grouik","prout"
+
+### active ou vire la ligne rouge en pointilles
+#[.]pinnipede.mark_id_gaps: off
+
+### le style de la boitakon
+### off->normal, on->hungry (si le message repond a la boitakon et a un autre message, il passe dans la boite)
+#pinnipede.hungry_boitakon: 1
+
+### listes des remplacements de <b>[url]</b> pour les sites connus
+pinnipede.url_replace: "google." => "[google]"
+pinnipede.url_replace: "yahoo" => "[yahoo]"
+pinnipede.url_replace: "lemonde.fr" => "[lemonde]"
+pinnipede.url_replace: "liberation.fr" => "[libe]"
+pinnipede.url_replace: "journaldunet" => "[jdn]"
+pinnipede.url_replace: "01net.com" => "[01net]"
+pinnipede.url_replace: "forum.hardware" => "[hfr]"
+pinnipede.url_replace: "linuxfr.org/" => "[dlfp]"
+pinnipede.url_replace: "goatse" => "[pas cliquer!]"
+pinnipede.url_replace: "goat.cx" => "[pas cliquer!]"
+pinnipede.url_replace: "minilien" => "[minilien]"
+pinnipede.url_replace: "britney" => "[britney]"
+pinnipede.url_replace: "http://wiki.woof.lu/index.php?url" => "[url]"
+pinnipede.url_replace: "wiki" => "[wiki]"
+pinnipede.url_replace: "wickedweasel" => "[WW]"
+pinnipede.url_replace: "teen" => "[ducul]"
+pinnipede.url_replace: "horse" => "[ducheval]"
+pinnipede.url_replace: "stileproject" => "[stileproject]"
+pinnipede.url_replace: "slashdot.org" => "[/.]"
+pinnipede.url_replace: "kde" => "[kde]"
+pinnipede.url_replace: "gnome" => "[gnome]"
+pinnipede.url_replace: "xfree86" => "[xf86]"
+pinnipede.url_replace: "somethingawful.com" => "[SA]"
+pinnipede.url_replace: "osnews" => "[osnews]"
+pinnipede.url_replace: "zdnet" => "[zdnet]"
+pinnipede.url_replace: "kuro5hin" => "[K5]"
+pinnipede.url_replace: "freshmeat" => "[FM]"
+pinnipede.url_replace: "securityfocus.com" => "[securityfocus]"
+pinnipede.url_replace: "debian" => "[debian]"
+pinnipede.url_replace: "mandrake" => "[mdk]"
+pinnipede.url_replace: "redhat" => "[rh]"
+pinnipede.url_replace: "rpmfind" => "[rpmfind]"
+pinnipede.url_replace: "gentoo" => "[gentoo]"
+pinnipede.url_replace: "microsoft" => "[MS]"
+pinnipede.url_replace: "wmcoincoin" => "[wmcc]"
+pinnipede.url_replace: "pycoincoin" => "[pycc]"
+pinnipede.url_replace: ".jpg" => "[img]"
+pinnipede.url_replace: ".jpeg" => "[img]"
+pinnipede.url_replace: ".png" => "[img]"
+pinnipede.url_replace: ".gif" => "[LeGIFsaiMAL]"
+pinnipede.url_replace: ".swf" => "[flash]"
+pinnipede.url_replace: ".tar.gz" => "[tgz]"
+pinnipede.url_replace: ".tgz" => "[tgz]"
+pinnipede.url_replace: ".rpm" => "[rpm]"
+pinnipede.url_replace: ".deb" => "[deb]"
+pinnipede.url_replace: ".mp3" => "[mp3]"
+pinnipede.url_replace: ".ogg" => "[ogg]"
+pinnipede.url_replace: ".pdf" => "[pdf]"
+pinnipede.url_replace: "ftp://" => "[ftp]"
+pinnipede.url_replace: "dtc" => "[dtc]"
+pinnipede.url_replace: "free.fr" => "[free]"
+pinnipede.url_replace: "dyndns.org" => "[dyndns]"
+
+
+### pour reconnaitre les horloges hh:mm:ssAM/PM du dacode anglais
+#[.]pinnipede.use_AM_PM: off
+
+### ouvre le pinnipede des le lancement du coincoin
+#pinnipede.auto_open: off
+
+
+### cette option remplace l'ancien fichier useragents
+### elle est mieux(c)(tm)
+### les regles sont testees dans l'ordre.
+### on peut matcher 
+###   'ua:' , 'site:', 'login:'
+### et remplacer (apres le '=>')
+###   'ua:' , 'symb:', 'color:'
+### symb et color n'affectent que le trolloscope
+### pour les ua, il s'agit des regex posix en mode etendu (cf man regex)
+### et le remplacement des ua peut faire intervenir des \1, \2 etc (regarder
+### par exemple la regle pour internet explorer)
+### Il faut bien faire la distinction entre 
+###    symb="dtri"  (fixe le symbole sauf si il est prefixe par une regle suivante) 
+### et symb:="dtri" (fixe le symbole definitivement, m�me si une regle suivante 
+###                  aurait pu le rechanger)
+### (new in 2.5.x) : si aucune regle n'est matchee, les symbole/couleur sont
+### choisis en fonction du nom du site/des ua etc pour avoir qd meme
+### quelque chose d'un peu chattoyant
+board.miniua_rule:   site:"dlfp" => symb="dtri", color="#ff8000"
+board.miniua_rule:   site:"woof" => symb="square", color="#ffff00"
+board.miniua_rule:   site:"glandium" => symb="rutri", color="#0000ff" 
+board.miniua_rule:  login:"kadreg" => color="#80ff00"
+
+board.miniua_rule:  ua:".*[Bb][Oo][Tt].*"  => ua:="un bot!",symb:="circ",color:="#ffffff"
+board.miniua_rule:  ua:".*[Dd][Aa][Ee].*"  => ua:="dae",symb:="cross",color:="#00ff00"
+### pour faire plaisir a jr :�)
+board.miniua_rule:  ua:"^jr-lamoule$"  => ua:="JR",symb:="cross",color:="#00ff80"
+
+
+board.miniua_rule: ua:"^RFC 2549" => ua:="zorel"
+board.miniua_rule: ua:"^MOT-TA02/06.03.1FR MIB/1.2.1$" => ua:="zorel"
+board.miniua_rule: ua:"^wm[Cc]\w*[/ ]?([0-9]\.[0-9.]+\w*) \(palmipede; Linux ([0-9]\.[0-9.]+)mh[0-9]? i686\)$" => ua:="glandium"
+board.miniua_rule: ua:"Vaio-powered" => ua:="glandium"
+board.miniua_rule: ua:"^wm[Cc]\w*[/ ]?([0-9]\.[0-9.]+\w*) - olo" => ua:="olo"
+
+
+board.miniua_rule: ua:"Mozilla/4.73 \(compatible; MSIE 5.0; BeOS R5.0.4;I\) Opera 3.6" => ua:="mmu"
+
+board.miniua_rule: ua:"py[Cc]\w*[/ ]?([0-9]\.[0-9.]+\w*)" => ua="pycc/\1", color:="#ff8000"
+board.miniua_rule: ua:"wm[Cc]\w*[/ ]?([0-9]\.[0-9.]+\w*)" => ua="wmcc/\1", color:="#80ff00"
+board.miniua_rule: ua:"coincoin.net ([0-9.]+)" => ua="cc.net/\1"
+
+### Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.1b) Gecko/20020
+board.miniua_rule:  ua:"Mozilla/5.0.* Linux ([^;]+).*; rv:([[:alnum:].]+)\)" => ua:="Moz\2/Lnx\1"
+
+### Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.1b) Gec
+board.miniua_rule:  ua:"Mozilla/5.0.*; Windows ([^;]+).*; rv:([0-9.]+)" => ua:="Moz\2/Win\1"
+
+### Mozilla/5.0 Galeon/1.2.5 (X11; Linux ppc; U;) Gecko/0
+### Mozilla/5.0 Galeon/1.2.5 (X11; Linux i686; U;) Gecko/20020610 Debian/1.2.5-1 [ IPv4 ]
+board.miniua_rule:  ua:"Mozilla/5.0 Galeon/([0-9.]+).*Linux ([^;]+)" => ua:="Galeon\1/\2"
+### Mozilla/5.0 (Macintosh; U; PPC Mac OS X; en-US; rv:1.0.1) Ge
+board.miniua_rule: ua:"Mozilla/5.0.*; .*OS X.*rv:([0-9.]+)" => ua:="Moz\1/OSX"
+
+###Mozilla/4.0 (compatible; MSIE 5.0; Windows XP) Opera 6.02  
+board.miniua_rule:  ua:"Mozilla/4.0.*Windows ([[:alnum:]]*).*Opera ([0-9.]+)" => ua:="Opera\2/Win\1"
+
+###Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)
+board.miniua_rule:  ua:"Mozilla/4.0 \(compatible; MSIE ([0-9.]+).*NT ([0-9.]+)" => ua:="IE\1/NT\2"
+
+### Mozilla/4.7 [fr] (WinNT; I)
+board.miniua_rule: ua:"Mozilla/([0-9.]+)+.*\(([^;]+); [UI]\)" => ua:="NS\1/\2"
+board.miniua_rule: ua:".*Win.*" => color:="#0080ff"
+board.miniua_rule: ua:".*Linux.*" => color:="#80ff80"
+
+### Options relatives au spell checker
+### Active/desactive le spellchecker
+#spell.enable: True
+### spell checker compatible ispell (ispell, aspell, ...)
+#spell.cmd: ispell
+### Dictionnaire associe (french, english ....)
+#spell.dict: french
+
+### indiquez la locale du dacode ("fr" si il vous cause en francais, "en" si il
+### cause en anglais etc.. 
+#[.]locale: fr
+
+### mettre iso8859-15 pour avoir le support de l'euro (il faut avoir installe ces fontes !)
+#font.encoding: iso8859-1
+
+### delai enntre deux verifications de la tribune (en secondes)
+#[.]tribune.delay: 30
+
+### en cas d'inactivite prolongee, le coincoin va augmenter le delai entre deux mises a jour
+### de la tribune et des news (au bout de 5min il le double, apres 20min il est multiplie par 10, et
+### par 40 apres 1h30 d'inactivite)
+### l'option 'tribunenews.max_refresh_delay' permet d'imposer un delai max entre deux mis a jour, en minutes
+### (par defaut 30 minutes au max), une valeur de 0 desactive completement le ralentissement des refresh
+### en fonction de l'activite
+#tribunenews.max_refresh_delay: 30
+
+### l'option 'tribunenews.switch_off_coincoin_delay' permet de fixer le delai d'inactivite au bout duquel 
+### le coincoin passe automatiquement en mode horloge et cesse toute activite (plus de refresh etc..)
+### (par defaut, 1440 minutes = 1 jour, une valeur de 0 desactive cette fonctionnalite)
+#tribunenews.switch_off_coincoin_delay: 1440
+
+### permet de desactiver l'auto-refresh sur la tribune (genre pour limiter le nb de hits
+### sur le proxy de la boite quand on a 15 tribunes dans le coincoin)
+### options OBSOLETE (gere directement par le pinni)
+#OBSOLETE#[.]board.auto_refresh: on
+
+### active la reconnaissance auto des mots du style [:totoz]
+### pour afficher l'image correspondante trouvee dans les smileys de totoz.eu
+### le d/l d'une image est assure par wmcc-totoz-get
+### l'affichage par wmcoincoin_player
+#board.enable_hfr_pictures: on
+
+### active le d/l automatique des images inconnues. Attention c'est potentiellement 
+### dangeureux (un script execute automatiquement, des bugs possibles, un maichant 
+### qui rode et paf)
+#board.auto_dl_pictures: on
+
+
+#balltrap.enable: off
+#balltrap.max_ducks: 12
+
+### on peut aussi desactiver le balltrap pour certains sites
+#.balltrap.enable: on
+
+### nombre maximum de messages qui sont conserves en memoire (et affichables dans le pinnipede
+### teletype). Ne lui donnez pas une valeur extravagante (genre 10000), wmcoincoin n'a pas ete concu pour ca !
+#[.]tribune.max_messages: 400
+
+#tribune.troll_detector: off
+
+### commande externe executee pour chaque nouveau message
+### les argument sont soigneusement quotes avant de passer la commande a executer au shell
+### neanmoins il faut rester conscient QUE C'EST DANGEREUX.
+###  $l -> login
+###  $m -> message
+###  $u -> useragent
+###  $i -> #id du message
+###  $t -> timestamp
+###  $s -> troll_score
+###  $r -> obsolete message type (do not use)
+###  $R -> message type ( bit 0: message posted by you, bit 1: answer to one of your messages, bit 2: message selected by a keyword, bit 3: plopified/boitakoned message)
+###  $v -> wmcc version
+###  $h -> remote host
+### for example, to hear a duck sound each time you get an answer:
+#tribune.post_cmd: (if [ $(($R & 2)) -ne 0 ]; then echo $l msg=$m; play ~/coin.wav & fi)
+#tribune.post_cmd_enabled: on
+#tribune.post_cmd2:
+#tribune.post_cmd2_enabled: on
+
+### nom du fichier dans lequel sont sauves les scrinechotes de la tribune
+#tribune.archive: ~/wmcc_tribune_shot.html
+
+#[.]tribune.wiki_emulation: http://wiki.woof.lu/index.php?
+
+### les couleurs sont en hexadecimal ( '00000' = noir, 'ff0000' = rouge, '00ff00' = vert ...)
+
+#dock.bg_color: ffb12b
+#dock.bg_pixmap: /chemin/vers/un/fichier.xpm (de dimensions 64x64)
+#dock.skin_pixmap: /chemin/vers/un/fichier.xpm, du m�me format que 'coin.xpm'
+### couleur du texte defilant
+#dock.fg_color: 000000
+
+### jouer sur les deux options suivantes pour faire fonctionner wmcoincoin avec d'autres
+### windowmanagers que WindowMaker (par exemple, sous kwm/KDE, il faut 'dock.iconwin: False')
+### (en ligne de commande, ce sont les options '-B' et -w')
+#dock.draw_border: False
+#dock.iconwin: True
+### une alternative est d'activer l'autoswallow, dans le cas l'applet est 
+### directement embarquee dans le pinnipede
+#dock.auto_swallow: False
+
+### il est possible de desactiver l'antialiasing pour toutes les fontes utilisees par wmcc
+### a utiliser si l'aa rame trop..
+#dock.disable_xft_antialiasing: True
+
+### les versions < 2.4.6 avaient cette option a true -- dans ce cas, le palmipede
+### gere le focus lui-meme (pas toujours bien)
+#palmipede.override_wmanager: False
+
+### changement de site actif avec la roulette dans le palmi
+#palmipede.enable_scroll_wheel_for_boulets: False
+
+### ces petits ballons d'aide peuvent �tre casse-couilles
+#dock.use_balloons: True
+
+### la fonte des ballons d'aide et des messages
+#dock.balloons.font_family: helvetica
+#dock.balloons.font_size: 10
+
+### quand draw_border est activee, cette option permet de position la fenetre (format 'xpos:ypos')
+### (equivalent de l'option '-x'
+#dock.pos: 0:400
+
+### pour demarrer le coincoin en mode horloge
+#dock.start_in_boss_mode: on
+
+### niveau de verbosite a partir duquel le coincoin r�le
+#verbosity.underpants: 0
+#verbosity.http: 1
+
+### ce nom apparaitra au debut de tous vos posts
+#[.]palmipede.username: plop
+
+### specifier le userlogin permet de mieux reconnaitre vos posts (si vous avez l'habitude 
+### de poster en authentifie (sinon la reconnaissance est moins fiable)
+#[.]palmipede.userlogin: C0mPuT0r
+
+### si il y a une occurenre de '$u', '$v', '$s', '$r' et/ou '$m', elles seront
+###  remplaces par les valeurs suivantes:
+###  $u -> votre username (indique dans l'option 'palmipede.username')
+###  $v -> version du canard
+###  $s -> system name (Linux, ...)
+###  $r -> system release
+###  $m -> machine (i686,...)
+#[.]palmipede.useragent: my name is $u and i love you
+#palmipede.default_message: je ne suis pas du tout d'accord avec toi
+
+### longueurs maximales des messages et du useragent
+### (ces longueurs sont fixees par le site -- elles peuvent varier)
+#[.]palmipede.msg_max_length: 255
+#[.]palmipede.useragent_max_length: 60
+
+### various deprecated options
+#OBSOLETE#news.font_family:
+#OBSOLETE#news.font_size:
+#OBSOLETE#[.]check_news:
+#OBSOLETE#[.]check_comments:
+#OBSOLETE#[.]news.delay:
+#OBSOLETE#[.]http.path_end_news_url:
+#OBSOLETE#[.]tribune.backend_type: 
+#OBSOLETE#[.]backend_type: 
+#OBSOLETE#[.]http.path_myposts:
+#OBSOLETE#pinnipede.fortune_font_size:
+#OBSOLETE#pinnipede.show_fortune:
+#OBSOLETE#[.]http.path_news_backend:
+#OBSOLETE#[.]news.max_age:
diff --git a/pixmaps/cbronson.jpg b/pixmaps/cbronson.jpg
new file mode 100644
index 0000000..e3e9787
Binary files /dev/null and b/pixmaps/cbronson.jpg differ
diff --git a/pixmaps/logo.xpm b/pixmaps/logo.xpm
new file mode 100644
index 0000000..e81e544
--- /dev/null
+++ b/pixmaps/logo.xpm
@@ -0,0 +1,427 @@
+/* XPM */
+static char * logo_xpm[] = {
+"50 410 14 1",
+" 	c None",
+".	c #91B7A4",
+"+	c #BA5D49",
+"@	c #C6432F",
+"#	c #C0503C",
+"$	c #97AA97",
+"%	c #A3907D",
+"&	c #A88470",
+"*	c #B46A56",
+"=	c #AE7763",
+"-	c #9D9E8A",
+";	c #C5432F",
+">	c #B46A57",
+",	c #A2907D",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..........+@#$$#@+$.....%@@&.*@#%.+@#$............",
+".........%@@@*=@@@&.....@@@@.@@@#%@@@*............",
+".........%@@@*=@@@=.....@@@@-@@@@%@@@*............",
+"..........+@@%$#@#-.....%@@*.*@@=.*@@%............",
+".......-............$-..................%.........",
+"......#@%..........%@@#...............-@@#$.......",
+".....-@@#..........*@@@%..............=@@@=.......",
+".....$@@#..........*@@@%..............&@@@=.......",
+"......%@%..........$+@*................*@+$.......",
+"......$%............%%$................-%-........",
+"......#@=..........=@@#$..............-@@@-.......",
+".....-@@@..........*@@@%..............=@@@*.......",
+"......@@#..........=@@@-..............%@@@&.......",
+"......%*-..........$=*=................=*=$.......",
+"......-*$..........$=*-................&*&........",
+"......@@+..........=@@@$..............%@@@%.......",
+".....%@@@..........*@@@%..............*@@@*.......",
+"......#@+..........=@@@-..............-@@@&.......",
+"......$=$...........&*-................-*&........",
+"..........=*=$....................=*=$............",
+".........%@@;=...................-@@@=............",
+".........%@@@*...................%@@@*............",
+".........$#@@=...................$#@@=............",
+"..........$%-.....................$%%.............",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"...........-....$.............$$...-..............",
+"..........#@@%$#@@-..........*@@=.+@@%............",
+".........%@@@*=@@@=.........$@@@@%@@@*............",
+".........%@@@*=@@@&..........@@@#%@@@*............",
+"..........+@#$$#@+$..........=@#%.+@#$............",
+".......%..$%-..$%-............%%..$%-..-%$........",
+"......#@=$#@@&-@@@-..........+@@*$#@@=-@@@-.......",
+".....-@@@%@@@**@@@=.........$@@@@%@@@*=@@@*.......",
+"......@@+%@@@==@@@%..........@@@#-@@@*%@@@=.......",
+"......%*$.=*=$$**=...........%**$.=**$.=**$.......",
+"......$=$.-*&.....................-=&..%*-........",
+"......#@+$@@@=...................$@@@=%@@@-.......",
+".....-@@@%@@@*...................%@@@**@;;>.......",
+"......@@+-@@@=...................-@@@=-;;;&.......",
+"......-*$.%*&.....................%*&..%*&........",
+"......-*$.%**$....................%**$.=*=........",
+"......@@#-@@@*...................-@@@*&@@@&.......",
+"....-@@@@%@@@*...................%@@@*=@;;*.......",
+".....#@@=-@@@%...................$@@@&-@@@-.......",
+".....$%%..-%-.....................-%-..-%-........",
+".....%@#%.=@#$.*@+$$+@=.%#@=.%##%.=@#-$+ at +$.......",
+"....$@@@#%@@@*&@@@&*@@@%#@@@.@@@@-@@@*&@@@=.......",
+"....-@@@#%@@@**@@@=*@@@%@@@@-@@@@%@@@*=@@@*.......",
+".....#@@%$#@@%-@@#$%@@#.=@@*.#@@=$#@@%$#@@-.......",
+"......%$...%$..$%...$%...--...%$...%$...%$........",
+"..........+@@%$#@#$-#@#.%@@*.*@@=.*@@%............",
+".........%@@@*=@@@=*@@@%@@@@-@@@@%@@@*............",
+".........%@@@*=@@@&*@@@%@@@@.@@@#%@@@*............",
+"..........+@#$$#@+$%@@*.%@@&.*@@%.+@#$............",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+".....$%%..$%%..-%-..-%-..%%$.$%%$.$%%..-%-........",
+".....#@@+$@@@=-@@@-&@@@$*@@#.#@@+$#@@=-@@@-.......",
+"....-@@@@%@@@**@@@**@@@%@@@@-@@@@%@@@**@@@*.......",
+".....@@@+-@@@=&@@@%*@@@-#@@#.@@@+-@@@=%@@@&.......",
+".....%**$.&*=..=*&.$**%.-**-.%**$.&*=..&*=........",
+".....$**$.-*=$.&*&..=*%.$=*-.$**$.-*=$.&*&........",
+".....#@@+-@@@=&@@@%=@@@-+@@@.#@@#-@@@*%@@@&.......",
+"....%@@@@%@@@**@@@=*@@@%@@@@-@@@@%@@@*=@@@*.......",
+".....@@@=-@@@&&@@@-=@@@$+@@#.#@@*-@@@=-@@@&.......",
+".....-=&..-=%..%*-..&=-.$&&$.$=&..-=%..-*,........",
+"..........=#*$.=+*$...............................",
+".........-@@@*&@@@&...............................",
+".........%@@@**@@@=...............................",
+".........$@@@%-@@@-...............................",
+"..........$%-..-%$................................",
+"..............$+@#$$#@+...........................",
+"..............=@;@&*@@@%..........................",
+"..............*;@@&*;;;,..........................",
+"..............-@@#$%;;*...........................",
+"................%...$%............................",
+"..............$#@@-%@@#$..........................",
+"..............=@@@=*@@@%..........................",
+"..............=@@@&*@@@-..........................",
+"..............$+@*.-#@=...........................",
+"..........$%%..-%-................................",
+".........$#@@=-@@@-...............................",
+".........%@@@**@@@*...............................",
+".........%@@@=&@@@%...............................",
+"..........=*=..=*=................................",
+".....$*=$.-*=..%*&..&*-.$=*-.$==$.-*=$.&*&........",
+".....#@@+-@@@=-@@@%=@@@-+@@@.#@@#$@@@=%@@@&.......",
+"....%@@@@%@@@**@@@**@@@%@@@@-@@@@%@@@**@@@*.......",
+".....@@@=-@@@=&@@@-=@@@$+@@#.@@@+-@@@=-@@@&.......",
+".....-*&..-*&..&*-..&*-.$==$.-*&$.-*&..-*&........",
+".....%**-.&**$.=*=.$=*=.$**%.%**%.%**$.=*=........",
+".....@@@#-@@@*&@@@&=@@@-#@@@.@@@#-@@@*&@@@&.......",
+"....-@@@@%@@@**@@@=*@@@%@@@@-@@@@%@@@*=@@@*.......",
+".....#@@=$@@@%-@@@-=@@#$*@@+.#@@=$@@@%-@@@-.......",
+".....$%%..$%-..-%$..%%$..%%..$%%..$%-..$%-........",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+".....*@@&.+@@%$#@#$-#@#.%@@*.*@@=.*@@%$#@#$.......",
+"....$@@@@%@@@*=@@@=*@@@%@@@@-@@@@%@@@*=@@@=.......",
+"....$@@@#%@@@*=@@@&*@@@%@@@@.@@@#%@@@*&@@@=.......",
+".....*@@%.+@#$$#@+$%@@*.&@@&.*@@%.+@#$$+@#$.......",
+"......%%...%-..$%$..-%$..-%...%%...%-..$%$........",
+".....*@@=$#@@&-@@@-%@@#$=@@#.*@@*$#@@=-@@@-.......",
+"....-@@@@%@@@**@@@=*@@@%@@@@-@@@@%@@@*=@@@*.......",
+"....$@@@+%@@@==@@@%*@@@-#@@@.@@@#%@@@*%@@@=.......",
+".....=#+$.=#*$$*@=.$+#=.%++%.%#+$.=#*$.=@*$.......",
+".............................$&&$.$=%.............",
+".............................#@@+$@@@=............",
+"............................$@@@@%@@@*............",
+".............................@@@+-@@@=............",
+".............................-*=$.&*=.............",
+"........................$=*%.-**$.................",
+"........................+@@@.#@@#.................",
+"........................@@@@$@@@@.................",
+"........................+@@#.#@@*.................",
+"........................$%%$.$%%..................",
+"........................$+#=.%##%.................",
+"........................#@@@.@@@#.................",
+"........................@@@@-@@@@.................",
+"........................*@@*.#@@=.................",
+".........................-%...%-..................",
+".............................=@@&.*@@%............",
+".............................@@@@%@@@*............",
+".............................@@@@%@@@*............",
+".............................*@@%.#@#-............",
+"......%-...%-..$%$..$%...-%...--...%-..$%$........",
+".....*@@=$#@@%$#@@-%@@#$=@@#.*@@*.#@@&-@@@-.......",
+"....-@@@@%@@@*=@@@=*@@@%@@@@-@@@@%@@@*=@@@*.......",
+"....$@@@+%@@@*=@@@&*@@@-#@@@.@@@#%@@@*&@@@=.......",
+".....=@+$.=@+$$+@=.$+@=.%##%.=@+%.=@+$.=@+$.......",
+".....$%%..$%%..-%-..-%-..%%$.$%%$.$%%..-%-........",
+".....#@@+$@@@=-@@@-&@@@$*@@#.#@@+$#@@=-@@@-.......",
+"....-@@@@%@@@**@@@**@@@%@@@@-@@@@%@@@**@@@*.......",
+".....@@@+-@@@=&@@@%*@@@-#@@#.@@@+-@@@=%@@@&.......",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+".................................................."};
diff --git a/pixmaps/logoh.png b/pixmaps/logoh.png
new file mode 100644
index 0000000..922a7ed
Binary files /dev/null and b/pixmaps/logoh.png differ
diff --git a/platypus/Makefile.am b/platypus/Makefile.am
new file mode 100644
index 0000000..5fe9fe5
--- /dev/null
+++ b/platypus/Makefile.am
@@ -0,0 +1,9 @@
+bin_PROGRAMS = @WMCOINCOIN_PLAYER@
+EXTRA_PROGRAMS = wmcoincoin_player
+
+LIBS = `imlib2-config --libs`
+
+wmcoincoin_player_SOURCES = fmalloc.c giffunc.c gifread.c wmcoincoin_player.c gif.h
+
+INCLUDES = -I. `imlib2-config --cflags`
+
diff --git a/platypus/Makefile.in b/platypus/Makefile.in
new file mode 100644
index 0000000..e7c47a5
--- /dev/null
+++ b/platypus/Makefile.in
@@ -0,0 +1,501 @@
+# Makefile.in generated by automake 1.10.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+EXTRA_PROGRAMS = wmcoincoin_player$(EXEEXT)
+subdir = platypus
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/codeset.m4 \
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/glibc2.m4 \
+	$(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intdiv0.m4 $(top_srcdir)/m4/intl.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax.m4 \
+	$(top_srcdir)/m4/inttypes-pri.m4 \
+	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/isc-posix.m4 \
+	$(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/lock.m4 $(top_srcdir)/m4/longlong.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/printf-posix.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/stdint_h.m4 \
+	$(top_srcdir)/m4/uintmax_t.m4 $(top_srcdir)/m4/visibility.m4 \
+	$(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wint_t.m4 \
+	$(top_srcdir)/m4/xsize.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)"
+binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+PROGRAMS = $(bin_PROGRAMS)
+am_wmcoincoin_player_OBJECTS = fmalloc.$(OBJEXT) giffunc.$(OBJEXT) \
+	gifread.$(OBJEXT) wmcoincoin_player.$(OBJEXT)
+wmcoincoin_player_OBJECTS = $(am_wmcoincoin_player_OBJECTS)
+wmcoincoin_player_LDADD = $(LDADD)
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(wmcoincoin_player_SOURCES)
+DIST_SOURCES = $(wmcoincoin_player_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CFLAG_VISIBILITY = @CFLAG_VISIBILITY@
+COIN_ARCH = @COIN_ARCH@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GENCAT = @GENCAT@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIBC2 = @GLIBC2@
+GLIBC21 = @GLIBC21@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+HAVE_ASPRINTF = @HAVE_ASPRINTF@
+HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@
+HAVE_SNPRINTF = @HAVE_SNPRINTF@
+HAVE_VISIBILITY = @HAVE_VISIBILITY@
+HAVE_WPRINTF = @HAVE_WPRINTF@
+IMLIB2_CONFIG_IN_PATH = @IMLIB2_CONFIG_IN_PATH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLBISON = @INTLBISON@
+INTLLIBS = @INTLLIBS@
+INTLOBJS = @INTLOBJS@
+INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMULTITHREAD = @LIBMULTITHREAD@
+LIBOBJS = @LIBOBJS@
+LIBPTH = @LIBPTH@
+LIBPTH_PREFIX = @LIBPTH_PREFIX@
+LIBS = `imlib2-config --libs`
+LIBTHREAD = @LIBTHREAD@
+LTLIBC = @LTLIBC@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBMULTITHREAD = @LTLIBMULTITHREAD@
+LTLIBOBJS = @LTLIBOBJS@
+LTLIBPTH = @LTLIBPTH@
+LTLIBTHREAD = @LTLIBTHREAD@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_CFLAGS = @PACKAGE_CFLAGS@
+PACKAGE_LIBS = @PACKAGE_LIBS@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POSUB = @POSUB@
+PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+WINDRES = @WINDRES@
+WMCCC = @WMCCC@
+WMCOINCOIN_PLAYER = @WMCOINCOIN_PLAYER@
+WOE32 = @WOE32@
+WOE32DLL = @WOE32DLL@
+XFT_CFLAGS = @XFT_CFLAGS@
+XFT_LIBS = @XFT_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+bin_PROGRAMS = @WMCOINCOIN_PLAYER@
+wmcoincoin_player_SOURCES = fmalloc.c giffunc.c gifread.c wmcoincoin_player.c gif.h
+INCLUDES = -I. `imlib2-config --cflags`
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  platypus/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  platypus/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+install-binPROGRAMS: $(bin_PROGRAMS)
+	@$(NORMAL_INSTALL)
+	test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
+	@list='$(bin_PROGRAMS)'; for p in $$list; do \
+	  p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+	  if test -f $$p \
+	  ; then \
+	    f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+	   echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
+	   $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
+	  else :; fi; \
+	done
+
+uninstall-binPROGRAMS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(bin_PROGRAMS)'; for p in $$list; do \
+	  f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+	  echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
+	  rm -f "$(DESTDIR)$(bindir)/$$f"; \
+	done
+
+clean-binPROGRAMS:
+	-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+wmcoincoin_player$(EXEEXT): $(wmcoincoin_player_OBJECTS) $(wmcoincoin_player_DEPENDENCIES) 
+	@rm -f wmcoincoin_player$(EXEEXT)
+	$(LINK) $(wmcoincoin_player_OBJECTS) $(wmcoincoin_player_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/fmalloc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/giffunc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/gifread.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wmcoincoin_player.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	    $$tags $$unique; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$tags $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && cd $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    fi; \
+	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+	for dir in "$(DESTDIR)$(bindir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am: install-binPROGRAMS
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
+	clean-generic ctags distclean distclean-compile \
+	distclean-generic distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-binPROGRAMS \
+	install-data install-data-am install-dvi install-dvi-am \
+	install-exec install-exec-am install-html install-html-am \
+	install-info install-info-am install-man install-pdf \
+	install-pdf-am install-ps install-ps-am install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
+	uninstall-am uninstall-binPROGRAMS
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/platypus/fmalloc.c b/platypus/fmalloc.c
new file mode 100644
index 0000000..0361c96
--- /dev/null
+++ b/platypus/fmalloc.c
@@ -0,0 +1,41 @@
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+#include <stdlib.h>
+#include <stdio.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+static void
+fail_die_malloc_die(size_t size, const char *file, int line)
+{
+  fprintf(stderr, "Out of memory! (wanted %lu at %s:%d)\n",
+	  (unsigned long)size, file, line);
+  exit(1);
+}
+
+void *
+fail_die_malloc(size_t size, const char *file, int line)
+{
+  void *p = malloc(size);
+  if (!p && size)
+    fail_die_malloc_die(size, file, line);
+  return p;
+}
+
+void *
+fail_die_realloc(void *p, size_t size, const char *file, int line)
+{
+  if (!p)
+    return fail_die_malloc(size, file, line);
+  p = realloc(p, size);
+  if (!p && size)
+    fail_die_malloc_die(size, file, line);
+  return p;
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/platypus/gif.h b/platypus/gif.h
new file mode 100644
index 0000000..03f98b6
--- /dev/null
+++ b/platypus/gif.h
@@ -0,0 +1,302 @@
+/* gif.h - Interface to the LCDF GIF library.
+   Copyright (C) 1997-2001 Eddie Kohler, eddietwo at lcs.mit.edu
+   This file is part of the LCDF GIF library.
+   
+   The LCDF GIF library is free software*. It is distributed under the GNU
+   General Public License, version 2 or later; you can copy, distribute, or
+   alter it at will, as long as this notice is kept intact and this source
+   code is made available. There is no warranty, express or implied.
+   
+   *There is a patent on the LZW compression method used by GIFs, and included
+   in gifwrite.c. Unisys, the patent holder, allows the compression algorithm
+   to be used without a license in software distributed at no cost to the
+   user. The decompression algorithm is not patented. */
+
+#ifndef LCDF_GIF_H /* -*- mode: c -*- */
+#define LCDF_GIF_H
+#ifndef __cplusplus
+# include <stdio.h>
+# include <stdlib.h>
+# include <stdint.h> /* cette ligne est un patch de notre ami twolife */
+#else
+# include <cstdio>
+# include <cstdlib>
+extern "C" {
+#endif
+
+/* NOTE: You should define the types uint8_t, uint16_t and uint32_t before
+   including this file, probably by #including <inttypes.h>. */
+
+#define GIF_MAJOR_VERSION	1
+#define GIF_MINOR_VERSION	5
+#define GIF_VERSION		"1.5"
+
+typedef struct Gif_Stream	Gif_Stream;
+typedef struct Gif_Image	Gif_Image;
+typedef struct Gif_Colormap	Gif_Colormap;
+typedef struct Gif_Comment	Gif_Comment;
+typedef struct Gif_Extension	Gif_Extension;
+typedef struct Gif_Record	Gif_Record;
+
+
+/** GIF_STREAM **/
+
+struct Gif_Stream {
+  
+    Gif_Colormap *global;
+    uint8_t background;
+  
+    uint16_t screen_width;
+    uint16_t screen_height;
+    long loopcount;		/* -1 means no loop count */
+  
+    Gif_Comment *comment;
+  
+    Gif_Image **images;
+    int nimages;
+    int imagescap;
+  
+    Gif_Extension *extensions;
+  
+    unsigned errors;
+    
+    int userflags;
+    int refcount;
+  
+};
+
+Gif_Stream *	Gif_NewStream(void);
+void		Gif_DeleteStream(Gif_Stream *);
+
+Gif_Stream *	Gif_CopyStreamSkeleton(Gif_Stream *);
+Gif_Stream *	Gif_CopyStreamImages(Gif_Stream *);
+
+#define		Gif_ScreenWidth(gfs)		((gfs)->screen_width)
+#define		Gif_ScreenHeight(gfs)		((gfs)->screen_height)
+#define		Gif_ImageCount(gfs)		((gfs)->nimages)
+
+void		Gif_CalculateScreenSize(Gif_Stream *, int force);
+int		Gif_Unoptimize(Gif_Stream *);
+
+
+/** GIF_IMAGE **/
+
+struct Gif_Image {
+  
+    char *identifier;
+    Gif_Comment *comment;
+  
+    Gif_Colormap *local;
+    short transparent;		/* -1 means no transparent index */
+  
+    uint16_t delay;
+    uint8_t disposal;
+    uint16_t left;
+    uint16_t top;
+  
+    uint16_t width;
+    uint16_t height;
+  
+    uint8_t interlace;
+    uint8_t **img;		/* img[y][x] == image byte (x,y) */
+    uint8_t *image_data;
+    void (*free_image_data)(void *);
+  
+    uint32_t compressed_len;
+    uint8_t *compressed;
+    void (*free_compressed)(void *);
+  
+    void *user_data;
+    void (*free_user_data)(void *);
+    int refcount;
+  
+};
+
+#define		GIF_DISPOSAL_NONE		0
+#define		GIF_DISPOSAL_ASIS		1
+#define		GIF_DISPOSAL_BACKGROUND		2
+#define		GIF_DISPOSAL_PREVIOUS		3
+  
+Gif_Image *	Gif_NewImage(void);
+void		Gif_DeleteImage(Gif_Image *);
+
+int		Gif_AddImage(Gif_Stream *, Gif_Image *);
+void		Gif_RemoveImage(Gif_Stream *, int);
+Gif_Image *	Gif_CopyImage(Gif_Image *);
+
+Gif_Image *	Gif_GetImage(Gif_Stream *, int);
+Gif_Image *	Gif_GetNamedImage(Gif_Stream *, const char *);
+int		Gif_ImageNumber(Gif_Stream *, Gif_Image *);
+
+#define		Gif_ImageWidth(gfi)		((gfi)->width)
+#define		Gif_ImageHeight(gfi)		((gfi)->height)
+#define		Gif_ImageDelay(gfi)		((gfi)->delay)
+#define		Gif_ImageUserData(gfi)		((gfi)->userdata)
+#define		Gif_SetImageUserData(gfi, v)	((gfi)->userdata = v)
+  
+typedef		void (*Gif_ReadErrorHandler)(const char *, int, void *);
+
+#define		Gif_UncompressImage(gfi)     Gif_FullUncompressImage((gfi),0,0)
+int		Gif_FullUncompressImage(Gif_Image*,Gif_ReadErrorHandler,void*);
+int		Gif_CompressImage(Gif_Stream *, Gif_Image *);
+int		Gif_FullCompressImage(Gif_Stream *, Gif_Image *, int);
+void		Gif_ReleaseUncompressedImage(Gif_Image *);
+void		Gif_ReleaseCompressedImage(Gif_Image *);
+int		Gif_SetUncompressedImage(Gif_Image *, uint8_t *data,
+			void (*free_data)(void *), int data_interlaced);
+int		Gif_CreateUncompressedImage(Gif_Image *);
+
+int		Gif_ClipImage(Gif_Image *, int l, int t, int w, int h);
+
+
+/** GIF_COLORMAP **/
+
+typedef struct {
+  
+    uint8_t haspixel;
+    uint8_t red;
+    uint8_t green;
+    uint8_t blue;
+  
+    uint32_t pixel;
+  
+} Gif_Color;
+
+
+struct Gif_Colormap {
+  
+    int ncol;
+    int capacity;
+    uint32_t userflags;
+    int refcount;
+    Gif_Color *col;
+  
+};
+
+Gif_Colormap *	Gif_NewColormap(void);
+Gif_Colormap *	Gif_NewFullColormap(int count, int capacity);
+void		Gif_DeleteColormap(Gif_Colormap *);
+
+Gif_Colormap *	Gif_CopyColormap(Gif_Colormap *);
+
+int		Gif_ColorEq(Gif_Color *, Gif_Color *);
+#define		GIF_COLOREQ(c1, c2) \
+((c1)->red==(c2)->red && (c1)->green==(c2)->green && (c1)->blue==(c2)->blue)
+
+int		Gif_FindColor(Gif_Colormap *, Gif_Color *);
+int		Gif_AddColor(Gif_Colormap *, Gif_Color *, int look_from);
+
+
+/** GIF_COMMENT **/
+
+struct Gif_Comment {
+    char **str;
+    int *len;
+    int count;
+    int cap;
+};
+
+Gif_Comment *	Gif_NewComment(void);
+void		Gif_DeleteComment(Gif_Comment *);
+int		Gif_AddCommentTake(Gif_Comment *, char *, int);
+int		Gif_AddComment(Gif_Comment *, const char *, int);
+
+
+/** GIF_EXTENSION **/
+
+struct Gif_Extension {
+  
+    int kind;			/* negative kinds are reserved */
+    char *application;
+    uint8_t *data;
+    uint32_t length;
+    int position;
+  
+    Gif_Stream *stream;
+    Gif_Extension *next;
+    void (*free_data)(void *);
+  
+};
+
+
+Gif_Extension *	Gif_NewExtension(int, const char *);
+void		Gif_DeleteExtension(Gif_Extension *);
+int		Gif_AddExtension(Gif_Stream *, Gif_Extension *, int);
+Gif_Extension * Gif_GetExtension(Gif_Stream *, int, Gif_Extension *);
+
+
+/** READING AND WRITING **/
+
+struct Gif_Record {
+    const unsigned char *data;
+    uint32_t length;
+};
+
+#define GIF_READ_COMPRESSED		1
+#define GIF_READ_UNCOMPRESSED		2
+#define GIF_READ_CONST_RECORD		4
+#define GIF_READ_TRAILING_GARBAGE_OK	8
+#define GIF_WRITE_CAREFUL_MIN_CODE_SIZE	1
+
+Gif_Stream *	Gif_ReadFile(FILE *);
+Gif_Stream *	Gif_FullReadFile(FILE *, int flags, Gif_ReadErrorHandler,
+				 void *);
+Gif_Stream *	Gif_ReadRecord(const Gif_Record *);
+Gif_Stream *	Gif_FullReadRecord(const Gif_Record *, int flags,
+				   Gif_ReadErrorHandler, void *);
+int		Gif_WriteFile(Gif_Stream *, FILE *);
+int 		Gif_FullWriteFile(Gif_Stream *, int flags, FILE *);
+
+#define	Gif_ReadFile(f)		Gif_FullReadFile((f),GIF_READ_UNCOMPRESSED,0,0)
+#define	Gif_ReadRecord(r)	Gif_FullReadRecord((r),GIF_READ_UNCOMPRESSED,0,0)
+#define Gif_CompressImage(s, i)	Gif_FullCompressImage((s),(i),0)
+#define Gif_WriteFile(s, f)	Gif_FullWriteFile((s),0,(f))
+
+
+/** HOOKS AND MISCELLANEOUS **/
+
+int		Gif_InterlaceLine(int y, int height);
+char *		Gif_CopyString(const char *);
+
+#define GIF_T_STREAM			(0)
+#define GIF_T_IMAGE			(1)
+#define GIF_T_COLORMAP			(2)
+typedef void	(*Gif_DeletionHookFunc)(int, void *, void *);
+int		Gif_AddDeletionHook(int, Gif_DeletionHookFunc, void *);
+void		Gif_RemoveDeletionHook(int, Gif_DeletionHookFunc, void *);
+
+#ifdef GIF_DEBUGGING
+#define		GIF_DEBUG(x)			Gif_Debug x
+void 		Gif_Debug(char *x, ...);
+#else
+#define		GIF_DEBUG(x)
+#endif
+
+typedef uint16_t Gif_Code;
+#define GIF_MAX_CODE_BITS	12
+#define GIF_MAX_CODE		0x1000
+#define GIF_MAX_BLOCK		255
+
+#ifndef Gif_New
+# ifndef xmalloc
+#  define xmalloc		malloc
+#  define xrealloc		realloc
+#  define xfree			free
+# endif
+# define Gif_New(t)		((t *)xmalloc(sizeof(t)))
+# define Gif_NewArray(t, n)	((t *)xmalloc(sizeof(t) * (n)))
+# define Gif_ReArray(p, t, n)	((p)=((t*)xrealloc((void*)(p),sizeof(t)*(n))))
+#endif
+#ifndef Gif_DeleteFunc
+# define Gif_DeleteFunc		(&xfree)
+# define Gif_DeleteArrayFunc	(&xfree)
+#endif
+#ifndef Gif_Delete
+# define Gif_Delete(p)		(*Gif_DeleteFunc)((void *)(p))
+# define Gif_DeleteArray(p)	(*Gif_DeleteArrayFunc)((void *)(p))
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+#endif
diff --git a/platypus/giffunc.c b/platypus/giffunc.c
new file mode 100644
index 0000000..76c95a9
--- /dev/null
+++ b/platypus/giffunc.c
@@ -0,0 +1,747 @@
+/* giffunc.c - General functions for the GIF library.
+   Copyright (C) 1997-9 Eddie Kohler, eddietwo at lcs.mit.edu
+   This file is part of the GIF library.
+
+   The GIF library is free software*. It is distributed under the GNU General
+   Public License, version 2 or later; you can copy, distribute, or alter it
+   at will, as long as this notice is kept intact and this source code is made
+   available. There is no warranty, express or implied.
+
+   *There is a patent on the LZW compression method used by GIFs, and included
+   in gifwrite.c. Unisys, the patent holder, allows the compression algorithm
+   to be used without a license in software distributed at no cost to the
+   user. The decompression algorithm is not patented. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+#include <gif.h>
+#include <string.h>
+#include <stdarg.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+Gif_Stream *
+Gif_NewStream(void)
+{
+  Gif_Stream *gfs = Gif_New(Gif_Stream);
+  if (!gfs) return 0;
+  gfs->global = 0;
+  gfs->background = 0;
+  gfs->screen_width = gfs->screen_height = 0;
+  gfs->loopcount = -1;
+  gfs->comment = 0;
+  gfs->images = 0;
+  gfs->nimages = gfs->imagescap = 0;
+  gfs->extensions = 0;
+  gfs->errors = 0;
+  gfs->userflags = 0;
+  gfs->refcount = 0;
+  return gfs;
+}
+
+
+Gif_Image *
+Gif_NewImage(void)
+{
+  Gif_Image *gfi = Gif_New(Gif_Image);
+  if (!gfi) return 0;
+  gfi->identifier = 0;
+  gfi->comment = 0;
+  gfi->local = 0;
+  gfi->transparent = -1;
+  gfi->disposal = GIF_DISPOSAL_NONE;
+  gfi->delay = 0;
+  gfi->left = gfi->top = gfi->width = gfi->height = 0;
+  gfi->interlace = 0;
+  gfi->img = 0;
+  gfi->image_data = 0;
+  gfi->free_image_data = Gif_DeleteArrayFunc;
+  gfi->compressed_len = 0;
+  gfi->compressed = 0;
+  gfi->free_compressed = 0;
+  gfi->user_data = 0;
+  gfi->free_user_data = 0;
+  gfi->refcount = 0;
+  return gfi;
+}
+
+
+Gif_Colormap *
+Gif_NewColormap(void)
+{
+  Gif_Colormap *gfcm = Gif_New(Gif_Colormap);
+  if (!gfcm) return 0;
+  gfcm->ncol = 0;
+  gfcm->capacity = 0;
+  gfcm->col = 0;
+  gfcm->refcount = 0;
+  gfcm->userflags = 0;
+  return gfcm;
+}
+
+
+Gif_Colormap *
+Gif_NewFullColormap(int count, int capacity)
+{
+  Gif_Colormap *gfcm = Gif_New(Gif_Colormap);
+  if (!gfcm || capacity <= 0 || count < 0) return 0;
+  if (count > capacity) capacity = count;
+  gfcm->ncol = count;
+  gfcm->capacity = capacity;
+  gfcm->col = Gif_NewArray(Gif_Color, capacity);
+  gfcm->refcount = 0;
+  gfcm->userflags = 0;
+  if (!gfcm->col) {
+    Gif_Delete(gfcm);
+    return 0;
+  } else
+    return gfcm;
+}
+
+
+Gif_Comment *
+Gif_NewComment(void)
+{
+  Gif_Comment *gfcom = Gif_New(Gif_Comment);
+  if (!gfcom) return 0;
+  gfcom->str = 0;
+  gfcom->len = 0;
+  gfcom->count = gfcom->cap = 0;
+  return gfcom;
+}
+
+
+Gif_Extension *
+Gif_NewExtension(int kind, const char *app_name)
+{
+  Gif_Extension *gfex = Gif_New(Gif_Extension);
+  if (!gfex) return 0;
+  gfex->kind = app_name ? 255 : kind;
+  gfex->application = Gif_CopyString(app_name);
+  gfex->data = 0;
+  gfex->position = 0;
+  gfex->stream = 0;
+  gfex->next = 0;
+  gfex->free_data = 0;
+  if (!gfex->application && app_name) {
+    Gif_DeleteExtension(gfex);
+    return 0;
+  }
+  return gfex;
+}
+
+
+char *
+Gif_CopyString(const char *s)
+{
+  int l;
+  char *copy;
+  if (!s) return 0;
+  l = strlen(s);
+  copy = Gif_NewArray(char, l + 1);
+  if (!copy) return 0;
+  memcpy(copy, s, l + 1);
+  return copy;
+}
+
+
+int
+Gif_AddImage(Gif_Stream *gfs, Gif_Image *gfi)
+{
+  if (gfs->nimages >= gfs->imagescap) {
+    if (gfs->imagescap) gfs->imagescap *= 2;
+    else gfs->imagescap = 2;
+    Gif_ReArray(gfs->images, Gif_Image *, gfs->imagescap);
+    if (!gfs->images) return 0;
+  }
+  gfs->images[gfs->nimages] = gfi;
+  gfs->nimages++;
+  gfi->refcount++;
+  return 1;
+}
+
+
+void
+Gif_RemoveImage(Gif_Stream *gfs, int inum)
+{
+  int j;
+  if (inum < 0 || inum >= gfs->nimages)
+    return;
+  Gif_DeleteImage(gfs->images[inum]);
+  for (j = inum; j < gfs->nimages - 1; j++)
+    gfs->images[j] = gfs->images[j+1];
+  gfs->nimages--;
+}
+
+
+int
+Gif_AddCommentTake(Gif_Comment *gfcom, char *x, int xlen)
+{
+  if (gfcom->count >= gfcom->cap) {
+    if (gfcom->cap) gfcom->cap *= 2;
+    else gfcom->cap = 2;
+    Gif_ReArray(gfcom->str, char *, gfcom->cap);
+    Gif_ReArray(gfcom->len, int, gfcom->cap);
+    if (!gfcom->str || !gfcom->len) return 0;
+  }
+  if (xlen < 0) xlen = strlen(x);
+  gfcom->str[ gfcom->count ] = x;
+  gfcom->len[ gfcom->count ] = xlen;
+  gfcom->count++;
+  return 1;
+}
+
+
+int
+Gif_AddComment(Gif_Comment *gfcom, const char *x, int xlen)
+{
+  char *new_x;
+  if (xlen < 0) xlen = strlen(x);
+  new_x = Gif_NewArray(char, xlen);
+  if (!new_x) return 0;
+  memcpy(new_x, x, xlen);
+  if (Gif_AddCommentTake(gfcom, new_x, xlen) == 0) {
+    Gif_DeleteArray(new_x);
+    return 0;
+  } else
+    return 1;
+}
+
+
+int
+Gif_AddExtension(Gif_Stream *gfs, Gif_Extension *gfex, int pos)
+{
+  Gif_Extension *prev, *trav;
+  if (gfex->stream) return 0;
+  for (prev = 0, trav = gfs->extensions;
+       trav && trav->position <= pos;
+       prev = trav, trav = trav->next)
+    ;
+  if (prev) prev->next = gfex;
+  else gfs->extensions = gfex;
+  gfex->next = trav;
+  return 1;
+}
+
+
+int
+Gif_ImageNumber(Gif_Stream *gfs, Gif_Image *gfi)
+{
+  int i;
+  for (i = 0; i < gfs->nimages; i++)
+    if (gfs->images[i] == gfi)
+      return i;
+  return -1;
+}
+
+
+void
+Gif_CalculateScreenSize(Gif_Stream *gfs, int force)
+{
+  int i;
+  int screen_width = 0;
+  int screen_height = 0;
+  
+  for (i = 0; i < gfs->nimages; i++) {
+    Gif_Image *gfi = gfs->images[i];
+    /* 17.Dec.1999 - I find this old behavior annoying. */
+    /* if (gfi->left != 0 || gfi->top != 0) continue; */
+    if (screen_width < gfi->left + gfi->width)
+      screen_width = gfi->left + gfi->width;
+    if (screen_height < gfi->top + gfi->height)
+      screen_height = gfi->top + gfi->height;
+  }
+  
+  /* Only use the default 640x480 screen size if we are being forced to create
+     a new screen size or there's no screen size currently. */
+  if (screen_width == 0 && (gfs->screen_width == 0 || force))
+    screen_width = 640;
+  if (screen_height == 0 && (gfs->screen_height == 0 || force))
+    screen_height = 480;
+  
+  if (gfs->screen_width < screen_width || force)
+    gfs->screen_width = screen_width;
+  if (gfs->screen_height < screen_height || force)
+    gfs->screen_height = screen_height;
+}
+
+
+Gif_Stream *
+Gif_CopyStreamSkeleton(Gif_Stream *gfs)
+{
+  Gif_Stream *ngfs = Gif_NewStream();
+  ngfs->global = Gif_CopyColormap(gfs->global);
+  ngfs->background = gfs->background;
+  ngfs->screen_width = gfs->screen_width;
+  ngfs->screen_height = gfs->screen_height;
+  ngfs->loopcount = gfs->loopcount;
+  if (gfs->global && !ngfs->global) {
+    Gif_DeleteStream(ngfs);
+    return 0;
+  } else
+    return ngfs;
+}
+
+
+Gif_Stream *
+Gif_CopyStreamImages(Gif_Stream *gfs)
+{
+  Gif_Stream *ngfs = Gif_CopyStreamSkeleton(gfs);
+  int i;
+  if (!ngfs) return 0;
+  for (i = 0; i < gfs->nimages; i++) {
+    Gif_Image *gfi = Gif_CopyImage(gfs->images[i]);
+    if (!gfi || !Gif_AddImage(ngfs, gfi)) {
+      Gif_DeleteStream(ngfs);
+      return 0;
+    }
+  }
+  return ngfs;
+}
+
+
+Gif_Colormap *
+Gif_CopyColormap(Gif_Colormap *src)
+{
+  int i;
+  Gif_Colormap *dest;
+  if (!src) return 0;
+  
+  dest = Gif_NewFullColormap(src->ncol, src->capacity);
+  if (!dest) return 0;
+  
+  for (i = 0; i < src->ncol; i++) {
+    dest->col[i] = src->col[i];
+    dest->col[i].haspixel = 0;
+  }
+  
+  return dest;
+}
+
+
+Gif_Image *
+Gif_CopyImage(Gif_Image *src)
+{
+  Gif_Image *dest;
+  uint8_t *data;
+  int i;
+  if (!src) return 0;
+  
+  dest = Gif_NewImage();
+  if (!dest) return 0;
+  
+  dest->identifier = Gif_CopyString(src->identifier);
+  if (!dest->identifier && src->identifier) goto failure;
+  if (src->comment) {
+    dest->comment = Gif_NewComment();
+    if (!dest->comment) goto failure;
+    for (i = 0; i < src->comment->count; i++)
+      if (!Gif_AddComment(dest->comment, src->comment->str[i],
+			  src->comment->len[i]))
+	goto failure;
+  }
+  
+  dest->local = Gif_CopyColormap(src->local);
+  if (!dest->local && src->local) goto failure;
+  dest->transparent = src->transparent;
+  
+  dest->delay = src->delay;
+  dest->disposal = src->disposal;
+  dest->left = src->left;
+  dest->top = src->top;
+  
+  dest->width = src->width;
+  dest->height = src->height;
+  
+  dest->interlace = src->interlace;
+  if (src->img) {
+    dest->img = Gif_NewArray(uint8_t *, dest->height + 1);
+    dest->image_data = Gif_NewArray(uint8_t, dest->width * dest->height);
+    dest->free_image_data = Gif_DeleteArrayFunc;
+    if (!dest->img || !dest->image_data) goto failure;
+    for (i = 0, data = dest->image_data; i < dest->height; i++) {
+      memcpy(data, src->img[i], dest->width);
+      dest->img[i] = data;
+      data += dest->width;
+    }
+    dest->img[dest->height] = 0;
+  }
+  if (src->compressed) {
+    if (src->free_compressed == 0)
+      dest->compressed = src->compressed;
+    else {
+      dest->compressed = Gif_NewArray(uint8_t, src->compressed_len);
+      dest->free_compressed = Gif_DeleteArrayFunc;
+      memcpy(dest->compressed, src->compressed, src->compressed_len);
+    }
+    dest->compressed_len = src->compressed_len;
+  }
+  
+  return dest;
+  
+ failure:
+  Gif_DeleteImage(dest);
+  return 0;
+}
+
+
+/** DELETION **/
+
+typedef struct Gif_DeletionHook {
+  int kind;
+  Gif_DeletionHookFunc func;
+  void *callback_data;
+  struct Gif_DeletionHook *next;
+} Gif_DeletionHook;
+
+static Gif_DeletionHook *all_hooks;
+
+void
+Gif_DeleteStream(Gif_Stream *gfs)
+{
+  Gif_Extension *gfex;
+  Gif_DeletionHook *hook;
+  int i;
+  if (!gfs) return;
+  if (--gfs->refcount > 0) return;
+  
+  Gif_DeleteColormap(gfs->global);
+  Gif_DeleteComment(gfs->comment);
+  
+  for (i = 0; i < gfs->nimages; i++)
+    Gif_DeleteImage(gfs->images[i]);
+  Gif_DeleteArray(gfs->images);
+  
+  gfex = gfs->extensions;
+  while (gfex) {
+    Gif_Extension *next = gfex->next;
+    gfex->stream = 0;
+    Gif_DeleteExtension(gfex);
+    gfex = next;
+  }
+  
+  for (hook = all_hooks; hook; hook = hook->next)
+    if (hook->kind == GIF_T_STREAM)
+      (*hook->func)(GIF_T_STREAM, gfs, hook->callback_data);
+  Gif_Delete(gfs);
+}
+
+
+void
+Gif_DeleteImage(Gif_Image *gfi)
+{
+  Gif_DeletionHook *hook;
+  if (!gfi) return;
+  if (--gfi->refcount > 0) return;
+  
+  for (hook = all_hooks; hook; hook = hook->next)
+    if (hook->kind == GIF_T_IMAGE)
+      (*hook->func)(GIF_T_IMAGE, gfi, hook->callback_data);
+  
+  Gif_DeleteArray(gfi->identifier);
+  Gif_DeleteComment(gfi->comment);
+  Gif_DeleteColormap(gfi->local);
+  if (gfi->image_data && gfi->free_image_data)
+    (*gfi->free_image_data)((void *)gfi->image_data);
+  Gif_DeleteArray(gfi->img);
+  if (gfi->compressed && gfi->free_compressed)
+    (*gfi->free_compressed)((void *)gfi->compressed);
+  if (gfi->user_data && gfi->free_user_data)
+    (*gfi->free_user_data)(gfi->user_data);
+  Gif_Delete(gfi);
+}
+
+
+void
+Gif_DeleteColormap(Gif_Colormap *gfcm)
+{
+  Gif_DeletionHook *hook;
+  if (!gfcm) return;
+  if (--gfcm->refcount > 0) return;
+
+  for (hook = all_hooks; hook; hook = hook->next)
+    if (hook->kind == GIF_T_COLORMAP)
+      (*hook->func)(GIF_T_COLORMAP, gfcm, hook->callback_data);
+  
+  Gif_DeleteArray(gfcm->col);
+  Gif_Delete(gfcm);
+}
+
+
+void
+Gif_DeleteComment(Gif_Comment *gfcom)
+{
+  int i;
+  if (!gfcom) return;
+  for (i = 0; i < gfcom->count; i++)
+    Gif_DeleteArray(gfcom->str[i]);
+  Gif_DeleteArray(gfcom->str);
+  Gif_DeleteArray(gfcom->len);
+  Gif_Delete(gfcom);
+}
+
+
+void
+Gif_DeleteExtension(Gif_Extension *gfex)
+{
+  if (!gfex) return;
+  if (gfex->data && gfex->free_data)
+    (*gfex->free_data)(gfex->data);
+  Gif_DeleteArray(gfex->application);
+  if (gfex->stream) {
+    Gif_Stream *gfs = gfex->stream;
+    Gif_Extension *prev, *trav;
+    for (prev = 0, trav = gfs->extensions;
+	 trav && trav != gfex;
+	 prev = trav, trav = trav->next)
+      ;
+    if (trav) {
+      if (prev) prev->next = trav->next;
+      else gfs->extensions = trav->next;
+    }
+  }
+  Gif_Delete(gfex);
+}
+
+
+/** DELETION HOOKS **/
+
+int
+Gif_AddDeletionHook(int kind, void (*func)(int, void *, void *), void *cb)
+{
+  Gif_DeletionHook *hook = Gif_New(Gif_DeletionHook);
+  if (!hook) return 0;
+  Gif_RemoveDeletionHook(kind, func, cb);
+  hook->kind = kind;
+  hook->func = func;
+  hook->callback_data = cb;
+  hook->next = all_hooks;
+  all_hooks = hook;
+  return 1;
+}
+
+void
+Gif_RemoveDeletionHook(int kind, void (*func)(int, void *, void *), void *cb)
+{
+  Gif_DeletionHook *hook = all_hooks, *prev = 0;
+  while (hook) {
+    if (hook->kind == kind && hook->func == func
+	&& hook->callback_data == cb) {
+      if (prev) prev->next = hook->next;
+      else all_hooks = hook->next;
+      Gif_Delete(hook);
+      return;
+    }
+    prev = hook;
+    hook = hook->next;
+  }
+}
+
+
+int
+Gif_ColorEq(Gif_Color *c1, Gif_Color *c2)
+{
+  return GIF_COLOREQ(c1, c2);
+}
+
+
+int
+Gif_FindColor(Gif_Colormap *gfcm, Gif_Color *c)
+{
+  int i;
+  for (i = 0; i < gfcm->ncol; i++)
+    if (GIF_COLOREQ(&gfcm->col[i], c))
+      return i;
+  return -1;
+}
+
+
+int
+Gif_AddColor(Gif_Colormap *gfcm, Gif_Color *c, int look_from)
+{
+  int i;
+  if (look_from >= 0)
+    for (i = look_from; i < gfcm->ncol; i++)
+      if (GIF_COLOREQ(&gfcm->col[i], c))
+	return i;
+  if (gfcm->ncol >= gfcm->capacity) {
+    gfcm->capacity *= 2;
+    Gif_ReArray(gfcm->col, Gif_Color, gfcm->capacity);
+    if (gfcm->col == 0) return -1;
+  }
+  i = gfcm->ncol;
+  gfcm->ncol++;
+  gfcm->col[i] = *c;
+  return i;
+}
+
+
+Gif_Image *
+Gif_GetImage(Gif_Stream *gfs, int imagenumber)
+{
+  if (imagenumber >= 0 && imagenumber < gfs->nimages)
+    return gfs->images[imagenumber];
+  else
+    return 0;
+}
+
+
+Gif_Image *
+Gif_GetNamedImage(Gif_Stream *gfs, const char *name)
+{
+  int i;
+  
+  if (!name)
+    return gfs->nimages ? gfs->images[0] : 0;
+  
+  for (i = 0; i < gfs->nimages; i++)
+    if (gfs->images[i]->identifier &&
+	strcmp(gfs->images[i]->identifier, name) == 0)
+      return gfs->images[i];
+  
+  return 0;
+}
+
+
+Gif_Extension *
+Gif_GetExtension(Gif_Stream *gfs, int id, Gif_Extension *search_from)
+{
+  if (!search_from) search_from = gfs->extensions;
+  while (search_from) {
+    if (search_from->kind == id)
+      return search_from;
+    search_from = search_from->next;
+  }
+  return 0;
+}
+
+
+void
+Gif_ReleaseCompressedImage(Gif_Image *gfi)
+{
+  if (gfi->compressed && gfi->free_compressed)
+    (*gfi->free_compressed)(gfi->compressed);
+  gfi->compressed = 0;
+  gfi->compressed_len = 0;
+  gfi->free_compressed = 0;
+}
+
+void
+Gif_ReleaseUncompressedImage(Gif_Image *gfi)
+{
+  Gif_DeleteArray(gfi->img);
+  if (gfi->image_data && gfi->free_image_data)
+    (*gfi->free_image_data)(gfi->image_data);
+  gfi->img = 0;
+  gfi->image_data = 0;
+  gfi->free_image_data = 0;
+}
+
+
+int
+Gif_ClipImage(Gif_Image *gfi, int left, int top, int width, int height)
+{
+  int new_width = gfi->width, new_height = gfi->height;
+  int y;
+
+  if (!gfi->img) return 0;
+  
+  if (gfi->left < left) {
+    int shift = left - gfi->left;
+    for (y = 0; y < gfi->height; y++)
+      gfi->img[y] += shift;
+    gfi->left += shift;
+    new_width -= shift;
+  }
+  
+  if (gfi->top < top) {
+    int shift = top - gfi->top;
+    for (y = gfi->height - 1; y >= shift; y++)
+      gfi->img[y - shift] = gfi->img[y];
+    gfi->top += shift;
+    new_height -= shift;
+  }
+  
+  if (gfi->left + new_width >= width)
+    new_width = width - gfi->left;
+  
+  if (gfi->top + new_height >= height)
+    new_height = height - gfi->top;
+  
+  if (new_width < 0) new_width = 0;
+  if (new_height < 0) new_height = 0;
+  gfi->width = new_width;
+  gfi->height = new_height;
+  return 1;
+}
+
+
+int
+Gif_InterlaceLine(int line, int height)
+{
+  height--;
+  if (line > height / 2)
+    return line * 2 - ( height       | 1);
+  else if (line > height / 4)
+    return line * 4 - ((height & ~1) | 2);
+  else if (line > height / 8)
+    return line * 8 - ((height & ~3) | 4);
+  else
+    return line * 8;
+}
+
+
+int
+Gif_SetUncompressedImage(Gif_Image *gfi, uint8_t *image_data,
+			 void (*free_data)(void *), int data_interlaced)
+{
+  int i;
+  int width = gfi->width;
+  int height = gfi->height;
+  uint8_t **img;
+  
+  Gif_ReleaseUncompressedImage(gfi);
+  if (!image_data) return 0;
+  
+  img = Gif_NewArray(uint8_t *, height + 1);
+  if (!img) return 0;
+  
+  if (data_interlaced)
+    for (i = 0; i < height; i++)
+      img[ Gif_InterlaceLine(i, height) ] = image_data + width * i;
+  else
+    for (i = 0; i < height; i++)
+      img[i] = image_data + width * i;
+  img[height] = 0;
+  
+  gfi->img = img;
+  gfi->image_data = image_data;
+  gfi->free_image_data = free_data;
+  return 1;
+}
+
+int
+Gif_CreateUncompressedImage(Gif_Image *gfi)
+{
+  uint8_t *data = Gif_NewArray(uint8_t, gfi->width * gfi->height);
+  return Gif_SetUncompressedImage(gfi, data, Gif_DeleteArrayFunc,
+				  gfi->interlace);
+}
+
+
+void
+Gif_Debug(char *x, ...)
+{
+  va_list val;
+  va_start(val, x);
+  vfprintf(stderr, x, val);
+  fputc(' ', stderr);
+  va_end(val);
+}
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/platypus/gifread.c b/platypus/gifread.c
new file mode 100644
index 0000000..99e7883
--- /dev/null
+++ b/platypus/gifread.c
@@ -0,0 +1,915 @@
+/* gifread.c - Functions to read GIFs.
+   Copyright (C) 1997-9 Eddie Kohler, eddietwo at lcs.mit.edu
+   This file is part of the GIF library.
+
+   The GIF library is free software*. It is distributed under the GNU General
+   Public License, version 2 or later; you can copy, distribute, or alter it
+   at will, as long as this notice is kept intact and this source code is made
+   available. There is no warranty, express or implied.
+
+   *There is a patent on the LZW compression method used by GIFs, and included
+   in gifwrite.c. Unisys, the patent holder, allows the compression algorithm
+   to be used without a license in software distributed at no cost to the
+   user. The decompression algorithm is not patented. */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#elif !defined(__cplusplus)
+/* Assume we don't have inline by default */
+# define inline
+#endif
+#include <gif.h>
+#include <stdarg.h>
+#include <assert.h>
+#include <string.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+typedef struct {
+  
+  Gif_Stream *stream;
+  
+  Gif_Code *prefix;
+  uint8_t *suffix;
+  uint16_t *length;
+  
+  uint16_t width;
+  uint16_t height;
+  
+  uint8_t *image;
+  uint8_t *maximage;
+  
+  unsigned decodepos;
+
+  Gif_ReadErrorHandler handler;
+  void *handler_thunk;
+  
+} Gif_Context;
+
+
+typedef struct Gif_Reader {
+  
+  FILE *f;
+  const uint8_t *v;
+  uint32_t w;
+  uint32_t length;
+  int is_record;
+  int is_eoi;
+  uint8_t (*byte_getter)(struct Gif_Reader *);
+  void (*block_getter)(uint8_t *, uint32_t, struct Gif_Reader *);
+  uint32_t (*offseter)(struct Gif_Reader *);
+  int (*eofer)(struct Gif_Reader *);
+  
+} Gif_Reader;
+
+
+#define gifgetc(grr)	((char)(*grr->byte_getter)(grr))
+#define gifgetbyte(grr) ((*grr->byte_getter)(grr))
+#define gifgetblock(ptr, size, grr) ((*grr->block_getter)(ptr, size, grr))
+#define gifgetoffset(grr) ((*grr->offseter)(grr))
+#define gifeof(grr)	((*grr->eofer)(grr))
+
+static inline uint16_t
+gifgetunsigned(Gif_Reader *grr)
+{
+  uint8_t one = gifgetbyte(grr);
+  uint8_t two = gifgetbyte(grr);
+  return one | (two << 8);
+}
+
+
+static uint8_t
+file_byte_getter(Gif_Reader *grr)
+{
+  int i = getc(grr->f);
+  return i == EOF ? 0 : (uint8_t)i;
+}
+
+static void
+file_block_getter(uint8_t *p, uint32_t s, Gif_Reader *grr)
+{
+  fread(p, 1, s, grr->f);
+}
+
+static uint32_t
+file_offseter(Gif_Reader *grr)
+{
+  return ftell(grr->f);
+}
+
+static int
+file_eofer(Gif_Reader *grr)
+{
+  int c = getc(grr->f);
+  if (c == EOF)
+    return 1;
+  else {
+    ungetc(c, grr->f);
+    return 0;
+  }
+}
+
+
+static uint8_t
+record_byte_getter(Gif_Reader *grr)
+{
+  return grr->w ? (grr->w--, *grr->v++) : 0;
+}
+
+static void
+record_block_getter(uint8_t *p, uint32_t s, Gif_Reader *grr)
+{
+  if (s > grr->w) s = grr->w;
+  memcpy(p, grr->v, s);
+  grr->w -= s, grr->v += s;
+}
+
+static uint32_t
+record_offseter(Gif_Reader *grr)
+{
+  return grr->length - grr->w;
+}
+
+static int
+record_eofer(Gif_Reader *grr)
+{
+  return grr->w == 0;
+}
+
+
+static void
+make_data_reader(Gif_Reader *grr, const uint8_t *data, uint32_t length)
+{
+  grr->v = data;
+  grr->length = length;
+  grr->w = length;
+  grr->is_record = 1;
+  grr->byte_getter = record_byte_getter;
+  grr->block_getter = record_block_getter;
+  grr->offseter = record_offseter;
+  grr->eofer = record_eofer;
+}
+
+
+static void
+gif_read_error(Gif_Context *gfc, const char *error)
+{
+  gfc->stream->errors++;
+  if (gfc->handler)
+    gfc->handler(error, gfc->stream->nimages, gfc->handler_thunk);
+}
+
+
+static uint8_t
+one_code(Gif_Context *gfc, Gif_Code code)
+{
+  uint8_t *suffixes = gfc->suffix;
+  Gif_Code *prefixes = gfc->prefix;
+  uint8_t *ptr;
+  int lastsuffix;
+  uint16_t codelength = gfc->length[code];
+
+  gfc->decodepos += codelength;
+  ptr = gfc->image + gfc->decodepos;
+  if (ptr > gfc->maximage || !codelength) {
+    gif_read_error(gfc, (!codelength ? "bad code" : "too much image data"));
+    /* 5/26/98 It's not good enough simply to count an error, because in the
+       read_image_data function, if code == next_code, we will store a byte in
+       gfc->image[gfc->decodepos-1]. Thus, fix decodepos so it's w/in the
+       image. */
+    gfc->decodepos = gfc->maximage - gfc->image;
+    return 0;
+  }
+  
+  /* codelength will always be greater than 0. */
+  do {
+    lastsuffix = suffixes[code];
+    *--ptr = lastsuffix;
+    code = prefixes[code];
+  } while (--codelength > 0);
+  
+  /* return the first pixel in the code, which, since we walked backwards
+     through the code, was the last suffix we processed. */
+  return lastsuffix;
+}
+
+static int
+read_image_block(Gif_Reader *grr, uint8_t *buffer, int *bit_pos_store,
+		 int *bit_len_store, int bits_needed)
+{
+  int bit_position = *bit_pos_store;
+  int bit_length = *bit_len_store;
+  uint8_t block_len;
+  
+  while (bit_position + bits_needed > bit_length) {
+    /* Read in the next data block. */
+    if (bit_position >= 8) {
+      /* Need to shift down the upper, unused part of `buffer' */
+      int i = bit_position / 8;
+      buffer[0] = buffer[i];
+      buffer[1] = buffer[i+1];
+      bit_position -= i * 8;
+      bit_length -= i * 8;
+    }
+    block_len = gifgetbyte(grr);
+    GIF_DEBUG(("\nimage_block(%d)", block_len));
+    if (block_len == 0) return 0;
+    gifgetblock(buffer + bit_length / 8, block_len, grr);
+    bit_length += block_len * 8;
+  }
+  
+  *bit_pos_store = bit_position;
+  *bit_len_store = bit_length;
+  return 1;
+}
+
+
+static void
+read_image_data(Gif_Context *gfc, Gif_Reader *grr)
+{
+  /* we need a bit more than GIF_MAX_BLOCK in case a single code is split
+     across blocks */
+  uint8_t buffer[GIF_MAX_BLOCK + 5];
+  int i;
+  uint32_t accum;
+  
+  int bit_position;
+  int bit_length;
+  
+  Gif_Code code;
+  Gif_Code old_code;
+  Gif_Code clear_code;
+  Gif_Code eoi_code;
+  Gif_Code next_code;
+#define CUR_BUMP_CODE (1 << bits_needed)
+#define CUR_CODE_MASK ((1 << bits_needed) - 1)
+  
+  int min_code_size;
+  int bits_needed;
+  
+  gfc->decodepos = 0;
+  
+  min_code_size = gifgetbyte(grr);
+  GIF_DEBUG(("\n\nmin_code_size(%d)", min_code_size));
+  if (min_code_size >= GIF_MAX_CODE_BITS) {
+    gif_read_error(gfc, "min_code_size too big");
+    min_code_size = GIF_MAX_CODE_BITS - 1;
+  } else if (min_code_size < 2) {
+    gif_read_error(gfc, "min_code_size too small");
+    min_code_size = 2;
+  }
+  clear_code = 1 << min_code_size;
+  for (code = 0; code < clear_code; code++) {
+    gfc->prefix[code] = 49428;
+    gfc->suffix[code] = (uint8_t)code;
+    gfc->length[code] = 1;
+  }
+  eoi_code = clear_code + 1;
+  
+  next_code = eoi_code;
+  bits_needed = min_code_size + 1;
+  
+  code = clear_code;
+  
+  bit_length = bit_position = 0;
+  /* Thus the `Read in the next data block.' code below will be invoked on the
+     first time through: exactly right! */
+  
+  while (1) {
+    
+    old_code = code;
+    
+    /* GET A CODE INTO THE `code' VARIABLE.
+     * 
+     * 9.Dec.1998 - Rather than maintain a byte pointer and a bit offset into
+     * the current byte (and the processing associated with that), we maintain
+     * one number: the offset, in bits, from the beginning of `buffer'. This
+     * much cleaner choice was inspired by Patrick J. Naughton
+     * <naughton at wind.sun.com>'s GIF-reading code, which does the same thing.
+     * His code distributed as part of XV in xvgif.c. */
+    
+    if (bit_position + bits_needed > bit_length)
+      /* Read in the next data block. */
+      if (!read_image_block(grr, buffer, &bit_position, &bit_length,
+			    bits_needed))
+	goto zero_length_block;
+    
+    i = bit_position / 8;
+    accum = buffer[i] + (buffer[i+1] << 8);
+    if (bits_needed >= 8)
+      accum |= (buffer[i+2]) << 16;
+    code = (Gif_Code)((accum >> (bit_position % 8)) & CUR_CODE_MASK);
+    bit_position += bits_needed;
+    
+    GIF_DEBUG(("%d", code));
+    
+    /* CHECK FOR SPECIAL OR BAD CODES: clear_code, eoi_code, or a code that is
+     * too large. */
+    if (code == clear_code) {
+      bits_needed = min_code_size + 1;
+      next_code = eoi_code;
+      continue;
+      
+    } else if (code == eoi_code)
+      break;
+    
+    else if (code > next_code && next_code) {
+      /* code > next_code: a (hopefully recoverable) error.
+	 
+	 Bug fix, 5/27: Do this even if old_code == clear_code, and set code
+	 to 0 to prevent errors later. (If we didn't zero code, we'd later set
+	 old_code = code; then we had old_code >= next_code; so the prefixes
+	 array got all screwed up!) */
+      gif_read_error(gfc, "unexpected code");
+      code = 0;
+    }
+    
+    /* PROCESS THE CURRENT CODE and define the next code. If no meaningful
+     * next code should be defined, then we have set next_code to either
+     * `eoi_code' or `clear_code' -- so we'll store useless prefix/suffix data
+     * in a useless place. */
+    
+    /* *First,* set up the prefix and length for the next code
+       (in case code == next_code). */
+    gfc->prefix[next_code] = old_code;
+    gfc->length[next_code] = gfc->length[old_code] + 1;
+    
+    /* Use one_code to process code. It's nice that it returns the first
+       pixel in code: that's what we need. */
+    gfc->suffix[next_code] = one_code(gfc, code);
+    
+    /* Special processing if code == next_code: we didn't know code's final
+       suffix when we called one_code, but we do now. */
+    if (code == next_code)
+      gfc->image[gfc->decodepos - 1] = gfc->suffix[next_code];
+    
+    /* Increment next_code except for the `clear_code' special case (that's
+       when we're reading at the end of a GIF) */
+    if (next_code != clear_code) {
+      next_code++;
+      if (next_code == CUR_BUMP_CODE) {
+	if (bits_needed < GIF_MAX_CODE_BITS)
+	  bits_needed++;
+	else
+	  next_code = clear_code;
+      }
+    }
+    
+  }
+  
+  /* read blocks until zero-length reached. */
+  i = gifgetbyte(grr);
+  GIF_DEBUG(("\nafter_image(%d)\n", i));
+  while (i > 0) {
+    gifgetblock(buffer, i, grr);
+    i = gifgetbyte(grr);
+    GIF_DEBUG(("\nafter_image(%d)\n", i));
+  }
+  
+  /* zero-length block reached. */
+ zero_length_block:
+  
+  if (gfc->image + gfc->decodepos < gfc->maximage)
+    gif_read_error(gfc, "not enough image data for image size");
+  else if (gfc->image + gfc->decodepos > gfc->maximage)
+    gif_read_error(gfc, "too much image data for image size");
+}
+
+
+static Gif_Colormap *
+read_color_table(int size, Gif_Reader *grr)
+{
+  Gif_Colormap *gfcm = Gif_NewFullColormap(size, size);
+  Gif_Color *c;
+  if (!gfcm) return 0;
+  
+  GIF_DEBUG(("colormap(%d)", size));
+  for (c = gfcm->col; size; size--, c++) {
+    c->red = gifgetbyte(grr);
+    c->green = gifgetbyte(grr);
+    c->blue = gifgetbyte(grr);
+    c->haspixel = 0;
+  }
+  
+  return gfcm;
+}
+
+
+static int
+read_logical_screen_descriptor(Gif_Stream *gfs, Gif_Reader *grr)
+     /* returns 0 on memory error */
+{
+  uint8_t packed;
+  
+  /* we don't care about logical screen width or height */
+  gfs->screen_width = gifgetunsigned(grr);
+  gfs->screen_height = gifgetunsigned(grr);
+  
+  packed = gifgetbyte(grr);
+  gfs->background = gifgetbyte(grr);
+  
+  /* don't care about pixel aspect ratio */
+  gifgetbyte(grr);
+  
+  if (packed & 0x80) { /* have a global color table */
+    int ncol = 1 << ((packed & 0x07) + 1);
+    gfs->global = read_color_table(ncol, grr);
+    if (!gfs->global) return 0;
+    gfs->global->refcount = 1;
+  }
+  
+  return 1;
+}
+
+
+static int
+read_compressed_image(Gif_Image *gfi, Gif_Reader *grr, int read_flags)
+{
+  if (grr->is_record) {
+    const uint8_t *first = grr->v;
+    uint32_t pos;
+    
+    /* scan over image */
+    pos = 1;			/* skip min code size */
+    while (pos < grr->w) {
+      int amt = grr->v[pos];
+      pos += amt + 1;
+      if (amt == 0) break;
+    }
+    if (pos > grr->w) pos = grr->w;
+    
+    gfi->compressed_len = pos;
+    if (read_flags & GIF_READ_CONST_RECORD) {
+      gfi->compressed = (uint8_t *)first;
+      gfi->free_compressed = 0;
+    } else {
+      gfi->compressed = Gif_NewArray(uint8_t, gfi->compressed_len);
+      gfi->free_compressed = Gif_DeleteArrayFunc;
+      if (!gfi->compressed) return 0;
+      memcpy(gfi->compressed, first, gfi->compressed_len);
+    }
+    
+    /* move reader over that image */
+    grr->v += pos;
+    grr->w -= pos;
+    
+  } else {
+    /* non-record; have to read it block by block. */
+    uint32_t comp_cap = 1024;
+    uint32_t comp_len;
+    uint8_t *comp = Gif_NewArray(uint8_t, comp_cap);
+    int i;
+    if (!comp) return 0;
+    
+    /* min code size */
+    i = gifgetbyte(grr);
+    comp[0] = i;
+    comp_len = 1;
+    
+    i = gifgetbyte(grr);
+    while (i > 0) {
+      /* add 2 before check so we don't have to check after loop when appending
+	 0 block */
+      if (comp_len + i + 2 > comp_cap) {
+	comp_cap *= 2;
+	Gif_ReArray(comp, uint8_t, comp_cap);
+	if (!comp) return 0;
+      }
+      comp[comp_len] = i;
+      gifgetblock(comp + comp_len + 1, i, grr);
+      comp_len += i + 1;
+      i = gifgetbyte(grr);
+    }
+    comp[comp_len++] = 0;
+    
+    gfi->compressed = comp;
+    gfi->compressed_len = comp_len;
+    gfi->free_compressed = Gif_DeleteArrayFunc;
+  }
+  
+  return 1;
+}
+
+
+static int
+uncompress_image(Gif_Context *gfc, Gif_Image *gfi, Gif_Reader *grr)
+{
+  if (!Gif_CreateUncompressedImage(gfi)) return 0;
+  gfc->width = gfi->width;
+  gfc->height = gfi->height;
+  gfc->image = gfi->image_data;
+  gfc->maximage = gfi->image_data + gfi->width * gfi->height;
+  read_image_data(gfc, grr);
+  return 1;
+}
+
+
+int
+Gif_FullUncompressImage(Gif_Image *gfi, Gif_ReadErrorHandler h, void *hthunk)
+{
+  Gif_Context gfc;
+  Gif_Stream fake_gfs;
+  Gif_Reader grr;
+  int ok = 0;
+  
+  /* return right away if image is already uncompressed. this might screw over
+     people who expect re-uncompressing to restore the compressed version. */
+  if (gfi->img)
+    return 1;
+  if (gfi->image_data)
+    /* we have uncompressed data, but not an `img' array;
+       this shouldn't happen */
+    return 0;
+  
+  fake_gfs.errors = 0;
+  gfc.stream = &fake_gfs;
+  gfc.prefix = Gif_NewArray(Gif_Code, GIF_MAX_CODE);
+  gfc.suffix = Gif_NewArray(uint8_t, GIF_MAX_CODE);
+  gfc.length = Gif_NewArray(uint16_t, GIF_MAX_CODE);
+  gfc.handler = h;
+  gfc.handler_thunk = hthunk;
+  
+  if (gfi && gfc.prefix && gfc.suffix && gfc.length && gfi->compressed) {
+    make_data_reader(&grr, gfi->compressed, gfi->compressed_len);
+    ok = uncompress_image(&gfc, gfi, &grr);
+  }
+  
+  Gif_DeleteArray(gfc.prefix);
+  Gif_DeleteArray(gfc.suffix);
+  Gif_DeleteArray(gfc.length);
+  return ok && !fake_gfs.errors;
+}
+
+
+static int
+read_image(Gif_Reader *grr, Gif_Context *gfc, Gif_Image *gfi, int read_flags)
+     /* returns 0 on memory error */
+{
+  uint8_t packed;
+  
+  gfi->left = gifgetunsigned(grr);
+  gfi->top = gifgetunsigned(grr);
+  gfi->width = gifgetunsigned(grr);
+  gfi->height = gifgetunsigned(grr);
+  packed = gifgetbyte(grr);
+  GIF_DEBUG(("<%ux%u>", gfi->width, gfi->height));
+  
+  if (packed & 0x80) { /* have a local color table */
+    int ncol = 1 << ((packed & 0x07) + 1);
+    gfi->local = read_color_table(ncol, grr);
+    if (!gfi->local) return 0;
+    gfi->local->refcount = 1;
+  }
+  
+  gfi->interlace = (packed & 0x40) != 0;
+  
+  /* Keep the compressed data if asked */
+  if (read_flags & GIF_READ_COMPRESSED) {
+    if (!read_compressed_image(gfi, grr, read_flags))
+      return 0;
+    if (read_flags & GIF_READ_UNCOMPRESSED) {
+      Gif_Reader new_grr;
+      make_data_reader(&new_grr, gfi->compressed, gfi->compressed_len);
+      if (!uncompress_image(gfc, gfi, &new_grr))
+	return 0;
+    }
+    
+  } else if (read_flags & GIF_READ_UNCOMPRESSED) {
+    if (!uncompress_image(gfc, gfi, grr))
+      return 0;
+    
+  } else {
+    /* skip over the image */
+    uint8_t buffer[GIF_MAX_BLOCK];
+    int i = gifgetbyte(grr);
+    while (i > 0) {
+      gifgetblock(buffer, i, grr);
+      i = gifgetbyte(grr);
+    }
+  }
+  
+  return 1;
+}
+
+
+static void
+read_graphic_control_extension(Gif_Context *gfc, Gif_Image *gfi,
+			       Gif_Reader *grr)
+{
+  uint8_t len;
+  uint8_t crap[GIF_MAX_BLOCK];
+  
+  len = gifgetbyte(grr);
+  
+  if (len == 4) {
+    uint8_t packed = gifgetbyte(grr);
+    gfi->disposal = (packed >> 2) & 0x07;
+    gfi->delay = gifgetunsigned(grr);
+    gfi->transparent = gifgetbyte(grr);
+    if (!(packed & 0x01)) /* transparent color doesn't exist */
+      gfi->transparent = -1;
+    len -= 4;
+  }
+  
+  if (len > 0) {
+    gif_read_error(gfc, "odd graphic extension format");
+    gifgetblock(crap, len, grr);
+  }
+  
+  len = gifgetbyte(grr);
+  while (len > 0) {
+    gif_read_error(gfc, "odd graphic extension format");
+    gifgetblock(crap, len, grr);
+    len = gifgetbyte(grr);
+  }
+}
+
+
+static char *last_name;
+
+
+static char *
+suck_data(char *data, int *store_len, Gif_Reader *grr)
+{
+  uint8_t len = gifgetbyte(grr);
+  int total_len = 0;
+  
+  while (len > 0) {
+    Gif_ReArray(data, char, total_len + len + 1);
+    if (!data) return 0;
+    gifgetblock((uint8_t *)data, len, grr);
+    
+    total_len += len;
+    data[total_len] = 0;
+    
+    len = gifgetbyte(grr);
+  }
+  
+  if (store_len) *store_len = total_len;
+  return data;
+}
+
+
+static int
+read_unknown_extension(Gif_Stream *gfs, int kind, char *app_name, int position,
+		       Gif_Reader *grr)
+{
+  uint8_t block_len = gifgetbyte(grr);
+  uint8_t *data = 0;
+  uint8_t data_len = 0;
+  Gif_Extension *gfex = 0;
+
+  while (block_len > 0) {
+    if (data) Gif_ReArray(data, uint8_t, data_len + block_len + 1);
+    else data = Gif_NewArray(uint8_t, block_len + 1);
+    if (!data) goto done;
+    gifgetblock(data + data_len, block_len, grr);
+    data_len += block_len;
+    block_len = gifgetbyte(grr);
+  }
+
+  if (data)
+    gfex = Gif_NewExtension(kind, app_name);
+  if (gfex) {
+    gfex->data = data;
+    gfex->length = data_len;
+    data[data_len] = 0;
+    Gif_AddExtension(gfs, gfex, position);
+  }
+  
+ done:
+  if (!gfex) Gif_DeleteArray(data);
+  while (block_len > 0) {
+    uint8_t buffer[GIF_MAX_BLOCK];
+    gifgetblock(buffer, block_len, grr);
+    block_len = gifgetbyte(grr);
+  }
+  return gfex != 0;
+}
+
+
+static int
+read_application_extension(Gif_Context *gfc, int position, Gif_Reader *grr)
+{
+  Gif_Stream *gfs = gfc->stream;
+  uint8_t buffer[GIF_MAX_BLOCK + 1];
+  uint8_t len = gifgetbyte(grr);
+  gifgetblock(buffer, len, grr);
+  
+  /* Read the Netscape loop extension. */
+  if (len == 11 && memcmp(buffer, "NETSCAPE2.0", 11) == 0) {
+    
+    len = gifgetbyte(grr);
+    if (len == 3) {
+      gifgetbyte(grr); /* throw away the 1 */
+      gfs->loopcount = gifgetunsigned(grr);
+      len = gifgetbyte(grr);
+      if (len) gif_read_error(gfc, "bad loop extension");
+    } else
+      gif_read_error(gfc, "bad loop extension");
+    
+    while (len > 0) {
+      gifgetblock(buffer, len, grr);
+      len = gifgetbyte(grr);
+    }
+    return 1;
+    
+  } else {
+    buffer[len] = 0;
+    return read_unknown_extension(gfs, 0xFF, (char *)buffer, position, grr);
+  }
+}
+
+
+static int
+read_comment_extension(Gif_Image *gfi, Gif_Reader *grr)
+{
+  int len;
+  Gif_Comment *gfcom = gfi->comment;
+  char *m = suck_data(0, &len, grr);
+  if (m) {
+    if (!gfcom)
+      gfcom = gfi->comment = Gif_NewComment();
+    if (!gfcom || !Gif_AddCommentTake(gfcom, m, len))
+      return 0;
+  }
+  return 1;
+}
+
+
+static Gif_Stream *
+read_gif(Gif_Reader *grr, int read_flags,
+	 Gif_ReadErrorHandler handler, void *handler_thunk)
+{
+  Gif_Stream *gfs;
+  Gif_Image *gfi;
+  Gif_Image *new_gfi;
+  Gif_Context gfc;
+  int extension_position = 0;
+  int unknown_block_type = 0;
+  
+  if (gifgetc(grr) != 'G' ||
+      gifgetc(grr) != 'I' ||
+      gifgetc(grr) != 'F')
+    return 0;
+  (void)gifgetc(grr);
+  (void)gifgetc(grr);
+  (void)gifgetc(grr);
+  
+  gfs = Gif_NewStream();
+  gfi = Gif_NewImage();
+  
+  gfc.stream = gfs;
+  gfc.prefix = Gif_NewArray(Gif_Code, GIF_MAX_CODE);
+  gfc.suffix = Gif_NewArray(uint8_t, GIF_MAX_CODE);
+  gfc.length = Gif_NewArray(uint16_t, GIF_MAX_CODE);
+  gfc.handler = handler;
+  gfc.handler_thunk = handler_thunk;
+  
+  if (!gfs || !gfi || !gfc.prefix || !gfc.suffix || !gfc.length)
+    goto done;
+  
+  GIF_DEBUG(("\nGIF"));
+  if (!read_logical_screen_descriptor(gfs, grr))
+    goto done;
+  GIF_DEBUG(("logscrdesc"));
+  
+  while (!gifeof(grr)) {
+    
+    uint8_t block = gifgetbyte(grr);
+    
+    switch (block) {
+      
+     case ',': /* image block */
+      GIF_DEBUG(("imageread %d", gfs->nimages));
+      
+      gfi->identifier = last_name;
+      last_name = 0;
+      if (!read_image(grr, &gfc, gfi, read_flags)
+	  || !Gif_AddImage(gfs, gfi)) {
+	Gif_DeleteImage(gfi);
+	goto done;
+      }
+      
+      new_gfi = Gif_NewImage();
+      if (!new_gfi) goto done;
+      
+      gfi = new_gfi;
+      extension_position++;
+      break;
+      
+     case ';': /* terminator */
+      GIF_DEBUG(("term\n"));
+      goto done;
+      
+     case '!': /* extension */
+      block = gifgetbyte(grr);
+      GIF_DEBUG(("ext(0x%02X)", block));
+      switch (block) {
+	
+       case 0xF9:
+	read_graphic_control_extension(&gfc, gfi, grr);
+	break;
+	
+       case 0xCE:
+	last_name = suck_data(last_name, 0, grr);
+	break;
+	
+       case 0xFE:
+	if (!read_comment_extension(gfi, grr)) goto done;
+	break;
+	
+       case 0xFF:
+	read_application_extension(&gfc, extension_position, grr);
+	break;
+	
+       default:
+	read_unknown_extension(gfs, block, 0, extension_position, grr);
+	break;
+
+      }
+      break;
+      
+     default:
+       if (!unknown_block_type) {
+	 char buf[256];
+	 sprintf(buf, "unknown block type %d at file offset %d", block, gifgetoffset(grr) - 1);
+	 gif_read_error(&gfc, buf);
+	 unknown_block_type = 1;
+       }
+       break;
+      
+    }
+    
+  }
+  
+ done:
+  
+  /* Move comments after last image into stream. */
+  gfs->comment = gfi->comment;
+  gfi->comment = 0;
+  
+  Gif_DeleteImage(gfi);
+  Gif_DeleteArray(last_name);
+  Gif_DeleteArray(gfc.prefix);
+  Gif_DeleteArray(gfc.suffix);
+  Gif_DeleteArray(gfc.length);
+
+  if (gfs->errors == 0 && !(read_flags & GIF_READ_TRAILING_GARBAGE_OK) && !grr->eofer(grr)) {
+    gif_read_error(&gfc, "trailing garbage after GIF ignored");
+    /* but clear error count, since the GIF itself was all right */
+    gfs->errors = 0;
+  }
+  
+  return gfs;
+}
+
+
+Gif_Stream *
+Gif_FullReadFile(FILE *f, int read_flags,
+		 Gif_ReadErrorHandler h, void *hthunk)
+{
+  Gif_Reader grr;
+  if (!f) return 0;
+  grr.f = f;
+  grr.is_record = 0;
+  grr.byte_getter = file_byte_getter;
+  grr.block_getter = file_block_getter;
+  grr.offseter = file_offseter;
+  grr.eofer = file_eofer;
+  return read_gif(&grr, read_flags, h, hthunk);
+}
+
+Gif_Stream *
+Gif_FullReadRecord(const Gif_Record *gifrec, int read_flags,
+		   Gif_ReadErrorHandler h, void *hthunk)
+{
+  Gif_Reader grr;
+  if (!gifrec) return 0;
+  make_data_reader(&grr, gifrec->data, gifrec->length);
+  if (read_flags & GIF_READ_CONST_RECORD)
+    read_flags |= GIF_READ_COMPRESSED;
+  return read_gif(&grr, read_flags, h, hthunk);
+}
+
+
+#undef Gif_ReadFile
+#undef Gif_ReadRecord
+
+Gif_Stream *
+Gif_ReadFile(FILE *f)
+{
+  return Gif_FullReadFile(f, GIF_READ_UNCOMPRESSED, 0, 0);
+}
+
+Gif_Stream *
+Gif_ReadRecord(const Gif_Record *gifrec)
+{
+  return Gif_FullReadRecord(gifrec, GIF_READ_UNCOMPRESSED, 0, 0);
+}
+
+
+#ifdef __cplusplus
+}
+#endif
diff --git a/platypus/wmcoincoin_player.c b/platypus/wmcoincoin_player.c
new file mode 100644
index 0000000..b11239a
--- /dev/null
+++ b/platypus/wmcoincoin_player.c
@@ -0,0 +1,297 @@
+
+#include <X11/Xlib.h>
+#include <X11/extensions/XShm.h>
+#include <X11/Xutil.h>
+#include <X11/extensions/shape.h>
+#include <X11/Xatom.h>
+#include <X11/Xos.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <sys/time.h>
+#include <sys/types.h>
+#include <unistd.h>
+#include <errno.h>
+#include "Imlib2.h"
+#include "config.h"
+#include "gif.h"
+Display *disp = 0;
+Window   win = None;
+Pixmap   pm = 0;
+Visual  *vis = 0;
+Colormap cm;
+int      depth;
+
+
+#define MAX(a,b) ((a)<(b) ? (b) : (a))
+#define MIN(a,b) ((a)>(b) ? (b) : (a))
+
+struct _Prefs {
+  int timeout_exit;
+  char *totoz_path;
+  float zoom;
+  unsigned bgcolor;
+} prefs;
+
+typedef struct _Anim {
+  int nimg;
+  Imlib_Image **imgs;
+  int *delay;
+  int loopcnt;
+  int width, height;
+  DATA32 *data;
+} Anim;
+
+
+Anim anim;
+
+static void init_prefs() {
+  char s[1024];
+  prefs.timeout_exit = 30;
+  snprintf(s, 1024, "%s/.wmcoincoin/totoz", getenv("HOME"));
+  prefs.totoz_path = strdup(s);
+  prefs.zoom = 1.0;
+  prefs.bgcolor = 0x00ffffff;
+}
+
+static void init_anim() {
+  anim.nimg = 0;
+  anim.imgs = NULL;
+  anim.delay = 0;
+  anim.loopcnt = -1;
+  anim.width = anim.height = 0;
+  anim.data = 0;
+}
+
+void
+main_loop() {
+  int w = MAX((int)(anim.width * prefs.zoom + .5),1);
+  int h = MAX((int)(anim.height * prefs.zoom + .5),1);
+
+
+  XResizeWindow(disp, win, w, h);
+  XMapWindow(disp, win);
+  XSync(disp, False);
+  
+  for(;;) {
+    int img;
+    for (img = 0; img < anim.nimg; ++img) {
+      imlib_context_set_image(anim.imgs[img]);
+      imlib_context_set_anti_alias(1);
+      /*      imlib_render_image_part_on_drawable_at_size(0, 0, anim.width, anim.height,
+                                                  0, 0, anim.width, anim.height);
+      */
+      imlib_render_image_part_on_drawable_at_size(0, 0, anim.width, anim.height,
+                                                  0, 0, w, h);
+      usleep(MAX(anim.delay[img],1) * 8000);
+    }
+  }
+}
+
+int 
+main (int argc, char **argv)
+{
+   char        *fname = NULL;
+   Gif_Stream  *gfs;
+   FILE *f;
+   int query_mode = 0;
+   int stack_mode = 0;
+
+   if (argc < 2)
+      return 1;
+
+   init_prefs();
+   init_anim();
+
+   disp  = XOpenDisplay(NULL);
+   if (argc == 1) {
+     printf("kikou je suis un player pourri\n");
+     printf("mes options toutes plus nazes les unes que les autres sont:\n");
+     printf(" wmcoincoin_player uneimage        pour voir une image\n");
+     printf(" wmcoincoin_player -z unchiffre uneimage  pour voir une image avec un certain facteur de zoom\n");
+     printf(" wmcoincoin_player -i uneimage     pour connaitres les dimensions d'une image\n");
+     printf(" wmcoincoin_player -s uneimage     le stack-mode (pour debeuggai)\n");
+     printf(" le dernier argument, optionel, est l'id de la fenetre a utiliser\n");
+     exit(0);
+   }
+   if (argc >= 3 && strcmp(argv[1], "-i") == 0) {
+     query_mode = 1;
+     argc--; argv++;
+   }
+   if (argc >= 3 && strcmp(argv[1], "-s") == 0) {
+     stack_mode = 1;
+     argc--; argv++;
+   }
+   if (argc >= 3 && strcmp(argv[1], "-z") == 0) {
+     prefs.zoom = atof(argv[2]);
+     argc-=2; argv += 2;
+   }
+   if (argc == 2) {
+     fname  = argv[1];
+     if (!query_mode) {
+       vis   = DefaultVisual(disp, DefaultScreen(disp));
+       depth = DefaultDepth(disp, DefaultScreen(disp));    
+       cm    = DefaultColormap(disp, DefaultScreen(disp));
+       win   = XCreateSimpleWindow(disp, DefaultRootWindow(disp), 0, 0, 10, 10, 
+                                   0, 0, 0);
+       XSelectInput(disp, win, ButtonPressMask | ButtonReleaseMask | 
+                    ButtonMotionMask | PointerMotionMask);
+     }
+   } else {
+     XWindowAttributes attr;
+     unsigned long lwin;
+     sscanf(argv[2],"0x%lx",&lwin); win = lwin;
+     //printf("win=%08lx\n", lwin);
+     fname = argv[1];
+     XGetWindowAttributes(disp, win, &attr);
+     vis = attr.visual;
+     depth = attr.depth;
+     cm = attr.colormap;
+   }
+   if (!query_mode) {
+     imlib_context_set_display(disp);
+     imlib_context_set_visual(vis);
+     imlib_context_set_colormap(cm);
+     /*imlib_context_set_progress_function(progress);*/
+     imlib_context_set_progress_granularity(10);
+     imlib_context_set_drawable(win);
+   }
+   
+   f = fopen(fname, "rb");
+   if (!f) {
+     fprintf(stderr, "%s: %s", fname, strerror(errno));
+     return 1;
+   }
+   gfs = Gif_FullReadFile(f, GIF_READ_COMPRESSED, 0, 0);
+   if (!gfs || Gif_ImageCount(gfs) == 0) {
+     anim.nimg = 1;
+     anim.imgs = Gif_NewArray(Imlib_Image*, anim.nimg);
+     anim.imgs[0] = imlib_load_image(fname);
+     if (anim.imgs[0] == NULL) {
+       fprintf(stderr,"'%s' is not a valid image according to imlib2\n",fname);
+       return 1;
+     }
+     anim.delay = Gif_NewArray(int, anim.nimg);
+     anim.delay[0] = 1000000;
+     anim.loopcnt = -1;
+     imlib_context_set_image(anim.imgs[0]);
+     anim.width  = imlib_image_get_width();
+     anim.height = imlib_image_get_height();
+   } else {
+     int last,disposal;
+     int i, x, y, lastx,lasty,lastw,lasth;
+     anim.width = anim.height = 0;
+     if (stack_mode) {
+       fprintf(stderr, "%s: background=%02x nbcol=%d sw=%d sh=%d\n", fname, gfs->background, gfs->global->ncol, gfs->screen_width, gfs->screen_height);
+       fprintf(stderr, "loopcnt=%ld nimages=%d\n", gfs->loopcount, gfs->nimages);
+     }
+     for (i=0; i < gfs->nimages; ++i) {
+       Gif_Image *gfi = gfs->images[i];
+       if (stack_mode) 
+         fprintf(stderr, "%4d transparent=%04x delay=%d disposal=%d %dx%d+%d+%d ncol=%d\n", i, gfi->transparent, gfi->delay, gfi->disposal, 
+                 gfi->width, gfi->height, gfi->left, gfi->top,gfi->local ? gfi->local->ncol : -1);
+       anim.width = MAX(anim.width, gfi->width + gfi->left);
+       anim.height = MAX(anim.height, gfi->height + gfi->top);
+     }
+
+     anim.data = Gif_NewArray(DATA32, anim.width*anim.height*gfs->nimages);
+     anim.nimg = stack_mode ? 1 : gfs->nimages;
+     anim.imgs = Gif_NewArray(Imlib_Image*, anim.nimg);
+     anim.delay = Gif_NewArray(int, anim.nimg);
+
+     /*
+       The thing to remember about Restore to Previous is that it's not
+       necessarily the first frame of the animation that will be restored but
+       the last frame set to Unspecified or Do Not Dispose. And the most
+       important fact is that Netscape doesn't correctly support Restore to
+       Previous. It treats Restore to Previous as Do Not Dispose, so the the
+       last frame -- not the last undisposed frame -- shows through empty or
+       transparent areas. Microsoft Internet Explorer 3.0 does handle Restore
+       to Previous correctly.
+     */
+
+     last = -1;
+     lastx = 0; lasty = 0; lastw = anim.width; lasth = anim.height;
+     disposal = GIF_DISPOSAL_NONE; //gfs->images[gfs->nimages-1]->disposal;
+     for (i=0; i < gfs->nimages; ++i) {
+       DATA32 *data = anim.data + anim.width*anim.height*i;
+       Gif_Image *gfi = gfs->images[i];
+       int k;
+       //disposal = gfi->disposal;
+       if (!gfi->img && !gfi->image_data && gfi->compressed) {
+         Gif_UncompressImage(gfi);
+       }
+       if (i) memcpy(data, data - anim.width*anim.height , anim.width*anim.height*sizeof(int));
+       if ((disposal == GIF_DISPOSAL_NONE || 
+            disposal == GIF_DISPOSAL_BACKGROUND) || last == -1 || stack_mode) {
+         for (y=0; y < lasth; ++y) {
+           for (x=0; x < lastw; ++x) {
+             unsigned pos = (y+lasty)*anim.width + x + lastx;
+             data[pos] = prefs.bgcolor;
+           }
+         }
+       } else {
+         int l = last;
+         if (i && disposal != GIF_DISPOSAL_ASIS) l = i-1;
+         if (disposal == GIF_DISPOSAL_ASIS)
+           for (k=0; k < anim.width*anim.height; ++k) data[k] = anim.data[l*anim.width*anim.height + k];
+         else
+           for (y=0; y < lasth; ++y) {
+             for (x=0; x < lastw; ++x) {
+               unsigned pos = (y+lasty)*anim.width + x + lastx;
+               data[pos] = data[pos - l*anim.width*anim.height];
+             }
+           }
+         
+       }
+
+       for (y=0; y < gfi->height; ++y) {
+         for (x=0; x < gfi->width; ++x) {
+           Gif_Color *c;
+           DATA32 p;
+           unsigned pos;
+           if (gfi->local) {
+             c = &gfi->local->col[gfi->img[y][x]];
+           } else {
+             c = &gfs->global->col[gfi->img[y][x]];
+           }           
+           p = (0 << 24) + (c->red << 16) + (c->green << 8) + c->blue;
+           pos = (y+gfi->top)*anim.width + x + gfi->left;
+           if (gfi->img[y][x] != gfi->transparent) {
+             //if (gfi->img[y][x] == gfi->transparent || gfi->img[y][x] == gfs->background) p = prefs.bgcolor;
+             data[pos] = p;
+             /*           } else if (i) {
+                          data[pos] = anim.data[(i-1)*anim.width*anim.height+pos]; // pour grand%2Dpas.gif ..*/
+           } else if (stack_mode) {
+             data[pos] = 0xffffff00;
+           }
+         }
+       }
+       if (stack_mode == 0) {
+         anim.imgs[i] = imlib_create_image_using_copied_data(anim.width, anim.height, data);
+         anim.loopcnt = gfs->loopcount;
+         anim.delay[i] = gfi->delay;
+         if (disposal == GIF_DISPOSAL_NONE || disposal == GIF_DISPOSAL_ASIS)
+           last = i;
+       } else if (i == gfs->nimages-1) {
+         anim.imgs[0] = imlib_create_image_using_copied_data(anim.width, anim.height*gfs->nimages, anim.data);
+         anim.height *= gfs->nimages;
+       }
+       disposal = gfi->disposal;
+       lastx = gfi->left; lasty = gfi->top; lastw = gfi->width; lasth = gfi->height;
+     }
+     //imlib_save_image("test.png");
+     //progress(anim.imgs[0], 100, 0, 0, 1000, 1000);
+     //data = imlib_image_get_data_for_reading_only();
+   }
+   if (anim.nimg == 0 || !anim.imgs[0]) {
+     fprintf(stderr, "Image format not available\n");
+     exit(1);
+   } else if (query_mode) {
+     printf("%dx%d\n", anim.width, anim.height);
+     exit(0);
+   }
+   main_loop();
+
+   return 0;
+}
diff --git a/po/ChangeLog b/po/ChangeLog
new file mode 100644
index 0000000..6cad02a
--- /dev/null
+++ b/po/ChangeLog
@@ -0,0 +1,32 @@
+2012-07-02  gettextize  <bug-gnu-gettext at gnu.org>
+
+	* Makefile.in.in: Upgrade to gettext-0.17.
+	* Rules-quot: Upgrade to gettext-0.17.
+
+2002-08-18  gettextize  <bug-gnu-gettext at gnu.org>
+
+	* Makefile.in.in: Upgrade to gettext-0.11.5.
+
+2002-08-17  gettextize  <bug-gnu-gettext at gnu.org>
+
+	* Makefile.in.in: Upgrade to gettext-0.11.5.
+
+2002-08-17  gettextize  <bug-gnu-gettext at gnu.org>
+
+	* Makefile.in.in: Upgrade to gettext-0.11.2.
+	* boldquot.sed: New file, from gettext-0.11.2.
+	* en at boldquot.header: New file, from gettext-0.11.2.
+	* en at quot.header: New file, from gettext-0.11.2.
+	* insert-header.sin: New file, from gettext-0.11.2.
+	* quot.sed: New file, from gettext-0.11.2.
+	* remove-potcdate.sin: New file, from gettext-0.11.2.
+	* Rules-quot: New file, from gettext-0.11.2.
+
+2002-06-23  gettextize  <bug-gnu-utils at gnu.org>
+
+	* Makefile.in.in: Upgrade to gettext-0.10.40.
+
+2002-06-23  gettextize  <bug-gnu-utils at gnu.org>
+
+	* Makefile.in.in: Upgrade to gettext-0.10.40.
+
diff --git a/po/Makefile.in.in b/po/Makefile.in.in
new file mode 100644
index 0000000..fecf500
--- /dev/null
+++ b/po/Makefile.in.in
@@ -0,0 +1,429 @@
+# Makefile for PO directory in any package using GNU gettext.
+# Copyright (C) 1995-1997, 2000-2007 by Ulrich Drepper <drepper at gnu.ai.mit.edu>
+#
+# This file can be copied and used freely without restrictions.  It can
+# be used in projects which are not available under the GNU General Public
+# License but which still want to provide support for the GNU gettext
+# functionality.
+# Please note that the actual code of GNU gettext is covered by the GNU
+# General Public License and is *not* in the public domain.
+#
+# Origin: gettext-0.17
+GETTEXT_MACRO_VERSION = 0.17
+
+PACKAGE = @PACKAGE@
+VERSION = @VERSION@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+
+SHELL = /bin/sh
+ at SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+datarootdir = @datarootdir@
+datadir = @datadir@
+localedir = @localedir@
+gettextsrcdir = $(datadir)/gettext/po
+
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+
+# We use $(mkdir_p).
+# In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as
+# "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions,
+# @install_sh@ does not start with $(SHELL), so we add it.
+# In automake >= 1.10, @mkdir_p@ is derived from ${MKDIR_P}, which is defined
+# either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake
+# versions, $(mkinstalldirs) and $(install_sh) are unused.
+mkinstalldirs = $(SHELL) @install_sh@ -d
+install_sh = $(SHELL) @install_sh@
+MKDIR_P = @MKDIR_P@
+mkdir_p = @mkdir_p@
+
+GMSGFMT_ = @GMSGFMT@
+GMSGFMT_no = @GMSGFMT@
+GMSGFMT_yes = @GMSGFMT_015@
+GMSGFMT = $(GMSGFMT_$(USE_MSGCTXT))
+MSGFMT_ = @MSGFMT@
+MSGFMT_no = @MSGFMT@
+MSGFMT_yes = @MSGFMT_015@
+MSGFMT = $(MSGFMT_$(USE_MSGCTXT))
+XGETTEXT_ = @XGETTEXT@
+XGETTEXT_no = @XGETTEXT@
+XGETTEXT_yes = @XGETTEXT_015@
+XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT))
+MSGMERGE = msgmerge
+MSGMERGE_UPDATE = @MSGMERGE@ --update
+MSGINIT = msginit
+MSGCONV = msgconv
+MSGFILTER = msgfilter
+
+POFILES = @POFILES@
+GMOFILES = @GMOFILES@
+UPDATEPOFILES = @UPDATEPOFILES@
+DUMMYPOFILES = @DUMMYPOFILES@
+DISTFILES.common = Makefile.in.in remove-potcdate.sin \
+$(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3)
+DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \
+$(POFILES) $(GMOFILES) \
+$(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3)
+
+POTFILES = \
+
+CATALOGS = @CATALOGS@
+
+# Makevars gets inserted here. (Don't remove this line!)
+
+.SUFFIXES:
+.SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update
+
+.po.mo:
+	@echo "$(MSGFMT) -c -o $@ $<"; \
+	$(MSGFMT) -c -o t-$@ $< && mv t-$@ $@
+
+.po.gmo:
+	@lang=`echo $* | sed -e 's,.*/,,'`; \
+	test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+	echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o $${lang}.gmo $${lang}.po"; \
+	cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo
+
+.sin.sed:
+	sed -e '/^#/d' $< > t-$@
+	mv t-$@ $@
+
+
+all: check-macro-version all- at USE_NLS@
+
+all-yes: stamp-po
+all-no:
+
+# Ensure that the gettext macros and this Makefile.in.in are in sync.
+check-macro-version:
+	@test "$(GETTEXT_MACRO_VERSION)" = "@GETTEXT_MACRO_VERSION@" \
+	  || { echo "*** error: gettext infrastructure mismatch: using a Makefile.in.in from gettext version $(GETTEXT_MACRO_VERSION) but the autoconf macros are from gettext version @GETTEXT_MACRO_VERSION@" 1>&2; \
+	       exit 1; \
+	     }
+
+# $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no
+# internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because
+# we don't want to bother translators with empty POT files). We assume that
+# LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty.
+# In this case, stamp-po is a nop (i.e. a phony target).
+
+# stamp-po is a timestamp denoting the last time at which the CATALOGS have
+# been loosely updated. Its purpose is that when a developer or translator
+# checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS,
+# "make" will update the $(DOMAIN).pot and the $(CATALOGS), but subsequent
+# invocations of "make" will do nothing. This timestamp would not be necessary
+# if updating the $(CATALOGS) would always touch them; however, the rule for
+# $(POFILES) has been designed to not touch files that don't need to be
+# changed.
+stamp-po: $(srcdir)/$(DOMAIN).pot
+	test ! -f $(srcdir)/$(DOMAIN).pot || \
+	  test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES)
+	@test ! -f $(srcdir)/$(DOMAIN).pot || { \
+	  echo "touch stamp-po" && \
+	  echo timestamp > stamp-poT && \
+	  mv stamp-poT stamp-po; \
+	}
+
+# Note: Target 'all' must not depend on target '$(DOMAIN).pot-update',
+# otherwise packages like GCC can not be built if only parts of the source
+# have been downloaded.
+
+# This target rebuilds $(DOMAIN).pot; it is an expensive operation.
+# Note that $(DOMAIN).pot is not touched if it doesn't need to be changed.
+$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed
+	if LC_ALL=C grep 'GNU @PACKAGE@' $(top_srcdir)/* 2>/dev/null | grep -v 'libtool:' >/dev/null; then \
+	  package_gnu='GNU '; \
+	else \
+	  package_gnu=''; \
+	fi; \
+	if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \
+	  msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \
+	else \
+	  msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \
+	fi; \
+	case `$(XGETTEXT) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \
+	  '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].* | 0.16 | 0.16.[0-1]*) \
+	    $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
+	      --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \
+	      --files-from=$(srcdir)/POTFILES.in \
+	      --copyright-holder='$(COPYRIGHT_HOLDER)' \
+	      --msgid-bugs-address="$$msgid_bugs_address" \
+	    ;; \
+	  *) \
+	    $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
+	      --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \
+	      --files-from=$(srcdir)/POTFILES.in \
+	      --copyright-holder='$(COPYRIGHT_HOLDER)' \
+	      --package-name="$${package_gnu}@PACKAGE@" \
+	      --package-version='@VERSION@' \
+	      --msgid-bugs-address="$$msgid_bugs_address" \
+	    ;; \
+	esac
+	test ! -f $(DOMAIN).po || { \
+	  if test -f $(srcdir)/$(DOMAIN).pot; then \
+	    sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \
+	    sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \
+	    if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \
+	      rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \
+	    else \
+	      rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \
+	      mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
+	    fi; \
+	  else \
+	    mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \
+	  fi; \
+	}
+
+# This rule has no dependencies: we don't need to update $(DOMAIN).pot at
+# every "make" invocation, only create it when it is missing.
+# Only "make $(DOMAIN).pot-update" or "make dist" will force an update.
+$(srcdir)/$(DOMAIN).pot:
+	$(MAKE) $(DOMAIN).pot-update
+
+# This target rebuilds a PO file if $(DOMAIN).pot has changed.
+# Note that a PO file is not touched if it doesn't need to be changed.
+$(POFILES): $(srcdir)/$(DOMAIN).pot
+	@lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \
+	if test -f "$(srcdir)/$${lang}.po"; then \
+	  test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+	  echo "$${cdcmd}$(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot"; \
+	  cd $(srcdir) && $(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot; \
+	else \
+	  $(MAKE) $${lang}.po-create; \
+	fi
+
+
+install: install-exec install-data
+install-exec:
+install-data: install-data- at USE_NLS@
+	if test "$(PACKAGE)" = "gettext-tools"; then \
+	  $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
+	  for file in $(DISTFILES.common) Makevars.template; do \
+	    $(INSTALL_DATA) $(srcdir)/$$file \
+			    $(DESTDIR)$(gettextsrcdir)/$$file; \
+	  done; \
+	  for file in Makevars; do \
+	    rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
+	  done; \
+	else \
+	  : ; \
+	fi
+install-data-no: all
+install-data-yes: all
+	$(mkdir_p) $(DESTDIR)$(datadir)
+	@catalogs='$(CATALOGS)'; \
+	for cat in $$catalogs; do \
+	  cat=`basename $$cat`; \
+	  lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+	  dir=$(localedir)/$$lang/LC_MESSAGES; \
+	  $(mkdir_p) $(DESTDIR)$$dir; \
+	  if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \
+	  $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \
+	  echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \
+	  for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
+	    if test -n "$$lc"; then \
+	      if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
+	        link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
+	        mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+	        mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+	        (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
+	         for file in *; do \
+	           if test -f $$file; then \
+	             ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
+	           fi; \
+	         done); \
+	        rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+	      else \
+	        if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
+	          :; \
+	        else \
+	          rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
+	          mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+	        fi; \
+	      fi; \
+	      rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+	      ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
+	      ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \
+	      cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+	      echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \
+	    fi; \
+	  done; \
+	done
+
+install-strip: install
+
+installdirs: installdirs-exec installdirs-data
+installdirs-exec:
+installdirs-data: installdirs-data- at USE_NLS@
+	if test "$(PACKAGE)" = "gettext-tools"; then \
+	  $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \
+	else \
+	  : ; \
+	fi
+installdirs-data-no:
+installdirs-data-yes:
+	$(mkdir_p) $(DESTDIR)$(datadir)
+	@catalogs='$(CATALOGS)'; \
+	for cat in $$catalogs; do \
+	  cat=`basename $$cat`; \
+	  lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+	  dir=$(localedir)/$$lang/LC_MESSAGES; \
+	  $(mkdir_p) $(DESTDIR)$$dir; \
+	  for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \
+	    if test -n "$$lc"; then \
+	      if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \
+	        link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \
+	        mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+	        mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+	        (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \
+	         for file in *; do \
+	           if test -f $$file; then \
+	             ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \
+	           fi; \
+	         done); \
+	        rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \
+	      else \
+	        if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \
+	          :; \
+	        else \
+	          rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \
+	          mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \
+	        fi; \
+	      fi; \
+	    fi; \
+	  done; \
+	done
+
+# Define this as empty until I found a useful application.
+installcheck:
+
+uninstall: uninstall-exec uninstall-data
+uninstall-exec:
+uninstall-data: uninstall-data- at USE_NLS@
+	if test "$(PACKAGE)" = "gettext-tools"; then \
+	  for file in $(DISTFILES.common) Makevars.template; do \
+	    rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \
+	  done; \
+	else \
+	  : ; \
+	fi
+uninstall-data-no:
+uninstall-data-yes:
+	catalogs='$(CATALOGS)'; \
+	for cat in $$catalogs; do \
+	  cat=`basename $$cat`; \
+	  lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+	  for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \
+	    rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \
+	  done; \
+	done
+
+check: all
+
+info dvi ps pdf html tags TAGS ctags CTAGS ID:
+
+mostlyclean:
+	rm -f remove-potcdate.sed
+	rm -f stamp-poT
+	rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po
+	rm -fr *.o
+
+clean: mostlyclean
+
+distclean: clean
+	rm -f Makefile Makefile.in POTFILES *.mo
+
+maintainer-clean: distclean
+	@echo "This command is intended for maintainers to use;"
+	@echo "it deletes files that may require special tools to rebuild."
+	rm -f stamp-po $(GMOFILES)
+
+distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir)
+dist distdir:
+	$(MAKE) update-po
+	@$(MAKE) dist2
+# This is a separate target because 'update-po' must be executed before.
+dist2: stamp-po $(DISTFILES)
+	dists="$(DISTFILES)"; \
+	if test "$(PACKAGE)" = "gettext-tools"; then \
+	  dists="$$dists Makevars.template"; \
+	fi; \
+	if test -f $(srcdir)/$(DOMAIN).pot; then \
+	  dists="$$dists $(DOMAIN).pot stamp-po"; \
+	fi; \
+	if test -f $(srcdir)/ChangeLog; then \
+	  dists="$$dists ChangeLog"; \
+	fi; \
+	for i in 0 1 2 3 4 5 6 7 8 9; do \
+	  if test -f $(srcdir)/ChangeLog.$$i; then \
+	    dists="$$dists ChangeLog.$$i"; \
+	  fi; \
+	done; \
+	if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \
+	for file in $$dists; do \
+	  if test -f $$file; then \
+	    cp -p $$file $(distdir) || exit 1; \
+	  else \
+	    cp -p $(srcdir)/$$file $(distdir) || exit 1; \
+	  fi; \
+	done
+
+update-po: Makefile
+	$(MAKE) $(DOMAIN).pot-update
+	test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES)
+	$(MAKE) update-gmo
+
+# General rule for creating PO files.
+
+.nop.po-create:
+	@lang=`echo $@ | sed -e 's/\.po-create$$//'`; \
+	echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \
+	exit 1
+
+# General rule for updating PO files.
+
+.nop.po-update:
+	@lang=`echo $@ | sed -e 's/\.po-update$$//'`; \
+	if test "$(PACKAGE)" = "gettext-tools"; then PATH=`pwd`/../src:$$PATH; fi; \
+	tmpdir=`pwd`; \
+	echo "$$lang:"; \
+	test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+	echo "$${cdcmd}$(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \
+	cd $(srcdir); \
+	if $(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$tmpdir/$$lang.new.po; then \
+	  if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
+	    rm -f $$tmpdir/$$lang.new.po; \
+	  else \
+	    if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
+	      :; \
+	    else \
+	      echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
+	      exit 1; \
+	    fi; \
+	  fi; \
+	else \
+	  echo "msgmerge for $$lang.po failed!" 1>&2; \
+	  rm -f $$tmpdir/$$lang.new.po; \
+	fi
+
+$(DUMMYPOFILES):
+
+update-gmo: Makefile $(GMOFILES)
+	@:
+
+Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@
+	cd $(top_builddir) \
+	  && $(SHELL) ./config.status $(subdir)/$@.in po-directories
+
+force:
+
+# Tell versions [3.59,3.63) of GNU make not to export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/po/Makevars b/po/Makevars
new file mode 100644
index 0000000..573228c
--- /dev/null
+++ b/po/Makevars
@@ -0,0 +1,25 @@
+# Makefile variables for PO directory in any package using GNU gettext.
+
+# Usually the message domain is the same as the package name.
+DOMAIN = $(PACKAGE)
+
+# These two variables depend on the location of this directory.
+subdir = po
+top_builddir = ..
+
+# These options get passed to xgettext.
+XGETTEXT_OPTIONS = --from-code=iso-8859-1 --keyword=_ --keyword=N_
+
+# This is the copyright holder that gets inserted into the header of the
+# $(DOMAIN).pot file.  Set this to the copyright holder of the surrounding
+# package.  (Note that the msgstr strings, extracted from the package's
+# sources, belong to the copyright holder of the package.)  Translators are
+# expected to transfer the copyright for their translations to this person
+# or entity, or to disclaim their copyright.  The empty string stands for
+# the public domain; in this case the translators are expected to disclaim
+# their copyright.
+COPYRIGHT_HOLDER = Free Software Foundation, Inc.
+
+# This is the list of locale categories, beyond LC_MESSAGES, for which the
+# message catalogs shall be used.  It is usually empty.
+EXTRA_LOCALE_CATEGORIES =
diff --git a/po/POTFILES.in b/po/POTFILES.in
new file mode 100644
index 0000000..6fbf945
--- /dev/null
+++ b/po/POTFILES.in
@@ -0,0 +1,25 @@
+src/myprintf.c
+src/scrollcoin.c
+src/spell_coin.c
+src/http_win.c
+src/coin_xutil.c
+src/balloon.c
+src/http_unix.c
+src/regexp.c
+src/raster.c
+src/coin_util.c
+src/keylist.c
+src/msgbox.c
+src/http.c
+src/troll_detector.c
+src/picohtml.c
+src/site.c
+src/board_util.c
+src/pinnipede_widgets.c
+src/prefs_gestion.c
+src/wmcoincoin.c
+src/pinnipede.c
+src/palmipede.c
+src/dock.c
+src/board.c
+src/prefs.c
diff --git a/po/Rules-quot b/po/Rules-quot
new file mode 100644
index 0000000..9c2a995
--- /dev/null
+++ b/po/Rules-quot
@@ -0,0 +1,47 @@
+# Special Makefile rules for English message catalogs with quotation marks.
+
+DISTFILES.common.extra1 = quot.sed boldquot.sed en at quot.header en at boldquot.header insert-header.sin Rules-quot
+
+.SUFFIXES: .insert-header .po-update-en
+
+en at quot.po-create:
+	$(MAKE) en at quot.po-update
+en at boldquot.po-create:
+	$(MAKE) en at boldquot.po-update
+
+en at quot.po-update: en at quot.po-update-en
+en at boldquot.po-update: en at boldquot.po-update-en
+
+.insert-header.po-update-en:
+	@lang=`echo $@ | sed -e 's/\.po-update-en$$//'`; \
+	if test "$(PACKAGE)" = "gettext"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \
+	tmpdir=`pwd`; \
+	echo "$$lang:"; \
+	ll=`echo $$lang | sed -e 's/@.*//'`; \
+	LC_ALL=C; export LC_ALL; \
+	cd $(srcdir); \
+	if $(MSGINIT) -i $(DOMAIN).pot --no-translator -l $$ll -o - 2>/dev/null | sed -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | $(MSGFILTER) sed -f `echo $$lang | sed -e 's/.*@//'`.sed 2>/dev/null > $$tmpdir/$$lang.new.po; then \
+	  if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \
+	    rm -f $$tmpdir/$$lang.new.po; \
+	  else \
+	    if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \
+	      :; \
+	    else \
+	      echo "creation of $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \
+	      exit 1; \
+	    fi; \
+	  fi; \
+	else \
+	  echo "creation of $$lang.po failed!" 1>&2; \
+	  rm -f $$tmpdir/$$lang.new.po; \
+	fi
+
+en at quot.insert-header: insert-header.sin
+	sed -e '/^#/d' -e 's/HEADER/en at quot.header/g' $(srcdir)/insert-header.sin > en at quot.insert-header
+
+en at boldquot.insert-header: insert-header.sin
+	sed -e '/^#/d' -e 's/HEADER/en at boldquot.header/g' $(srcdir)/insert-header.sin > en at boldquot.insert-header
+
+mostlyclean: mostlyclean-quot
+mostlyclean-quot:
+	rm -f *.insert-header
diff --git a/po/boldquot.sed b/po/boldquot.sed
new file mode 100644
index 0000000..4b937aa
--- /dev/null
+++ b/po/boldquot.sed
@@ -0,0 +1,10 @@
+s/"\([^"]*\)"/“\1”/g
+s/`\([^`']*\)'/‘\1’/g
+s/ '\([^`']*\)' / ‘\1’ /g
+s/ '\([^`']*\)'$/ ‘\1’/g
+s/^'\([^`']*\)' /‘\1’ /g
+s/“”/""/g
+s/“/“/g
+s/”/”/g
+s/‘/‘/g
+s/’/’/g
diff --git a/po/en at boldquot.header b/po/en at boldquot.header
new file mode 100644
index 0000000..fedb6a0
--- /dev/null
+++ b/po/en at boldquot.header
@@ -0,0 +1,25 @@
+# All this catalog "translates" are quotation characters.
+# The msgids must be ASCII and therefore cannot contain real quotation
+# characters, only substitutes like grave accent (0x60), apostrophe (0x27)
+# and double quote (0x22). These substitutes look strange; see
+# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
+#
+# This catalog translates grave accent (0x60) and apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019).
+# It also translates pairs of apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019)
+# and pairs of quotation mark (0x22) to
+# left double quotation mark (U+201C) and right double quotation mark (U+201D).
+#
+# When output to an UTF-8 terminal, the quotation characters appear perfectly.
+# When output to an ISO-8859-1 terminal, the single quotation marks are
+# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to
+# grave/acute accent (by libiconv), and the double quotation marks are
+# transliterated to 0x22.
+# When output to an ASCII terminal, the single quotation marks are
+# transliterated to apostrophes, and the double quotation marks are
+# transliterated to 0x22.
+#
+# This catalog furthermore displays the text between the quotation marks in
+# bold face, assuming the VT100/XTerm escape sequences.
+#
diff --git a/po/en at quot.header b/po/en at quot.header
new file mode 100644
index 0000000..a9647fc
--- /dev/null
+++ b/po/en at quot.header
@@ -0,0 +1,22 @@
+# All this catalog "translates" are quotation characters.
+# The msgids must be ASCII and therefore cannot contain real quotation
+# characters, only substitutes like grave accent (0x60), apostrophe (0x27)
+# and double quote (0x22). These substitutes look strange; see
+# http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html
+#
+# This catalog translates grave accent (0x60) and apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019).
+# It also translates pairs of apostrophe (0x27) to
+# left single quotation mark (U+2018) and right single quotation mark (U+2019)
+# and pairs of quotation mark (0x22) to
+# left double quotation mark (U+201C) and right double quotation mark (U+201D).
+#
+# When output to an UTF-8 terminal, the quotation characters appear perfectly.
+# When output to an ISO-8859-1 terminal, the single quotation marks are
+# transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to
+# grave/acute accent (by libiconv), and the double quotation marks are
+# transliterated to 0x22.
+# When output to an ASCII terminal, the single quotation marks are
+# transliterated to apostrophes, and the double quotation marks are
+# transliterated to 0x22.
+#
diff --git a/po/fr.gmo b/po/fr.gmo
new file mode 100644
index 0000000..4bf5412
Binary files /dev/null and b/po/fr.gmo differ
diff --git a/po/fr.po b/po/fr.po
new file mode 100644
index 0000000..5fd178f
--- /dev/null
+++ b/po/fr.po
@@ -0,0 +1,2256 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: wmcoincoin 2.3.8b\n"
+"Report-Msgid-Bugs-To: triton at kumal.info\n"
+"POT-Creation-Date: 2012-08-02 18:16+0200\n"
+"PO-Revision-Date: 2003-07-15 22:30+0200\n"
+"Last-Translator: Josselin Mouette <josselin.mouette at ens-lyon.org>\n"
+"Language-Team: French <fr at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: src/scrollcoin.c:265
+#, c-format
+msgid "setpos out of bounds: %d min=%d, mx=%d\n"
+msgstr ""
+
+#: src/spell_coin.c:189
+#, c-format
+msgid "Fork failed...(%s)\n"
+msgstr "fourchette ratée... (%s)\n"
+
+#: src/spell_coin.c:210
+#, c-format
+msgid "Exec failed...(%s)\n"
+msgstr ""
+
+#: src/spell_coin.c:334
+#, c-format
+msgid "We send '%s' to ispell\n"
+msgstr ""
+
+#: src/spell_coin.c:337
+#, c-format
+msgid "Error, '%s' was still to send to ispell...\n"
+msgstr ""
+
+#: src/spell_coin.c:367
+msgid "ISPELL answered: '%<MAG %s>' (err=%s)\n"
+msgstr ""
+
+#: src/spell_coin.c:418
+#, c-format
+msgid "spellString: unknown option '0x%02x'\n"
+msgstr ""
+
+#: src/spell_coin.c:419
+#, c-format
+msgid "The complete answer was: '%.512s'\n"
+msgstr ""
+
+#: src/spell_coin.c:420
+#, c-format
+msgid ""
+"With great leniency, wmcoincoin will let ispell alive, just to see what "
+"happens. Don't even think of suiciding the coincoin : THE SHOW MUST GO ON\n"
+msgstr ""
+
+#: src/http_win.c:98
+#, c-format
+msgid "Connected succesfully!\n"
+msgstr ""
+
+#: src/http_win.c:119 src/http_unix.c:144
+#, c-format
+msgid "Connection timed out (timeout=%d sec)!\n"
+msgstr ""
+
+#: src/http_win.c:129
+#, c-format
+msgid "could not set socket to blocking\n"
+msgstr ""
+
+#: src/coin_xutil.c:390
+#, c-format
+msgid "shade_ximage unsupported (bitsperpix=%d) !! Strange...\n"
+msgstr ""
+
+#: src/coin_xutil.c:400
+#, c-format
+msgid ""
+"X11 error detected in a hazardous area:\n"
+"  %s\n"
+msgstr ""
+
+#: src/coin_xutil.c:401
+#, c-format
+msgid "  Protocol request: %d\n"
+msgstr ""
+
+#: src/coin_xutil.c:402
+#, c-format
+msgid "  Resource ID:      0x%lx\n"
+msgstr ""
+
+#: src/coin_xutil.c:403
+#, c-format
+msgid " --> THE SHOW MUST GO ON!\n"
+msgstr ""
+
+#: src/balloon.c:230
+#, c-format
+msgid "hide balloon\n"
+msgstr "cacher le ballon\n"
+
+#: src/http_unix.c:71
+#, c-format
+msgid "Basic connect (can BLOCK THE COINCOIN)...\n"
+msgstr ""
+
+#: src/http_unix.c:177
+#, c-format
+msgid ""
+"Welcome to the forked gethostbyname, everything is experimental, beware the "
+"zombies\n"
+msgstr ""
+
+#: src/http_unix.c:180
+#, c-format
+msgid "Broken pipe: %s\n"
+msgstr ""
+
+#: src/http_unix.c:184
+#, c-format
+msgid ""
+"Ooooops, it looks like there is a throng of zombies out there\n"
+"the fork failed: %s"
+msgstr ""
+
+#: src/http_unix.c:190
+#, c-format
+msgid "son: pipe full (%s)\n"
+msgstr ""
+
+#: src/http_unix.c:192
+#, c-format
+msgid "son: gethostbyname going on...\n"
+msgstr ""
+
+#: src/http_unix.c:194
+#, c-format
+msgid "son: gethostbyname finished.\n"
+msgstr ""
+
+#: src/http_unix.c:200
+#, c-format
+msgid "son: gethostbyname on '%s' failed.\n"
+msgstr ""
+
+#: src/http_unix.c:212
+#, c-format
+msgid "daddy: pipe full (%s), what will do now ?\n"
+msgstr ""
+
+#: src/http_unix.c:236
+#, c-format
+msgid "The son got the pipe full again!\n"
+msgstr ""
+
+#: src/http_unix.c:239
+#, c-format
+msgid "What a fucking pipe! %s\n"
+msgstr ""
+
+#: src/http_unix.c:248
+#, c-format
+msgid "select .. awaiting\n"
+msgstr ""
+
+#: src/http_unix.c:250
+#, c-format
+msgid "select .. interrupted\n"
+msgstr ""
+
+#: src/http_unix.c:252
+#, c-format
+msgid "select .. problem : %s\n"
+msgstr ""
+
+#: src/http_unix.c:263
+#, c-format
+msgid "We're waiting for the son... Come here boy !\n"
+msgstr ""
+
+#: src/http_unix.c:267
+#, c-format
+msgid "Daddy: I couldn't read from my son :-/ (len=%d got '%s') (lasterr=%s)\n"
+msgstr "Pôpa: j'arrive pas à lire fiston :-/ (len=%d, got '%s') (lasterr=%s)\n"
+
+#: src/regexp.c:417
+#, c-format
+msgid "regexp error: %d\n"
+msgstr ""
+
+#: src/regexp.c:430
+#, c-format
+msgid "The regexp [%s] doesn't match the string [%s]\n"
+msgstr ""
+
+#: src/raster.c:157
+#, c-format
+msgid "The visual (depth=%d) is in %s, cool\n"
+msgstr ""
+
+#: src/raster.c:161
+#, c-format
+msgid "Bleh, we are in pseudocolor (depth=%d)...\n"
+msgstr ""
+
+#: src/raster.c:181
+#, c-format
+msgid "Unbelievable, there's even no colors !\n"
+msgstr ""
+
+#: src/raster.c:361
+#, c-format
+msgid ""
+"Unknown colour in the .xpm: '%s'\n"
+"'"
+msgstr ""
+
+#: src/raster.c:410
+#, c-format
+msgid ""
+"dommage, vous avez trouve une pouille dans le 'parseur' de .xpm\n"
+" VOTRE fichier .xpm n'est pas conforme a MON standard xpm\n"
+"err=%d, la ligne qui pose probleme est: '%s'\n"
+" En le reecrivant avec un autre logiciel ca devrait mieux marcher, mais le "
+"mieux c'est sans doute d'envoyer un bug report [ c0in at altern.org ]\n"
+msgstr ""
+
+#: src/raster.c:442
+#, c-format
+msgid "Unable to open '%s' : %s\n"
+msgstr ""
+
+#: src/raster.c:449
+#, c-format
+msgid "Error while reading '%s' !? [%s]\n"
+msgstr ""
+
+#: src/raster.c:463
+#, c-format
+msgid "The '%s' line looks weird\n"
+msgstr ""
+
+#: src/raster.c:471
+#, c-format
+msgid "There are too many lines in '%s' (max=%d) !! \n"
+msgstr ""
+
+#: src/coin_util.c:154
+msgid "[empty]"
+msgstr "[vide]"
+
+#: src/keylist.c:94
+msgid "useragent"
+msgstr "useragent"
+
+#: src/keylist.c:95
+msgid "useragent w/o login"
+msgstr ""
+
+#: src/keylist.c:96
+msgid "login"
+msgstr ""
+
+#: src/keylist.c:97
+msgid "word"
+msgstr ""
+
+#: src/keylist.c:98
+msgid "message id"
+msgstr ""
+
+#: src/keylist.c:99
+msgid "thread from id"
+msgstr ""
+
+#: src/msgbox.c:94
+msgid "MESSAGE FROM WMCOINCOIN"
+msgstr "MESSAGE DE WMCOINCOIN"
+
+#: src/msgbox.c:210
+#, c-format
+msgid "close msgbox\n"
+msgstr ""
+
+#: src/http.c:194
+#, c-format
+msgid "<i>There hasn't been any http error yet</i>"
+msgstr "<i>Il n'y a pas encore eu d'erreur http</i>"
+
+#: src/http.c:199
+#, c-format
+msgid "Last error occured at: <b>%02d:%02d:%02d</b>"
+msgstr "Dernière erreur à : <b>%02d:%02d:%02d</b>"
+
+#: src/http.c:204
+#, c-format
+msgid "Error: <b><font color=#800000>%s</font></b><br>"
+msgstr "Erreur: <b><font color=#800000>%s</font></b><br>"
+
+#: src/http.c:207
+#, c-format
+msgid "<br>The last error was: %s<br>for the URL:<tt>%s</tt><br>"
+msgstr "<br>La dernière erreur a été : %s<br>pour l'URL :<tt>%s</tt><br>"
+
+#: src/http.c:213
+#, c-format
+msgid ""
+"%s<br>%s<br>%s: <tt>%s</tt><br>Host IP: <font color=#0000ff>%s</font><br>%s"
+msgstr ""
+"%s<br>%s<br>%s : <tt>%s</tt><br>IP de l'hôte : <font color=#0000ff>%s</"
+"font><br>%s"
+
+#: src/http.c:214
+msgid "<b>There has just been an error !!</b>"
+msgstr "<b>Il vient d'y avoir une erreur !!</b>"
+
+#: src/http.c:214
+msgid "The last transfer went fine."
+msgstr "Le dernier transfert s'est bien passé"
+
+#: src/http.c:215
+msgid "faulty URL"
+msgstr "URL fautive"
+
+#: src/http.c:215
+msgid "We have just downloaded"
+msgstr "On vient de récupérer"
+
+#: src/http.c:218
+#, c-format
+msgid ""
+"Download going on...<br>URL: <tt>%s</tt><br>IP: <font color=#0000ff>%s</"
+"font><br>"
+msgstr ""
+"Un transfert est en cours...<br>URL : <tt>%s</tt><br>ip: <font color=#0000ff>"
+"%s</font><br>"
+
+#: src/http.c:220
+#, c-format
+msgid "Resolving name '%s'...<br>"
+msgstr "Résolution du nom '%s' en cours...<br>"
+
+#: src/http.c:336
+#, c-format
+msgid "timeout (t=%d milliseconds)..\n"
+msgstr ""
+
+#: src/http.c:351
+#, c-format
+msgid "net_iread: socket error, res=%d (%s)\n"
+msgstr ""
+
+#: src/http.c:355
+#, c-format
+msgid "net_iread: Timeout...\n"
+msgstr ""
+
+#: src/http.c:423
+#, c-format
+msgid "net_iwrite: Timeout...\n"
+msgstr ""
+
+#: src/http.c:502
+#, c-format
+msgid ""
+"get_host_ip_str_bloq('%s') -> if the network lags, the coincoin can be "
+"blocked here\n"
+msgstr ""
+
+#: src/http.c:620
+#, c-format
+msgid "Unable to create a socket ! (%s) [ip=%s]"
+msgstr ""
+
+#: src/http.c:628
+#, fuzzy, c-format
+msgid "connecting on port %d...\n"
+msgstr "Connexion...\n"
+
+#: src/http.c:641
+#, c-format
+msgid "connection failed: %s..\n"
+msgstr ""
+
+#: src/http.c:694
+#, c-format
+msgid "Unable to resolve '%s'"
+msgstr "Impossible de resoudre le nom '%s'"
+
+#: src/http.c:789
+msgid "[%<MAG %s>]: %<yel %s>"
+msgstr ""
+
+#: src/http.c:844
+#, c-format
+msgid "http_skip_header has a socket issue ! (%s)"
+msgstr "http_skip_header a un problème de chaussette ! (%s)"
+
+#: src/http.c:865
+#, c-format
+msgid "http_read: request of length %d, pos = %ld, chunk=%d (size %ld)\n"
+msgstr ""
+
+#: src/http.c:870
+#, c-format
+msgid ""
+"Damned, the chunk_encoding has gone down the tubes on the following "
+"request:\n"
+msgstr ""
+
+#: src/http.c:893
+#, c-format
+msgid "error in chunk '%s'\n"
+msgstr ""
+
+#: src/http.c:918
+#, c-format
+msgid "http_read has encountered a socket problem, pos=%d, len=%d !(%s)"
+msgstr "http_read a eu un problème de chaussette, pos=%d, len=%d !(%s)"
+
+#: src/http.c:926
+#, c-format
+msgid "http_read: length finally requested: %d, received: %d, new pos=%ld\n"
+msgstr ""
+
+#: src/http.c:964
+#, c-format
+msgid ""
+"http_get_line: weird, got=0 while reading %d/%d [r->telnet.error=%d, "
+"errmsg='%s']\n"
+msgstr ""
+
+#: src/http.c:970
+#, c-format
+msgid "http_get_line messed up (got=%d): %s!"
+msgstr "http_get_line s'est vautré (got=%d): %s !"
+
+#: src/http.c:974
+msgid "http_get_line sent (cnt=%d): '%<yel %s>'\n"
+msgstr ""
+
+#: src/http.c:1019
+#, c-format
+msgid "http_send_request/debug, unable to open '%s':%s\n"
+msgstr ""
+
+#: src/http.c:1136
+#, c-format
+msgid "http_get couldn't send its request: %s"
+msgstr "http_get n'a pas pu envoyer sa requête : %s"
+
+#: src/http.c:1140
+#, c-format
+msgid "ok, request sent\n"
+msgstr ""
+
+#: src/http.c:1221
+msgid "Quack ! Missed"
+msgstr "Plop ! c'est raté"
+
+#: src/http.c:1234
+#, c-format
+msgid "%s: too big (bsize=%d!), let's cut\n"
+msgstr ""
+
+#: src/http.c:1242
+#, c-format
+msgid "problem while reading %s: %s\n"
+msgstr ""
+
+#: src/http.c:1248
+msgid "%s, read: %<mag %s>\n"
+msgstr ""
+
+#: src/http.c:1299
+#, fuzzy, c-format
+msgid "telnet_get_line has a socket issue ! (%s)"
+msgstr "http_skip_header a un problème de chaussette ! (%s)"
+
+#: src/http.c:1313
+#, fuzzy, c-format
+msgid "telnet_send couldn't send: %s"
+msgstr "http_get n'a pas pu envoyer sa requête : %s"
+
+#: src/troll_detector.c:484
+msgid "troll_detector, initial message : %<YEL %s>\n"
+msgstr ""
+
+#: src/troll_detector.c:682
+msgid ""
+"%<RED this one was too hard> ! (nb_words = %d)\n"
+" txt='%s'\n"
+msgstr ""
+
+#: src/troll_detector.c:686
+#, c-format
+msgid " -> unable to use the words left in a troll, this is the end\n"
+msgstr ""
+
+#: src/troll_detector.c:693
+msgid ""
+"score = %<YEL %d> (sub_score=%<YEL %d>), the following words were used: "
+msgstr ""
+
+#: src/troll_detector.c:728
+msgid "bonus for using capitals: %<YEL %d>\n"
+msgstr ""
+
+#: src/troll_detector.c:735
+msgid "bonus for exclamation marks: %<YEL %d>\n"
+msgstr ""
+
+#: src/troll_detector.c:743
+msgid "bonus for abusive use of weird characters: %<YEL %d>\n"
+msgstr ""
+
+#: src/troll_detector.c:748
+msgid "bonus for abusive use of html tags: %<YEL %d>\n"
+msgstr ""
+
+#: src/troll_detector.c:753
+msgid "bonus for abusive usage of BOLD: %<YEL %d>\n"
+msgstr ""
+
+#: src/troll_detector.c:758
+msgid "%<bld attenuation for using a smiley>\n"
+msgstr ""
+
+#: src/troll_detector.c:761
+msgid ""
+"%<WHT final score: >%<YEL %d>\n"
+"\n"
+msgstr ""
+
+#: src/picohtml.c:245
+#, c-format
+msgid "Bug! calling picohtml(NULL)!"
+msgstr "Bug ! appel de picohtml(NULL) !"
+
+#: src/picohtml.c:246
+msgid "Bug ! appel de picohtml(NULL) !"
+msgstr ""
+
+#: src/picohtml.c:378 src/picohtml.c:388
+#, c-format
+msgid "Allocation of '%s' failed\n"
+msgstr ""
+
+#: src/picohtml.c:385
+#, c-format
+msgid "Allocation of '%s' OK\n"
+msgstr ""
+
+#: src/picohtml.c:396
+msgid "we forget '%<YEL %s>'\n"
+msgstr ""
+
+#: src/picohtml.c:600 src/pinnipede.c:1792
+#, c-format
+msgid "XLoadQueryFont: failed loading font '%s'\n"
+msgstr ""
+
+#: src/picohtml.c:601 src/pinnipede.c:1793
+#, c-format
+msgid "Please choose another font.\n"
+msgstr ""
+
+#: src/picohtml.c:610 src/pinnipede.c:1802
+#, c-format
+msgid "Slanted font '%s' not found -> we're looking for the italic font\n"
+msgstr ""
+
+#: src/picohtml.c:614 src/pinnipede.c:1806 src/pinnipede.c:1832
+msgid "%<RED WARNING>: error while looking for the italic font: '%s'\n"
+msgstr ""
+
+#: src/picohtml.c:615 src/picohtml.c:627 src/picohtml.c:636
+#: src/pinnipede.c:1807 src/pinnipede.c:1819 src/pinnipede.c:1833
+msgid "We'll use the base font.\n"
+msgstr ""
+
+#: src/picohtml.c:626 src/pinnipede.c:1818
+msgid "%<RED WARNING>: error while looking for the bold font: '%s'\n"
+msgstr ""
+
+#: src/picohtml.c:635
+msgid "%<RED WARNING>: error while looking for the courier font: '%s'\n"
+msgstr ""
+
+#: src/picohtml.c:646
+msgid "Now we try sans/12\n"
+msgstr ""
+
+#: src/picohtml.c:648
+msgid "Uuuurg, no sans/12 , I prefer to die\n"
+msgstr ""
+
+#: src/board_util.c:286
+#, c-format
+msgid ""
+"sniff? sniff ? soit vous vous amusez a faire de threads de folie, soit ca "
+"sent le BEUGGUE!\n"
+msgstr ""
+
+#: src/board_util.c:716
+#, c-format
+msgid "get_tok not recognized: (len=%d)'"
+msgstr ""
+
+#: src/board_util.c:733
+#, c-format
+msgid "Hmmm, looks like there's an underpants problem here: %s\n"
+msgstr "Hmmm, on dirait qu'il y a un probleme de slip ici: %s\n"
+
+#: src/board_util.c:913
+#, c-format
+msgid "IPOT(tm) detected"
+msgstr ""
+
+#: src/board_util.c:915
+#, c-format
+msgid "but where is '%s' ?"
+msgstr "où qu'il est '%s' ?"
+
+#: src/board_util.c:919
+#, c-format
+msgid "[IPOT(tm)]"
+msgstr ""
+
+#: src/board_util.c:921
+#, c-format
+msgid "Awww, we turn around and around and around and around..."
+msgstr "merde on tourne en rond merde on tourne en rond merde..."
+
+#: src/board_util.c:929
+#, c-format
+msgid "Hello from %.30s in the boitakon ! (because %s=%.20s)"
+msgstr "kikoo de %.30s depuis la boitakon, (car %s=%.20s)"
+
+#: src/board_util.c:933
+#, c-format
+msgid "Hello from %.30s who was eaten by the boitakon"
+msgstr "kikoo de %.30s depuis la boitakon"
+
+#: src/board_util.c:935
+#, c-format
+msgid ""
+"Hello from %.30s in the boitakon, BUT YOU HAVE JUST FOUND A BUG IN THE "
+"BOITAKON :-("
+msgstr ""
+"kikoo de %.30s depuis la boitakon, MAIS VOUS VENEZ DE TROUVER UN BUG DANS LA "
+"BOITAKON :-("
+
+#: src/board_util.c:967
+#, c-format
+msgid "I don't fucking know %s"
+msgstr ""
+
+#: src/pinnipede_widgets.c:964
+#, c-format
+msgid "FILTER UNDEFINED"
+msgstr "FILTRE NON DÉFINI"
+
+#: src/pinnipede_widgets.c:1272 src/pinnipede.c:2957
+#, c-format
+msgid "remove %s:'<font color=blue>%.15s</font>' from %s"
+msgstr ""
+
+#: src/pinnipede_widgets.c:1500
+msgid "<folop> I have a 61MB file in /proc, is it normal ?<br>"
+msgstr ""
+
+#: src/pinnipede_widgets.c:1530
+msgid "Bring some help"
+msgstr "Afficher un peu d'aide"
+
+#: src/pinnipede_widgets.c:1531
+msgid "Bring/hide the scrollcoin"
+msgstr "Afficher/cacher la scrollcoin"
+
+#: src/pinnipede_widgets.c:1532
+msgid ""
+"Enable/disable the balltrap<br>(note that you can also kill all flying ducks "
+"with a right clic on the upper part of the dock applet<br>You can also use "
+"the wmccc to disable duck hunt on some sites (for example<font "
+"color=blue><tt>woof.lu</tt></font>, since the webserver does not enjoy "
+"receiving hundreds of <tt>pan!pan!</tt>in the same second)"
+msgstr ""
+
+#: src/pinnipede_widgets.c:1537
+#, fuzzy
+msgid "Activate/deactivate the pseudo-transparency (may not work)."
+msgstr "Activer/désactiver la pseudo-transparence"
+
+#: src/pinnipede_widgets.c:1538
+msgid "Change the display mode of the logins/useragents (5 different modes)"
+msgstr "Changer le mode d'affichage des logins/useragents (5 modes différents)"
+
+#: src/pinnipede_widgets.c:1542
+#, fuzzy
+msgid ""
+"Activate/deactivate the <b>filter</b>. To filter the messages, do a <font "
+"color=#0000ff>Right clic</font> on a word/login/useragent or a clock (to "
+"display a thread). You can also use  <font color=#0000ff>CTRL-S</font> to "
+"perform incremental search on the board content. To remove the filter, just "
+"click here"
+msgstr ""
+"Activer/désactiver le <b>filtre</b>. Pour filtrer des messages, faites <font "
+"color=#0000ff>ctrl+left clic</font> sur un mot/login/useragent ou une "
+"horloge (pour afficher un thread). Pour virer le filtre, il suffit de "
+"cliquer ici"
+
+#: src/pinnipede_widgets.c:1543
+msgid ""
+"Change the plopification type (beware, you will also see the messages in the "
+"boitakon!). <p> To plopify a message, <font color=#0000ff>Right click</font> "
+"on a word/login/useragent/clock (or the zone on the left of the clock to "
+"plopify a thread). To unplopify (or let someone out of the boitakon), just "
+"click on the same place OR right clic on this button and you will have a "
+"list of boitakoned elements.<br>"
+msgstr ""
+"Changer le type de plopification (attention, vous allez aussi voir les "
+"messages de la boitakon !). <p> Pour plopifier un message, <font "
+"color=#0000ff>shift+clic droit</font> sur un mot/login/useragent/horloge (ou "
+"bien la zone à gauche de l'horloge pour plopifier un thread). Pour "
+"déplopifier (ou sortir quelqu'un de la boitakon), il suffit de recliquer au "
+"même endroit.<br> Pour accéder à la superplopification, faire <font "
+"color=#0000ff>Mod1+shift+clic droit</font><br> Pour mettre un login/ua/etc "
+"dans la <b>boitakon</b>, il faut utiliser le méga combo <font "
+"color=#0000ff>Ctrl+Mod4+Mod1+shift+clic droit</font>."
+
+#: src/pinnipede_widgets.c:1544
+msgid "show only RSS feeds in the pinnipede"
+msgstr ""
+
+#: src/pinnipede_widgets.c:1545
+msgid "show only regular boards in the pinnipede"
+msgstr ""
+
+#: src/pinnipede_widgets.c:1546
+msgid "Launch wmccc (wmcoincoin configuration)"
+msgstr ""
+
+#: src/pinnipede_widgets.c:1549
+msgid "clic here to cancel the current download"
+msgstr "Cliquer ici pour annuler le download en cours"
+
+#: src/prefs_gestion.c:15
+msgid ""
+"Erreur pour l'option de la ligne de commande '%<GRN -%c>'\n"
+": %s\n"
+msgstr ""
+
+#: src/prefs_gestion.c:26
+msgid "You invoqued wmcoincoin-kde : %<YEL anti KDE-bug mode activated>\n"
+msgstr ""
+
+#: src/prefs_gestion.c:34
+msgid "Home page: %<BLU http:/hules.free.fr/wmcoincoin>\n"
+msgstr ""
+
+#: src/prefs_gestion.c:36
+msgid ""
+"Dock applet pour WindowMaker -- affiche les news de %<GRN D>%<CYA a>%<GRN L>%"
+"<CYA inux>%<GRN F>%<CYA rench>%<GRN P>%<CYA age> (%<BLU http://linuxfr."
+"org>)\n"
+msgstr ""
+
+#: src/prefs_gestion.c:37
+msgid ""
+"OPTIONS (la plupart de ces options peuvent etre activees dans le\n"
+" fichier '%<YEL ~/.wmcoincoin/options>'):\n"
+msgstr ""
+
+#: src/prefs_gestion.c:39
+msgid " %<GRN -h>\t\t: mouaif...\n"
+msgstr ""
+
+#: src/prefs_gestion.c:45
+msgid ""
+" %<GRN -m> %<CYA msg>\t\t: change le message poste sur la tribune (defaut: '%"
+"<grn %s>')\n"
+msgstr ""
+
+#: src/prefs_gestion.c:46
+msgid ""
+" %<GRN -v> %<CYA n>\t\t: verbosite (defaut %<grn %d>) ,%<CYA n>=0,1,2,3\n"
+msgstr ""
+
+#: src/prefs_gestion.c:49
+msgid ""
+" %<GRN -b> %<CYA hexcoul>\t: couleur de fond, en RGB hexa (par defaut: %<grn "
+"%06x>, un magnifique(!) jaune)\n"
+msgstr ""
+
+#: src/prefs_gestion.c:50
+msgid ""
+" %<GRN -c> %<CYA hexcoul>\t: couleur du texte de l'applet, en RGB hexa (par "
+"defaut: %<grn %06x>)\n"
+msgstr ""
+
+#: src/prefs_gestion.c:51
+msgid ""
+" %<GRN -X> %<CYA file.xpm>\t: Fichier pixmap a mettre en fond du dock "
+"(fichier.xpm de 64x64)\n"
+msgstr ""
+
+#: src/prefs_gestion.c:52
+msgid " %<GRN -w> \t\t: utilise le mode windowed plutot que le mode icone\n"
+msgstr ""
+
+#: src/prefs_gestion.c:53
+msgid ""
+"\t\tcette option est necessaire pour utiliser wmcoincoin avec le kicker de "
+"KDE (<3.0)\n"
+msgstr ""
+
+#: src/prefs_gestion.c:54
+msgid ""
+"\t\tmais comme le kicker de KDE 2.1 a un bug qui l'empeche de sauver les "
+"options\n"
+msgstr ""
+
+#: src/prefs_gestion.c:55
+msgid ""
+"\t\tde la ligne de commande d'une session a l'autre, le mieux est "
+"d'invoquer\n"
+msgstr ""
+
+#: src/prefs_gestion.c:56
+msgid ""
+"\t\twmcoincoin sous le nom %<YEL wmcoincoin-kde> (c'est un bete lien "
+"symbolique)\n"
+msgstr ""
+
+#: src/prefs_gestion.c:57
+msgid "\t\tet l'option -w sera automatiquement activee...\n"
+msgstr ""
+
+#: src/prefs_gestion.c:58
+msgid ""
+" %<GRN -B> \t\t: ajoute la bordure de wmcoincoin (pour windowmanager sans "
+"dock)\n"
+msgstr ""
+
+#: src/prefs_gestion.c:59
+msgid ""
+" %<GRN -x> %<CYA x:y>\t\t: essaye de positionner wmcoincoin en (x,y), cette "
+"option\n"
+"\t\tn'est utile que si le windowmanager n'a pas de dock \n"
+"\t\t(utiliser avec l'option %<GRN -B>)\n"
+msgstr ""
+
+#: src/prefs_gestion.c:63
+msgid " %<GRN -H> \t\t: desactive les ballons d'aide\n"
+msgstr ""
+
+#: src/prefs_gestion.c:66
+msgid ""
+" %<GRN -s> %<CYA v>\t\t: vitesse de defilement du trolloscope (1 = rapide, "
+"100 = 1 tres lent)\n"
+"(defaut %<grn %d>)\n"
+msgstr ""
+
+#: src/prefs_gestion.c:71
+msgid ""
+" %<GRN -o> %<CYA fichier>\t: indique le nom du fichier d'options a utiliser "
+"dans le\n"
+"\t\t rep ~/.wmcoincoin (defaut '%<grn %s>')\n"
+msgstr ""
+
+#: src/prefs_gestion.c:73
+msgid " %<GRN -W>\t\t: ouvre le pinnipede des le lancement de wmcoincoin)\n"
+msgstr ""
+
+#: src/prefs_gestion.c:74
+msgid ""
+" %<GRN -l> %<CYA locale>\t: change the default locale (use -l fr to force "
+"wmcoincoin to speak french) (or set LC_MESSAGES properly)\n"
+msgstr ""
+
+#: src/prefs_gestion.c:75
+msgid ""
+" %<GRN -L> %<CYA locale_dir>\t: change the default directory of stored "
+"translations (default: %<grn %s>)\n"
+msgstr ""
+
+#: src/prefs_gestion.c:109
+msgid "Activation of the secret %<YEL debug> mode (dbg=%d)!\n"
+msgstr ""
+
+#: src/prefs_gestion.c:157
+#, c-format
+msgid "the file '%s' is not a directory !!! trash it please\n"
+msgstr ""
+
+#: src/prefs_gestion.c:162
+msgid "creating '%<YEL %s>'..\n"
+msgstr ""
+
+#: src/prefs_gestion.c:164
+msgid ""
+"can't create the directory '%s'\n"
+"[error: '%<red %s>']\n"
+msgstr ""
+
+#: src/prefs_gestion.c:169
+#, c-format
+msgid "There's something strange with the directory '%s' [err=%s]\n"
+msgstr ""
+
+#: src/prefs_gestion.c:186
+#, c-format
+msgid "can't read '%s' : %s\n"
+msgstr ""
+
+#: src/prefs_gestion.c:190
+#, c-format
+msgid "can't write '%s' : %s\n"
+msgstr ""
+
+#: src/prefs_gestion.c:216
+#, c-format
+msgid "ah ben y'a pas le fichier '%s', on va le creer\n"
+msgstr ""
+
+#: src/prefs_gestion.c:221
+#, c-format
+msgid ""
+"\n"
+"desole, demerdez-vous pour copier '%s' dans votre ~/.wmcoincoin ..\n"
+msgstr ""
+
+#: src/prefs_gestion.c:224
+#, c-format
+msgid ""
+"\n"
+"arretez de faire n'importe quoi dans votre ~/.wmcoincoin..\n"
+"\n"
+msgstr ""
+
+#: src/prefs_gestion.c:230
+#, c-format
+msgid ""
+"wmcoincoin a du etre mal installe, je ne trouve pas le fichier '%s' par "
+"defaut dans le rep '%s'...\n"
+msgstr ""
+
+#: src/prefs_gestion.c:234
+#, c-format
+msgid "utilisation du fichier se trouvant dans '%s'\n"
+msgstr ""
+
+#: src/prefs_gestion.c:256
+msgid "using option file '%<yel %s>'\n"
+msgstr ""
+
+#: src/prefs_gestion.c:268
+msgid ""
+"Error during while reading '%s':\n"
+"%<YEL %s>\n"
+msgstr ""
+
+#: src/prefs_gestion.c:480
+#, c-format
+msgid "Error while rereading options [%s]<br>%s"
+msgstr ""
+
+#: src/prefs_gestion.c:491
+msgid "rereading of options '%<YEL %s>' successful\n"
+msgstr ""
+
+#: src/prefs_gestion.c:642
+msgid "You changed the site/proxy, gethostbyname soon in progress\n"
+msgstr ""
+
+#: src/prefs_gestion.c:702
+#, c-format
+msgid "site removed: '%s'\n"
+msgstr ""
+
+#: src/prefs_gestion.c:732
+#, c-format
+msgid "new site added: '%s'\n"
+msgstr ""
+
+#: src/wmcoincoin.c:413
+#, c-format
+msgid ""
+"this url STINKS ! <b>%s</b> (neither ftp://, nor http://)<br>You will have "
+"to launch it by hand (copy to the clipboard with a right click, etc.)"
+msgstr ""
+"cette url PUE ! <b>%s</b> (ni ftp://, ni http://)<br>il faudra la lancer à "
+"la main (copier dans le presse-papiers avec clic droit, etc.)"
+
+#: src/wmcoincoin.c:424
+#, c-format
+msgid ""
+"You didn't define the external browser in ~/.wmcoincoin/options (%s), no "
+"need to click on the <b>[url]</b>..."
+msgstr ""
+"Vous n'avez pas défini le browser externe dans ~/.wmcoincoin/options (%s), "
+"inutile de cliquer comme un fou sur les <b>[url]</b>..."
+
+#: src/wmcoincoin.c:490
+msgid "Spawning \"%<YEL %s>\"\n"
+msgstr ""
+
+#: src/wmcoincoin.c:516
+#, c-format
+msgid "Can't get window attributes.\n"
+msgstr ""
+
+#: src/wmcoincoin.c:651
+#, c-format
+msgid ""
+"[%s] Ooops, there must have been a little problem, the server answered:<p>%"
+"s<p>%s"
+msgstr ""
+
+#: src/wmcoincoin.c:653
+msgid "Check your cookies !"
+msgstr ""
+
+#: src/wmcoincoin.c:656 src/wmcoincoin.c:671
+#, c-format
+msgid ""
+"[%s] Ooops, there must have been a little problem, the server answered:<p>%s"
+msgstr ""
+
+#: src/wmcoincoin.c:689
+msgid "message posted: '%<YEL %s>\n"
+msgstr ""
+
+#: src/wmcoincoin.c:690
+msgid "    (useragent: '%<CYA %s>\n"
+msgstr ""
+
+#: src/wmcoincoin.c:763
+#, c-format
+msgid "[%s] Damned ! There has been an error<p>%s"
+msgstr ""
+
+#: src/wmcoincoin.c:813
+#, c-format
+msgid ""
+"Fork failed...(%s)..\n"
+" you sux\n"
+msgstr ""
+
+#: src/wmcoincoin.c:826
+#, c-format
+msgid ""
+"Exec of wmccc failed...(%s)..\n"
+" you sux (wmccc not in path?)\n"
+msgstr ""
+
+#: src/wmcoincoin.c:864
+#, c-format
+msgid "Unable to open '%s' for %s the state of the beast [%s]\n"
+msgstr ""
+
+#: src/wmcoincoin.c:864
+msgid "reading"
+msgstr ""
+
+#: src/wmcoincoin.c:864
+msgid "writing"
+msgstr ""
+
+#: src/wmcoincoin.c:881
+#, c-format
+msgid "Unable to open '%s' for writing to save the state of the beast\n"
+msgstr ""
+
+#: src/wmcoincoin.c:914
+#, fuzzy, c-format
+msgid ""
+"If the balltrap is enabled, you can:<br>- launch plastic ducks with <font "
+"color=blue><tt>Left Click</tt></font><br>- quickly kill all ducks with a "
+"<font color=blue><tt>Right Click</tt></font><br>"
+msgstr ""
+"Quand cette led clignote en vert, un nouvelle article est "
+"disponible<br><font color=blue><tt>Clic Gauche</tt></font><tab>: voir "
+"l'article<br><font color=blue><tt>Clic Droit</tt></font><tab>: marquer tous "
+"les articles comme lus"
+
+#: src/wmcoincoin.c:920
+#, fuzzy
+msgid ""
+"<p align=center><b>This is a professionnal <font "
+"color=#a00000><i>Trolloscope</i></font></b></p>It displays symbols "
+"corresponding to the user-agents of the last messages posted on the board. "
+"The relationships between useragent and (colour,symbol) are defined in the "
+"<tt>~/.wmcoincoin/options</tt> file<br><font color=blue><tt>Left Click</tt></"
+"font><tab>: displays the useragent<br><font color=blue><tt>Middle Click</"
+"tt></font><tab>: instant refresh of all boards<br>Note: if you have given "
+"your authentication cookie to wmCoinCoin and if it blinks blue, then someone "
+"just answered to one of your posts. "
+msgstr ""
+"<p align=center><b>Ceci est un <font color=#a00000><i>Trolloscope</i></font> "
+"professionel</b></p>Il affiche des symboles correspondant aux user-agents "
+"des derniers messages postés sur la tribune. Les associations useragent->"
+"(couleur,symbole) sont définies dans le fichier <tt>~/.wmcoincoin/"
+"useragents</tt><br><font color=blue><tt>Clic Gauche</tt></font><tab>: "
+"affiche un useragent<br><font color=blue><tt>Clic Milieu</tt></font><tab>: "
+"mise à jour immédiate<br>remarque: si vous avez prêté votre cookie "
+"d'authentification à wmCoinCoin et que celui-ci clignote en rouge, il vous "
+"indique qu'on a répondu à un de vos commentaires (non anonyme, bien sûr) "
+"Pour voir les réponses: <font color=blue><tt>Clic Gauche</tt></font> (à "
+"condition d'avoir configuré le browser utilisé par wmcoincoin). Pour arrêter "
+"le clignotement, un <font color=blue><tt>Clic Droit</tt></font> suffit. Le "
+"clignotement vert indique un changement de la valeur de vos XP"
+
+#: src/wmcoincoin.c:928
+msgid ""
+"When this led is blue, a <b>http transfer</b> is underway. A <b><font "
+"color=red>red</font></b> blinking indicates a problem during the last "
+"transfer.<br><font color=blue><tt>Left Click</tt></font>: shows the last "
+"error message<br>"
+msgstr ""
+"Lorsque cette led est bleue, un <b>transfert http</b> est en cours.Un "
+"clignotement <b><font color=red>rouge</font></b> indique un problème au "
+"cours du dernier transfert.<br><font color=blue><tt>Click Gauche</tt></"
+"font> : affiche le dernier message d'erreur reçu.<br>"
+
+#: src/wmcoincoin.c:932
+#, fuzzy
+msgid ""
+"This led does no blink anymore.<br>It is blue when the message is being sent "
+"by the palmipede, and green half a second after the effective sending.<br>A "
+"click on this led allows to change the scroll speed of the trolloscope:"
+"<br><font color=blue><tt>Left Click</tt></font><tab>: slower<br><font "
+"color=blue><tt>Right Click</tt></font><tab>: faster<br><font "
+"color=blue><tt>Middle Click</tt></font><tab>: change the trolloscope "
+"resolution"
+msgstr ""
+"Cette led clignote lorsque vous venez de poster un message sur la tribune, "
+"et que celui est en attente.<br>Elle est bleue lorsque le message est en "
+"cours d'envoi, et verte une demi-seconde après son envoi.<br>Un clic sur "
+"cette led permet de changer de la vitesse de défilement du trolloscope :"
+"<br><font color=blue><tt>Clic Gauche</tt></font><tab>: moins vite<br><font "
+"color=blue><tt>Clic Droit</tt></font><tab>: plus vite<br><font "
+"color=blue><tt>Clic Milieu</tt></font><tab>: changer la résolution du "
+"trolloscope"
+
+#: src/wmcoincoin.c:939
+msgid ""
+"When this led blinks green, a new article is available.<br><font "
+"color=blue><tt>Left Click</tt></font><tab>: see the article<br><font "
+"color=blue><tt>Right Click</tt></font><tab>: mark all articles as read"
+msgstr ""
+"Quand cette led clignote en vert, un nouvelle article est "
+"disponible<br><font color=blue><tt>Clic Gauche</tt></font><tab>: voir "
+"l'article<br><font color=blue><tt>Clic Droit</tt></font><tab>: marquer tous "
+"les articles comme lus"
+
+#: src/wmcoincoin.c:943
+msgid ""
+"When this led blinks green, you have just received a new message.<br><font "
+"color=blue><tt>Left Click</tt></font>: see the new message with the external "
+"browser 1<br><font color=blue><tt>Middle Click</tt></font>: see the new "
+"message with the external browser 2<br><font color=blue><tt>Right Click</"
+"tt></font>: cancel all new messages"
+msgstr ""
+"Quand cette led clignote en vert, vous venez de recevoir un nouveau message."
+"<br><font color=blue><tt>Click Gauche</tt></font> : voir le nouveau message "
+"avec le browser externe 1<br><font color=blue><tt>Click Milieu</tt></font> : "
+"voir le nouveau message avec le browser externe 2<br><font "
+"color=blue><tt>Click Droite</tt></font> : annuler les nouveaux messages"
+
+#: src/wmcoincoin.c:948
+msgid ""
+"When the cursor is above this led, the level of the <font "
+"color=#a00000><i>Troll-o-meter</i></font> is displayed.<br><font "
+"color=blue><tt>Left Click</tt></font><tab>: INVOKE THE POWER OF <b>C01N "
+"C01N</b> !<br><font color=blue><tt>Right Click</tt></font><tab>: see the "
+"statistics of the board, and your XP and votes (if you have provided your "
+"authentication cookie)<br><font color=blue><tt>Middle Click</tt></font>: re-"
+"read the <tt>~/.wmcoincoin/options</tt> file"
+msgstr ""
+"Quand le curseur de la souris est au-dessus cette led, le niveau du <font "
+"color=#a00000><i>Trollomètre</i></font> est affiché<br><font "
+"color=blue><tt>Click Gauche</tt></font><tab>: INVOQUER <b>C01N C01N</b> !"
+"<br><font color=blue><tt>Click Droit</tt></font><tab>: voir les stats de "
+"fréquentation de la tribune, ainsi que vos XP/votes (si vous avez fourni "
+"votre cookie d'authentification)<br><font color=blue><tt>Click Milieu</tt></"
+"font>: demande de relecture de <tt>~/.wmcoincoin/options</tt>"
+
+#: src/wmcoincoin.c:953
+msgid ""
+"The time of the last message received on the board, and the number of "
+"seconds that have past since<br><font color=blue><tt>Left Click</tt></font>: "
+"show/hide the <b>palmipede editor</b><br><font color=blue><tt>Right Click</"
+"tt></font>: show/hide the <b>pinnipede teletype</b>"
+msgstr ""
+"Heure du dernier message reçu sur la tribune, ainsi que le nombre de "
+"secondes qui se sont écoulées depuis<br><font color=blue><tt>Clic Gauche</"
+"tt></font> : montrer/cacher le <b>palmipède editor</b><br><font "
+"color=blue><tt>Clic Droit</tt></font> : montrer/cacher le <b>pinnipède "
+"teletype</b>"
+
+#: src/wmcoincoin.c:959
+msgid "<b><i>DON'T PANIC</i></b>"
+msgstr ""
+
+#: src/wmcoincoin.c:1106
+#, c-format
+msgid "X11 Error. The coincoin is going down for halt NOW!\n"
+msgstr ""
+
+#: src/wmcoincoin.c:1112
+#, c-format
+msgid "X11 IO Error. The coincoin is going down for halt NOW!\n"
+msgstr ""
+
+#: src/wmcoincoin.c:1145
+#, c-format
+msgid "pan ! pan ! ... arg\n"
+msgstr ""
+
+#: src/wmcoincoin.c:1559
+#, c-format
+msgid "Creating the windows icon. Just tell me if it makes your WM crash.\n"
+msgstr ""
+
+#: src/wmcoincoin.c:1727
+#, c-format
+msgid "Couldn't create window\n"
+msgstr ""
+
+#: src/wmcoincoin.c:1739
+#, c-format
+msgid "Couldn't create icon window\n"
+msgstr ""
+
+#: src/wmcoincoin.c:1752
+#, c-format
+msgid "Bad dimensions for the pixmap skin (expected 64x320, found %dx%d)\n"
+msgstr ""
+
+#: src/wmcoincoin.c:1755
+msgid "Unable to load the pixmap '%<grn %s>'\n"
+msgstr ""
+
+#: src/wmcoincoin.c:1834
+#, c-format
+msgid "Couldn't create text property\n"
+msgstr ""
+
+#: src/wmcoincoin.c:1848
+#, c-format
+msgid "Couldn't create graphics context\n"
+msgstr ""
+
+#: src/wmcoincoin.c:1940 src/wmcoincoin.c:1945 src/wmcoincoin.c:1950
+#: src/wmcoincoin.c:1956 src/wmcoincoin.c:1963 src/wmcoincoin.c:1970
+#, c-format
+msgid ""
+"sigaction: erreur %d (%s)\n"
+" essayez de recompiler en faisant un #define SIGNAUX_A_LANCIENNE...\n"
+msgstr ""
+
+#: src/wmcoincoin.c:2090
+msgid "%<GRN wmc2> v.%<WHT %s> [ built on %s ]\n"
+msgstr "%<GRN wmc2> v.%<WHT %s> [ built on %s ]\n"
+
+#: src/wmcoincoin.c:2101
+#, c-format
+msgid "locale used: %s\n"
+msgstr "locale utilisée: %s\n"
+
+#: src/wmcoincoin.c:2146
+msgid "%<YEL BOARD      >"
+msgstr ""
+
+#: src/wmcoincoin.c:2148
+msgid "%<YEL RSS        >"
+msgstr ""
+
+#: src/wmcoincoin.c:2150
+msgid "%<YEL POP3       >"
+msgstr ""
+
+#: src/wmcoincoin.c:2151 src/wmcoincoin.c:2160
+msgid "%<YEL prrrrrrt    >"
+msgstr ""
+
+#: src/wmcoincoin.c:2155
+msgid "%<YEL tags not encoded  >"
+msgstr ""
+
+#: src/wmcoincoin.c:2157
+msgid "%<YEL tags encoded      >"
+msgstr ""
+
+#: src/wmcoincoin.c:2159
+msgid "%<YEL without underpants>"
+msgstr "%<YEL sans slip>"
+
+#: src/wmcoincoin.c:2254
+#, c-format
+msgid "Unable to load font %s , trying iso8859-1\n"
+msgstr ""
+
+#: src/wmcoincoin.c:2258
+#, c-format
+msgid "Unable to load font %s, aborting\n"
+msgstr ""
+
+#: src/pinnipede.c:1765
+msgid ""
+"%<yel impossible to use the pseudo-transparency> (probable solution: "
+"relaunch wmsetbg or its equivalent)\n"
+msgstr ""
+
+#: src/pinnipede.c:1828
+#, c-format
+msgid "Bold slanted font '%s' not found -> we're looking for the italic font\n"
+msgstr ""
+
+#: src/pinnipede.c:2061
+#, c-format
+msgid ""
+"Failed to load the '%s' fonts with size '%d'\n"
+"Let's try with sans/12.\n"
+msgstr ""
+
+#: src/pinnipede.c:2063
+msgid "Uuuurg !! No helvetica, I shoot my nose.\n"
+msgstr ""
+
+#: src/pinnipede.c:2406
+#, c-format
+msgid ""
+"\n"
+"[you posted this message]"
+msgstr ""
+"\n"
+"[vous avez posté ce message]"
+
+#: src/pinnipede.c:2409
+#, c-format
+msgid ""
+"\n"
+"[this message answers to one of yours]"
+msgstr ""
+"\n"
+"[ce message répond à l'un des vôtres]"
+
+#: src/pinnipede.c:2413
+#, c-format
+msgid ""
+"\n"
+"message 'boxed' because: "
+msgstr ""
+"\n"
+"message 'encadré' car: "
+
+#: src/pinnipede.c:2422
+#, c-format
+msgid ""
+"\n"
+"message plopified (level %d) because: "
+msgstr ""
+"\n"
+"message plopifié (niveau %d) car: "
+
+#: src/pinnipede.c:2429
+#, c-format
+msgid ""
+"\n"
+"message plopified (level 3) because the boitakon is hungry"
+msgstr ""
+
+#: src/pinnipede.c:2435 src/pinnipede.c:2437
+msgid "answers"
+msgstr "réponses"
+
+#: src/pinnipede.c:2435 src/pinnipede.c:2437
+msgid "answer"
+msgstr "réponse"
+
+#: src/pinnipede.c:2437
+#, c-format
+msgid "%d %s (and %d plop%s from the boitakon)"
+msgstr "%d %s (et %d plop%s de la boitakon)\""
+
+#: src/pinnipede.c:2521
+#, fuzzy
+msgid ""
+"<p align=center> Welcome to the <b><font color=#008000>Pinnipede Teletype</"
+"font></b></p>This window was specially designed by the greatest experts to "
+"offer you optimal mouling conditions.<br>Here is a summary of its "
+"functionalities:<br><br><b>To scroll</b>, use the mouse wheel, or 'drag' "
+"while clicking with the middle button. Scrolling is automatic when a new "
+"message appears.<br><br>To bring the <b>button bar</b> or make it disappear, "
+"use the middle clic. <br><br>The available actions on the <b>clock</b> near "
+"each message are:<br><font color=blue>Left Click</font><tab>: opens the "
+"palmipede editor, and inserts a reference to the message<br>If you click on "
+"an <b>[url]</b>, the result will be:<br><font color=blue>Left Click</"
+"font><tab>: opens the url in the external browser (if it has been defined in "
+"the ~/.wmcoincoin/options file). <b>Warning</b>, even if precautions have "
+"been takensince the inominious wmcoincoin 2.0, this kind of things is "
+"generally considered as a security weakness...<br><font color=blue>Middle "
+"Click</font><tab>: opens the url with the second browser (the http.browser2 "
+"option)<br>When the pointer is over a <b>reference to a previous post</b>, "
+"it will be underlined. If you click:<br><font color=blue>Left Click</"
+"font><tab>: brings the referenced message<br>You can use the right clic "
+"everywhere to bring a popup menu, which gives your more choices, such as "
+"putting a message in the boitakon, plopifying, filtering, copying in "
+"clipboard etc.<br>Some basic filtering is available with the help of <font "
+"color=blue>Right Click</font> on a word, login, useragent... Use the blue "
+"button to cancel the filter.<br>If you want to emphasize the messages of a "
+"given user, or those containing a given word, use the  emphasize entry of "
+"the contextual menu.<br>Someone is annoying you ? You have launched a troll "
+"that you don't control ? Then <b>plopify</b> the evil with a <font "
+"color=blue>Right Click/Plopify</font> (or put in boitakon) on his login/"
+"useragent. You can later remove the boitakonned message from the boitakon "
+"with a right clic on the left-most gray button.<br><br>You can take a 'shot' "
+"of the board (the so-called seafood tray), with <font color=blue>Ctrl+Middle "
+"Click</font><br><br>In order to understand the display of the <b>useragents</"
+"b> activated by the dark red button (about fifteen pixels on your left), you "
+"can see the <tt>~/.wmcoincoin/options</tt><br> file (hint: the button has 5 "
+"different positions)<br><br>The pinnipede teletype wishes you a nice mouling."
+msgstr ""
+"<p align=center>Bienvenue dans le <b><font color=#008000>Pinnipède Télétype</"
+"font></b></p>Cette fenêtre a été spécialement conçue par les plus grands "
+"experts pour offrir des conditions de moulage optimales.<br>Voici donc un "
+"rappel de ses fonctionnalités :<br><br><b>Pour scroller</b>, utiliser la "
+"roulette de la souris, ou 'tirer' en cliquant avec le bouton de droite. Le "
+"scroll est automatique lors de l'apparition d'un nouveau message."
+"<br><br>Pour faire apparaître/disparaître <b>la barre de boutons</b>, "
+"utilisez le clic droit. Les deux premiers boutons permettent de scroller, "
+"plus ou moins vite selon que vous cliquez avec le bouton de gauche ou de "
+"droite<br><br>Les actions disponibles sur l'<b>horloge</b> identifiant un "
+"message sont :<br><font color=blue>Clic Gauche</font><tab> : ouvre le "
+"palmipède editor, et insère une référence au message<br><font "
+"color=blue>Clic Milieu</font><tab> : copie le contenu du message dans le "
+"presse-papiers<br><font color=blue>Clic Droit</font><tab> : copie le contenu "
+"du useragent dans le presse-papiers<br><br>En cliquant sur une <b>[url]</b>, "
+"le résultat sera :<br><font color=blue>Clic Gauche</font><tab> : ouverture "
+"de l'url dans le browser externe (si il a été défini dans le fichier ~/."
+"wmcoincoin/options). <b>Attention</b>, même si des précautions ont été "
+"prises depuis l'ignominieux wmcoincoin 2.0, ce genre de choses reste "
+"généralement considéré comme une faiblesse dans la sécurité...<br><font "
+"color=blue>Clic Milieu</font><tab> : ouverture de l'url avec le second "
+"browser (option http.browser2)<br><font color=blue>Clic Droit</font><tab> : "
+"copie l'url dans le clipboard<br><br>Quand le pointeur se trouve au-dessus "
+"d'une <b>référence à un post précédent</b>, celui-ci sera souligné. Si vous "
+"cliquez :<br><font color=blue>Clic Gauche</font><tab> : 'aller' au message "
+"référencé<br><font color=blue>Clic Droite</font><tab> : copier cette "
+"référence dans le clipboard (d'accord, c'est pas très utile...)<br><br>Un "
+"filtrage rudimentaire est disponible à l'aide de <font color=blue>Ctrl+Clic "
+"Gauche</font> sur un mot, login, useragent... (utiliser le bouton bleu pour "
+"l'annuler)<br> Si vous voulez au contraire mettre en relief les post d'une "
+"personne ou bien ceux contenant un certain mot, le <font color=blue>Shift"
+"+Clic Gauche</font> sera votre ami.<br><b>Nouveau :</b> quelqu'un vous "
+"saoule méchamment ? Vous avez lancé un troll qui vous échappe ? Alors "
+"plopifiez les malfaisants avec un <font color=blue>Shift+Clic Droit</font> "
+"sur son login/useragent<br><br>Vous pouvez prendre un 'shot' de la tribune "
+"(aka plateau de fruits de mer), avec <font color=blue>Ctrl+Clic Milieu</"
+"font><br><br>Pour comprendre l'affichage des <b>useragents</b> activé par le "
+"bouton rouge sombre (à quinze pixels sur votre gauche), se reporter au "
+"fichier <tt>~/.wmcoincoin/useragents</tt><br> (hint : il a 5 positions "
+"différentes)<br><br>Le pinnipède télétype vous souhaite un agréable moulage."
+
+#: src/pinnipede.c:2663 src/pinnipede.c:2682 src/pinnipede.c:2699
+#: src/pinnipede.c:2716 src/pinnipede.c:2732
+#, c-format
+msgid "Activating the filter [%s]\n"
+msgstr ""
+
+#: src/pinnipede.c:2859
+#, c-format
+msgid ""
+"The selected element is the <font color=blue>thread</font> '<font "
+"color=#800000>id=%d</font>'"
+msgstr ""
+
+#: src/pinnipede.c:2872
+#, c-format
+msgid ""
+"The selected element is the <font color=blue>useragent</font> '<font "
+"color=#800000>%s</font>'"
+msgstr ""
+
+#: src/pinnipede.c:2882
+#, c-format
+msgid ""
+"The selected element is the <font color=blue>login</font> '<font "
+"color=#800000>%s</font>'"
+msgstr ""
+
+#: src/pinnipede.c:2888
+#, c-format
+msgid ""
+"The selected element is the <font color=blue>message</font> #id=<font "
+"color=#800000>%d</font>"
+msgstr ""
+
+#: src/pinnipede.c:2896
+#, c-format
+msgid ""
+"The selected element is the <font color=blue>word</font> '<font "
+"color=#800000>%s</font>'"
+msgstr ""
+
+#: src/pinnipede.c:2906
+msgid "<b>plop</b>ify it"
+msgstr "<b>plop</b>ifier"
+
+#: src/pinnipede.c:2907
+msgid "<b>superplop</b>ify it"
+msgstr "<b>superplop</b>ifier"
+
+#: src/pinnipede.c:2908
+msgid "put in <b>boitakon</b>"
+msgstr "ajouter dans la <b>boitakon</b>"
+
+#: src/pinnipede.c:2909
+msgid "put in <i>hungry</i> <b>boitakon</b>"
+msgstr "ajouter dans la <i>hungry</i> <b>boitakon</b>"
+
+#: src/pinnipede.c:2913
+msgid "mark it (categ 0)"
+msgstr ""
+
+#: src/pinnipede.c:2914
+msgid "mark it (categ 1)"
+msgstr ""
+
+#: src/pinnipede.c:2915
+msgid "mark it (categ 2)"
+msgstr ""
+
+#: src/pinnipede.c:2916
+msgid "mark it (categ 3)"
+msgstr ""
+
+#: src/pinnipede.c:2917
+msgid "mark it (categ 4)"
+msgstr ""
+
+#: src/pinnipede.c:2918
+msgid "filter it"
+msgstr "filtrer (bouton bleu pour désactiver le filtre)"
+
+#: src/pinnipede.c:2922
+msgid "gogole search"
+msgstr ""
+
+#: src/pinnipede.c:2926
+msgid "wikipedia search"
+msgstr ""
+
+#: src/pinnipede.c:2931
+msgid "copy link in X clipboard"
+msgstr "copier l'url dans le presse-papier"
+
+#: src/pinnipede.c:2935
+msgid "copy useragent in X clipboard"
+msgstr "copier le useragent dans le presse-papier"
+
+#: src/pinnipede.c:2938
+msgid "Try to download the correspounding picture"
+msgstr ""
+
+#: src/pinnipede.c:2939
+msgid "Bookmark this picture"
+msgstr ""
+
+#: src/pinnipede.c:2940
+msgid "Remove this picture from bookmarks"
+msgstr ""
+
+#: src/pinnipede.c:2963
+#, c-format
+msgid "remove %s:'<font color=blue>%.15s</font> from hilight categ %d"
+msgstr ""
+
+#: src/pinnipede.c:2969
+msgid "hide the button bar / tabs bar"
+msgstr "cacher la barre de tabs/boutons"
+
+#: src/pinnipede.c:2970
+msgid "show the button bar / tabs bar"
+msgstr "afficher la barre de tabs/boutons"
+
+#: src/pinnipede.c:2973
+msgid "Change colors for this site"
+msgstr ""
+
+#: src/pinnipede.c:2978
+msgid "<b>enable</b> the bigornophone"
+msgstr "<b>activer</b> le bigornophone"
+
+#: src/pinnipede.c:2980
+msgid "<b>disable</b> the bigornophone"
+msgstr "<b>désactiver</b> le bigornophone"
+
+#: src/pinnipede.c:2985
+msgid "<b>enable</b> the secondary bigornophone"
+msgstr "<b>activer</b> le bigornophone secondaire"
+
+#: src/pinnipede.c:2987
+msgid "<b>disable</b> the secondary bigornophone"
+msgstr "<b>désactiver</b> le bigornophone secondaire"
+
+#: src/palmipede.c:344
+msgid ""
+"%<MAG> FUCK THAT BUG! x=%d y=%d curs_x=%d curs_y=%d,y_scroll=%d,sel_anchor=%"
+"d,sel_head=%d\n"
+msgstr ""
+
+#: src/palmipede.c:561
+msgid ""
+"%<MAG> RAH ENCORE CE BUG! x=%d y=%d curs_x=%d curs_y=%d,y_scroll=%d,"
+"sel_anchor=%d,sel_head=%d\n"
+msgstr ""
+
+#: src/palmipede.c:662
+#, c-format
+msgid "wmcoincoin: Failed to set XA_PRIMARY ownership."
+msgstr ""
+
+#: src/palmipede.c:1331
+msgid ""
+"looks like you fucked your options file, no board has be defined: no noard, "
+"no palmipede"
+msgstr ""
+
+#: src/palmipede.c:2065
+msgid "====> <b>Moment "
+msgstr ""
+
+#: src/palmipede.c:2067
+msgid "_o/* <b>BLAM</b>! "
+msgstr ""
+
+#: src/palmipede.c:2069
+msgid "_o/* <b>paf</b>! "
+msgstr ""
+
+#: src/palmipede.c:2071
+msgid "sale chauve "
+msgstr ""
+
+#: src/palmipede.c:2109
+msgid "[:"
+msgstr ""
+
+#: src/palmipede.c:2638
+#, c-format
+msgid ""
+"<p align=center><b>wmCoinCoin Agent</b></p>Hmmm, it seems that you don't "
+"know what to say, so, if you don't mind,I suggest <font color=blue>%s</font>"
+msgstr ""
+"<p align=center><b>wmCoinCoin Agent</b></p>Mmmh, j'ai l'impression que vous "
+"ne savez pas quoi dire, alors si je puis me permettre, je vous suggère <font "
+"color=blue>%s</font>"
+
+#: src/palmipede.c:2648
+msgid "Put here the user-agent"
+msgstr "Entrez le useragent."
+
+#: src/palmipede.c:2651
+msgid "Fold back the palmipede<p>shortcut: <b>escape</b>"
+msgstr "Replier le palmipède<p>raccourci: <b>escape</b>"
+
+#: src/palmipede.c:2652
+msgid "Edit the user-agent"
+msgstr "Éditer le useragent"
+
+#: src/palmipede.c:2652
+msgid "Edit the message<p>shortcut: <b>Tab</b>"
+msgstr "Éditer le message<p>raccourci: <b>Tab</b>"
+
+#: src/palmipede.c:2653
+msgid "Insert italic<p>shortcut: <b>Alt-I</b>"
+msgstr "Insérer de l'italiques<p>raccourci: <b>Alt-I</b>"
+
+#: src/palmipede.c:2654
+msgid "Insert bold<p>shortcut: <b>Alt-B</b>"
+msgstr "Insérer du gras<p>raccourci: <b>Alt-B</b>"
+
+#: src/palmipede.c:2655
+msgid "Insert teletype tag<p>shortcut: <b>Alt-T</b>"
+msgstr "Insérer du télétype<p>raccourci: <b>Alt-T</b>"
+
+#: src/palmipede.c:2656
+msgid "Overstrike text<p>shortcut: <b>Alt-S</b>"
+msgstr "Insérer du texte rayé<p>raccourci: <b>Alt-S</b>"
+
+#: src/palmipede.c:2657
+msgid "Underline text<p>shortcut: <b>Alt-U</b>"
+msgstr "Insérer du texte souligné<p>raccourci: <b>Alt-U</b>"
+
+#: src/palmipede.c:2659
+msgid "Undo<p>shortcut: <b>Ctrl-Z</b> or <b>Ctrl-_</b>"
+msgstr "Défaire<p>raccourci: <b>Ctrl-Z</b> ou <b>Ctrl-_</b>"
+
+#: src/palmipede.c:2660
+msgid "Clear"
+msgstr "Effacer"
+
+#: src/palmipede.c:2661
+msgid "View the [:totoz] picture bookmark in your browser"
+msgstr ""
+
+#: src/palmipede.c:2662
+msgid "Restore the default user-agent"
+msgstr "Restaurer le user-agent par défaut"
+
+#: src/palmipede.c:2706
+#, c-format
+msgid " by %s"
+msgstr ""
+
+#: src/palmipede.c:2709
+#, c-format
+msgid "at %02d:%02d:%02d%s%s"
+msgstr ""
+
+#: src/palmipede.c:2711
+#, c-format
+msgid "<b>%d</b> times (first reference at %02d:%02d:%02d%s%s)"
+msgstr ""
+
+#: src/palmipede.c:2713
+#, c-format
+msgid "<b>%d</b> times (the url has left the pinnipede)"
+msgstr ""
+
+#: src/palmipede.c:2715
+#, c-format
+msgid ""
+"<b>°Bloub!°</b> It looks like you are living in the water. This url has "
+"already been posted %s<p>Press Alt-L to scroll to the url in the pinnipede, "
+"(Alt-F is also an option)"
+msgstr ""
+
+#: src/dock.c:498
+#, c-format
+msgid "..NO NEWS"
+msgstr ""
+
+#: src/dock.c:775
+#, c-format
+msgid "coin ?.... COIN ?? couic !\n"
+msgstr ""
+
+#: src/dock.c:882
+msgid "%<YEL Troll-o-meter -> going to level> %<GRN 0.00> (max=1.) !!!\n"
+msgstr ""
+
+#: src/dock.c:1002
+#, c-format
+msgid "Coin !\n"
+msgstr ""
+
+#: src/dock.c:1005
+msgid ""
+"<b>Please</b> fill your options file with a valid site equiped with a "
+"board..."
+msgstr ""
+
+#: src/dock.c:1013
+msgid "This board is read-only"
+msgstr ""
+
+#: src/dock.c:1135
+#, c-format
+msgid "Error while loading file : '%s' [64x64 pixels XPM, please]"
+msgstr ""
+
+#: src/dock.c:1341 src/dock.c:1500
+msgid "No new messages."
+msgstr "Pas de nouveaux messages."
+
+#: src/board.c:764
+#, c-format
+msgid "[%s] board_remove_old_msg: destroying id=%d (date=%s)\n"
+msgstr ""
+
+#: src/board.c:1503
+#, c-format
+msgid "Welcome to the message from '%.20s' in the boitakon\n"
+msgstr ""
+
+#: src/board.c:1839
+msgid "Original message: '%<CYA %s>'\n"
+msgstr ""
+
+#: src/board.c:1840
+msgid "Decoded message: '%<MAG %s>'\n"
+msgstr ""
+
+#: src/board.c:2035
+msgid ""
+"%<YEL \\o/ Maybe there just has been a race condition in the board backend !"
+"> (id=%d).\n"
+"DON'T PANIC, the coincoin handles this well, it only proves I didn't write\n"
+"this bugfix for coconuts.\n"
+msgstr ""
+
+#: src/board.c:2059
+msgid ""
+"[%<YEL %s>] There is a problem in '%s',  I can't parse it... error:%<YEL %"
+"s>\n"
+msgstr ""
+
+#: src/board.c:2066 src/board.c:2213
+msgid "[%<YEL %s>] Error while downloading '%<YEL %s>' : %<RED %s>\n"
+msgstr ""
+
+#: src/board.c:2203
+msgid ""
+"[%<YEL %s>] There is a problem in '%s', I can't parse it... error:%<YEL %s>\n"
+msgstr ""
+
+#: src/board.c:2261
+msgid "DEBUG: opening '%<RED %s>'\n"
+msgstr ""
+
+#: src/prefs.c:93
+#, c-format
+msgid "[line %d] unable to find an option name"
+msgstr "[ligne %d] impossible de trouver un nom d'option"
+
+#: src/prefs.c:101
+#, c-format
+msgid "[line %d] missing value for option '%s'"
+msgstr "[ligne %d] la valeur de l'option '%s' manque"
+
+#: src/prefs.c:159
+#, c-format
+msgid ""
+"Invalid option '%s', we were waiting for 2 numbers x and y with a x:y format"
+msgstr "Option '%s' invalide, on attendait deux nombres x et y au format x:y"
+
+#: src/prefs.c:185
+#, c-format
+msgid "wrong style for option %s"
+msgstr ""
+
+#: src/prefs.c:203
+#, c-format
+msgid ""
+"Invalid option '%s': the shading is defined with 2 values x and y comprised "
+"between 0 and 100, with x < y (the greater x, the lighter will be the "
+"display, the smaller y, the more attenuated will be the colours."
+msgstr ""
+"Option '%s' invalide, le shading est défini par deux valeur x et y comprises "
+"entre 0 et 100, telles que x < y (plus x est grand, plus l'image finale sera "
+"lumineuse, plus y est petit plus les couleurs de l'image initiale sont "
+"attenuées"
+
+#: src/prefs.c:211
+#, c-format
+msgid ""
+"Invalid option '%s': you have to specify two RGB colours corresponding the "
+"white and the black"
+msgstr ""
+"Option '%s' invalide, il faut spécifier deux couleurs RGB correspondant aux "
+"teintes du noir, et du blanc"
+
+#: src/prefs.c:215
+#, c-format
+msgid ""
+"Invalid option '%s': you have to first specify the type of transparency: "
+"FULL, SHADING or TINTING"
+msgstr ""
+"Option '%s' invalide, commencer par préciser le type de transparence : FULL, "
+"SHADING ou TINTING"
+
+#: src/prefs.c:301
+#, c-format
+msgid "Deactivating the proxy"
+msgstr ""
+
+#: src/prefs.c:345
+#, c-format
+msgid ""
+"[%s option] there must be one and only one '%%' character, and it must be "
+"followed by an 's' (it will be replaced by the URL)"
+msgstr ""
+"[Option %s] il doit y avoir une et une seule occurence du charactère '%%', "
+"et il doit être suivi d'un 's' (c'est ce qui sera remplacé par l'URL)"
+
+#: src/prefs.c:437
+#, fuzzy, c-format
+msgid ""
+"Error for option '%s': a list of words between quotes, separated by commas, "
+"is expected."
+msgstr ""
+"Erreur pour l'option '%s', on attend une liste de mots entre guillements, "
+"séparés par des virgules."
+
+#: src/prefs.c:475
+#, c-format
+msgid ""
+"Invalid argument for option '%s', word %d, the value of the numerical "
+"argument (%d) must be chosen between %d and %d"
+msgstr ""
+"Argument invalide pour l'option '%s', mot %d, la valeur de l'argument "
+"numérique (%d) doit être comprise entre %d et %d"
+
+#: src/prefs.c:503
+#, c-format
+msgid ""
+"Invalid argument for option '%s', word %d: you have to specify a list of [UA|"
+"LOGIN|ID|etc]:[NUM:]\"a word\" separated with commas\n"
+msgstr ""
+"Argument invalide pour l'option '%s', mot %d : il faut spécifier une liste "
+"de [UA|LOGIN|ID|etc]:[NUM:]\"un mot\" séparés par des virgules\n"
+
+#: src/prefs.c:587
+#, c-format
+msgid "miniuarule: '%s' is a wrong regexp: %s"
+msgstr ""
+
+#: src/prefs.c:630
+#, c-format
+msgid "Invalid argument for miniuarule here: '%.20s'\n"
+msgstr ""
+
+#: src/prefs.c:710
+#, c-format
+msgid "Invalid argument for option 'pinnipede.url_replace' here: '%.20s'\n"
+msgstr ""
+
+#: src/prefs.c:839
+msgid "coin ! coin !"
+msgstr ""
+
+#: src/prefs.c:1086
+#, c-format
+msgid "Invalid value for option '%s' (must be between %d and %d)"
+msgstr "Valeur invalide pour l'option '%s' (doit être dans l'intervalle %d-%d)"
+
+#: src/prefs.c:1088
+#, c-format
+msgid ""
+"Invalid value for option '%s': must be a value of type on/off, 1/0, true/"
+"false or yes/no"
+msgstr ""
+"Valeur invalide pour l'option '%s' : doit être une valeur du type on/off, "
+"1/0, true/false ou yes/no"
+
+#: src/prefs.c:1091
+#, c-format
+msgid ""
+"Invalid value for option '%s': must be a hexadecimal RGB color, with the "
+"RRGGBB format"
+msgstr ""
+"Valeur invalide pour l'option '%s' : doit être une couleur RGB en "
+"héxadécimal, au format RRGGBB"
+
+#: src/prefs.c:1091
+#, c-format
+msgid "Error, the '%s' option only accepts one colour value"
+msgstr "Erreur, l'option '%s' n'accepte qu'une seule valeur de couleur"
+
+#: src/prefs.c:1095
+#, c-format
+msgid ""
+"Invalid value for option '%s': must be a hexadecimal RGB colour, with the "
+"RRGGBB format (optionally followed by a second colour for the transparency "
+"mode)"
+msgstr ""
+"Valeur invalide pour l'option '%s' : doit être une couleur RGB en "
+"héxadécimal, au format RRGGBB (suivie optionnellement d'une deuxième couleur "
+"utilisée pour le mode transparent)"
+
+#: src/prefs.c:1549
+#, c-format
+msgid "Watch out darling, it's gonnah cut\n"
+msgstr ""
+
+#: src/prefs.c:1550
+#, c-format
+msgid "the option '%s' is valid but not handled, WHAT A SHAME"
+msgstr ""
+
+#: src/prefs.c:1570
+msgid ""
+"I think you're totally dumb with the includes of option files (infinite "
+"recursion ?)\n"
+msgstr ""
+"Je crois que vous faites n'importe quoi avec les include de fichier d'option "
+"(sniff !? récursion infinie ?)\n"
+
+#: src/prefs.c:1576
+msgid "You didn't tell me of any filename\n"
+msgstr "Vous n'avez pas précisé de nom de fichier\n"
+
+#: src/prefs.c:1587
+#, c-format
+msgid "Unable to open file '%s' for reading [%s]\n"
+msgstr "Impossible d'ouvrir le fichier '%s' en lecture [%s]\n"
+
+#: src/prefs.c:1589
+#, c-format
+msgid "Unable to open file '%s' for reading\n"
+msgstr "Impossible d'ouvrir le fichier '%s' en lecture\n"
+
+#: src/prefs.c:1611
+#, c-format
+msgid ""
+"line %d: attempt to use a site pref before any 'site:' option has been used\n"
+msgstr ""
+
+#: src/prefs.c:1631
+#, c-format
+msgid "line %d: option '%s' is a site option\n"
+msgstr ""
+
+#: src/prefs.c:1635
+#, c-format
+msgid "line %d: option '%s' can't be used as a site option\n"
+msgstr ""
+
+#: src/prefs.c:1643
+#, c-format
+msgid " [line %d] %s\n"
+msgstr " [ligne %d] %s\n"
+
+#: src/prefs.c:1648
+#, c-format
+msgid "[line %d] unknown option '%s'"
+msgstr "[ligne %d] l'option '%s' est inconnue"
+
+#: src/prefs.c:1736
+msgid ""
+"\n"
+"\n"
+"%<YEL oooooooh !!! you didn't define at least *ONE* site>, you bad boy.\n"
+"i do it for you, but this is the last time\n"
+" plz %<MAG use wmccc to add new sites>\n"
+"\n"
+msgstr ""
+
+#~ msgid ""
+#~ "<p align=center><b>Titles of the news</b></p><font color=blue><tt>Left "
+#~ "Click</tt></font><tab>: display the article currently scrolling<br><font "
+#~ "color=blue><tt>Middle Click</tt></font><tab>: instant update of the list "
+#~ "of news<br><font color=blue><tt>Right Click</tt></font><tab>: open/close "
+#~ "the news window<br>"
+#~ msgstr ""
+#~ "<p align=center><b>Titres des news</b></p><font color=blue><tt>Clic "
+#~ "Gauche</tt></font><tab> : afficher l'article qui défile<br><font "
+#~ "color=blue><tt>Clic Milieu</tt></font><tab> : mise à jour immédiate de la "
+#~ "liste des news<br><font color=blue><tt>Clic Droit</tt></font><tab> : "
+#~ "ouvrir/fermer la fenêtre des news<br>"
+
+#~ msgid "not yet a poster???"
+#~ msgstr "Vous n'avez encore rien posté ???"
+
+#~ msgid "[%s] QUACK ! Unable to destroy the message mid=%d\n"
+#~ msgstr "[%s] Coin !? impossible de détruire la news id=%d\n"
+
+#~ msgid "[%s] QUACK ! Unable to delete the news id=%d\n"
+#~ msgstr "[%s] Coin !? impossible de détruire la news id=%d\n"
+
+#~ msgid "The <b>text of the news</b> hasn't been updated yet..."
+#~ msgstr "Le <b>texte de la news</b> n'a pas encore ete mis a jour..."
+
+#~ msgid ""
+#~ "<B><a href=\"http://%s:%d%s%s\"><font color=#000080>%s</font></a></"
+#~ "B><br>posted by <b><font color=#800000>%s</font></b> on the %s, section "
+#~ "<b>%s</b><p>"
+#~ msgstr ""
+#~ "<B><a href=\"http://%s:%d%s%s\"><font color=#000080>%s</font></a></"
+#~ "B><br>posté par <b><font color=#800000>%s</font></b> le %s, section <b>%"
+#~ "s</b><p>"
+
+#~ msgid "Updating the news..."
+#~ msgstr "Mise à jour des news en cours..."
+
+#~ msgid "(already read)"
+#~ msgstr "(déjà lue)"
+
+#~ msgid "<b><font color=#8f0000>(new!)</font></b>"
+#~ msgstr "<b><font color=#8f0000>(new !)</font></b>"
+
+#~ msgid ""
+#~ "[%s] id=<b>%d</b>, contents of the news unavailable (too old ? download "
+#~ "in progress ?)"
+#~ msgstr ""
+#~ "[%s] id=<b>%d</b>, contenu de la news non disponible (trop vieille ? "
+#~ "download en cours ?)"
+
+#~ msgid ""
+#~ "Don't click on this button if you don't have given a cookie to "
+#~ "wmcoincoin, nor activated the 'http.force_fortune_retrieval' option."
+#~ msgstr ""
+#~ "Inutile de cliquer sur ce bouton si vous n'avez ni donné le cookie à "
+#~ "wmcoincoin, ni utilise l'option 'http.force_fortune_retrieval'."
+
+#~ msgid "Bring/hide the fortune (if appropriate)"
+#~ msgstr "Afficher/cacher la fortune (s'il y a lieu)"
+
+#~ msgid "news from %s"
+#~ msgstr "news de %s"
+
+#~ msgid "Transfer in progress..."
+#~ msgstr "Transfert en cours..."
+
+#~ msgid "Error while opening %s\n"
+#~ msgstr "Erreur d'ouverture de %s\n"
+
+#~ msgid ""
+#~ "error in '%s', line '%d',\n"
+#~ "unexpected end of line, color expected\n"
+#~ msgstr ""
+#~ "Erreur dans '%s', ligne '%d',\n"
+#~ "fin de ligne inattendue, j'aurais préféré une couleur\n"
+
+#~ msgid ""
+#~ "error in '%s', line '%d',\n"
+#~ "unexpected end of line, regex expected\n"
+#~ msgstr ""
+#~ "Erreur dans '%s', ligne '%d',\n"
+#~ "fin de ligne inattendue, j'aurais préféré une regexp\n"
+
+#~ msgid ""
+#~ "error in '%s', line '%d',\n"
+#~ "unexpected end of line, rule name expected\n"
+#~ msgstr ""
+#~ "Erreur dans '%s', ligne '%d',\n"
+#~ "fin de ligne inattendue, j'aurais préféré un nom de règle\n"
+
+#~ msgid ""
+#~ "error in '%s', line '%d',\n"
+#~ "I don't know the symbol '%s'\n"
+#~ msgstr ""
+#~ "Erreur dans '%s', ligne '%d',\n"
+#~ "je ne connais pas le symbole '%s'\n"
+
+#~ msgid ""
+#~ "error in '%s', line '%d',\n"
+#~ "the colours must be hexadecimal numbers on 6\n"
+#~ "characters, and I find this: '%s'\n"
+#~ " Is it really a hexadecimal number ? Tell me ?\n"
+#~ msgstr ""
+#~ "Erreur dans '%s', ligne '%d',\n"
+#~ "les couleurs doivent être des nombres hexadécimaux à 6\n"
+#~ "caractères, et j'ai trouvé ça : '%s'\n"
+#~ "C'est un nombre hexadécimal, ça ? Hein ? Tu te fous de ma gueule ?\n"
+
+#~ msgid "Error in '%s', line '%d', in the regexp '%s'\n"
+#~ msgstr "Erreur dans '%s', ligne '%d', dans la regexp '%s'\n"
+
+#~ msgid "%sregerror tells us: '%s'\n"
+#~ msgstr "%sregerror nous dit: '%s'\n"
+
+#~ msgid ""
+#~ "The <tt>%s/.wmcoincoin/useragents</tt> file doesn't exist or is not "
+#~ "readable.\n"
+#~ msgstr ""
+#~ "Le fichier <tt>%s/.wmcoincoin/useragents</tt> n'existe pas ou n'est pas "
+#~ "lisible.\n"
+
+#~ msgid "Error while reading <tt>.wmcoincoin/useragents</tt>\n"
+#~ msgstr "Erreur pendant la lecture de <tt>.wmcoincoin/useragents</tt>\n"
+
+#~ msgid ""
+#~ "You are using wmc² v.<font color=blue>%s</font> [ built on %s ]<p>%s<p "
+#~ "align=center><b>People on the board</b><br><i>(estimation based on the "
+#~ "useragents and logins)</i></p><br>since:<br>.<tab><i>10 minutes</i>: "
+#~ "<tab><font color=blue>%d</font><tab> people have posted <tab><font "
+#~ "color=blue>%d</font> messages (you:%d)<br>.<tab><i>30 minutes</i>: "
+#~ "<tab><font color=blue>%d</font><tab> people have posted <tab><font "
+#~ "color=blue>%d</font> messages (you:%d)<br>.<tab><i> 2 hours </i>: "
+#~ "<tab><tab><font color=blue>%d</font><tab> people have posted <tab><font "
+#~ "color=blue>%d</font> messages (you:%d)<br>.<tab><i> 8 hours </i>: "
+#~ "<tab><tab><font color=blue>%d</font><tab> people have posted <tab><font "
+#~ "color=blue>%d</font> messages (you:%d)<br>"
+#~ msgstr ""
+#~ "Vous utilisez wmc² v.<font color=blue>%s</font> [ compilé le %s ]<p>%s<p "
+#~ "align=center><b>Fréquentation de la Tribune</b><br><i>(estimation basée "
+#~ "sur les useragents et les logins)</i></p><br>depuis:<br>.<tab><i>10 "
+#~ "minutes</i>: <tab><font color=blue>%d</font><tab> personnes ont posté "
+#~ "<tab><font color=blue>%d</font> messages (vous:%d)<br>.<tab><i>30 "
+#~ "minutes</i>: <tab><font color=blue>%d</font><tab> personnes ont posté "
+#~ "<tab><font color=blue>%d</font> messages (vous:%d)<br>.<tab><i> 2 heures "
+#~ "</i>: <tab><tab><font color=blue>%d</font><tab> personnes ont posté "
+#~ "<tab><font color=blue>%d</font> messages (vous:%d)<br>.<tab><i> 8 heures "
+#~ "</i>: <tab><tab><font color=blue>%d</font><tab> personnes ont posté "
+#~ "<tab><font color=blue>%d</font> messages (vous:%d)<br>"
+
+#~ msgid ""
+#~ "Don't click on this button, the troll_detector is deactivated (see the "
+#~ "option 'tribune.enable_troll_detector')."
+#~ msgstr ""
+#~ "Inutile de cliquer sur ce bouton, le troll_detector est désactivé (voir "
+#~ "l'option 'tribune.enable_troll_detector')"
+
+#~ msgid ""
+#~ "Bring/hide the seconds (when there are less than two messages in the same "
+#~ "minute)"
+#~ msgstr ""
+#~ "Afficher/masquer les secondes (quand il y a moins de deux messages dans "
+#~ "la même minute)"
+
+#~ msgid ""
+#~ "Bring/hide the troll score (the numbers on the left of some messages)"
+#~ msgstr ""
+#~ "Afficher/cacher le score troll (les chiffres à gauche de certains "
+#~ "messages)"
+
+#~ msgid ""
+#~ "Click here to force the refresh of the news, messages, fortune and XP"
+#~ msgstr ""
+#~ "Cliquer ici pour forcer le rafraîchissement immédiat des news, messages, "
+#~ "fortune et XP"
+
+#~ msgid "Approved on "
+#~ msgstr "Approuvé le "
+
+#~ msgid "Posted by"
+#~ msgstr "Posté par"
+
+#~ msgid "Theme:"
+#~ msgstr "Thème:"
+
+#~ msgid "http.browser: thecommand"
+#~ msgstr "http.browser: lacommande"
+
+#~ msgid "http.browser2: thecommand"
+#~ msgstr "http.browser2: lacommande"
+
+#~ msgid "%<yel we consider the backend is >"
+#~ msgstr "%<yel on considère que le backend est >"
+
+#~ msgid "%<YEL modern style>\n"
+#~ msgstr "%<YEL de style moderne>\n"
+
+#~ msgid "%<YEL old style>\n"
+#~ msgstr "%<YEL à l'ancienne>\n"
+
+#~ msgid ""
+#~ "id=%d ua=%s\n"
+#~ "%d réponse%s%s"
+#~ msgstr ""
+#~ "id=%d ua=%s\n"
+#~ "%d réponse%s%s"
diff --git a/po/insert-header.sin b/po/insert-header.sin
new file mode 100644
index 0000000..b26de01
--- /dev/null
+++ b/po/insert-header.sin
@@ -0,0 +1,23 @@
+# Sed script that inserts the file called HEADER before the header entry.
+#
+# At each occurrence of a line starting with "msgid ", we execute the following
+# commands. At the first occurrence, insert the file. At the following
+# occurrences, do nothing. The distinction between the first and the following
+# occurrences is achieved by looking at the hold space.
+/^msgid /{
+x
+# Test if the hold space is empty.
+s/m/m/
+ta
+# Yes it was empty. First occurrence. Read the file.
+r HEADER
+# Output the file's contents by reading the next line. But don't lose the
+# current line while doing this.
+g
+N
+bb
+:a
+# The hold space was nonempty. Following occurrences. Do nothing.
+x
+:b
+}
diff --git a/po/quot.sed b/po/quot.sed
new file mode 100644
index 0000000..0122c46
--- /dev/null
+++ b/po/quot.sed
@@ -0,0 +1,6 @@
+s/"\([^"]*\)"/“\1”/g
+s/`\([^`']*\)'/‘\1’/g
+s/ '\([^`']*\)' / ‘\1’ /g
+s/ '\([^`']*\)'$/ ‘\1’/g
+s/^'\([^`']*\)' /‘\1’ /g
+s/“”/""/g
diff --git a/po/remove-potcdate.sin b/po/remove-potcdate.sin
new file mode 100644
index 0000000..2436c49
--- /dev/null
+++ b/po/remove-potcdate.sin
@@ -0,0 +1,19 @@
+# Sed script that remove the POT-Creation-Date line in the header entry
+# from a POT file.
+#
+# The distinction between the first and the following occurrences of the
+# pattern is achieved by looking at the hold space.
+/^"POT-Creation-Date: .*"$/{
+x
+# Test if the hold space is empty.
+s/P/P/
+ta
+# Yes it was empty. First occurrence. Remove the line.
+g
+d
+bb
+:a
+# The hold space was nonempty. Following occurrences. Do nothing.
+x
+:b
+}
diff --git a/po/stamp-po b/po/stamp-po
new file mode 100644
index 0000000..9788f70
--- /dev/null
+++ b/po/stamp-po
@@ -0,0 +1 @@
+timestamp
diff --git a/po/wmcoincoin.pot b/po/wmcoincoin.pot
new file mode 100644
index 0000000..7e6c655
--- /dev/null
+++ b/po/wmcoincoin.pot
@@ -0,0 +1,1898 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR Free Software Foundation, Inc.
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL at ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: wmcoincoin 2.6.1\n"
+"Report-Msgid-Bugs-To: triton at kumal.info\n"
+"POT-Creation-Date: 2012-08-02 18:16+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
+"Language-Team: LANGUAGE <LL at li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: src/scrollcoin.c:265
+#, c-format
+msgid "setpos out of bounds: %d min=%d, mx=%d\n"
+msgstr ""
+
+#: src/spell_coin.c:189
+#, c-format
+msgid "Fork failed...(%s)\n"
+msgstr ""
+
+#: src/spell_coin.c:210
+#, c-format
+msgid "Exec failed...(%s)\n"
+msgstr ""
+
+#: src/spell_coin.c:334
+#, c-format
+msgid "We send '%s' to ispell\n"
+msgstr ""
+
+#: src/spell_coin.c:337
+#, c-format
+msgid "Error, '%s' was still to send to ispell...\n"
+msgstr ""
+
+#: src/spell_coin.c:367
+msgid "ISPELL answered: '%<MAG %s>' (err=%s)\n"
+msgstr ""
+
+#: src/spell_coin.c:418
+#, c-format
+msgid "spellString: unknown option '0x%02x'\n"
+msgstr ""
+
+#: src/spell_coin.c:419
+#, c-format
+msgid "The complete answer was: '%.512s'\n"
+msgstr ""
+
+#: src/spell_coin.c:420
+#, c-format
+msgid ""
+"With great leniency, wmcoincoin will let ispell alive, just to see what "
+"happens. Don't even think of suiciding the coincoin : THE SHOW MUST GO ON\n"
+msgstr ""
+
+#: src/http_win.c:98
+#, c-format
+msgid "Connected succesfully!\n"
+msgstr ""
+
+#: src/http_win.c:119 src/http_unix.c:144
+#, c-format
+msgid "Connection timed out (timeout=%d sec)!\n"
+msgstr ""
+
+#: src/http_win.c:129
+#, c-format
+msgid "could not set socket to blocking\n"
+msgstr ""
+
+#: src/coin_xutil.c:390
+#, c-format
+msgid "shade_ximage unsupported (bitsperpix=%d) !! Strange...\n"
+msgstr ""
+
+#: src/coin_xutil.c:400
+#, c-format
+msgid ""
+"X11 error detected in a hazardous area:\n"
+"  %s\n"
+msgstr ""
+
+#: src/coin_xutil.c:401
+#, c-format
+msgid "  Protocol request: %d\n"
+msgstr ""
+
+#: src/coin_xutil.c:402
+#, c-format
+msgid "  Resource ID:      0x%lx\n"
+msgstr ""
+
+#: src/coin_xutil.c:403
+#, c-format
+msgid " --> THE SHOW MUST GO ON!\n"
+msgstr ""
+
+#: src/balloon.c:230
+#, c-format
+msgid "hide balloon\n"
+msgstr ""
+
+#: src/http_unix.c:71
+#, c-format
+msgid "Basic connect (can BLOCK THE COINCOIN)...\n"
+msgstr ""
+
+#: src/http_unix.c:177
+#, c-format
+msgid ""
+"Welcome to the forked gethostbyname, everything is experimental, beware the "
+"zombies\n"
+msgstr ""
+
+#: src/http_unix.c:180
+#, c-format
+msgid "Broken pipe: %s\n"
+msgstr ""
+
+#: src/http_unix.c:184
+#, c-format
+msgid ""
+"Ooooops, it looks like there is a throng of zombies out there\n"
+"the fork failed: %s"
+msgstr ""
+
+#: src/http_unix.c:190
+#, c-format
+msgid "son: pipe full (%s)\n"
+msgstr ""
+
+#: src/http_unix.c:192
+#, c-format
+msgid "son: gethostbyname going on...\n"
+msgstr ""
+
+#: src/http_unix.c:194
+#, c-format
+msgid "son: gethostbyname finished.\n"
+msgstr ""
+
+#: src/http_unix.c:200
+#, c-format
+msgid "son: gethostbyname on '%s' failed.\n"
+msgstr ""
+
+#: src/http_unix.c:212
+#, c-format
+msgid "daddy: pipe full (%s), what will do now ?\n"
+msgstr ""
+
+#: src/http_unix.c:236
+#, c-format
+msgid "The son got the pipe full again!\n"
+msgstr ""
+
+#: src/http_unix.c:239
+#, c-format
+msgid "What a fucking pipe! %s\n"
+msgstr ""
+
+#: src/http_unix.c:248
+#, c-format
+msgid "select .. awaiting\n"
+msgstr ""
+
+#: src/http_unix.c:250
+#, c-format
+msgid "select .. interrupted\n"
+msgstr ""
+
+#: src/http_unix.c:252
+#, c-format
+msgid "select .. problem : %s\n"
+msgstr ""
+
+#: src/http_unix.c:263
+#, c-format
+msgid "We're waiting for the son... Come here boy !\n"
+msgstr ""
+
+#: src/http_unix.c:267
+#, c-format
+msgid "Daddy: I couldn't read from my son :-/ (len=%d got '%s') (lasterr=%s)\n"
+msgstr ""
+
+#: src/regexp.c:417
+#, c-format
+msgid "regexp error: %d\n"
+msgstr ""
+
+#: src/regexp.c:430
+#, c-format
+msgid "The regexp [%s] doesn't match the string [%s]\n"
+msgstr ""
+
+#: src/raster.c:157
+#, c-format
+msgid "The visual (depth=%d) is in %s, cool\n"
+msgstr ""
+
+#: src/raster.c:161
+#, c-format
+msgid "Bleh, we are in pseudocolor (depth=%d)...\n"
+msgstr ""
+
+#: src/raster.c:181
+#, c-format
+msgid "Unbelievable, there's even no colors !\n"
+msgstr ""
+
+#: src/raster.c:361
+#, c-format
+msgid ""
+"Unknown colour in the .xpm: '%s'\n"
+"'"
+msgstr ""
+
+#: src/raster.c:410
+#, c-format
+msgid ""
+"dommage, vous avez trouve une pouille dans le 'parseur' de .xpm\n"
+" VOTRE fichier .xpm n'est pas conforme a MON standard xpm\n"
+"err=%d, la ligne qui pose probleme est: '%s'\n"
+" En le reecrivant avec un autre logiciel ca devrait mieux marcher, mais le "
+"mieux c'est sans doute d'envoyer un bug report [ c0in at altern.org ]\n"
+msgstr ""
+
+#: src/raster.c:442
+#, c-format
+msgid "Unable to open '%s' : %s\n"
+msgstr ""
+
+#: src/raster.c:449
+#, c-format
+msgid "Error while reading '%s' !? [%s]\n"
+msgstr ""
+
+#: src/raster.c:463
+#, c-format
+msgid "The '%s' line looks weird\n"
+msgstr ""
+
+#: src/raster.c:471
+#, c-format
+msgid "There are too many lines in '%s' (max=%d) !! \n"
+msgstr ""
+
+#: src/coin_util.c:154
+msgid "[empty]"
+msgstr ""
+
+#: src/keylist.c:94
+msgid "useragent"
+msgstr ""
+
+#: src/keylist.c:95
+msgid "useragent w/o login"
+msgstr ""
+
+#: src/keylist.c:96
+msgid "login"
+msgstr ""
+
+#: src/keylist.c:97
+msgid "word"
+msgstr ""
+
+#: src/keylist.c:98
+msgid "message id"
+msgstr ""
+
+#: src/keylist.c:99
+msgid "thread from id"
+msgstr ""
+
+#: src/msgbox.c:94
+msgid "MESSAGE FROM WMCOINCOIN"
+msgstr ""
+
+#: src/msgbox.c:210
+#, c-format
+msgid "close msgbox\n"
+msgstr ""
+
+#: src/http.c:194
+#, c-format
+msgid "<i>There hasn't been any http error yet</i>"
+msgstr ""
+
+#: src/http.c:199
+#, c-format
+msgid "Last error occured at: <b>%02d:%02d:%02d</b>"
+msgstr ""
+
+#: src/http.c:204
+#, c-format
+msgid "Error: <b><font color=#800000>%s</font></b><br>"
+msgstr ""
+
+#: src/http.c:207
+#, c-format
+msgid "<br>The last error was: %s<br>for the URL:<tt>%s</tt><br>"
+msgstr ""
+
+#: src/http.c:213
+#, c-format
+msgid ""
+"%s<br>%s<br>%s: <tt>%s</tt><br>Host IP: <font color=#0000ff>%s</font><br>%s"
+msgstr ""
+
+#: src/http.c:214
+msgid "<b>There has just been an error !!</b>"
+msgstr ""
+
+#: src/http.c:214
+msgid "The last transfer went fine."
+msgstr ""
+
+#: src/http.c:215
+msgid "faulty URL"
+msgstr ""
+
+#: src/http.c:215
+msgid "We have just downloaded"
+msgstr ""
+
+#: src/http.c:218
+#, c-format
+msgid ""
+"Download going on...<br>URL: <tt>%s</tt><br>IP: <font color=#0000ff>%s</"
+"font><br>"
+msgstr ""
+
+#: src/http.c:220
+#, c-format
+msgid "Resolving name '%s'...<br>"
+msgstr ""
+
+#: src/http.c:336
+#, c-format
+msgid "timeout (t=%d milliseconds)..\n"
+msgstr ""
+
+#: src/http.c:351
+#, c-format
+msgid "net_iread: socket error, res=%d (%s)\n"
+msgstr ""
+
+#: src/http.c:355
+#, c-format
+msgid "net_iread: Timeout...\n"
+msgstr ""
+
+#: src/http.c:423
+#, c-format
+msgid "net_iwrite: Timeout...\n"
+msgstr ""
+
+#: src/http.c:502
+#, c-format
+msgid ""
+"get_host_ip_str_bloq('%s') -> if the network lags, the coincoin can be "
+"blocked here\n"
+msgstr ""
+
+#: src/http.c:620
+#, c-format
+msgid "Unable to create a socket ! (%s) [ip=%s]"
+msgstr ""
+
+#: src/http.c:628
+#, c-format
+msgid "connecting on port %d...\n"
+msgstr ""
+
+#: src/http.c:641
+#, c-format
+msgid "connection failed: %s..\n"
+msgstr ""
+
+#: src/http.c:694
+#, c-format
+msgid "Unable to resolve '%s'"
+msgstr ""
+
+#: src/http.c:789
+msgid "[%<MAG %s>]: %<yel %s>"
+msgstr ""
+
+#: src/http.c:844
+#, c-format
+msgid "http_skip_header has a socket issue ! (%s)"
+msgstr ""
+
+#: src/http.c:865
+#, c-format
+msgid "http_read: request of length %d, pos = %ld, chunk=%d (size %ld)\n"
+msgstr ""
+
+#: src/http.c:870
+#, c-format
+msgid ""
+"Damned, the chunk_encoding has gone down the tubes on the following "
+"request:\n"
+msgstr ""
+
+#: src/http.c:893
+#, c-format
+msgid "error in chunk '%s'\n"
+msgstr ""
+
+#: src/http.c:918
+#, c-format
+msgid "http_read has encountered a socket problem, pos=%d, len=%d !(%s)"
+msgstr ""
+
+#: src/http.c:926
+#, c-format
+msgid "http_read: length finally requested: %d, received: %d, new pos=%ld\n"
+msgstr ""
+
+#: src/http.c:964
+#, c-format
+msgid ""
+"http_get_line: weird, got=0 while reading %d/%d [r->telnet.error=%d, "
+"errmsg='%s']\n"
+msgstr ""
+
+#: src/http.c:970
+#, c-format
+msgid "http_get_line messed up (got=%d): %s!"
+msgstr ""
+
+#: src/http.c:974
+msgid "http_get_line sent (cnt=%d): '%<yel %s>'\n"
+msgstr ""
+
+#: src/http.c:1019
+#, c-format
+msgid "http_send_request/debug, unable to open '%s':%s\n"
+msgstr ""
+
+#: src/http.c:1136
+#, c-format
+msgid "http_get couldn't send its request: %s"
+msgstr ""
+
+#: src/http.c:1140
+#, c-format
+msgid "ok, request sent\n"
+msgstr ""
+
+#: src/http.c:1221
+msgid "Quack ! Missed"
+msgstr ""
+
+#: src/http.c:1234
+#, c-format
+msgid "%s: too big (bsize=%d!), let's cut\n"
+msgstr ""
+
+#: src/http.c:1242
+#, c-format
+msgid "problem while reading %s: %s\n"
+msgstr ""
+
+#: src/http.c:1248
+msgid "%s, read: %<mag %s>\n"
+msgstr ""
+
+#: src/http.c:1299
+#, c-format
+msgid "telnet_get_line has a socket issue ! (%s)"
+msgstr ""
+
+#: src/http.c:1313
+#, c-format
+msgid "telnet_send couldn't send: %s"
+msgstr ""
+
+#: src/troll_detector.c:484
+msgid "troll_detector, initial message : %<YEL %s>\n"
+msgstr ""
+
+#: src/troll_detector.c:682
+msgid ""
+"%<RED this one was too hard> ! (nb_words = %d)\n"
+" txt='%s'\n"
+msgstr ""
+
+#: src/troll_detector.c:686
+#, c-format
+msgid " -> unable to use the words left in a troll, this is the end\n"
+msgstr ""
+
+#: src/troll_detector.c:693
+msgid ""
+"score = %<YEL %d> (sub_score=%<YEL %d>), the following words were used: "
+msgstr ""
+
+#: src/troll_detector.c:728
+msgid "bonus for using capitals: %<YEL %d>\n"
+msgstr ""
+
+#: src/troll_detector.c:735
+msgid "bonus for exclamation marks: %<YEL %d>\n"
+msgstr ""
+
+#: src/troll_detector.c:743
+msgid "bonus for abusive use of weird characters: %<YEL %d>\n"
+msgstr ""
+
+#: src/troll_detector.c:748
+msgid "bonus for abusive use of html tags: %<YEL %d>\n"
+msgstr ""
+
+#: src/troll_detector.c:753
+msgid "bonus for abusive usage of BOLD: %<YEL %d>\n"
+msgstr ""
+
+#: src/troll_detector.c:758
+msgid "%<bld attenuation for using a smiley>\n"
+msgstr ""
+
+#: src/troll_detector.c:761
+msgid ""
+"%<WHT final score: >%<YEL %d>\n"
+"\n"
+msgstr ""
+
+#: src/picohtml.c:245
+#, c-format
+msgid "Bug! calling picohtml(NULL)!"
+msgstr ""
+
+#: src/picohtml.c:246
+msgid "Bug ! appel de picohtml(NULL) !"
+msgstr ""
+
+#: src/picohtml.c:378 src/picohtml.c:388
+#, c-format
+msgid "Allocation of '%s' failed\n"
+msgstr ""
+
+#: src/picohtml.c:385
+#, c-format
+msgid "Allocation of '%s' OK\n"
+msgstr ""
+
+#: src/picohtml.c:396
+msgid "we forget '%<YEL %s>'\n"
+msgstr ""
+
+#: src/picohtml.c:600 src/pinnipede.c:1792
+#, c-format
+msgid "XLoadQueryFont: failed loading font '%s'\n"
+msgstr ""
+
+#: src/picohtml.c:601 src/pinnipede.c:1793
+#, c-format
+msgid "Please choose another font.\n"
+msgstr ""
+
+#: src/picohtml.c:610 src/pinnipede.c:1802
+#, c-format
+msgid "Slanted font '%s' not found -> we're looking for the italic font\n"
+msgstr ""
+
+#: src/picohtml.c:614 src/pinnipede.c:1806 src/pinnipede.c:1832
+msgid "%<RED WARNING>: error while looking for the italic font: '%s'\n"
+msgstr ""
+
+#: src/picohtml.c:615 src/picohtml.c:627 src/picohtml.c:636
+#: src/pinnipede.c:1807 src/pinnipede.c:1819 src/pinnipede.c:1833
+msgid "We'll use the base font.\n"
+msgstr ""
+
+#: src/picohtml.c:626 src/pinnipede.c:1818
+msgid "%<RED WARNING>: error while looking for the bold font: '%s'\n"
+msgstr ""
+
+#: src/picohtml.c:635
+msgid "%<RED WARNING>: error while looking for the courier font: '%s'\n"
+msgstr ""
+
+#: src/picohtml.c:646
+msgid "Now we try sans/12\n"
+msgstr ""
+
+#: src/picohtml.c:648
+msgid "Uuuurg, no sans/12 , I prefer to die\n"
+msgstr ""
+
+#: src/board_util.c:286
+#, c-format
+msgid ""
+"sniff? sniff ? soit vous vous amusez a faire de threads de folie, soit ca "
+"sent le BEUGGUE!\n"
+msgstr ""
+
+#: src/board_util.c:716
+#, c-format
+msgid "get_tok not recognized: (len=%d)'"
+msgstr ""
+
+#: src/board_util.c:733
+#, c-format
+msgid "Hmmm, looks like there's an underpants problem here: %s\n"
+msgstr ""
+
+#: src/board_util.c:913
+#, c-format
+msgid "IPOT(tm) detected"
+msgstr ""
+
+#: src/board_util.c:915
+#, c-format
+msgid "but where is '%s' ?"
+msgstr ""
+
+#: src/board_util.c:919
+#, c-format
+msgid "[IPOT(tm)]"
+msgstr ""
+
+#: src/board_util.c:921
+#, c-format
+msgid "Awww, we turn around and around and around and around..."
+msgstr ""
+
+#: src/board_util.c:929
+#, c-format
+msgid "Hello from %.30s in the boitakon ! (because %s=%.20s)"
+msgstr ""
+
+#: src/board_util.c:933
+#, c-format
+msgid "Hello from %.30s who was eaten by the boitakon"
+msgstr ""
+
+#: src/board_util.c:935
+#, c-format
+msgid ""
+"Hello from %.30s in the boitakon, BUT YOU HAVE JUST FOUND A BUG IN THE "
+"BOITAKON :-("
+msgstr ""
+
+#: src/board_util.c:967
+#, c-format
+msgid "I don't fucking know %s"
+msgstr ""
+
+#: src/pinnipede_widgets.c:964
+#, c-format
+msgid "FILTER UNDEFINED"
+msgstr ""
+
+#: src/pinnipede_widgets.c:1272 src/pinnipede.c:2957
+#, c-format
+msgid "remove %s:'<font color=blue>%.15s</font>' from %s"
+msgstr ""
+
+#: src/pinnipede_widgets.c:1500
+msgid "<folop> I have a 61MB file in /proc, is it normal ?<br>"
+msgstr ""
+
+#: src/pinnipede_widgets.c:1530
+msgid "Bring some help"
+msgstr ""
+
+#: src/pinnipede_widgets.c:1531
+msgid "Bring/hide the scrollcoin"
+msgstr ""
+
+#: src/pinnipede_widgets.c:1532
+msgid ""
+"Enable/disable the balltrap<br>(note that you can also kill all flying ducks "
+"with a right clic on the upper part of the dock applet<br>You can also use "
+"the wmccc to disable duck hunt on some sites (for example<font "
+"color=blue><tt>woof.lu</tt></font>, since the webserver does not enjoy "
+"receiving hundreds of <tt>pan!pan!</tt>in the same second)"
+msgstr ""
+
+#: src/pinnipede_widgets.c:1537
+msgid "Activate/deactivate the pseudo-transparency (may not work)."
+msgstr ""
+
+#: src/pinnipede_widgets.c:1538
+msgid "Change the display mode of the logins/useragents (5 different modes)"
+msgstr ""
+
+#: src/pinnipede_widgets.c:1542
+msgid ""
+"Activate/deactivate the <b>filter</b>. To filter the messages, do a <font "
+"color=#0000ff>Right clic</font> on a word/login/useragent or a clock (to "
+"display a thread). You can also use  <font color=#0000ff>CTRL-S</font> to "
+"perform incremental search on the board content. To remove the filter, just "
+"click here"
+msgstr ""
+
+#: src/pinnipede_widgets.c:1543
+msgid ""
+"Change the plopification type (beware, you will also see the messages in the "
+"boitakon!). <p> To plopify a message, <font color=#0000ff>Right click</font> "
+"on a word/login/useragent/clock (or the zone on the left of the clock to "
+"plopify a thread). To unplopify (or let someone out of the boitakon), just "
+"click on the same place OR right clic on this button and you will have a "
+"list of boitakoned elements.<br>"
+msgstr ""
+
+#: src/pinnipede_widgets.c:1544
+msgid "show only RSS feeds in the pinnipede"
+msgstr ""
+
+#: src/pinnipede_widgets.c:1545
+msgid "show only regular boards in the pinnipede"
+msgstr ""
+
+#: src/pinnipede_widgets.c:1546
+msgid "Launch wmccc (wmcoincoin configuration)"
+msgstr ""
+
+#: src/pinnipede_widgets.c:1549
+msgid "clic here to cancel the current download"
+msgstr ""
+
+#: src/prefs_gestion.c:15
+msgid ""
+"Erreur pour l'option de la ligne de commande '%<GRN -%c>'\n"
+": %s\n"
+msgstr ""
+
+#: src/prefs_gestion.c:26
+msgid "You invoqued wmcoincoin-kde : %<YEL anti KDE-bug mode activated>\n"
+msgstr ""
+
+#: src/prefs_gestion.c:34
+msgid "Home page: %<BLU http:/hules.free.fr/wmcoincoin>\n"
+msgstr ""
+
+#: src/prefs_gestion.c:36
+msgid ""
+"Dock applet pour WindowMaker -- affiche les news de %<GRN D>%<CYA a>%<GRN L>%"
+"<CYA inux>%<GRN F>%<CYA rench>%<GRN P>%<CYA age> (%<BLU http://linuxfr."
+"org>)\n"
+msgstr ""
+
+#: src/prefs_gestion.c:37
+msgid ""
+"OPTIONS (la plupart de ces options peuvent etre activees dans le\n"
+" fichier '%<YEL ~/.wmcoincoin/options>'):\n"
+msgstr ""
+
+#: src/prefs_gestion.c:39
+msgid " %<GRN -h>\t\t: mouaif...\n"
+msgstr ""
+
+#: src/prefs_gestion.c:45
+msgid ""
+" %<GRN -m> %<CYA msg>\t\t: change le message poste sur la tribune (defaut: '%"
+"<grn %s>')\n"
+msgstr ""
+
+#: src/prefs_gestion.c:46
+msgid ""
+" %<GRN -v> %<CYA n>\t\t: verbosite (defaut %<grn %d>) ,%<CYA n>=0,1,2,3\n"
+msgstr ""
+
+#: src/prefs_gestion.c:49
+msgid ""
+" %<GRN -b> %<CYA hexcoul>\t: couleur de fond, en RGB hexa (par defaut: %<grn "
+"%06x>, un magnifique(!) jaune)\n"
+msgstr ""
+
+#: src/prefs_gestion.c:50
+msgid ""
+" %<GRN -c> %<CYA hexcoul>\t: couleur du texte de l'applet, en RGB hexa (par "
+"defaut: %<grn %06x>)\n"
+msgstr ""
+
+#: src/prefs_gestion.c:51
+msgid ""
+" %<GRN -X> %<CYA file.xpm>\t: Fichier pixmap a mettre en fond du dock "
+"(fichier.xpm de 64x64)\n"
+msgstr ""
+
+#: src/prefs_gestion.c:52
+msgid " %<GRN -w> \t\t: utilise le mode windowed plutot que le mode icone\n"
+msgstr ""
+
+#: src/prefs_gestion.c:53
+msgid ""
+"\t\tcette option est necessaire pour utiliser wmcoincoin avec le kicker de "
+"KDE (<3.0)\n"
+msgstr ""
+
+#: src/prefs_gestion.c:54
+msgid ""
+"\t\tmais comme le kicker de KDE 2.1 a un bug qui l'empeche de sauver les "
+"options\n"
+msgstr ""
+
+#: src/prefs_gestion.c:55
+msgid ""
+"\t\tde la ligne de commande d'une session a l'autre, le mieux est "
+"d'invoquer\n"
+msgstr ""
+
+#: src/prefs_gestion.c:56
+msgid ""
+"\t\twmcoincoin sous le nom %<YEL wmcoincoin-kde> (c'est un bete lien "
+"symbolique)\n"
+msgstr ""
+
+#: src/prefs_gestion.c:57
+msgid "\t\tet l'option -w sera automatiquement activee...\n"
+msgstr ""
+
+#: src/prefs_gestion.c:58
+msgid ""
+" %<GRN -B> \t\t: ajoute la bordure de wmcoincoin (pour windowmanager sans "
+"dock)\n"
+msgstr ""
+
+#: src/prefs_gestion.c:59
+msgid ""
+" %<GRN -x> %<CYA x:y>\t\t: essaye de positionner wmcoincoin en (x,y), cette "
+"option\n"
+"\t\tn'est utile que si le windowmanager n'a pas de dock \n"
+"\t\t(utiliser avec l'option %<GRN -B>)\n"
+msgstr ""
+
+#: src/prefs_gestion.c:63
+msgid " %<GRN -H> \t\t: desactive les ballons d'aide\n"
+msgstr ""
+
+#: src/prefs_gestion.c:66
+msgid ""
+" %<GRN -s> %<CYA v>\t\t: vitesse de defilement du trolloscope (1 = rapide, "
+"100 = 1 tres lent)\n"
+"(defaut %<grn %d>)\n"
+msgstr ""
+
+#: src/prefs_gestion.c:71
+msgid ""
+" %<GRN -o> %<CYA fichier>\t: indique le nom du fichier d'options a utiliser "
+"dans le\n"
+"\t\t rep ~/.wmcoincoin (defaut '%<grn %s>')\n"
+msgstr ""
+
+#: src/prefs_gestion.c:73
+msgid " %<GRN -W>\t\t: ouvre le pinnipede des le lancement de wmcoincoin)\n"
+msgstr ""
+
+#: src/prefs_gestion.c:74
+msgid ""
+" %<GRN -l> %<CYA locale>\t: change the default locale (use -l fr to force "
+"wmcoincoin to speak french) (or set LC_MESSAGES properly)\n"
+msgstr ""
+
+#: src/prefs_gestion.c:75
+msgid ""
+" %<GRN -L> %<CYA locale_dir>\t: change the default directory of stored "
+"translations (default: %<grn %s>)\n"
+msgstr ""
+
+#: src/prefs_gestion.c:109
+msgid "Activation of the secret %<YEL debug> mode (dbg=%d)!\n"
+msgstr ""
+
+#: src/prefs_gestion.c:157
+#, c-format
+msgid "the file '%s' is not a directory !!! trash it please\n"
+msgstr ""
+
+#: src/prefs_gestion.c:162
+msgid "creating '%<YEL %s>'..\n"
+msgstr ""
+
+#: src/prefs_gestion.c:164
+msgid ""
+"can't create the directory '%s'\n"
+"[error: '%<red %s>']\n"
+msgstr ""
+
+#: src/prefs_gestion.c:169
+#, c-format
+msgid "There's something strange with the directory '%s' [err=%s]\n"
+msgstr ""
+
+#: src/prefs_gestion.c:186
+#, c-format
+msgid "can't read '%s' : %s\n"
+msgstr ""
+
+#: src/prefs_gestion.c:190
+#, c-format
+msgid "can't write '%s' : %s\n"
+msgstr ""
+
+#: src/prefs_gestion.c:216
+#, c-format
+msgid "ah ben y'a pas le fichier '%s', on va le creer\n"
+msgstr ""
+
+#: src/prefs_gestion.c:221
+#, c-format
+msgid ""
+"\n"
+"desole, demerdez-vous pour copier '%s' dans votre ~/.wmcoincoin ..\n"
+msgstr ""
+
+#: src/prefs_gestion.c:224
+#, c-format
+msgid ""
+"\n"
+"arretez de faire n'importe quoi dans votre ~/.wmcoincoin..\n"
+"\n"
+msgstr ""
+
+#: src/prefs_gestion.c:230
+#, c-format
+msgid ""
+"wmcoincoin a du etre mal installe, je ne trouve pas le fichier '%s' par "
+"defaut dans le rep '%s'...\n"
+msgstr ""
+
+#: src/prefs_gestion.c:234
+#, c-format
+msgid "utilisation du fichier se trouvant dans '%s'\n"
+msgstr ""
+
+#: src/prefs_gestion.c:256
+msgid "using option file '%<yel %s>'\n"
+msgstr ""
+
+#: src/prefs_gestion.c:268
+msgid ""
+"Error during while reading '%s':\n"
+"%<YEL %s>\n"
+msgstr ""
+
+#: src/prefs_gestion.c:480
+#, c-format
+msgid "Error while rereading options [%s]<br>%s"
+msgstr ""
+
+#: src/prefs_gestion.c:491
+msgid "rereading of options '%<YEL %s>' successful\n"
+msgstr ""
+
+#: src/prefs_gestion.c:642
+msgid "You changed the site/proxy, gethostbyname soon in progress\n"
+msgstr ""
+
+#: src/prefs_gestion.c:702
+#, c-format
+msgid "site removed: '%s'\n"
+msgstr ""
+
+#: src/prefs_gestion.c:732
+#, c-format
+msgid "new site added: '%s'\n"
+msgstr ""
+
+#: src/wmcoincoin.c:413
+#, c-format
+msgid ""
+"this url STINKS ! <b>%s</b> (neither ftp://, nor http://)<br>You will have "
+"to launch it by hand (copy to the clipboard with a right click, etc.)"
+msgstr ""
+
+#: src/wmcoincoin.c:424
+#, c-format
+msgid ""
+"You didn't define the external browser in ~/.wmcoincoin/options (%s), no "
+"need to click on the <b>[url]</b>..."
+msgstr ""
+
+#: src/wmcoincoin.c:490
+msgid "Spawning \"%<YEL %s>\"\n"
+msgstr ""
+
+#: src/wmcoincoin.c:516
+#, c-format
+msgid "Can't get window attributes.\n"
+msgstr ""
+
+#: src/wmcoincoin.c:651
+#, c-format
+msgid ""
+"[%s] Ooops, there must have been a little problem, the server answered:<p>%"
+"s<p>%s"
+msgstr ""
+
+#: src/wmcoincoin.c:653
+msgid "Check your cookies !"
+msgstr ""
+
+#: src/wmcoincoin.c:656 src/wmcoincoin.c:671
+#, c-format
+msgid ""
+"[%s] Ooops, there must have been a little problem, the server answered:<p>%s"
+msgstr ""
+
+#: src/wmcoincoin.c:689
+msgid "message posted: '%<YEL %s>\n"
+msgstr ""
+
+#: src/wmcoincoin.c:690
+msgid "    (useragent: '%<CYA %s>\n"
+msgstr ""
+
+#: src/wmcoincoin.c:763
+#, c-format
+msgid "[%s] Damned ! There has been an error<p>%s"
+msgstr ""
+
+#: src/wmcoincoin.c:813
+#, c-format
+msgid ""
+"Fork failed...(%s)..\n"
+" you sux\n"
+msgstr ""
+
+#: src/wmcoincoin.c:826
+#, c-format
+msgid ""
+"Exec of wmccc failed...(%s)..\n"
+" you sux (wmccc not in path?)\n"
+msgstr ""
+
+#: src/wmcoincoin.c:864
+#, c-format
+msgid "Unable to open '%s' for %s the state of the beast [%s]\n"
+msgstr ""
+
+#: src/wmcoincoin.c:864
+msgid "reading"
+msgstr ""
+
+#: src/wmcoincoin.c:864
+msgid "writing"
+msgstr ""
+
+#: src/wmcoincoin.c:881
+#, c-format
+msgid "Unable to open '%s' for writing to save the state of the beast\n"
+msgstr ""
+
+#: src/wmcoincoin.c:914
+#, c-format
+msgid ""
+"If the balltrap is enabled, you can:<br>- launch plastic ducks with <font "
+"color=blue><tt>Left Click</tt></font><br>- quickly kill all ducks with a "
+"<font color=blue><tt>Right Click</tt></font><br>"
+msgstr ""
+
+#: src/wmcoincoin.c:920
+msgid ""
+"<p align=center><b>This is a professionnal <font "
+"color=#a00000><i>Trolloscope</i></font></b></p>It displays symbols "
+"corresponding to the user-agents of the last messages posted on the board. "
+"The relationships between useragent and (colour,symbol) are defined in the "
+"<tt>~/.wmcoincoin/options</tt> file<br><font color=blue><tt>Left Click</tt></"
+"font><tab>: displays the useragent<br><font color=blue><tt>Middle Click</"
+"tt></font><tab>: instant refresh of all boards<br>Note: if you have given "
+"your authentication cookie to wmCoinCoin and if it blinks blue, then someone "
+"just answered to one of your posts. "
+msgstr ""
+
+#: src/wmcoincoin.c:928
+msgid ""
+"When this led is blue, a <b>http transfer</b> is underway. A <b><font "
+"color=red>red</font></b> blinking indicates a problem during the last "
+"transfer.<br><font color=blue><tt>Left Click</tt></font>: shows the last "
+"error message<br>"
+msgstr ""
+
+#: src/wmcoincoin.c:932
+msgid ""
+"This led does no blink anymore.<br>It is blue when the message is being sent "
+"by the palmipede, and green half a second after the effective sending.<br>A "
+"click on this led allows to change the scroll speed of the trolloscope:"
+"<br><font color=blue><tt>Left Click</tt></font><tab>: slower<br><font "
+"color=blue><tt>Right Click</tt></font><tab>: faster<br><font "
+"color=blue><tt>Middle Click</tt></font><tab>: change the trolloscope "
+"resolution"
+msgstr ""
+
+#: src/wmcoincoin.c:939
+msgid ""
+"When this led blinks green, a new article is available.<br><font "
+"color=blue><tt>Left Click</tt></font><tab>: see the article<br><font "
+"color=blue><tt>Right Click</tt></font><tab>: mark all articles as read"
+msgstr ""
+
+#: src/wmcoincoin.c:943
+msgid ""
+"When this led blinks green, you have just received a new message.<br><font "
+"color=blue><tt>Left Click</tt></font>: see the new message with the external "
+"browser 1<br><font color=blue><tt>Middle Click</tt></font>: see the new "
+"message with the external browser 2<br><font color=blue><tt>Right Click</"
+"tt></font>: cancel all new messages"
+msgstr ""
+
+#: src/wmcoincoin.c:948
+msgid ""
+"When the cursor is above this led, the level of the <font "
+"color=#a00000><i>Troll-o-meter</i></font> is displayed.<br><font "
+"color=blue><tt>Left Click</tt></font><tab>: INVOKE THE POWER OF <b>C01N "
+"C01N</b> !<br><font color=blue><tt>Right Click</tt></font><tab>: see the "
+"statistics of the board, and your XP and votes (if you have provided your "
+"authentication cookie)<br><font color=blue><tt>Middle Click</tt></font>: re-"
+"read the <tt>~/.wmcoincoin/options</tt> file"
+msgstr ""
+
+#: src/wmcoincoin.c:953
+msgid ""
+"The time of the last message received on the board, and the number of "
+"seconds that have past since<br><font color=blue><tt>Left Click</tt></font>: "
+"show/hide the <b>palmipede editor</b><br><font color=blue><tt>Right Click</"
+"tt></font>: show/hide the <b>pinnipede teletype</b>"
+msgstr ""
+
+#: src/wmcoincoin.c:959
+msgid "<b><i>DON'T PANIC</i></b>"
+msgstr ""
+
+#: src/wmcoincoin.c:1106
+#, c-format
+msgid "X11 Error. The coincoin is going down for halt NOW!\n"
+msgstr ""
+
+#: src/wmcoincoin.c:1112
+#, c-format
+msgid "X11 IO Error. The coincoin is going down for halt NOW!\n"
+msgstr ""
+
+#: src/wmcoincoin.c:1145
+#, c-format
+msgid "pan ! pan ! ... arg\n"
+msgstr ""
+
+#: src/wmcoincoin.c:1559
+#, c-format
+msgid "Creating the windows icon. Just tell me if it makes your WM crash.\n"
+msgstr ""
+
+#: src/wmcoincoin.c:1727
+#, c-format
+msgid "Couldn't create window\n"
+msgstr ""
+
+#: src/wmcoincoin.c:1739
+#, c-format
+msgid "Couldn't create icon window\n"
+msgstr ""
+
+#: src/wmcoincoin.c:1752
+#, c-format
+msgid "Bad dimensions for the pixmap skin (expected 64x320, found %dx%d)\n"
+msgstr ""
+
+#: src/wmcoincoin.c:1755
+msgid "Unable to load the pixmap '%<grn %s>'\n"
+msgstr ""
+
+#: src/wmcoincoin.c:1834
+#, c-format
+msgid "Couldn't create text property\n"
+msgstr ""
+
+#: src/wmcoincoin.c:1848
+#, c-format
+msgid "Couldn't create graphics context\n"
+msgstr ""
+
+#: src/wmcoincoin.c:1940 src/wmcoincoin.c:1945 src/wmcoincoin.c:1950
+#: src/wmcoincoin.c:1956 src/wmcoincoin.c:1963 src/wmcoincoin.c:1970
+#, c-format
+msgid ""
+"sigaction: erreur %d (%s)\n"
+" essayez de recompiler en faisant un #define SIGNAUX_A_LANCIENNE...\n"
+msgstr ""
+
+#: src/wmcoincoin.c:2090
+msgid "%<GRN wmc2> v.%<WHT %s> [ built on %s ]\n"
+msgstr ""
+
+#: src/wmcoincoin.c:2101
+#, c-format
+msgid "locale used: %s\n"
+msgstr ""
+
+#: src/wmcoincoin.c:2146
+msgid "%<YEL BOARD      >"
+msgstr ""
+
+#: src/wmcoincoin.c:2148
+msgid "%<YEL RSS        >"
+msgstr ""
+
+#: src/wmcoincoin.c:2150
+msgid "%<YEL POP3       >"
+msgstr ""
+
+#: src/wmcoincoin.c:2151 src/wmcoincoin.c:2160
+msgid "%<YEL prrrrrrt    >"
+msgstr ""
+
+#: src/wmcoincoin.c:2155
+msgid "%<YEL tags not encoded  >"
+msgstr ""
+
+#: src/wmcoincoin.c:2157
+msgid "%<YEL tags encoded      >"
+msgstr ""
+
+#: src/wmcoincoin.c:2159
+msgid "%<YEL without underpants>"
+msgstr ""
+
+#: src/wmcoincoin.c:2254
+#, c-format
+msgid "Unable to load font %s , trying iso8859-1\n"
+msgstr ""
+
+#: src/wmcoincoin.c:2258
+#, c-format
+msgid "Unable to load font %s, aborting\n"
+msgstr ""
+
+#: src/pinnipede.c:1765
+msgid ""
+"%<yel impossible to use the pseudo-transparency> (probable solution: "
+"relaunch wmsetbg or its equivalent)\n"
+msgstr ""
+
+#: src/pinnipede.c:1828
+#, c-format
+msgid "Bold slanted font '%s' not found -> we're looking for the italic font\n"
+msgstr ""
+
+#: src/pinnipede.c:2061
+#, c-format
+msgid ""
+"Failed to load the '%s' fonts with size '%d'\n"
+"Let's try with sans/12.\n"
+msgstr ""
+
+#: src/pinnipede.c:2063
+msgid "Uuuurg !! No helvetica, I shoot my nose.\n"
+msgstr ""
+
+#: src/pinnipede.c:2406
+#, c-format
+msgid ""
+"\n"
+"[you posted this message]"
+msgstr ""
+
+#: src/pinnipede.c:2409
+#, c-format
+msgid ""
+"\n"
+"[this message answers to one of yours]"
+msgstr ""
+
+#: src/pinnipede.c:2413
+#, c-format
+msgid ""
+"\n"
+"message 'boxed' because: "
+msgstr ""
+
+#: src/pinnipede.c:2422
+#, c-format
+msgid ""
+"\n"
+"message plopified (level %d) because: "
+msgstr ""
+
+#: src/pinnipede.c:2429
+#, c-format
+msgid ""
+"\n"
+"message plopified (level 3) because the boitakon is hungry"
+msgstr ""
+
+#: src/pinnipede.c:2435 src/pinnipede.c:2437
+msgid "answers"
+msgstr ""
+
+#: src/pinnipede.c:2435 src/pinnipede.c:2437
+msgid "answer"
+msgstr ""
+
+#: src/pinnipede.c:2437
+#, c-format
+msgid "%d %s (and %d plop%s from the boitakon)"
+msgstr ""
+
+#: src/pinnipede.c:2521
+msgid ""
+"<p align=center> Welcome to the <b><font color=#008000>Pinnipede Teletype</"
+"font></b></p>This window was specially designed by the greatest experts to "
+"offer you optimal mouling conditions.<br>Here is a summary of its "
+"functionalities:<br><br><b>To scroll</b>, use the mouse wheel, or 'drag' "
+"while clicking with the middle button. Scrolling is automatic when a new "
+"message appears.<br><br>To bring the <b>button bar</b> or make it disappear, "
+"use the middle clic. <br><br>The available actions on the <b>clock</b> near "
+"each message are:<br><font color=blue>Left Click</font><tab>: opens the "
+"palmipede editor, and inserts a reference to the message<br>If you click on "
+"an <b>[url]</b>, the result will be:<br><font color=blue>Left Click</"
+"font><tab>: opens the url in the external browser (if it has been defined in "
+"the ~/.wmcoincoin/options file). <b>Warning</b>, even if precautions have "
+"been takensince the inominious wmcoincoin 2.0, this kind of things is "
+"generally considered as a security weakness...<br><font color=blue>Middle "
+"Click</font><tab>: opens the url with the second browser (the http.browser2 "
+"option)<br>When the pointer is over a <b>reference to a previous post</b>, "
+"it will be underlined. If you click:<br><font color=blue>Left Click</"
+"font><tab>: brings the referenced message<br>You can use the right clic "
+"everywhere to bring a popup menu, which gives your more choices, such as "
+"putting a message in the boitakon, plopifying, filtering, copying in "
+"clipboard etc.<br>Some basic filtering is available with the help of <font "
+"color=blue>Right Click</font> on a word, login, useragent... Use the blue "
+"button to cancel the filter.<br>If you want to emphasize the messages of a "
+"given user, or those containing a given word, use the  emphasize entry of "
+"the contextual menu.<br>Someone is annoying you ? You have launched a troll "
+"that you don't control ? Then <b>plopify</b> the evil with a <font "
+"color=blue>Right Click/Plopify</font> (or put in boitakon) on his login/"
+"useragent. You can later remove the boitakonned message from the boitakon "
+"with a right clic on the left-most gray button.<br><br>You can take a 'shot' "
+"of the board (the so-called seafood tray), with <font color=blue>Ctrl+Middle "
+"Click</font><br><br>In order to understand the display of the <b>useragents</"
+"b> activated by the dark red button (about fifteen pixels on your left), you "
+"can see the <tt>~/.wmcoincoin/options</tt><br> file (hint: the button has 5 "
+"different positions)<br><br>The pinnipede teletype wishes you a nice mouling."
+msgstr ""
+
+#: src/pinnipede.c:2663 src/pinnipede.c:2682 src/pinnipede.c:2699
+#: src/pinnipede.c:2716 src/pinnipede.c:2732
+#, c-format
+msgid "Activating the filter [%s]\n"
+msgstr ""
+
+#: src/pinnipede.c:2859
+#, c-format
+msgid ""
+"The selected element is the <font color=blue>thread</font> '<font "
+"color=#800000>id=%d</font>'"
+msgstr ""
+
+#: src/pinnipede.c:2872
+#, c-format
+msgid ""
+"The selected element is the <font color=blue>useragent</font> '<font "
+"color=#800000>%s</font>'"
+msgstr ""
+
+#: src/pinnipede.c:2882
+#, c-format
+msgid ""
+"The selected element is the <font color=blue>login</font> '<font "
+"color=#800000>%s</font>'"
+msgstr ""
+
+#: src/pinnipede.c:2888
+#, c-format
+msgid ""
+"The selected element is the <font color=blue>message</font> #id=<font "
+"color=#800000>%d</font>"
+msgstr ""
+
+#: src/pinnipede.c:2896
+#, c-format
+msgid ""
+"The selected element is the <font color=blue>word</font> '<font "
+"color=#800000>%s</font>'"
+msgstr ""
+
+#: src/pinnipede.c:2906
+msgid "<b>plop</b>ify it"
+msgstr ""
+
+#: src/pinnipede.c:2907
+msgid "<b>superplop</b>ify it"
+msgstr ""
+
+#: src/pinnipede.c:2908
+msgid "put in <b>boitakon</b>"
+msgstr ""
+
+#: src/pinnipede.c:2909
+msgid "put in <i>hungry</i> <b>boitakon</b>"
+msgstr ""
+
+#: src/pinnipede.c:2913
+msgid "mark it (categ 0)"
+msgstr ""
+
+#: src/pinnipede.c:2914
+msgid "mark it (categ 1)"
+msgstr ""
+
+#: src/pinnipede.c:2915
+msgid "mark it (categ 2)"
+msgstr ""
+
+#: src/pinnipede.c:2916
+msgid "mark it (categ 3)"
+msgstr ""
+
+#: src/pinnipede.c:2917
+msgid "mark it (categ 4)"
+msgstr ""
+
+#: src/pinnipede.c:2918
+msgid "filter it"
+msgstr ""
+
+#: src/pinnipede.c:2922
+msgid "gogole search"
+msgstr ""
+
+#: src/pinnipede.c:2926
+msgid "wikipedia search"
+msgstr ""
+
+#: src/pinnipede.c:2931
+msgid "copy link in X clipboard"
+msgstr ""
+
+#: src/pinnipede.c:2935
+msgid "copy useragent in X clipboard"
+msgstr ""
+
+#: src/pinnipede.c:2938
+msgid "Try to download the correspounding picture"
+msgstr ""
+
+#: src/pinnipede.c:2939
+msgid "Bookmark this picture"
+msgstr ""
+
+#: src/pinnipede.c:2940
+msgid "Remove this picture from bookmarks"
+msgstr ""
+
+#: src/pinnipede.c:2963
+#, c-format
+msgid "remove %s:'<font color=blue>%.15s</font> from hilight categ %d"
+msgstr ""
+
+#: src/pinnipede.c:2969
+msgid "hide the button bar / tabs bar"
+msgstr ""
+
+#: src/pinnipede.c:2970
+msgid "show the button bar / tabs bar"
+msgstr ""
+
+#: src/pinnipede.c:2973
+msgid "Change colors for this site"
+msgstr ""
+
+#: src/pinnipede.c:2978
+msgid "<b>enable</b> the bigornophone"
+msgstr ""
+
+#: src/pinnipede.c:2980
+msgid "<b>disable</b> the bigornophone"
+msgstr ""
+
+#: src/pinnipede.c:2985
+msgid "<b>enable</b> the secondary bigornophone"
+msgstr ""
+
+#: src/pinnipede.c:2987
+msgid "<b>disable</b> the secondary bigornophone"
+msgstr ""
+
+#: src/palmipede.c:344
+msgid ""
+"%<MAG> FUCK THAT BUG! x=%d y=%d curs_x=%d curs_y=%d,y_scroll=%d,sel_anchor=%"
+"d,sel_head=%d\n"
+msgstr ""
+
+#: src/palmipede.c:561
+msgid ""
+"%<MAG> RAH ENCORE CE BUG! x=%d y=%d curs_x=%d curs_y=%d,y_scroll=%d,"
+"sel_anchor=%d,sel_head=%d\n"
+msgstr ""
+
+#: src/palmipede.c:662
+#, c-format
+msgid "wmcoincoin: Failed to set XA_PRIMARY ownership."
+msgstr ""
+
+#: src/palmipede.c:1331
+msgid ""
+"looks like you fucked your options file, no board has be defined: no noard, "
+"no palmipede"
+msgstr ""
+
+#: src/palmipede.c:2065
+msgid "====> <b>Moment "
+msgstr ""
+
+#: src/palmipede.c:2067
+msgid "_o/* <b>BLAM</b>! "
+msgstr ""
+
+#: src/palmipede.c:2069
+msgid "_o/* <b>paf</b>! "
+msgstr ""
+
+#: src/palmipede.c:2071
+msgid "sale chauve "
+msgstr ""
+
+#: src/palmipede.c:2109
+msgid "[:"
+msgstr ""
+
+#: src/palmipede.c:2638
+#, c-format
+msgid ""
+"<p align=center><b>wmCoinCoin Agent</b></p>Hmmm, it seems that you don't "
+"know what to say, so, if you don't mind,I suggest <font color=blue>%s</font>"
+msgstr ""
+
+#: src/palmipede.c:2648
+msgid "Put here the user-agent"
+msgstr ""
+
+#: src/palmipede.c:2651
+msgid "Fold back the palmipede<p>shortcut: <b>escape</b>"
+msgstr ""
+
+#: src/palmipede.c:2652
+msgid "Edit the user-agent"
+msgstr ""
+
+#: src/palmipede.c:2652
+msgid "Edit the message<p>shortcut: <b>Tab</b>"
+msgstr ""
+
+#: src/palmipede.c:2653
+msgid "Insert italic<p>shortcut: <b>Alt-I</b>"
+msgstr ""
+
+#: src/palmipede.c:2654
+msgid "Insert bold<p>shortcut: <b>Alt-B</b>"
+msgstr ""
+
+#: src/palmipede.c:2655
+msgid "Insert teletype tag<p>shortcut: <b>Alt-T</b>"
+msgstr ""
+
+#: src/palmipede.c:2656
+msgid "Overstrike text<p>shortcut: <b>Alt-S</b>"
+msgstr ""
+
+#: src/palmipede.c:2657
+msgid "Underline text<p>shortcut: <b>Alt-U</b>"
+msgstr ""
+
+#: src/palmipede.c:2659
+msgid "Undo<p>shortcut: <b>Ctrl-Z</b> or <b>Ctrl-_</b>"
+msgstr ""
+
+#: src/palmipede.c:2660
+msgid "Clear"
+msgstr ""
+
+#: src/palmipede.c:2661
+msgid "View the [:totoz] picture bookmark in your browser"
+msgstr ""
+
+#: src/palmipede.c:2662
+msgid "Restore the default user-agent"
+msgstr ""
+
+#: src/palmipede.c:2706
+#, c-format
+msgid " by %s"
+msgstr ""
+
+#: src/palmipede.c:2709
+#, c-format
+msgid "at %02d:%02d:%02d%s%s"
+msgstr ""
+
+#: src/palmipede.c:2711
+#, c-format
+msgid "<b>%d</b> times (first reference at %02d:%02d:%02d%s%s)"
+msgstr ""
+
+#: src/palmipede.c:2713
+#, c-format
+msgid "<b>%d</b> times (the url has left the pinnipede)"
+msgstr ""
+
+#: src/palmipede.c:2715
+#, c-format
+msgid ""
+"<b>°Bloub!°</b> It looks like you are living in the water. This url has "
+"already been posted %s<p>Press Alt-L to scroll to the url in the pinnipede, "
+"(Alt-F is also an option)"
+msgstr ""
+
+#: src/dock.c:498
+#, c-format
+msgid "..NO NEWS"
+msgstr ""
+
+#: src/dock.c:775
+#, c-format
+msgid "coin ?.... COIN ?? couic !\n"
+msgstr ""
+
+#: src/dock.c:882
+msgid "%<YEL Troll-o-meter -> going to level> %<GRN 0.00> (max=1.) !!!\n"
+msgstr ""
+
+#: src/dock.c:1002
+#, c-format
+msgid "Coin !\n"
+msgstr ""
+
+#: src/dock.c:1005
+msgid ""
+"<b>Please</b> fill your options file with a valid site equiped with a "
+"board..."
+msgstr ""
+
+#: src/dock.c:1013
+msgid "This board is read-only"
+msgstr ""
+
+#: src/dock.c:1135
+#, c-format
+msgid "Error while loading file : '%s' [64x64 pixels XPM, please]"
+msgstr ""
+
+#: src/dock.c:1341 src/dock.c:1500
+msgid "No new messages."
+msgstr ""
+
+#: src/board.c:764
+#, c-format
+msgid "[%s] board_remove_old_msg: destroying id=%d (date=%s)\n"
+msgstr ""
+
+#: src/board.c:1503
+#, c-format
+msgid "Welcome to the message from '%.20s' in the boitakon\n"
+msgstr ""
+
+#: src/board.c:1839
+msgid "Original message: '%<CYA %s>'\n"
+msgstr ""
+
+#: src/board.c:1840
+msgid "Decoded message: '%<MAG %s>'\n"
+msgstr ""
+
+#: src/board.c:2035
+msgid ""
+"%<YEL \\o/ Maybe there just has been a race condition in the board backend !"
+"> (id=%d).\n"
+"DON'T PANIC, the coincoin handles this well, it only proves I didn't write\n"
+"this bugfix for coconuts.\n"
+msgstr ""
+
+#: src/board.c:2059
+msgid ""
+"[%<YEL %s>] There is a problem in '%s',  I can't parse it... error:%<YEL %"
+"s>\n"
+msgstr ""
+
+#: src/board.c:2066 src/board.c:2213
+msgid "[%<YEL %s>] Error while downloading '%<YEL %s>' : %<RED %s>\n"
+msgstr ""
+
+#: src/board.c:2203
+msgid ""
+"[%<YEL %s>] There is a problem in '%s', I can't parse it... error:%<YEL %s>\n"
+msgstr ""
+
+#: src/board.c:2261
+msgid "DEBUG: opening '%<RED %s>'\n"
+msgstr ""
+
+#: src/prefs.c:93
+#, c-format
+msgid "[line %d] unable to find an option name"
+msgstr ""
+
+#: src/prefs.c:101
+#, c-format
+msgid "[line %d] missing value for option '%s'"
+msgstr ""
+
+#: src/prefs.c:159
+#, c-format
+msgid ""
+"Invalid option '%s', we were waiting for 2 numbers x and y with a x:y format"
+msgstr ""
+
+#: src/prefs.c:185
+#, c-format
+msgid "wrong style for option %s"
+msgstr ""
+
+#: src/prefs.c:203
+#, c-format
+msgid ""
+"Invalid option '%s': the shading is defined with 2 values x and y comprised "
+"between 0 and 100, with x < y (the greater x, the lighter will be the "
+"display, the smaller y, the more attenuated will be the colours."
+msgstr ""
+
+#: src/prefs.c:211
+#, c-format
+msgid ""
+"Invalid option '%s': you have to specify two RGB colours corresponding the "
+"white and the black"
+msgstr ""
+
+#: src/prefs.c:215
+#, c-format
+msgid ""
+"Invalid option '%s': you have to first specify the type of transparency: "
+"FULL, SHADING or TINTING"
+msgstr ""
+
+#: src/prefs.c:301
+#, c-format
+msgid "Deactivating the proxy"
+msgstr ""
+
+#: src/prefs.c:345
+#, c-format
+msgid ""
+"[%s option] there must be one and only one '%%' character, and it must be "
+"followed by an 's' (it will be replaced by the URL)"
+msgstr ""
+
+#: src/prefs.c:437
+#, c-format
+msgid ""
+"Error for option '%s': a list of words between quotes, separated by commas, "
+"is expected."
+msgstr ""
+
+#: src/prefs.c:475
+#, c-format
+msgid ""
+"Invalid argument for option '%s', word %d, the value of the numerical "
+"argument (%d) must be chosen between %d and %d"
+msgstr ""
+
+#: src/prefs.c:503
+#, c-format
+msgid ""
+"Invalid argument for option '%s', word %d: you have to specify a list of [UA|"
+"LOGIN|ID|etc]:[NUM:]\"a word\" separated with commas\n"
+msgstr ""
+
+#: src/prefs.c:587
+#, c-format
+msgid "miniuarule: '%s' is a wrong regexp: %s"
+msgstr ""
+
+#: src/prefs.c:630
+#, c-format
+msgid "Invalid argument for miniuarule here: '%.20s'\n"
+msgstr ""
+
+#: src/prefs.c:710
+#, c-format
+msgid "Invalid argument for option 'pinnipede.url_replace' here: '%.20s'\n"
+msgstr ""
+
+#: src/prefs.c:839
+msgid "coin ! coin !"
+msgstr ""
+
+#: src/prefs.c:1086
+#, c-format
+msgid "Invalid value for option '%s' (must be between %d and %d)"
+msgstr ""
+
+#: src/prefs.c:1088
+#, c-format
+msgid ""
+"Invalid value for option '%s': must be a value of type on/off, 1/0, true/"
+"false or yes/no"
+msgstr ""
+
+#: src/prefs.c:1091
+#, c-format
+msgid ""
+"Invalid value for option '%s': must be a hexadecimal RGB color, with the "
+"RRGGBB format"
+msgstr ""
+
+#: src/prefs.c:1091
+#, c-format
+msgid "Error, the '%s' option only accepts one colour value"
+msgstr ""
+
+#: src/prefs.c:1095
+#, c-format
+msgid ""
+"Invalid value for option '%s': must be a hexadecimal RGB colour, with the "
+"RRGGBB format (optionally followed by a second colour for the transparency "
+"mode)"
+msgstr ""
+
+#: src/prefs.c:1549
+#, c-format
+msgid "Watch out darling, it's gonnah cut\n"
+msgstr ""
+
+#: src/prefs.c:1550
+#, c-format
+msgid "the option '%s' is valid but not handled, WHAT A SHAME"
+msgstr ""
+
+#: src/prefs.c:1570
+msgid ""
+"I think you're totally dumb with the includes of option files (infinite "
+"recursion ?)\n"
+msgstr ""
+
+#: src/prefs.c:1576
+msgid "You didn't tell me of any filename\n"
+msgstr ""
+
+#: src/prefs.c:1587
+#, c-format
+msgid "Unable to open file '%s' for reading [%s]\n"
+msgstr ""
+
+#: src/prefs.c:1589
+#, c-format
+msgid "Unable to open file '%s' for reading\n"
+msgstr ""
+
+#: src/prefs.c:1611
+#, c-format
+msgid ""
+"line %d: attempt to use a site pref before any 'site:' option has been used\n"
+msgstr ""
+
+#: src/prefs.c:1631
+#, c-format
+msgid "line %d: option '%s' is a site option\n"
+msgstr ""
+
+#: src/prefs.c:1635
+#, c-format
+msgid "line %d: option '%s' can't be used as a site option\n"
+msgstr ""
+
+#: src/prefs.c:1643
+#, c-format
+msgid " [line %d] %s\n"
+msgstr ""
+
+#: src/prefs.c:1648
+#, c-format
+msgid "[line %d] unknown option '%s'"
+msgstr ""
+
+#: src/prefs.c:1736
+msgid ""
+"\n"
+"\n"
+"%<YEL oooooooh !!! you didn't define at least *ONE* site>, you bad boy.\n"
+"i do it for you, but this is the last time\n"
+" plz %<MAG use wmccc to add new sites>\n"
+"\n"
+msgstr ""
diff --git a/scripts/Makefile.am b/scripts/Makefile.am
new file mode 100644
index 0000000..c154400
--- /dev/null
+++ b/scripts/Makefile.am
@@ -0,0 +1,2 @@
+bin_SCRIPTS = wmcoincoin-totoz-get wmcoincoin-search-cookies wmpanpan
+EXTRA_DIST = wmcoincoin-totoz-get wmcoincoin-search-cookies wmpanpan
diff --git a/scripts/Makefile.in b/scripts/Makefile.in
new file mode 100644
index 0000000..f682878
--- /dev/null
+++ b/scripts/Makefile.in
@@ -0,0 +1,407 @@
+# Makefile.in generated by automake 1.10.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+subdir = scripts
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/codeset.m4 \
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/glibc2.m4 \
+	$(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intdiv0.m4 $(top_srcdir)/m4/intl.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax.m4 \
+	$(top_srcdir)/m4/inttypes-pri.m4 \
+	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/isc-posix.m4 \
+	$(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/lock.m4 $(top_srcdir)/m4/longlong.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/printf-posix.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/stdint_h.m4 \
+	$(top_srcdir)/m4/uintmax_t.m4 $(top_srcdir)/m4/visibility.m4 \
+	$(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wint_t.m4 \
+	$(top_srcdir)/m4/xsize.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)"
+binSCRIPT_INSTALL = $(INSTALL_SCRIPT)
+SCRIPTS = $(bin_SCRIPTS)
+SOURCES =
+DIST_SOURCES =
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CFLAG_VISIBILITY = @CFLAG_VISIBILITY@
+COIN_ARCH = @COIN_ARCH@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GENCAT = @GENCAT@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIBC2 = @GLIBC2@
+GLIBC21 = @GLIBC21@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+HAVE_ASPRINTF = @HAVE_ASPRINTF@
+HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@
+HAVE_SNPRINTF = @HAVE_SNPRINTF@
+HAVE_VISIBILITY = @HAVE_VISIBILITY@
+HAVE_WPRINTF = @HAVE_WPRINTF@
+IMLIB2_CONFIG_IN_PATH = @IMLIB2_CONFIG_IN_PATH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLBISON = @INTLBISON@
+INTLLIBS = @INTLLIBS@
+INTLOBJS = @INTLOBJS@
+INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMULTITHREAD = @LIBMULTITHREAD@
+LIBOBJS = @LIBOBJS@
+LIBPTH = @LIBPTH@
+LIBPTH_PREFIX = @LIBPTH_PREFIX@
+LIBS = @LIBS@
+LIBTHREAD = @LIBTHREAD@
+LTLIBC = @LTLIBC@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBMULTITHREAD = @LTLIBMULTITHREAD@
+LTLIBOBJS = @LTLIBOBJS@
+LTLIBPTH = @LTLIBPTH@
+LTLIBTHREAD = @LTLIBTHREAD@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_CFLAGS = @PACKAGE_CFLAGS@
+PACKAGE_LIBS = @PACKAGE_LIBS@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POSUB = @POSUB@
+PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+WINDRES = @WINDRES@
+WMCCC = @WMCCC@
+WMCOINCOIN_PLAYER = @WMCOINCOIN_PLAYER@
+WOE32 = @WOE32@
+WOE32DLL = @WOE32DLL@
+XFT_CFLAGS = @XFT_CFLAGS@
+XFT_LIBS = @XFT_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+bin_SCRIPTS = wmcoincoin-totoz-get wmcoincoin-search-cookies wmpanpan
+EXTRA_DIST = wmcoincoin-totoz-get wmcoincoin-search-cookies wmpanpan
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  scripts/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  scripts/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+install-binSCRIPTS: $(bin_SCRIPTS)
+	@$(NORMAL_INSTALL)
+	test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
+	@list='$(bin_SCRIPTS)'; for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  if test -f $$d$$p; then \
+	    f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
+	    echo " $(binSCRIPT_INSTALL) '$$d$$p' '$(DESTDIR)$(bindir)/$$f'"; \
+	    $(binSCRIPT_INSTALL) "$$d$$p" "$(DESTDIR)$(bindir)/$$f"; \
+	  else :; fi; \
+	done
+
+uninstall-binSCRIPTS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(bin_SCRIPTS)'; for p in $$list; do \
+	  f=`echo "$$p" | sed 's|^.*/||;$(transform)'`; \
+	  echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
+	  rm -f "$(DESTDIR)$(bindir)/$$f"; \
+	done
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    fi; \
+	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(SCRIPTS)
+installdirs:
+	for dir in "$(DESTDIR)$(bindir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic mostlyclean-am
+
+distclean: distclean-am
+	-rm -f Makefile
+distclean-am: clean-am distclean-generic
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am: install-binSCRIPTS
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binSCRIPTS
+
+.MAKE: install-am install-strip
+
+.PHONY: all all-am check check-am clean clean-generic distclean \
+	distclean-generic distdir dvi dvi-am html html-am info info-am \
+	install install-am install-binSCRIPTS install-data \
+	install-data-am install-dvi install-dvi-am install-exec \
+	install-exec-am install-html install-html-am install-info \
+	install-info-am install-man install-pdf install-pdf-am \
+	install-ps install-ps-am install-strip installcheck \
+	installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
+	pdf-am ps ps-am uninstall uninstall-am uninstall-binSCRIPTS
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/scripts/wmcoincoin-search-cookies b/scripts/wmcoincoin-search-cookies
new file mode 100755
index 0000000..de4077b
--- /dev/null
+++ b/scripts/wmcoincoin-search-cookies
@@ -0,0 +1,44 @@
+#!/bin/bash
+#set -x
+usage() {
+    echo "wmcc_search_cookies site_name"
+    exit $1
+}
+
+csearch() {
+  if test -f $2; then
+    lastmod=$(stat -c "%y" "$f" | awk '{ print $1; }')
+    echo ""
+    echo "Searching cookies in $2 (last modified $lastmod):";
+    grep "$1" "$2" | sed -e 's/\(TRUE\|FALSE\)//g' -e 's/"//g' -e 's![/]!!g' -e 's/[\t ]\+/ /g' -e 's/ . / /g' | filter
+  fi
+}
+
+filter() {
+    today=`date +%s`
+    while read line; do
+	echo "$today $line" | awk '{ printf "  %-20s %20s=%-40s",$2,$4,$5; printf " expire dans %4d jours\n",($3-$1)/(3600*24); }'
+    done;
+}
+
+if test "$#" -ne 1; then 
+    usage 1 1>&2; 
+fi;
+
+for f in $(find $HOME/.mozilla/ -name 'cookies.txt'); do csearch "$1" "$f"; done;
+for f in $(find $HOME/.mozilla-firebird/ -name 'cookies.txt'); do csearch "$1" "$f"; done;
+for f in $(find $HOME/.phoenix/ -name 'cookies.txt'); do csearch "$1" "$f"; done;
+for f in $(find $HOME/.galeon/ -name 'cookies.txt'); do csearch "$1" "$f"; done;
+for f in $(find $HOME/.gnome2/ -name 'cookies.txt'); do csearch "$1" "$f"; done;
+csearch "$1" "$HOME/.netscape/cookies"
+csearch "$1" "$HOME/.kde/share/apps/kcookiejar/cookies"
+csearch "$1" "$HOME/.w3m/cookie"
+
+if test -f $HOME/.wmcoincoin/options; then
+    echo "Searching cookies in $2 ~/.wmcoincoin/options:"
+    grep "cookie:" $HOME/.wmcoincoin/options
+fi
+if test -f $HOME/.wmcoincoin/options.auth; then
+    echo "Searching cookies in $2 ~/.wmcoincoin/options.auth:"
+    grep "cookie:" $HOME/.wmcoincoin/options.auth
+fi
\ No newline at end of file
diff --git a/scripts/wmcoincoin-totoz-get b/scripts/wmcoincoin-totoz-get
new file mode 100755
index 0000000..8c59f6a
--- /dev/null
+++ b/scripts/wmcoincoin-totoz-get
@@ -0,0 +1,151 @@
+#!/bin/sh
+#set -x
+
+imgrep="$HOME/.wmcoincoin/totoz"
+mkdir -p "$imgrep" && cd "$imgrep"
+
+# Get the proxy
+option_file="$HOME/.wmcoincoin/options"
+proxy=$(sed -ne 's/\(^.http.proxy: \)\(.*$\)/\2/p' $option_file | head -1)
+proxy_auth=$(sed -ne 's/\(^.http.proxy_auth: \)\(.*$\)/\2/p' $option_file | head -1)
+if [ -n "$proxy" ]; then
+  proxy_option="-x "$proxy" -U "$proxy_auth
+fi
+
+siteroot="http://totoz.eu/"
+extlist="gif,png"
+
+usage()
+
+{
+echo '           .:55BBB555555555555@@55%.              '
+echo '       .!C%@@@@@55555555555555555555 at o            '
+echo '     .CC%@@@55555555555555555555555555%._         '
+echo '   $@@55J5555555555JJJJJJJJJJ$5555555555%%        '
+echo '  J5@ CCJ$JJJCCJ(J=!==C=((J((((JJJJJJJJJJ%%       '
+echo ' C%  CCCC((((JJ55$**555(J55==5$JJC(((((=(((=      '
+echo '%  CCCJJ(J55=55@$*""$$@$"$@@@(=5555555$J=JJ$o     '
+echo 'J  C%%JJ5555*MMM(""""$@$ *@@@J*=@555 at 55555555     '
+echo '   C5%5555@=(@@$*""`"*@@ ""@@@*""@555M5555555@    '
+echo '   $@%555 at J!"@@*"``"""*@"```*@@J`""=@5M55@@5555   '
+echo '   @55555B*""$$*"```"""$"````!$@("""=BMM5BB555@   '
+echo '   @%555@@"""=""```"``"*""`````$5*""*=MM5555555   '
+echo '   @J555M=**C@@@@$5.```"`````=JJ====%$=@M55M5555  '
+echo '   @J5@@M=!C@%%**B$%""````````=**@@@=$==@@@M5555  '
+echo '   @J5BBM**@%== *@@$""```````*@  @MM@=%*$MMM5555  '
+echo '   %J5BB$*$=@@@@@@$$``""`````=@@@@MM$$==*BBM5 at 5@  '
+echo '   $J5BB$"$!$$$@@@==``"``````*@5BM55*(==*@@@5 at 55  '
+echo '   CC5BBB == ==@M@= ""``````` =J@@MM$ $*`@@@5 at 5   '
+echo '    CBBBM"`""""""""""""""""""""""   `""**@@@5@@   '
+echo '    C5@@@""""""""""""""""""""""""""""**"$MM at M55   '
+echo '     CBBM=`""```````````````````"`""""""BMM5M5    '
+echo '     (%%B$`"`""`````""*!**!==JC"""`````*@MMBB     '
+echo '      %%%%**"`````"=JJJ$JJJJJJJJ""`````%@MMBB     '
+echo '        %M==***```(CCCCCC==CC==J""```(J$@BBB      '
+echo '          C*******!JCCCCCC=====("*""=$JCMBB       '
+echo '         $`*`````"*!((((!!(((("*!***(=JJ@         '
+echo '     5==**`"````````***```!**``````````$@**.      '
+echo '   ==C**``""``````````!!!=*````````````*=   :     '
+echo '  C` *""`"""``````````!!="````""```````"*((5%5.   '
+echo ' (!  *```""""``````````=!`````""""""""``"==5(  *  '
+echo ' ="  *```""""``````````=!`````""""""""""`CC*    * '
+
+	cat <<EOF
+
+Goal: download an image (or animation) given its name, and its possible
+ extensions. The final image is written in the directory ~/.wmcoincoin/totoz, 
+along with a .desc file containing:
+ * the image name
+ * its dimensions
+ * its mime/type
+
+Usage: wmcoinoin-totoz-get [options] image
+where image is the name of a image/animation WITHOUT its extension (i.e. without .gif or .png etc)
+Options:
+        --siteroot=url       [default: url=$siteroot]
+        --extensions=extlist [default: extlist=$extlist]
+        --verbose
+
+Returns: 0 if successful, nonzero if any failure occured
+
+caution: this shell script is used by wmcoincoin: if you use it on the
+ command line, be sure to url_encode correctly the image name
+ (i.e. replace all non-alphanumeric caracters by '%xx')
+EOF
+	exit $1
+}
+
+dowget()
+{
+  img="$1"
+  fgot=""
+  echo -n "getting $siteroot$img "
+  for ext in $extlist; do
+    echo -n "[$ext] "
+    test -f "$img.$ext" && rm -f "$img.$ext";
+    if curl -s -f $proxy_option -o "$img.$ext" "$siteroot$img.$ext" && test -f "$img.$ext"; then
+      mime=$(file -ib "$img.$ext" 2>/dev/null);
+      if test $? -ne 0; then
+        rm -f "$img.$ext";
+      else
+        fgot="$img.$ext"; break
+      fi
+    fi
+  done
+  if test ! -z "$fgot"; then
+#    h=$(identify "$fgot");
+#    h=$(echo $h | grep -o "[0-9]\+x[0-9]\++[0-9]\++[0-9]\+")
+    # pour les images dont l'origine n'est pas 0,0 , et pour les animations
+    # -> on prend la taille max
+#    h=$(echo $h | sed -e 's/x/ /' -e 's/+/ /g' | awk '{ if (w<$1+$3) {w=$1+$3 }; if (h<$2+$4) {h=$2+$4} } END { print w "x" h; }')
+    h=$(wmcoincoin_player -i "$fgot");
+    if test $? -eq 0; then
+        echo "got $mime $img.$ext ($h)"; 
+        echo "$fgot $h $mime" > "$img.desc";
+        return 0;
+    fi;    
+  else
+    echo " not found.."
+  fi;
+  echo "NOTFOUND" > "$img.desc";
+  test -f "$img.$ext" && rm -f "$img.$ext";
+  return 1;
+}
+
+if test "$#" -eq 0; then 
+    usage 1 1>&2; 
+fi;
+
+verbose=0
+imgname=""
+
+while test "$#" -gt 0; do
+  case "$1" in
+  -*=*) optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
+  *) optarg= ;;
+  esac
+
+  case $1 in
+    --verbose)
+      verbose=1
+      ;;
+    --sitelist)
+      sitelist=$optarg;
+      ;;
+    --)
+      ;;
+    --*)
+      echo "invalid option : $1"
+      break;
+      ;;
+    *)
+      extlist=$(echo $extlist | sed -e 's/[:,]/ /g')
+      dowget $(echo "$1" | sed -e 's/ /%20/'); exit $?
+      ;;
+  esac
+  shift
+done
+if test "$#" -gt 0; then
+  usage 1 1>&2
+fi
+exit 1
diff --git a/scripts/wmpanpan b/scripts/wmpanpan
new file mode 100755
index 0000000..52378d0
--- /dev/null
+++ b/scripts/wmpanpan
@@ -0,0 +1,53 @@
+#!/bin/sh
+#
+#$VER: wmpanpan v0.03beta 
+#
+# wmpanpan, le script le plus con du monde, 
+# qui sauve le monde et votre bureau de ce petit canard.
+#
+# Par DivC, au bureau, alors que son employeur compte sur lui pour
+# un dossier urgent...
+#
+# Faut commenter les scipts on m'a dit, je commente...
+#
+# Ce script implemente une maniere totalement revolutionnaire pour
+# quitter wmcoincoin. Il permet d'eviter "shutdown -h now".
+# Il est en version beta, ne contient aucune detection d'erreur,
+# et ne verifie meme pas si la chasse est ouverte. 
+# Ce script est sous GPL, bien sur... Je refuse donc toute responsabilite
+# si votre ordinateur est terrorise par les coups de feu, si le
+# garde-chasse vient a passer, ou n'importe quoi d'autre...
+#
+# Pour faire joli:
+### update (pouaite): j'ai rajout� un deuxi�me pan!
+#
+echo "pan! pan!"
+#
+# Ici, le noeud du probleme, le coeur du processus...
+#
+### killall wmcoincoin
+
+case $1 in
+    -h)
+	echo "wmpanpan [option], l'enemi du coincoin"
+	echo "sans option, il tue tous les wmcoincoins"
+	echo "si option='boss_in', tous les coincoins  passent en boss-mode"
+	echo "si option='boss_out', tous les coincoins reviennent dans l'�tat o� ils �taient"
+	exit
+	;;
+    boss_in)
+	SIG="-USR1"
+	;;
+    boss_out)
+	SIG="-USR1"
+	;;
+esac
+
+### patch de fpy pour toujours plus de portabilit� (et il tue aussi les wmcoincoin-kde) !
+### update: enlev� car il tue aussi les commande lanc�es avec 'wmcoincoin' dans leurs arguments !!
+###kill $SIG `ps -elf | grep wmcoincoin | grep -v grep | awk '{print $4}'`
+killall $SIG wmcoincoin wmcoincoin-kde
+
+# Pour faire joli aussi, et justifier le "panpan":
+#
+echo "pan!"
diff --git a/src/Makefile.am b/src/Makefile.am
new file mode 100644
index 0000000..4645cc6
--- /dev/null
+++ b/src/Makefile.am
@@ -0,0 +1,169 @@
+## rcsid=$Id: Makefile.am,v 1.27 2004/05/16 12:54:29 pouaite Exp $
+## ChangeLog:
+##   $Log: Makefile.am,v $
+##   Revision 1.27  2004/05/16 12:54:29  pouaite
+##   250c
+##
+##   Revision 1.26  2004/04/26 20:32:31  pouaite
+##   roger demande le commit
+##
+##   Revision 1.25  2004/04/18 15:37:28  pouaite
+##   un deux un deux
+##
+##   Revision 1.24  2004/03/07 13:51:12  pouaite
+##   commit du dimanche
+##
+##   Revision 1.23  2004/02/29 19:01:26  pouaite
+##   et hop
+##
+##   Revision 1.22  2004/02/29 15:01:19  pouaite
+##   May the charles bronson spirit be with you
+##
+##   Revision 1.21  2003/06/29 23:58:35  pouaite
+##   suppression de l'overrideredirect du palmi et ajout de pinnipede_totoz.c et wmcoincoin-totoz-get etc
+##
+##   Revision 1.20  2003/03/12 21:09:44  pouaite
+##   mega patch de gle + micro fix du referer
+##
+##   Revision 1.19  2003/03/11 23:40:36  pouaite
+##   rajout fake-getaddrinfo .. si �a compile alors cygwin remarche (pas test�)
+##
+##   Revision 1.18  2002/10/05 18:08:14  pouaite
+##   ajout menu contextuel + fix de la coloration des boutons du wmccc
+##
+##   Revision 1.17  2002/09/21 22:51:01  pouaite
+##   ajout du patch de shift pour le pdfm
+##
+##   Revision 1.16  2002/09/08 14:28:45  pouaite
+##   bugfixes salutaires
+##
+##   Revision 1.15  2002/09/05 23:11:56  pouaite
+##   <blog>ce soir g mang� une omelette</blog>
+##
+##   Revision 1.14  2002/08/31 21:26:46  pouaite
+##   ajout du wmccc
+##
+##   Revision 1.13  2002/08/22 18:50:38  pouaite
+##   et l� �a compile ?
+##
+##   Revision 1.12  2002/08/21 01:11:48  pouaite
+##   commit du soir, espoir
+##
+##   Revision 1.11  2002/08/17 18:33:38  pouaite
+##   grosse commition
+##
+##   Revision 1.10  2002/06/23 10:44:05  pouaite
+##   i18n-isation of the coincoin(kwakkwak), thanks to the incredible jjb !
+##
+##   Revision 1.9  2002/05/29 22:38:12  pouaite
+##   bidouilles dans configure.in et cie
+##
+##   Revision 1.8  2002/04/01 01:39:38  pouaite
+##   grosse grosse commition (cf changelog)
+##
+##   Revision 1.7  2002/02/24 22:13:56  pouaite
+##   modifs pour la v2.3.5 (selection, scrollcoin, plopification, bugfixes)
+##
+##   Revision 1.6  2002/01/31 11:15:42  pouaite
+##   fix compilation
+##
+##   Revision 1.5  2002/01/18 00:28:42  pouaite
+##   le m�nage continue + grosses modifs (experimentales pour l'instant)
+##
+##   Revision 1.4  2002/01/16 21:27:35  pouaite
+##   gros coup de balai dans wmcoincoin.c qui s'est du coup splitt� en trois: wmcoincoin.c, dock.c et useragents_file.c
+##
+##   Revision 1.3  2002/01/13 15:19:00  pouaite
+##   double patch: shift -> tribune.post_cmd et lordOric -> tribune.archive
+##
+##   Revision 1.2  2001/12/02 18:32:05  pouaite
+##   update suite � la modif sur http.c et a la generation automatique de src/default*.h
+##
+## Process this file with automake to produce Makefile.in
+
+localedir = $(datadir)/locale
+LIBS = @LIBINTL@ @LIBS@
+
+bin_PROGRAMS = wmcoincoin @WMCCC@
+EXTRA_PROGRAMS = wmccc
+
+# include dans http.c
+EXTRA_wmcoincoin_SOURCES = http_win.c http_unix.c fake-getaddrinfo.c fake-getnameinfo.c inet_aton.c
+
+#salete d'autoconf j'y comprends rien
+DEFS = @DEFS@ -DWMCCDATADIR="\"$(pkgdatadir)\"" -DLOCALEDIR="\"$(localedir)\"" -I$(top_srcdir)/intl -I$(top_srcdir)
+
+wmcoincoin_SOURCES = cc_queue.c plopup.c \
+	md5.c md5.h base64.c base64.h \
+        board_util.c board_util.h \
+	xmlcoincoin.c xmlcoincoin.h \
+	regexp.h regexp.c general.h \
+	myprintf.c myprintf.h \
+	raster.c raster.h \
+	fontcoincoin.c fontcoincoin.h \
+	kbcoincoin.c kbcoincoin.h \
+	swallowcoincoin.c \
+        troll_detector.c troll_data.h \
+	pinnipede.c pinnipede_widgets.c pinnipede_pdfm.c pinnipede_totoz.c pinnipede.h \
+	totoz_bookmark.c \
+        palmipede.c \
+	dock.c dock.h \
+        board_priv.h board.c board_rss.c board_pop3.c \
+	site.c site.h \
+	balltrap.c balltrap.h \
+        keylist.c keylist.h \
+	scrollcoin.h scrollcoin.c \
+	picohtml.c picohtml.h \
+        msgbox.c balloon.c \
+	wmcoincoin.c coincoin.h global.h \
+        http.c http.h \
+	coin_util.c coin_util.h \
+        coin_xutil.c coin_xutil.h \
+	prefs.c prefs.h options_list.h prefs_gestion.c\
+	spell_coin.c spell_coin.h
+
+wmcoincoin_CFLAGS = \
+	@XFT_CFLAGS@
+
+wmcoincoin_LDADD = \
+	@XFT_LIBS@ -lm
+
+wmccc_CFLAGS = \
+	@GTK_CFLAGS@
+
+wmccc_SOURCES = \
+	wmccc.c wmccc.h wmccc_dialogs.c \
+	wmccc_support.c wmccc_support.h \
+	wmccc_interface.c wmccc_interface.h \
+	wmccc_callbacks.c wmccc_callbacks.h \
+	wmccc_save_prefs.c \
+	myprintf.c myprintf.h \
+	prefs.c prefs.h md5.h md5.c \
+	coin_util.c coin_util.h \
+	options_list.h \
+	keylist.c keylist.h \
+	fake-getaddrinfo.h fake-getnameinfo.h inet_aton.h
+
+wmccc_LDADD = @GTK_LIBS@
+
+
+
+#useragents_file.c
+
+#defaultuseragents.h: ../useragents
+#	cat ../useragents | sed -e '/^#%.*/d' | sed -e 's/\\/\\\\/g' | sed -e 's/	/\\t/g' | sed -e 's/^/fprintf(f,"/g' | sed -e 's/$$/\\n");/g' > ./defaultuseragents.h
+
+#defaultoptionsfile.h: ../options
+#	cat ../options | sed -e '/^#%.*/d' | sed -e 's/\\/\\\\/g' | sed -e 's/"/\\"/g' | sed -e 's/	/\\t/g' | sed -e 's/^/fprintf(f,"/g' | sed -e 's/$$/\\n");/g' | sed -e 's/%/%%/g' > ./defaultoptionsfile.h
+
+options_list.h: ../options
+	cd ..; /bin/sh ./genoptlst.sh
+
+#useragents_file.o: defaultuseragents.h
+
+#coincoin_prefs.o: defaultoptionsfile.h
+
+install: install-am
+# petite update merci anvil !
+#	ln -sf $(DESTDIR)$(bindir)/wmcoincoin $(DESTDIR)$(bindir)/wmcoincoin-kde
+#	(cd $(DESTDIR)$(bindir) ; ln -sf wmcoincoin wmcoincoin-kde)
diff --git a/src/Makefile.in b/src/Makefile.in
new file mode 100644
index 0000000..8c9063a
--- /dev/null
+++ b/src/Makefile.in
@@ -0,0 +1,1405 @@
+# Makefile.in generated by automake 1.10.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
+# 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+ at SET_MAKE@
+
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+bin_PROGRAMS = wmcoincoin$(EXEEXT) @WMCCC@
+EXTRA_PROGRAMS = wmccc$(EXEEXT)
+subdir = src
+DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/codeset.m4 \
+	$(top_srcdir)/m4/gettext.m4 $(top_srcdir)/m4/glibc2.m4 \
+	$(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/iconv.m4 \
+	$(top_srcdir)/m4/intdiv0.m4 $(top_srcdir)/m4/intl.m4 \
+	$(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax.m4 \
+	$(top_srcdir)/m4/inttypes-pri.m4 \
+	$(top_srcdir)/m4/inttypes_h.m4 $(top_srcdir)/m4/isc-posix.m4 \
+	$(top_srcdir)/m4/lcmessage.m4 $(top_srcdir)/m4/lib-ld.m4 \
+	$(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+	$(top_srcdir)/m4/lock.m4 $(top_srcdir)/m4/longlong.m4 \
+	$(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \
+	$(top_srcdir)/m4/printf-posix.m4 $(top_srcdir)/m4/progtest.m4 \
+	$(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/stdint_h.m4 \
+	$(top_srcdir)/m4/uintmax_t.m4 $(top_srcdir)/m4/visibility.m4 \
+	$(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wint_t.m4 \
+	$(top_srcdir)/m4/xsize.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+	$(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+am__installdirs = "$(DESTDIR)$(bindir)"
+binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+PROGRAMS = $(bin_PROGRAMS)
+am_wmccc_OBJECTS = wmccc-wmccc.$(OBJEXT) wmccc-wmccc_dialogs.$(OBJEXT) \
+	wmccc-wmccc_support.$(OBJEXT) wmccc-wmccc_interface.$(OBJEXT) \
+	wmccc-wmccc_callbacks.$(OBJEXT) \
+	wmccc-wmccc_save_prefs.$(OBJEXT) wmccc-myprintf.$(OBJEXT) \
+	wmccc-prefs.$(OBJEXT) wmccc-md5.$(OBJEXT) \
+	wmccc-coin_util.$(OBJEXT) wmccc-keylist.$(OBJEXT)
+wmccc_OBJECTS = $(am_wmccc_OBJECTS)
+wmccc_DEPENDENCIES =
+wmccc_LINK = $(CCLD) $(wmccc_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+am_wmcoincoin_OBJECTS = wmcoincoin-cc_queue.$(OBJEXT) \
+	wmcoincoin-plopup.$(OBJEXT) wmcoincoin-md5.$(OBJEXT) \
+	wmcoincoin-base64.$(OBJEXT) wmcoincoin-board_util.$(OBJEXT) \
+	wmcoincoin-xmlcoincoin.$(OBJEXT) wmcoincoin-regexp.$(OBJEXT) \
+	wmcoincoin-myprintf.$(OBJEXT) wmcoincoin-raster.$(OBJEXT) \
+	wmcoincoin-fontcoincoin.$(OBJEXT) \
+	wmcoincoin-kbcoincoin.$(OBJEXT) \
+	wmcoincoin-swallowcoincoin.$(OBJEXT) \
+	wmcoincoin-troll_detector.$(OBJEXT) \
+	wmcoincoin-pinnipede.$(OBJEXT) \
+	wmcoincoin-pinnipede_widgets.$(OBJEXT) \
+	wmcoincoin-pinnipede_pdfm.$(OBJEXT) \
+	wmcoincoin-pinnipede_totoz.$(OBJEXT) \
+	wmcoincoin-totoz_bookmark.$(OBJEXT) \
+	wmcoincoin-palmipede.$(OBJEXT) wmcoincoin-dock.$(OBJEXT) \
+	wmcoincoin-board.$(OBJEXT) wmcoincoin-board_rss.$(OBJEXT) \
+	wmcoincoin-board_pop3.$(OBJEXT) wmcoincoin-site.$(OBJEXT) \
+	wmcoincoin-balltrap.$(OBJEXT) wmcoincoin-keylist.$(OBJEXT) \
+	wmcoincoin-scrollcoin.$(OBJEXT) wmcoincoin-picohtml.$(OBJEXT) \
+	wmcoincoin-msgbox.$(OBJEXT) wmcoincoin-balloon.$(OBJEXT) \
+	wmcoincoin-wmcoincoin.$(OBJEXT) wmcoincoin-http.$(OBJEXT) \
+	wmcoincoin-coin_util.$(OBJEXT) wmcoincoin-coin_xutil.$(OBJEXT) \
+	wmcoincoin-prefs.$(OBJEXT) wmcoincoin-prefs_gestion.$(OBJEXT) \
+	wmcoincoin-spell_coin.$(OBJEXT)
+wmcoincoin_OBJECTS = $(am_wmcoincoin_OBJECTS)
+wmcoincoin_DEPENDENCIES =
+wmcoincoin_LINK = $(CCLD) $(wmcoincoin_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
+	$(LDFLAGS) -o $@
+DEFAULT_INCLUDES = -I. at am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+SOURCES = $(wmccc_SOURCES) $(wmcoincoin_SOURCES) \
+	$(EXTRA_wmcoincoin_SOURCES)
+DIST_SOURCES = $(wmccc_SOURCES) $(wmcoincoin_SOURCES) \
+	$(EXTRA_wmcoincoin_SOURCES)
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CFLAG_VISIBILITY = @CFLAG_VISIBILITY@
+COIN_ARCH = @COIN_ARCH@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DATADIRNAME = @DATADIRNAME@
+
+#salete d'autoconf j'y comprends rien
+DEFS = @DEFS@ -DWMCCDATADIR="\"$(pkgdatadir)\"" -DLOCALEDIR="\"$(localedir)\"" -I$(top_srcdir)/intl -I$(top_srcdir)
+DEPDIR = @DEPDIR@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+GENCAT = @GENCAT@
+GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@
+GLIBC2 = @GLIBC2@
+GLIBC21 = @GLIBC21@
+GMSGFMT = @GMSGFMT@
+GMSGFMT_015 = @GMSGFMT_015@
+GREP = @GREP@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+HAVE_ASPRINTF = @HAVE_ASPRINTF@
+HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@
+HAVE_SNPRINTF = @HAVE_SNPRINTF@
+HAVE_VISIBILITY = @HAVE_VISIBILITY@
+HAVE_WPRINTF = @HAVE_WPRINTF@
+IMLIB2_CONFIG_IN_PATH = @IMLIB2_CONFIG_IN_PATH@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+INSTOBJEXT = @INSTOBJEXT@
+INTLBISON = @INTLBISON@
+INTLLIBS = @INTLLIBS@
+INTLOBJS = @INTLOBJS@
+INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@
+INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@
+LDFLAGS = @LDFLAGS@
+LIBICONV = @LIBICONV@
+LIBINTL = @LIBINTL@
+LIBMULTITHREAD = @LIBMULTITHREAD@
+LIBOBJS = @LIBOBJS@
+LIBPTH = @LIBPTH@
+LIBPTH_PREFIX = @LIBPTH_PREFIX@
+LIBS = @LIBINTL@ @LIBS@
+LIBTHREAD = @LIBTHREAD@
+LTLIBC = @LTLIBC@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBMULTITHREAD = @LTLIBMULTITHREAD@
+LTLIBOBJS = @LTLIBOBJS@
+LTLIBPTH = @LTLIBPTH@
+LTLIBTHREAD = @LTLIBTHREAD@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+MSGFMT = @MSGFMT@
+MSGFMT_015 = @MSGFMT_015@
+MSGMERGE = @MSGMERGE@
+OBJEXT = @OBJEXT@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_CFLAGS = @PACKAGE_CFLAGS@
+PACKAGE_LIBS = @PACKAGE_LIBS@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PKG_CONFIG = @PKG_CONFIG@
+POSUB = @POSUB@
+PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+WINDRES = @WINDRES@
+WMCCC = @WMCCC@
+WMCOINCOIN_PLAYER = @WMCOINCOIN_PLAYER@
+WOE32 = @WOE32@
+WOE32DLL = @WOE32DLL@
+XFT_CFLAGS = @XFT_CFLAGS@
+XFT_LIBS = @XFT_LIBS@
+XGETTEXT = @XGETTEXT@
+XGETTEXT_015 = @XGETTEXT_015@
+XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@
+XMKMF = @XMKMF@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_CC = @ac_ct_CC@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = $(datadir)/locale
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+
+# include dans http.c
+EXTRA_wmcoincoin_SOURCES = http_win.c http_unix.c fake-getaddrinfo.c fake-getnameinfo.c inet_aton.c
+wmcoincoin_SOURCES = cc_queue.c plopup.c \
+	md5.c md5.h base64.c base64.h \
+        board_util.c board_util.h \
+	xmlcoincoin.c xmlcoincoin.h \
+	regexp.h regexp.c general.h \
+	myprintf.c myprintf.h \
+	raster.c raster.h \
+	fontcoincoin.c fontcoincoin.h \
+	kbcoincoin.c kbcoincoin.h \
+	swallowcoincoin.c \
+        troll_detector.c troll_data.h \
+	pinnipede.c pinnipede_widgets.c pinnipede_pdfm.c pinnipede_totoz.c pinnipede.h \
+	totoz_bookmark.c \
+        palmipede.c \
+	dock.c dock.h \
+        board_priv.h board.c board_rss.c board_pop3.c \
+	site.c site.h \
+	balltrap.c balltrap.h \
+        keylist.c keylist.h \
+	scrollcoin.h scrollcoin.c \
+	picohtml.c picohtml.h \
+        msgbox.c balloon.c \
+	wmcoincoin.c coincoin.h global.h \
+        http.c http.h \
+	coin_util.c coin_util.h \
+        coin_xutil.c coin_xutil.h \
+	prefs.c prefs.h options_list.h prefs_gestion.c\
+	spell_coin.c spell_coin.h
+
+wmcoincoin_CFLAGS = \
+	@XFT_CFLAGS@
+
+wmcoincoin_LDADD = \
+	@XFT_LIBS@ -lm
+
+wmccc_CFLAGS = \
+	@GTK_CFLAGS@
+
+wmccc_SOURCES = \
+	wmccc.c wmccc.h wmccc_dialogs.c \
+	wmccc_support.c wmccc_support.h \
+	wmccc_interface.c wmccc_interface.h \
+	wmccc_callbacks.c wmccc_callbacks.h \
+	wmccc_save_prefs.c \
+	myprintf.c myprintf.h \
+	prefs.c prefs.h md5.h md5.c \
+	coin_util.c coin_util.h \
+	options_list.h \
+	keylist.c keylist.h \
+	fake-getaddrinfo.h fake-getnameinfo.h inet_aton.h
+
+wmccc_LDADD = @GTK_LIBS@
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .o .obj
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
+	@for dep in $?; do \
+	  case '$(am__configure_deps)' in \
+	    *$$dep*) \
+	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
+		&& exit 0; \
+	      exit 1;; \
+	  esac; \
+	done; \
+	echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu  src/Makefile'; \
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  src/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+	@case '$?' in \
+	  *config.status*) \
+	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+	  *) \
+	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+	esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+install-binPROGRAMS: $(bin_PROGRAMS)
+	@$(NORMAL_INSTALL)
+	test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
+	@list='$(bin_PROGRAMS)'; for p in $$list; do \
+	  p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
+	  if test -f $$p \
+	  ; then \
+	    f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
+	   echo " $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
+	   $(INSTALL_PROGRAM_ENV) $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
+	  else :; fi; \
+	done
+
+uninstall-binPROGRAMS:
+	@$(NORMAL_UNINSTALL)
+	@list='$(bin_PROGRAMS)'; for p in $$list; do \
+	  f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
+	  echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
+	  rm -f "$(DESTDIR)$(bindir)/$$f"; \
+	done
+
+clean-binPROGRAMS:
+	-test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+wmccc$(EXEEXT): $(wmccc_OBJECTS) $(wmccc_DEPENDENCIES) 
+	@rm -f wmccc$(EXEEXT)
+	$(wmccc_LINK) $(wmccc_OBJECTS) $(wmccc_LDADD) $(LIBS)
+wmcoincoin$(EXEEXT): $(wmcoincoin_OBJECTS) $(wmcoincoin_DEPENDENCIES) 
+	@rm -f wmcoincoin$(EXEEXT)
+	$(wmcoincoin_LINK) $(wmcoincoin_OBJECTS) $(wmcoincoin_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT)
+
+distclean-compile:
+	-rm -f *.tab.c
+
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wmccc-coin_util.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wmccc-keylist.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wmccc-md5.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wmccc-myprintf.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wmccc-prefs.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wmccc-wmccc.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wmccc-wmccc_callbacks.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wmccc-wmccc_dialogs.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wmccc-wmccc_interface.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wmccc-wmccc_save_prefs.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wmccc-wmccc_support.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wmcoincoin-balloon.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wmcoincoin-balltrap.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wmcoincoin-base64.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wmcoincoin-board.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wmcoincoin-board_pop3.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wmcoincoin-board_rss.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wmcoincoin-board_util.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wmcoincoin-cc_queue.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wmcoincoin-coin_util.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wmcoincoin-coin_xutil.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wmcoincoin-dock.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wmcoincoin-fake-getaddrinfo.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wmcoincoin-fake-getnameinfo.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wmcoincoin-fontcoincoin.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wmcoincoin-http.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wmcoincoin-http_unix.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wmcoincoin-http_win.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wmcoincoin-inet_aton.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wmcoincoin-kbcoincoin.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wmcoincoin-keylist.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wmcoincoin-md5.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wmcoincoin-msgbox.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wmcoincoin-myprintf.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wmcoincoin-palmipede.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wmcoincoin-picohtml.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wmcoincoin-pinnipede.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wmcoincoin-pinnipede_pdfm.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wmcoincoin-pinnipede_totoz.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wmcoincoin-pinnipede_widgets.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wmcoincoin-plopup.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wmcoincoin-prefs.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wmcoincoin-prefs_gestion.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wmcoincoin-raster.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wmcoincoin-regexp.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wmcoincoin-scrollcoin.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wmcoincoin-site.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wmcoincoin-spell_coin.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wmcoincoin-swallowcoincoin.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wmcoincoin-totoz_bookmark.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wmcoincoin-troll_detector.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wmcoincoin-wmcoincoin.Po at am__quote@
+ at AMDEP_TRUE@@am__include@ @am__quote at ./$(DEPDIR)/wmcoincoin-xmlcoincoin.Po at am__quote@
+
+.c.o:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c $<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+wmccc-wmccc.o: wmccc.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -MT wmccc-wmccc.o -MD -MP -MF $(DEPDIR)/wmccc-wmccc.Tpo -c -o wmccc-wmccc.o `test -f 'wmccc.c' || echo '$(srcdir)/'`wmccc.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmccc-wmccc.Tpo $(DEPDIR)/wmccc-wmccc.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='wmccc.c' object='wmccc-wmccc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -c -o wmccc-wmccc.o `test -f 'wmccc.c' || echo '$(srcdir)/'`wmccc.c
+
+wmccc-wmccc.obj: wmccc.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -MT wmccc-wmccc.obj -MD -MP -MF $(DEPDIR)/wmccc-wmccc.Tpo -c -o wmccc-wmccc.obj `if test -f 'wmccc.c'; then $(CYGPATH_W) 'wmccc.c'; else $(CYGPATH_W) '$(srcdir)/wmccc.c'; fi`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmccc-wmccc.Tpo $(DEPDIR)/wmccc-wmccc.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='wmccc.c' object='wmccc-wmccc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -c -o wmccc-wmccc.obj `if test -f 'wmccc.c'; then $(CYGPATH_W) 'wmccc.c'; else $(CYGPATH_W) '$(srcdir)/wmccc.c'; fi`
+
+wmccc-wmccc_dialogs.o: wmccc_dialogs.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -MT wmccc-wmccc_dialogs.o -MD -MP -MF $(DEPDIR)/wmccc-wmccc_dialogs.Tpo -c -o wmccc-wmccc_dialogs.o `test -f 'wmccc_dialogs.c' || echo '$(srcdir)/'`wmccc_dialogs.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmccc-wmccc_dialogs.Tpo $(DEPDIR)/wmccc-wmccc_dialogs.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='wmccc_dialogs.c' object='wmccc-wmccc_dialogs.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -c -o wmccc-wmccc_dialogs.o `test -f 'wmccc_dialogs.c' || echo '$(srcdir)/'`wmccc_dialogs.c
+
+wmccc-wmccc_dialogs.obj: wmccc_dialogs.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -MT wmccc-wmccc_dialogs.obj -MD -MP -MF $(DEPDIR)/wmccc-wmccc_dialogs.Tpo -c -o wmccc-wmccc_dialogs.obj `if test -f 'wmccc_dialogs.c'; then $(CYGPATH_W) 'wmccc_dialogs.c'; else $(CYGPATH_W) '$(srcdir)/wmccc_dialogs.c'; fi`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmccc-wmccc_dialogs.Tpo $(DEPDIR)/wmccc-wmccc_dialogs.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='wmccc_dialogs.c' object='wmccc-wmccc_dialogs.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -c -o wmccc-wmccc_dialogs.obj `if test -f 'wmccc_dialogs.c'; then $(CYGPATH_W) 'wmccc_dialogs.c'; else $(CYGPATH_W) '$(srcdir)/wmccc_dialogs.c'; fi`
+
+wmccc-wmccc_support.o: wmccc_support.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -MT wmccc-wmccc_support.o -MD -MP -MF $(DEPDIR)/wmccc-wmccc_support.Tpo -c -o wmccc-wmccc_support.o `test -f 'wmccc_support.c' || echo '$(srcdir)/'`wmccc_support.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmccc-wmccc_support.Tpo $(DEPDIR)/wmccc-wmccc_support.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='wmccc_support.c' object='wmccc-wmccc_support.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -c -o wmccc-wmccc_support.o `test -f 'wmccc_support.c' || echo '$(srcdir)/'`wmccc_support.c
+
+wmccc-wmccc_support.obj: wmccc_support.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -MT wmccc-wmccc_support.obj -MD -MP -MF $(DEPDIR)/wmccc-wmccc_support.Tpo -c -o wmccc-wmccc_support.obj `if test -f 'wmccc_support.c'; then $(CYGPATH_W) 'wmccc_support.c'; else $(CYGPATH_W) '$(srcdir)/wmccc_support.c'; fi`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmccc-wmccc_support.Tpo $(DEPDIR)/wmccc-wmccc_support.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='wmccc_support.c' object='wmccc-wmccc_support.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -c -o wmccc-wmccc_support.obj `if test -f 'wmccc_support.c'; then $(CYGPATH_W) 'wmccc_support.c'; else $(CYGPATH_W) '$(srcdir)/wmccc_support.c'; fi`
+
+wmccc-wmccc_interface.o: wmccc_interface.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -MT wmccc-wmccc_interface.o -MD -MP -MF $(DEPDIR)/wmccc-wmccc_interface.Tpo -c -o wmccc-wmccc_interface.o `test -f 'wmccc_interface.c' || echo '$(srcdir)/'`wmccc_interface.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmccc-wmccc_interface.Tpo $(DEPDIR)/wmccc-wmccc_interface.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='wmccc_interface.c' object='wmccc-wmccc_interface.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -c -o wmccc-wmccc_interface.o `test -f 'wmccc_interface.c' || echo '$(srcdir)/'`wmccc_interface.c
+
+wmccc-wmccc_interface.obj: wmccc_interface.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -MT wmccc-wmccc_interface.obj -MD -MP -MF $(DEPDIR)/wmccc-wmccc_interface.Tpo -c -o wmccc-wmccc_interface.obj `if test -f 'wmccc_interface.c'; then $(CYGPATH_W) 'wmccc_interface.c'; else $(CYGPATH_W) '$(srcdir)/wmccc_interface.c'; fi`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmccc-wmccc_interface.Tpo $(DEPDIR)/wmccc-wmccc_interface.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='wmccc_interface.c' object='wmccc-wmccc_interface.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -c -o wmccc-wmccc_interface.obj `if test -f 'wmccc_interface.c'; then $(CYGPATH_W) 'wmccc_interface.c'; else $(CYGPATH_W) '$(srcdir)/wmccc_interface.c'; fi`
+
+wmccc-wmccc_callbacks.o: wmccc_callbacks.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -MT wmccc-wmccc_callbacks.o -MD -MP -MF $(DEPDIR)/wmccc-wmccc_callbacks.Tpo -c -o wmccc-wmccc_callbacks.o `test -f 'wmccc_callbacks.c' || echo '$(srcdir)/'`wmccc_callbacks.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmccc-wmccc_callbacks.Tpo $(DEPDIR)/wmccc-wmccc_callbacks.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='wmccc_callbacks.c' object='wmccc-wmccc_callbacks.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -c -o wmccc-wmccc_callbacks.o `test -f 'wmccc_callbacks.c' || echo '$(srcdir)/'`wmccc_callbacks.c
+
+wmccc-wmccc_callbacks.obj: wmccc_callbacks.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -MT wmccc-wmccc_callbacks.obj -MD -MP -MF $(DEPDIR)/wmccc-wmccc_callbacks.Tpo -c -o wmccc-wmccc_callbacks.obj `if test -f 'wmccc_callbacks.c'; then $(CYGPATH_W) 'wmccc_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/wmccc_callbacks.c'; fi`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmccc-wmccc_callbacks.Tpo $(DEPDIR)/wmccc-wmccc_callbacks.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='wmccc_callbacks.c' object='wmccc-wmccc_callbacks.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -c -o wmccc-wmccc_callbacks.obj `if test -f 'wmccc_callbacks.c'; then $(CYGPATH_W) 'wmccc_callbacks.c'; else $(CYGPATH_W) '$(srcdir)/wmccc_callbacks.c'; fi`
+
+wmccc-wmccc_save_prefs.o: wmccc_save_prefs.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -MT wmccc-wmccc_save_prefs.o -MD -MP -MF $(DEPDIR)/wmccc-wmccc_save_prefs.Tpo -c -o wmccc-wmccc_save_prefs.o `test -f 'wmccc_save_prefs.c' || echo '$(srcdir)/'`wmccc_save_prefs.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmccc-wmccc_save_prefs.Tpo $(DEPDIR)/wmccc-wmccc_save_prefs.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='wmccc_save_prefs.c' object='wmccc-wmccc_save_prefs.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -c -o wmccc-wmccc_save_prefs.o `test -f 'wmccc_save_prefs.c' || echo '$(srcdir)/'`wmccc_save_prefs.c
+
+wmccc-wmccc_save_prefs.obj: wmccc_save_prefs.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -MT wmccc-wmccc_save_prefs.obj -MD -MP -MF $(DEPDIR)/wmccc-wmccc_save_prefs.Tpo -c -o wmccc-wmccc_save_prefs.obj `if test -f 'wmccc_save_prefs.c'; then $(CYGPATH_W) 'wmccc_save_prefs.c'; else $(CYGPATH_W) '$(srcdir)/wmccc_save_prefs.c'; fi`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmccc-wmccc_save_prefs.Tpo $(DEPDIR)/wmccc-wmccc_save_prefs.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='wmccc_save_prefs.c' object='wmccc-wmccc_save_prefs.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -c -o wmccc-wmccc_save_prefs.obj `if test -f 'wmccc_save_prefs.c'; then $(CYGPATH_W) 'wmccc_save_prefs.c'; else $(CYGPATH_W) '$(srcdir)/wmccc_save_prefs.c'; fi`
+
+wmccc-myprintf.o: myprintf.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -MT wmccc-myprintf.o -MD -MP -MF $(DEPDIR)/wmccc-myprintf.Tpo -c -o wmccc-myprintf.o `test -f 'myprintf.c' || echo '$(srcdir)/'`myprintf.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmccc-myprintf.Tpo $(DEPDIR)/wmccc-myprintf.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='myprintf.c' object='wmccc-myprintf.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -c -o wmccc-myprintf.o `test -f 'myprintf.c' || echo '$(srcdir)/'`myprintf.c
+
+wmccc-myprintf.obj: myprintf.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -MT wmccc-myprintf.obj -MD -MP -MF $(DEPDIR)/wmccc-myprintf.Tpo -c -o wmccc-myprintf.obj `if test -f 'myprintf.c'; then $(CYGPATH_W) 'myprintf.c'; else $(CYGPATH_W) '$(srcdir)/myprintf.c'; fi`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmccc-myprintf.Tpo $(DEPDIR)/wmccc-myprintf.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='myprintf.c' object='wmccc-myprintf.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -c -o wmccc-myprintf.obj `if test -f 'myprintf.c'; then $(CYGPATH_W) 'myprintf.c'; else $(CYGPATH_W) '$(srcdir)/myprintf.c'; fi`
+
+wmccc-prefs.o: prefs.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -MT wmccc-prefs.o -MD -MP -MF $(DEPDIR)/wmccc-prefs.Tpo -c -o wmccc-prefs.o `test -f 'prefs.c' || echo '$(srcdir)/'`prefs.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmccc-prefs.Tpo $(DEPDIR)/wmccc-prefs.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='prefs.c' object='wmccc-prefs.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -c -o wmccc-prefs.o `test -f 'prefs.c' || echo '$(srcdir)/'`prefs.c
+
+wmccc-prefs.obj: prefs.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -MT wmccc-prefs.obj -MD -MP -MF $(DEPDIR)/wmccc-prefs.Tpo -c -o wmccc-prefs.obj `if test -f 'prefs.c'; then $(CYGPATH_W) 'prefs.c'; else $(CYGPATH_W) '$(srcdir)/prefs.c'; fi`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmccc-prefs.Tpo $(DEPDIR)/wmccc-prefs.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='prefs.c' object='wmccc-prefs.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -c -o wmccc-prefs.obj `if test -f 'prefs.c'; then $(CYGPATH_W) 'prefs.c'; else $(CYGPATH_W) '$(srcdir)/prefs.c'; fi`
+
+wmccc-md5.o: md5.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -MT wmccc-md5.o -MD -MP -MF $(DEPDIR)/wmccc-md5.Tpo -c -o wmccc-md5.o `test -f 'md5.c' || echo '$(srcdir)/'`md5.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmccc-md5.Tpo $(DEPDIR)/wmccc-md5.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='md5.c' object='wmccc-md5.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -c -o wmccc-md5.o `test -f 'md5.c' || echo '$(srcdir)/'`md5.c
+
+wmccc-md5.obj: md5.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -MT wmccc-md5.obj -MD -MP -MF $(DEPDIR)/wmccc-md5.Tpo -c -o wmccc-md5.obj `if test -f 'md5.c'; then $(CYGPATH_W) 'md5.c'; else $(CYGPATH_W) '$(srcdir)/md5.c'; fi`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmccc-md5.Tpo $(DEPDIR)/wmccc-md5.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='md5.c' object='wmccc-md5.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -c -o wmccc-md5.obj `if test -f 'md5.c'; then $(CYGPATH_W) 'md5.c'; else $(CYGPATH_W) '$(srcdir)/md5.c'; fi`
+
+wmccc-coin_util.o: coin_util.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -MT wmccc-coin_util.o -MD -MP -MF $(DEPDIR)/wmccc-coin_util.Tpo -c -o wmccc-coin_util.o `test -f 'coin_util.c' || echo '$(srcdir)/'`coin_util.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmccc-coin_util.Tpo $(DEPDIR)/wmccc-coin_util.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='coin_util.c' object='wmccc-coin_util.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -c -o wmccc-coin_util.o `test -f 'coin_util.c' || echo '$(srcdir)/'`coin_util.c
+
+wmccc-coin_util.obj: coin_util.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -MT wmccc-coin_util.obj -MD -MP -MF $(DEPDIR)/wmccc-coin_util.Tpo -c -o wmccc-coin_util.obj `if test -f 'coin_util.c'; then $(CYGPATH_W) 'coin_util.c'; else $(CYGPATH_W) '$(srcdir)/coin_util.c'; fi`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmccc-coin_util.Tpo $(DEPDIR)/wmccc-coin_util.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='coin_util.c' object='wmccc-coin_util.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -c -o wmccc-coin_util.obj `if test -f 'coin_util.c'; then $(CYGPATH_W) 'coin_util.c'; else $(CYGPATH_W) '$(srcdir)/coin_util.c'; fi`
+
+wmccc-keylist.o: keylist.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -MT wmccc-keylist.o -MD -MP -MF $(DEPDIR)/wmccc-keylist.Tpo -c -o wmccc-keylist.o `test -f 'keylist.c' || echo '$(srcdir)/'`keylist.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmccc-keylist.Tpo $(DEPDIR)/wmccc-keylist.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='keylist.c' object='wmccc-keylist.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -c -o wmccc-keylist.o `test -f 'keylist.c' || echo '$(srcdir)/'`keylist.c
+
+wmccc-keylist.obj: keylist.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -MT wmccc-keylist.obj -MD -MP -MF $(DEPDIR)/wmccc-keylist.Tpo -c -o wmccc-keylist.obj `if test -f 'keylist.c'; then $(CYGPATH_W) 'keylist.c'; else $(CYGPATH_W) '$(srcdir)/keylist.c'; fi`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmccc-keylist.Tpo $(DEPDIR)/wmccc-keylist.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='keylist.c' object='wmccc-keylist.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -c -o wmccc-keylist.obj `if test -f 'keylist.c'; then $(CYGPATH_W) 'keylist.c'; else $(CYGPATH_W) '$(srcdir)/keylist.c'; fi`
+
+wmcoincoin-cc_queue.o: cc_queue.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-cc_queue.o -MD -MP -MF $(DEPDIR)/wmcoincoin-cc_queue.Tpo -c -o wmcoincoin-cc_queue.o `test -f 'cc_queue.c' || echo '$(srcdir)/'`cc_queue.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-cc_queue.Tpo $(DEPDIR)/wmcoincoin-cc_queue.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='cc_queue.c' object='wmcoincoin-cc_queue.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-cc_queue.o `test -f 'cc_queue.c' || echo '$(srcdir)/'`cc_queue.c
+
+wmcoincoin-cc_queue.obj: cc_queue.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-cc_queue.obj -MD -MP -MF $(DEPDIR)/wmcoincoin-cc_queue.Tpo -c -o wmcoincoin-cc_queue.obj `if test -f 'cc_queue.c'; then $(CYGPATH_W) 'cc_queue.c'; else $(CYGPATH_W) '$(srcdir)/cc_queue.c'; fi`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-cc_queue.Tpo $(DEPDIR)/wmcoincoin-cc_queue.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='cc_queue.c' object='wmcoincoin-cc_queue.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-cc_queue.obj `if test -f 'cc_queue.c'; then $(CYGPATH_W) 'cc_queue.c'; else $(CYGPATH_W) '$(srcdir)/cc_queue.c'; fi`
+
+wmcoincoin-plopup.o: plopup.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-plopup.o -MD -MP -MF $(DEPDIR)/wmcoincoin-plopup.Tpo -c -o wmcoincoin-plopup.o `test -f 'plopup.c' || echo '$(srcdir)/'`plopup.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-plopup.Tpo $(DEPDIR)/wmcoincoin-plopup.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='plopup.c' object='wmcoincoin-plopup.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-plopup.o `test -f 'plopup.c' || echo '$(srcdir)/'`plopup.c
+
+wmcoincoin-plopup.obj: plopup.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-plopup.obj -MD -MP -MF $(DEPDIR)/wmcoincoin-plopup.Tpo -c -o wmcoincoin-plopup.obj `if test -f 'plopup.c'; then $(CYGPATH_W) 'plopup.c'; else $(CYGPATH_W) '$(srcdir)/plopup.c'; fi`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-plopup.Tpo $(DEPDIR)/wmcoincoin-plopup.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='plopup.c' object='wmcoincoin-plopup.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-plopup.obj `if test -f 'plopup.c'; then $(CYGPATH_W) 'plopup.c'; else $(CYGPATH_W) '$(srcdir)/plopup.c'; fi`
+
+wmcoincoin-md5.o: md5.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-md5.o -MD -MP -MF $(DEPDIR)/wmcoincoin-md5.Tpo -c -o wmcoincoin-md5.o `test -f 'md5.c' || echo '$(srcdir)/'`md5.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-md5.Tpo $(DEPDIR)/wmcoincoin-md5.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='md5.c' object='wmcoincoin-md5.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-md5.o `test -f 'md5.c' || echo '$(srcdir)/'`md5.c
+
+wmcoincoin-md5.obj: md5.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-md5.obj -MD -MP -MF $(DEPDIR)/wmcoincoin-md5.Tpo -c -o wmcoincoin-md5.obj `if test -f 'md5.c'; then $(CYGPATH_W) 'md5.c'; else $(CYGPATH_W) '$(srcdir)/md5.c'; fi`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-md5.Tpo $(DEPDIR)/wmcoincoin-md5.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='md5.c' object='wmcoincoin-md5.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-md5.obj `if test -f 'md5.c'; then $(CYGPATH_W) 'md5.c'; else $(CYGPATH_W) '$(srcdir)/md5.c'; fi`
+
+wmcoincoin-base64.o: base64.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-base64.o -MD -MP -MF $(DEPDIR)/wmcoincoin-base64.Tpo -c -o wmcoincoin-base64.o `test -f 'base64.c' || echo '$(srcdir)/'`base64.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-base64.Tpo $(DEPDIR)/wmcoincoin-base64.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='base64.c' object='wmcoincoin-base64.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-base64.o `test -f 'base64.c' || echo '$(srcdir)/'`base64.c
+
+wmcoincoin-base64.obj: base64.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-base64.obj -MD -MP -MF $(DEPDIR)/wmcoincoin-base64.Tpo -c -o wmcoincoin-base64.obj `if test -f 'base64.c'; then $(CYGPATH_W) 'base64.c'; else $(CYGPATH_W) '$(srcdir)/base64.c'; fi`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-base64.Tpo $(DEPDIR)/wmcoincoin-base64.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='base64.c' object='wmcoincoin-base64.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-base64.obj `if test -f 'base64.c'; then $(CYGPATH_W) 'base64.c'; else $(CYGPATH_W) '$(srcdir)/base64.c'; fi`
+
+wmcoincoin-board_util.o: board_util.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-board_util.o -MD -MP -MF $(DEPDIR)/wmcoincoin-board_util.Tpo -c -o wmcoincoin-board_util.o `test -f 'board_util.c' || echo '$(srcdir)/'`board_util.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-board_util.Tpo $(DEPDIR)/wmcoincoin-board_util.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='board_util.c' object='wmcoincoin-board_util.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-board_util.o `test -f 'board_util.c' || echo '$(srcdir)/'`board_util.c
+
+wmcoincoin-board_util.obj: board_util.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-board_util.obj -MD -MP -MF $(DEPDIR)/wmcoincoin-board_util.Tpo -c -o wmcoincoin-board_util.obj `if test -f 'board_util.c'; then $(CYGPATH_W) 'board_util.c'; else $(CYGPATH_W) '$(srcdir)/board_util.c'; fi`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-board_util.Tpo $(DEPDIR)/wmcoincoin-board_util.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='board_util.c' object='wmcoincoin-board_util.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-board_util.obj `if test -f 'board_util.c'; then $(CYGPATH_W) 'board_util.c'; else $(CYGPATH_W) '$(srcdir)/board_util.c'; fi`
+
+wmcoincoin-xmlcoincoin.o: xmlcoincoin.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-xmlcoincoin.o -MD -MP -MF $(DEPDIR)/wmcoincoin-xmlcoincoin.Tpo -c -o wmcoincoin-xmlcoincoin.o `test -f 'xmlcoincoin.c' || echo '$(srcdir)/'`xmlcoincoin.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-xmlcoincoin.Tpo $(DEPDIR)/wmcoincoin-xmlcoincoin.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='xmlcoincoin.c' object='wmcoincoin-xmlcoincoin.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-xmlcoincoin.o `test -f 'xmlcoincoin.c' || echo '$(srcdir)/'`xmlcoincoin.c
+
+wmcoincoin-xmlcoincoin.obj: xmlcoincoin.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-xmlcoincoin.obj -MD -MP -MF $(DEPDIR)/wmcoincoin-xmlcoincoin.Tpo -c -o wmcoincoin-xmlcoincoin.obj `if test -f 'xmlcoincoin.c'; then $(CYGPATH_W) 'xmlcoincoin.c'; else $(CYGPATH_W) '$(srcdir)/xmlcoincoin.c'; fi`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-xmlcoincoin.Tpo $(DEPDIR)/wmcoincoin-xmlcoincoin.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='xmlcoincoin.c' object='wmcoincoin-xmlcoincoin.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-xmlcoincoin.obj `if test -f 'xmlcoincoin.c'; then $(CYGPATH_W) 'xmlcoincoin.c'; else $(CYGPATH_W) '$(srcdir)/xmlcoincoin.c'; fi`
+
+wmcoincoin-regexp.o: regexp.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-regexp.o -MD -MP -MF $(DEPDIR)/wmcoincoin-regexp.Tpo -c -o wmcoincoin-regexp.o `test -f 'regexp.c' || echo '$(srcdir)/'`regexp.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-regexp.Tpo $(DEPDIR)/wmcoincoin-regexp.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='regexp.c' object='wmcoincoin-regexp.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-regexp.o `test -f 'regexp.c' || echo '$(srcdir)/'`regexp.c
+
+wmcoincoin-regexp.obj: regexp.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-regexp.obj -MD -MP -MF $(DEPDIR)/wmcoincoin-regexp.Tpo -c -o wmcoincoin-regexp.obj `if test -f 'regexp.c'; then $(CYGPATH_W) 'regexp.c'; else $(CYGPATH_W) '$(srcdir)/regexp.c'; fi`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-regexp.Tpo $(DEPDIR)/wmcoincoin-regexp.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='regexp.c' object='wmcoincoin-regexp.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-regexp.obj `if test -f 'regexp.c'; then $(CYGPATH_W) 'regexp.c'; else $(CYGPATH_W) '$(srcdir)/regexp.c'; fi`
+
+wmcoincoin-myprintf.o: myprintf.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-myprintf.o -MD -MP -MF $(DEPDIR)/wmcoincoin-myprintf.Tpo -c -o wmcoincoin-myprintf.o `test -f 'myprintf.c' || echo '$(srcdir)/'`myprintf.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-myprintf.Tpo $(DEPDIR)/wmcoincoin-myprintf.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='myprintf.c' object='wmcoincoin-myprintf.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-myprintf.o `test -f 'myprintf.c' || echo '$(srcdir)/'`myprintf.c
+
+wmcoincoin-myprintf.obj: myprintf.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-myprintf.obj -MD -MP -MF $(DEPDIR)/wmcoincoin-myprintf.Tpo -c -o wmcoincoin-myprintf.obj `if test -f 'myprintf.c'; then $(CYGPATH_W) 'myprintf.c'; else $(CYGPATH_W) '$(srcdir)/myprintf.c'; fi`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-myprintf.Tpo $(DEPDIR)/wmcoincoin-myprintf.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='myprintf.c' object='wmcoincoin-myprintf.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-myprintf.obj `if test -f 'myprintf.c'; then $(CYGPATH_W) 'myprintf.c'; else $(CYGPATH_W) '$(srcdir)/myprintf.c'; fi`
+
+wmcoincoin-raster.o: raster.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-raster.o -MD -MP -MF $(DEPDIR)/wmcoincoin-raster.Tpo -c -o wmcoincoin-raster.o `test -f 'raster.c' || echo '$(srcdir)/'`raster.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-raster.Tpo $(DEPDIR)/wmcoincoin-raster.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='raster.c' object='wmcoincoin-raster.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-raster.o `test -f 'raster.c' || echo '$(srcdir)/'`raster.c
+
+wmcoincoin-raster.obj: raster.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-raster.obj -MD -MP -MF $(DEPDIR)/wmcoincoin-raster.Tpo -c -o wmcoincoin-raster.obj `if test -f 'raster.c'; then $(CYGPATH_W) 'raster.c'; else $(CYGPATH_W) '$(srcdir)/raster.c'; fi`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-raster.Tpo $(DEPDIR)/wmcoincoin-raster.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='raster.c' object='wmcoincoin-raster.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-raster.obj `if test -f 'raster.c'; then $(CYGPATH_W) 'raster.c'; else $(CYGPATH_W) '$(srcdir)/raster.c'; fi`
+
+wmcoincoin-fontcoincoin.o: fontcoincoin.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-fontcoincoin.o -MD -MP -MF $(DEPDIR)/wmcoincoin-fontcoincoin.Tpo -c -o wmcoincoin-fontcoincoin.o `test -f 'fontcoincoin.c' || echo '$(srcdir)/'`fontcoincoin.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-fontcoincoin.Tpo $(DEPDIR)/wmcoincoin-fontcoincoin.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fontcoincoin.c' object='wmcoincoin-fontcoincoin.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-fontcoincoin.o `test -f 'fontcoincoin.c' || echo '$(srcdir)/'`fontcoincoin.c
+
+wmcoincoin-fontcoincoin.obj: fontcoincoin.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-fontcoincoin.obj -MD -MP -MF $(DEPDIR)/wmcoincoin-fontcoincoin.Tpo -c -o wmcoincoin-fontcoincoin.obj `if test -f 'fontcoincoin.c'; then $(CYGPATH_W) 'fontcoincoin.c'; else $(CYGPATH_W) '$(srcdir)/fontcoincoin.c'; fi`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-fontcoincoin.Tpo $(DEPDIR)/wmcoincoin-fontcoincoin.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fontcoincoin.c' object='wmcoincoin-fontcoincoin.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-fontcoincoin.obj `if test -f 'fontcoincoin.c'; then $(CYGPATH_W) 'fontcoincoin.c'; else $(CYGPATH_W) '$(srcdir)/fontcoincoin.c'; fi`
+
+wmcoincoin-kbcoincoin.o: kbcoincoin.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-kbcoincoin.o -MD -MP -MF $(DEPDIR)/wmcoincoin-kbcoincoin.Tpo -c -o wmcoincoin-kbcoincoin.o `test -f 'kbcoincoin.c' || echo '$(srcdir)/'`kbcoincoin.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-kbcoincoin.Tpo $(DEPDIR)/wmcoincoin-kbcoincoin.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='kbcoincoin.c' object='wmcoincoin-kbcoincoin.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-kbcoincoin.o `test -f 'kbcoincoin.c' || echo '$(srcdir)/'`kbcoincoin.c
+
+wmcoincoin-kbcoincoin.obj: kbcoincoin.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-kbcoincoin.obj -MD -MP -MF $(DEPDIR)/wmcoincoin-kbcoincoin.Tpo -c -o wmcoincoin-kbcoincoin.obj `if test -f 'kbcoincoin.c'; then $(CYGPATH_W) 'kbcoincoin.c'; else $(CYGPATH_W) '$(srcdir)/kbcoincoin.c'; fi`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-kbcoincoin.Tpo $(DEPDIR)/wmcoincoin-kbcoincoin.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='kbcoincoin.c' object='wmcoincoin-kbcoincoin.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-kbcoincoin.obj `if test -f 'kbcoincoin.c'; then $(CYGPATH_W) 'kbcoincoin.c'; else $(CYGPATH_W) '$(srcdir)/kbcoincoin.c'; fi`
+
+wmcoincoin-swallowcoincoin.o: swallowcoincoin.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-swallowcoincoin.o -MD -MP -MF $(DEPDIR)/wmcoincoin-swallowcoincoin.Tpo -c -o wmcoincoin-swallowcoincoin.o `test -f 'swallowcoincoin.c' || echo '$(srcdir)/'`swallowcoincoin.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-swallowcoincoin.Tpo $(DEPDIR)/wmcoincoin-swallowcoincoin.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='swallowcoincoin.c' object='wmcoincoin-swallowcoincoin.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-swallowcoincoin.o `test -f 'swallowcoincoin.c' || echo '$(srcdir)/'`swallowcoincoin.c
+
+wmcoincoin-swallowcoincoin.obj: swallowcoincoin.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-swallowcoincoin.obj -MD -MP -MF $(DEPDIR)/wmcoincoin-swallowcoincoin.Tpo -c -o wmcoincoin-swallowcoincoin.obj `if test -f 'swallowcoincoin.c'; then $(CYGPATH_W) 'swallowcoincoin.c'; else $(CYGPATH_W) '$(srcdir)/swallowcoincoin.c'; fi`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-swallowcoincoin.Tpo $(DEPDIR)/wmcoincoin-swallowcoincoin.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='swallowcoincoin.c' object='wmcoincoin-swallowcoincoin.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-swallowcoincoin.obj `if test -f 'swallowcoincoin.c'; then $(CYGPATH_W) 'swallowcoincoin.c'; else $(CYGPATH_W) '$(srcdir)/swallowcoincoin.c'; fi`
+
+wmcoincoin-troll_detector.o: troll_detector.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-troll_detector.o -MD -MP -MF $(DEPDIR)/wmcoincoin-troll_detector.Tpo -c -o wmcoincoin-troll_detector.o `test -f 'troll_detector.c' || echo '$(srcdir)/'`troll_detector.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-troll_detector.Tpo $(DEPDIR)/wmcoincoin-troll_detector.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='troll_detector.c' object='wmcoincoin-troll_detector.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-troll_detector.o `test -f 'troll_detector.c' || echo '$(srcdir)/'`troll_detector.c
+
+wmcoincoin-troll_detector.obj: troll_detector.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-troll_detector.obj -MD -MP -MF $(DEPDIR)/wmcoincoin-troll_detector.Tpo -c -o wmcoincoin-troll_detector.obj `if test -f 'troll_detector.c'; then $(CYGPATH_W) 'troll_detector.c'; else $(CYGPATH_W) '$(srcdir)/troll_detector.c'; fi`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-troll_detector.Tpo $(DEPDIR)/wmcoincoin-troll_detector.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='troll_detector.c' object='wmcoincoin-troll_detector.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-troll_detector.obj `if test -f 'troll_detector.c'; then $(CYGPATH_W) 'troll_detector.c'; else $(CYGPATH_W) '$(srcdir)/troll_detector.c'; fi`
+
+wmcoincoin-pinnipede.o: pinnipede.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-pinnipede.o -MD -MP -MF $(DEPDIR)/wmcoincoin-pinnipede.Tpo -c -o wmcoincoin-pinnipede.o `test -f 'pinnipede.c' || echo '$(srcdir)/'`pinnipede.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-pinnipede.Tpo $(DEPDIR)/wmcoincoin-pinnipede.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='pinnipede.c' object='wmcoincoin-pinnipede.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-pinnipede.o `test -f 'pinnipede.c' || echo '$(srcdir)/'`pinnipede.c
+
+wmcoincoin-pinnipede.obj: pinnipede.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-pinnipede.obj -MD -MP -MF $(DEPDIR)/wmcoincoin-pinnipede.Tpo -c -o wmcoincoin-pinnipede.obj `if test -f 'pinnipede.c'; then $(CYGPATH_W) 'pinnipede.c'; else $(CYGPATH_W) '$(srcdir)/pinnipede.c'; fi`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-pinnipede.Tpo $(DEPDIR)/wmcoincoin-pinnipede.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='pinnipede.c' object='wmcoincoin-pinnipede.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-pinnipede.obj `if test -f 'pinnipede.c'; then $(CYGPATH_W) 'pinnipede.c'; else $(CYGPATH_W) '$(srcdir)/pinnipede.c'; fi`
+
+wmcoincoin-pinnipede_widgets.o: pinnipede_widgets.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-pinnipede_widgets.o -MD -MP -MF $(DEPDIR)/wmcoincoin-pinnipede_widgets.Tpo -c -o wmcoincoin-pinnipede_widgets.o `test -f 'pinnipede_widgets.c' || echo '$(srcdir)/'`pinnipede_widgets.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-pinnipede_widgets.Tpo $(DEPDIR)/wmcoincoin-pinnipede_widgets.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='pinnipede_widgets.c' object='wmcoincoin-pinnipede_widgets.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-pinnipede_widgets.o `test -f 'pinnipede_widgets.c' || echo '$(srcdir)/'`pinnipede_widgets.c
+
+wmcoincoin-pinnipede_widgets.obj: pinnipede_widgets.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-pinnipede_widgets.obj -MD -MP -MF $(DEPDIR)/wmcoincoin-pinnipede_widgets.Tpo -c -o wmcoincoin-pinnipede_widgets.obj `if test -f 'pinnipede_widgets.c'; then $(CYGPATH_W) 'pinnipede_widgets.c'; else $(CYGPATH_W) '$(srcdir)/pinnipede_widgets.c'; fi`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-pinnipede_widgets.Tpo $(DEPDIR)/wmcoincoin-pinnipede_widgets.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='pinnipede_widgets.c' object='wmcoincoin-pinnipede_widgets.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-pinnipede_widgets.obj `if test -f 'pinnipede_widgets.c'; then $(CYGPATH_W) 'pinnipede_widgets.c'; else $(CYGPATH_W) '$(srcdir)/pinnipede_widgets.c'; fi`
+
+wmcoincoin-pinnipede_pdfm.o: pinnipede_pdfm.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-pinnipede_pdfm.o -MD -MP -MF $(DEPDIR)/wmcoincoin-pinnipede_pdfm.Tpo -c -o wmcoincoin-pinnipede_pdfm.o `test -f 'pinnipede_pdfm.c' || echo '$(srcdir)/'`pinnipede_pdfm.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-pinnipede_pdfm.Tpo $(DEPDIR)/wmcoincoin-pinnipede_pdfm.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='pinnipede_pdfm.c' object='wmcoincoin-pinnipede_pdfm.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-pinnipede_pdfm.o `test -f 'pinnipede_pdfm.c' || echo '$(srcdir)/'`pinnipede_pdfm.c
+
+wmcoincoin-pinnipede_pdfm.obj: pinnipede_pdfm.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-pinnipede_pdfm.obj -MD -MP -MF $(DEPDIR)/wmcoincoin-pinnipede_pdfm.Tpo -c -o wmcoincoin-pinnipede_pdfm.obj `if test -f 'pinnipede_pdfm.c'; then $(CYGPATH_W) 'pinnipede_pdfm.c'; else $(CYGPATH_W) '$(srcdir)/pinnipede_pdfm.c'; fi`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-pinnipede_pdfm.Tpo $(DEPDIR)/wmcoincoin-pinnipede_pdfm.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='pinnipede_pdfm.c' object='wmcoincoin-pinnipede_pdfm.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-pinnipede_pdfm.obj `if test -f 'pinnipede_pdfm.c'; then $(CYGPATH_W) 'pinnipede_pdfm.c'; else $(CYGPATH_W) '$(srcdir)/pinnipede_pdfm.c'; fi`
+
+wmcoincoin-pinnipede_totoz.o: pinnipede_totoz.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-pinnipede_totoz.o -MD -MP -MF $(DEPDIR)/wmcoincoin-pinnipede_totoz.Tpo -c -o wmcoincoin-pinnipede_totoz.o `test -f 'pinnipede_totoz.c' || echo '$(srcdir)/'`pinnipede_totoz.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-pinnipede_totoz.Tpo $(DEPDIR)/wmcoincoin-pinnipede_totoz.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='pinnipede_totoz.c' object='wmcoincoin-pinnipede_totoz.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-pinnipede_totoz.o `test -f 'pinnipede_totoz.c' || echo '$(srcdir)/'`pinnipede_totoz.c
+
+wmcoincoin-pinnipede_totoz.obj: pinnipede_totoz.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-pinnipede_totoz.obj -MD -MP -MF $(DEPDIR)/wmcoincoin-pinnipede_totoz.Tpo -c -o wmcoincoin-pinnipede_totoz.obj `if test -f 'pinnipede_totoz.c'; then $(CYGPATH_W) 'pinnipede_totoz.c'; else $(CYGPATH_W) '$(srcdir)/pinnipede_totoz.c'; fi`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-pinnipede_totoz.Tpo $(DEPDIR)/wmcoincoin-pinnipede_totoz.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='pinnipede_totoz.c' object='wmcoincoin-pinnipede_totoz.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-pinnipede_totoz.obj `if test -f 'pinnipede_totoz.c'; then $(CYGPATH_W) 'pinnipede_totoz.c'; else $(CYGPATH_W) '$(srcdir)/pinnipede_totoz.c'; fi`
+
+wmcoincoin-totoz_bookmark.o: totoz_bookmark.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-totoz_bookmark.o -MD -MP -MF $(DEPDIR)/wmcoincoin-totoz_bookmark.Tpo -c -o wmcoincoin-totoz_bookmark.o `test -f 'totoz_bookmark.c' || echo '$(srcdir)/'`totoz_bookmark.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-totoz_bookmark.Tpo $(DEPDIR)/wmcoincoin-totoz_bookmark.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='totoz_bookmark.c' object='wmcoincoin-totoz_bookmark.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-totoz_bookmark.o `test -f 'totoz_bookmark.c' || echo '$(srcdir)/'`totoz_bookmark.c
+
+wmcoincoin-totoz_bookmark.obj: totoz_bookmark.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-totoz_bookmark.obj -MD -MP -MF $(DEPDIR)/wmcoincoin-totoz_bookmark.Tpo -c -o wmcoincoin-totoz_bookmark.obj `if test -f 'totoz_bookmark.c'; then $(CYGPATH_W) 'totoz_bookmark.c'; else $(CYGPATH_W) '$(srcdir)/totoz_bookmark.c'; fi`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-totoz_bookmark.Tpo $(DEPDIR)/wmcoincoin-totoz_bookmark.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='totoz_bookmark.c' object='wmcoincoin-totoz_bookmark.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-totoz_bookmark.obj `if test -f 'totoz_bookmark.c'; then $(CYGPATH_W) 'totoz_bookmark.c'; else $(CYGPATH_W) '$(srcdir)/totoz_bookmark.c'; fi`
+
+wmcoincoin-palmipede.o: palmipede.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-palmipede.o -MD -MP -MF $(DEPDIR)/wmcoincoin-palmipede.Tpo -c -o wmcoincoin-palmipede.o `test -f 'palmipede.c' || echo '$(srcdir)/'`palmipede.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-palmipede.Tpo $(DEPDIR)/wmcoincoin-palmipede.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='palmipede.c' object='wmcoincoin-palmipede.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-palmipede.o `test -f 'palmipede.c' || echo '$(srcdir)/'`palmipede.c
+
+wmcoincoin-palmipede.obj: palmipede.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-palmipede.obj -MD -MP -MF $(DEPDIR)/wmcoincoin-palmipede.Tpo -c -o wmcoincoin-palmipede.obj `if test -f 'palmipede.c'; then $(CYGPATH_W) 'palmipede.c'; else $(CYGPATH_W) '$(srcdir)/palmipede.c'; fi`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-palmipede.Tpo $(DEPDIR)/wmcoincoin-palmipede.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='palmipede.c' object='wmcoincoin-palmipede.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-palmipede.obj `if test -f 'palmipede.c'; then $(CYGPATH_W) 'palmipede.c'; else $(CYGPATH_W) '$(srcdir)/palmipede.c'; fi`
+
+wmcoincoin-dock.o: dock.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-dock.o -MD -MP -MF $(DEPDIR)/wmcoincoin-dock.Tpo -c -o wmcoincoin-dock.o `test -f 'dock.c' || echo '$(srcdir)/'`dock.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-dock.Tpo $(DEPDIR)/wmcoincoin-dock.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='dock.c' object='wmcoincoin-dock.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-dock.o `test -f 'dock.c' || echo '$(srcdir)/'`dock.c
+
+wmcoincoin-dock.obj: dock.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-dock.obj -MD -MP -MF $(DEPDIR)/wmcoincoin-dock.Tpo -c -o wmcoincoin-dock.obj `if test -f 'dock.c'; then $(CYGPATH_W) 'dock.c'; else $(CYGPATH_W) '$(srcdir)/dock.c'; fi`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-dock.Tpo $(DEPDIR)/wmcoincoin-dock.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='dock.c' object='wmcoincoin-dock.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-dock.obj `if test -f 'dock.c'; then $(CYGPATH_W) 'dock.c'; else $(CYGPATH_W) '$(srcdir)/dock.c'; fi`
+
+wmcoincoin-board.o: board.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-board.o -MD -MP -MF $(DEPDIR)/wmcoincoin-board.Tpo -c -o wmcoincoin-board.o `test -f 'board.c' || echo '$(srcdir)/'`board.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-board.Tpo $(DEPDIR)/wmcoincoin-board.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='board.c' object='wmcoincoin-board.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-board.o `test -f 'board.c' || echo '$(srcdir)/'`board.c
+
+wmcoincoin-board.obj: board.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-board.obj -MD -MP -MF $(DEPDIR)/wmcoincoin-board.Tpo -c -o wmcoincoin-board.obj `if test -f 'board.c'; then $(CYGPATH_W) 'board.c'; else $(CYGPATH_W) '$(srcdir)/board.c'; fi`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-board.Tpo $(DEPDIR)/wmcoincoin-board.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='board.c' object='wmcoincoin-board.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-board.obj `if test -f 'board.c'; then $(CYGPATH_W) 'board.c'; else $(CYGPATH_W) '$(srcdir)/board.c'; fi`
+
+wmcoincoin-board_rss.o: board_rss.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-board_rss.o -MD -MP -MF $(DEPDIR)/wmcoincoin-board_rss.Tpo -c -o wmcoincoin-board_rss.o `test -f 'board_rss.c' || echo '$(srcdir)/'`board_rss.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-board_rss.Tpo $(DEPDIR)/wmcoincoin-board_rss.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='board_rss.c' object='wmcoincoin-board_rss.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-board_rss.o `test -f 'board_rss.c' || echo '$(srcdir)/'`board_rss.c
+
+wmcoincoin-board_rss.obj: board_rss.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-board_rss.obj -MD -MP -MF $(DEPDIR)/wmcoincoin-board_rss.Tpo -c -o wmcoincoin-board_rss.obj `if test -f 'board_rss.c'; then $(CYGPATH_W) 'board_rss.c'; else $(CYGPATH_W) '$(srcdir)/board_rss.c'; fi`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-board_rss.Tpo $(DEPDIR)/wmcoincoin-board_rss.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='board_rss.c' object='wmcoincoin-board_rss.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-board_rss.obj `if test -f 'board_rss.c'; then $(CYGPATH_W) 'board_rss.c'; else $(CYGPATH_W) '$(srcdir)/board_rss.c'; fi`
+
+wmcoincoin-board_pop3.o: board_pop3.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-board_pop3.o -MD -MP -MF $(DEPDIR)/wmcoincoin-board_pop3.Tpo -c -o wmcoincoin-board_pop3.o `test -f 'board_pop3.c' || echo '$(srcdir)/'`board_pop3.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-board_pop3.Tpo $(DEPDIR)/wmcoincoin-board_pop3.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='board_pop3.c' object='wmcoincoin-board_pop3.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-board_pop3.o `test -f 'board_pop3.c' || echo '$(srcdir)/'`board_pop3.c
+
+wmcoincoin-board_pop3.obj: board_pop3.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-board_pop3.obj -MD -MP -MF $(DEPDIR)/wmcoincoin-board_pop3.Tpo -c -o wmcoincoin-board_pop3.obj `if test -f 'board_pop3.c'; then $(CYGPATH_W) 'board_pop3.c'; else $(CYGPATH_W) '$(srcdir)/board_pop3.c'; fi`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-board_pop3.Tpo $(DEPDIR)/wmcoincoin-board_pop3.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='board_pop3.c' object='wmcoincoin-board_pop3.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-board_pop3.obj `if test -f 'board_pop3.c'; then $(CYGPATH_W) 'board_pop3.c'; else $(CYGPATH_W) '$(srcdir)/board_pop3.c'; fi`
+
+wmcoincoin-site.o: site.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-site.o -MD -MP -MF $(DEPDIR)/wmcoincoin-site.Tpo -c -o wmcoincoin-site.o `test -f 'site.c' || echo '$(srcdir)/'`site.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-site.Tpo $(DEPDIR)/wmcoincoin-site.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='site.c' object='wmcoincoin-site.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-site.o `test -f 'site.c' || echo '$(srcdir)/'`site.c
+
+wmcoincoin-site.obj: site.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-site.obj -MD -MP -MF $(DEPDIR)/wmcoincoin-site.Tpo -c -o wmcoincoin-site.obj `if test -f 'site.c'; then $(CYGPATH_W) 'site.c'; else $(CYGPATH_W) '$(srcdir)/site.c'; fi`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-site.Tpo $(DEPDIR)/wmcoincoin-site.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='site.c' object='wmcoincoin-site.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-site.obj `if test -f 'site.c'; then $(CYGPATH_W) 'site.c'; else $(CYGPATH_W) '$(srcdir)/site.c'; fi`
+
+wmcoincoin-balltrap.o: balltrap.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-balltrap.o -MD -MP -MF $(DEPDIR)/wmcoincoin-balltrap.Tpo -c -o wmcoincoin-balltrap.o `test -f 'balltrap.c' || echo '$(srcdir)/'`balltrap.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-balltrap.Tpo $(DEPDIR)/wmcoincoin-balltrap.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='balltrap.c' object='wmcoincoin-balltrap.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-balltrap.o `test -f 'balltrap.c' || echo '$(srcdir)/'`balltrap.c
+
+wmcoincoin-balltrap.obj: balltrap.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-balltrap.obj -MD -MP -MF $(DEPDIR)/wmcoincoin-balltrap.Tpo -c -o wmcoincoin-balltrap.obj `if test -f 'balltrap.c'; then $(CYGPATH_W) 'balltrap.c'; else $(CYGPATH_W) '$(srcdir)/balltrap.c'; fi`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-balltrap.Tpo $(DEPDIR)/wmcoincoin-balltrap.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='balltrap.c' object='wmcoincoin-balltrap.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-balltrap.obj `if test -f 'balltrap.c'; then $(CYGPATH_W) 'balltrap.c'; else $(CYGPATH_W) '$(srcdir)/balltrap.c'; fi`
+
+wmcoincoin-keylist.o: keylist.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-keylist.o -MD -MP -MF $(DEPDIR)/wmcoincoin-keylist.Tpo -c -o wmcoincoin-keylist.o `test -f 'keylist.c' || echo '$(srcdir)/'`keylist.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-keylist.Tpo $(DEPDIR)/wmcoincoin-keylist.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='keylist.c' object='wmcoincoin-keylist.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-keylist.o `test -f 'keylist.c' || echo '$(srcdir)/'`keylist.c
+
+wmcoincoin-keylist.obj: keylist.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-keylist.obj -MD -MP -MF $(DEPDIR)/wmcoincoin-keylist.Tpo -c -o wmcoincoin-keylist.obj `if test -f 'keylist.c'; then $(CYGPATH_W) 'keylist.c'; else $(CYGPATH_W) '$(srcdir)/keylist.c'; fi`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-keylist.Tpo $(DEPDIR)/wmcoincoin-keylist.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='keylist.c' object='wmcoincoin-keylist.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-keylist.obj `if test -f 'keylist.c'; then $(CYGPATH_W) 'keylist.c'; else $(CYGPATH_W) '$(srcdir)/keylist.c'; fi`
+
+wmcoincoin-scrollcoin.o: scrollcoin.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-scrollcoin.o -MD -MP -MF $(DEPDIR)/wmcoincoin-scrollcoin.Tpo -c -o wmcoincoin-scrollcoin.o `test -f 'scrollcoin.c' || echo '$(srcdir)/'`scrollcoin.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-scrollcoin.Tpo $(DEPDIR)/wmcoincoin-scrollcoin.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='scrollcoin.c' object='wmcoincoin-scrollcoin.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-scrollcoin.o `test -f 'scrollcoin.c' || echo '$(srcdir)/'`scrollcoin.c
+
+wmcoincoin-scrollcoin.obj: scrollcoin.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-scrollcoin.obj -MD -MP -MF $(DEPDIR)/wmcoincoin-scrollcoin.Tpo -c -o wmcoincoin-scrollcoin.obj `if test -f 'scrollcoin.c'; then $(CYGPATH_W) 'scrollcoin.c'; else $(CYGPATH_W) '$(srcdir)/scrollcoin.c'; fi`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-scrollcoin.Tpo $(DEPDIR)/wmcoincoin-scrollcoin.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='scrollcoin.c' object='wmcoincoin-scrollcoin.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-scrollcoin.obj `if test -f 'scrollcoin.c'; then $(CYGPATH_W) 'scrollcoin.c'; else $(CYGPATH_W) '$(srcdir)/scrollcoin.c'; fi`
+
+wmcoincoin-picohtml.o: picohtml.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-picohtml.o -MD -MP -MF $(DEPDIR)/wmcoincoin-picohtml.Tpo -c -o wmcoincoin-picohtml.o `test -f 'picohtml.c' || echo '$(srcdir)/'`picohtml.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-picohtml.Tpo $(DEPDIR)/wmcoincoin-picohtml.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='picohtml.c' object='wmcoincoin-picohtml.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-picohtml.o `test -f 'picohtml.c' || echo '$(srcdir)/'`picohtml.c
+
+wmcoincoin-picohtml.obj: picohtml.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-picohtml.obj -MD -MP -MF $(DEPDIR)/wmcoincoin-picohtml.Tpo -c -o wmcoincoin-picohtml.obj `if test -f 'picohtml.c'; then $(CYGPATH_W) 'picohtml.c'; else $(CYGPATH_W) '$(srcdir)/picohtml.c'; fi`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-picohtml.Tpo $(DEPDIR)/wmcoincoin-picohtml.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='picohtml.c' object='wmcoincoin-picohtml.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-picohtml.obj `if test -f 'picohtml.c'; then $(CYGPATH_W) 'picohtml.c'; else $(CYGPATH_W) '$(srcdir)/picohtml.c'; fi`
+
+wmcoincoin-msgbox.o: msgbox.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-msgbox.o -MD -MP -MF $(DEPDIR)/wmcoincoin-msgbox.Tpo -c -o wmcoincoin-msgbox.o `test -f 'msgbox.c' || echo '$(srcdir)/'`msgbox.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-msgbox.Tpo $(DEPDIR)/wmcoincoin-msgbox.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='msgbox.c' object='wmcoincoin-msgbox.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-msgbox.o `test -f 'msgbox.c' || echo '$(srcdir)/'`msgbox.c
+
+wmcoincoin-msgbox.obj: msgbox.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-msgbox.obj -MD -MP -MF $(DEPDIR)/wmcoincoin-msgbox.Tpo -c -o wmcoincoin-msgbox.obj `if test -f 'msgbox.c'; then $(CYGPATH_W) 'msgbox.c'; else $(CYGPATH_W) '$(srcdir)/msgbox.c'; fi`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-msgbox.Tpo $(DEPDIR)/wmcoincoin-msgbox.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='msgbox.c' object='wmcoincoin-msgbox.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-msgbox.obj `if test -f 'msgbox.c'; then $(CYGPATH_W) 'msgbox.c'; else $(CYGPATH_W) '$(srcdir)/msgbox.c'; fi`
+
+wmcoincoin-balloon.o: balloon.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-balloon.o -MD -MP -MF $(DEPDIR)/wmcoincoin-balloon.Tpo -c -o wmcoincoin-balloon.o `test -f 'balloon.c' || echo '$(srcdir)/'`balloon.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-balloon.Tpo $(DEPDIR)/wmcoincoin-balloon.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='balloon.c' object='wmcoincoin-balloon.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-balloon.o `test -f 'balloon.c' || echo '$(srcdir)/'`balloon.c
+
+wmcoincoin-balloon.obj: balloon.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-balloon.obj -MD -MP -MF $(DEPDIR)/wmcoincoin-balloon.Tpo -c -o wmcoincoin-balloon.obj `if test -f 'balloon.c'; then $(CYGPATH_W) 'balloon.c'; else $(CYGPATH_W) '$(srcdir)/balloon.c'; fi`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-balloon.Tpo $(DEPDIR)/wmcoincoin-balloon.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='balloon.c' object='wmcoincoin-balloon.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-balloon.obj `if test -f 'balloon.c'; then $(CYGPATH_W) 'balloon.c'; else $(CYGPATH_W) '$(srcdir)/balloon.c'; fi`
+
+wmcoincoin-wmcoincoin.o: wmcoincoin.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-wmcoincoin.o -MD -MP -MF $(DEPDIR)/wmcoincoin-wmcoincoin.Tpo -c -o wmcoincoin-wmcoincoin.o `test -f 'wmcoincoin.c' || echo '$(srcdir)/'`wmcoincoin.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-wmcoincoin.Tpo $(DEPDIR)/wmcoincoin-wmcoincoin.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='wmcoincoin.c' object='wmcoincoin-wmcoincoin.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-wmcoincoin.o `test -f 'wmcoincoin.c' || echo '$(srcdir)/'`wmcoincoin.c
+
+wmcoincoin-wmcoincoin.obj: wmcoincoin.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-wmcoincoin.obj -MD -MP -MF $(DEPDIR)/wmcoincoin-wmcoincoin.Tpo -c -o wmcoincoin-wmcoincoin.obj `if test -f 'wmcoincoin.c'; then $(CYGPATH_W) 'wmcoincoin.c'; else $(CYGPATH_W) '$(srcdir)/wmcoincoin.c'; fi`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-wmcoincoin.Tpo $(DEPDIR)/wmcoincoin-wmcoincoin.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='wmcoincoin.c' object='wmcoincoin-wmcoincoin.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-wmcoincoin.obj `if test -f 'wmcoincoin.c'; then $(CYGPATH_W) 'wmcoincoin.c'; else $(CYGPATH_W) '$(srcdir)/wmcoincoin.c'; fi`
+
+wmcoincoin-http.o: http.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-http.o -MD -MP -MF $(DEPDIR)/wmcoincoin-http.Tpo -c -o wmcoincoin-http.o `test -f 'http.c' || echo '$(srcdir)/'`http.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-http.Tpo $(DEPDIR)/wmcoincoin-http.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='http.c' object='wmcoincoin-http.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-http.o `test -f 'http.c' || echo '$(srcdir)/'`http.c
+
+wmcoincoin-http.obj: http.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-http.obj -MD -MP -MF $(DEPDIR)/wmcoincoin-http.Tpo -c -o wmcoincoin-http.obj `if test -f 'http.c'; then $(CYGPATH_W) 'http.c'; else $(CYGPATH_W) '$(srcdir)/http.c'; fi`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-http.Tpo $(DEPDIR)/wmcoincoin-http.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='http.c' object='wmcoincoin-http.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-http.obj `if test -f 'http.c'; then $(CYGPATH_W) 'http.c'; else $(CYGPATH_W) '$(srcdir)/http.c'; fi`
+
+wmcoincoin-coin_util.o: coin_util.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-coin_util.o -MD -MP -MF $(DEPDIR)/wmcoincoin-coin_util.Tpo -c -o wmcoincoin-coin_util.o `test -f 'coin_util.c' || echo '$(srcdir)/'`coin_util.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-coin_util.Tpo $(DEPDIR)/wmcoincoin-coin_util.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='coin_util.c' object='wmcoincoin-coin_util.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-coin_util.o `test -f 'coin_util.c' || echo '$(srcdir)/'`coin_util.c
+
+wmcoincoin-coin_util.obj: coin_util.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-coin_util.obj -MD -MP -MF $(DEPDIR)/wmcoincoin-coin_util.Tpo -c -o wmcoincoin-coin_util.obj `if test -f 'coin_util.c'; then $(CYGPATH_W) 'coin_util.c'; else $(CYGPATH_W) '$(srcdir)/coin_util.c'; fi`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-coin_util.Tpo $(DEPDIR)/wmcoincoin-coin_util.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='coin_util.c' object='wmcoincoin-coin_util.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-coin_util.obj `if test -f 'coin_util.c'; then $(CYGPATH_W) 'coin_util.c'; else $(CYGPATH_W) '$(srcdir)/coin_util.c'; fi`
+
+wmcoincoin-coin_xutil.o: coin_xutil.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-coin_xutil.o -MD -MP -MF $(DEPDIR)/wmcoincoin-coin_xutil.Tpo -c -o wmcoincoin-coin_xutil.o `test -f 'coin_xutil.c' || echo '$(srcdir)/'`coin_xutil.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-coin_xutil.Tpo $(DEPDIR)/wmcoincoin-coin_xutil.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='coin_xutil.c' object='wmcoincoin-coin_xutil.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-coin_xutil.o `test -f 'coin_xutil.c' || echo '$(srcdir)/'`coin_xutil.c
+
+wmcoincoin-coin_xutil.obj: coin_xutil.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-coin_xutil.obj -MD -MP -MF $(DEPDIR)/wmcoincoin-coin_xutil.Tpo -c -o wmcoincoin-coin_xutil.obj `if test -f 'coin_xutil.c'; then $(CYGPATH_W) 'coin_xutil.c'; else $(CYGPATH_W) '$(srcdir)/coin_xutil.c'; fi`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-coin_xutil.Tpo $(DEPDIR)/wmcoincoin-coin_xutil.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='coin_xutil.c' object='wmcoincoin-coin_xutil.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-coin_xutil.obj `if test -f 'coin_xutil.c'; then $(CYGPATH_W) 'coin_xutil.c'; else $(CYGPATH_W) '$(srcdir)/coin_xutil.c'; fi`
+
+wmcoincoin-prefs.o: prefs.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-prefs.o -MD -MP -MF $(DEPDIR)/wmcoincoin-prefs.Tpo -c -o wmcoincoin-prefs.o `test -f 'prefs.c' || echo '$(srcdir)/'`prefs.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-prefs.Tpo $(DEPDIR)/wmcoincoin-prefs.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='prefs.c' object='wmcoincoin-prefs.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-prefs.o `test -f 'prefs.c' || echo '$(srcdir)/'`prefs.c
+
+wmcoincoin-prefs.obj: prefs.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-prefs.obj -MD -MP -MF $(DEPDIR)/wmcoincoin-prefs.Tpo -c -o wmcoincoin-prefs.obj `if test -f 'prefs.c'; then $(CYGPATH_W) 'prefs.c'; else $(CYGPATH_W) '$(srcdir)/prefs.c'; fi`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-prefs.Tpo $(DEPDIR)/wmcoincoin-prefs.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='prefs.c' object='wmcoincoin-prefs.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-prefs.obj `if test -f 'prefs.c'; then $(CYGPATH_W) 'prefs.c'; else $(CYGPATH_W) '$(srcdir)/prefs.c'; fi`
+
+wmcoincoin-prefs_gestion.o: prefs_gestion.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-prefs_gestion.o -MD -MP -MF $(DEPDIR)/wmcoincoin-prefs_gestion.Tpo -c -o wmcoincoin-prefs_gestion.o `test -f 'prefs_gestion.c' || echo '$(srcdir)/'`prefs_gestion.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-prefs_gestion.Tpo $(DEPDIR)/wmcoincoin-prefs_gestion.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='prefs_gestion.c' object='wmcoincoin-prefs_gestion.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-prefs_gestion.o `test -f 'prefs_gestion.c' || echo '$(srcdir)/'`prefs_gestion.c
+
+wmcoincoin-prefs_gestion.obj: prefs_gestion.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-prefs_gestion.obj -MD -MP -MF $(DEPDIR)/wmcoincoin-prefs_gestion.Tpo -c -o wmcoincoin-prefs_gestion.obj `if test -f 'prefs_gestion.c'; then $(CYGPATH_W) 'prefs_gestion.c'; else $(CYGPATH_W) '$(srcdir)/prefs_gestion.c'; fi`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-prefs_gestion.Tpo $(DEPDIR)/wmcoincoin-prefs_gestion.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='prefs_gestion.c' object='wmcoincoin-prefs_gestion.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-prefs_gestion.obj `if test -f 'prefs_gestion.c'; then $(CYGPATH_W) 'prefs_gestion.c'; else $(CYGPATH_W) '$(srcdir)/prefs_gestion.c'; fi`
+
+wmcoincoin-spell_coin.o: spell_coin.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-spell_coin.o -MD -MP -MF $(DEPDIR)/wmcoincoin-spell_coin.Tpo -c -o wmcoincoin-spell_coin.o `test -f 'spell_coin.c' || echo '$(srcdir)/'`spell_coin.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-spell_coin.Tpo $(DEPDIR)/wmcoincoin-spell_coin.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='spell_coin.c' object='wmcoincoin-spell_coin.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-spell_coin.o `test -f 'spell_coin.c' || echo '$(srcdir)/'`spell_coin.c
+
+wmcoincoin-spell_coin.obj: spell_coin.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-spell_coin.obj -MD -MP -MF $(DEPDIR)/wmcoincoin-spell_coin.Tpo -c -o wmcoincoin-spell_coin.obj `if test -f 'spell_coin.c'; then $(CYGPATH_W) 'spell_coin.c'; else $(CYGPATH_W) '$(srcdir)/spell_coin.c'; fi`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-spell_coin.Tpo $(DEPDIR)/wmcoincoin-spell_coin.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='spell_coin.c' object='wmcoincoin-spell_coin.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-spell_coin.obj `if test -f 'spell_coin.c'; then $(CYGPATH_W) 'spell_coin.c'; else $(CYGPATH_W) '$(srcdir)/spell_coin.c'; fi`
+
+wmcoincoin-http_win.o: http_win.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-http_win.o -MD -MP -MF $(DEPDIR)/wmcoincoin-http_win.Tpo -c -o wmcoincoin-http_win.o `test -f 'http_win.c' || echo '$(srcdir)/'`http_win.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-http_win.Tpo $(DEPDIR)/wmcoincoin-http_win.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='http_win.c' object='wmcoincoin-http_win.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-http_win.o `test -f 'http_win.c' || echo '$(srcdir)/'`http_win.c
+
+wmcoincoin-http_win.obj: http_win.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-http_win.obj -MD -MP -MF $(DEPDIR)/wmcoincoin-http_win.Tpo -c -o wmcoincoin-http_win.obj `if test -f 'http_win.c'; then $(CYGPATH_W) 'http_win.c'; else $(CYGPATH_W) '$(srcdir)/http_win.c'; fi`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-http_win.Tpo $(DEPDIR)/wmcoincoin-http_win.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='http_win.c' object='wmcoincoin-http_win.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-http_win.obj `if test -f 'http_win.c'; then $(CYGPATH_W) 'http_win.c'; else $(CYGPATH_W) '$(srcdir)/http_win.c'; fi`
+
+wmcoincoin-http_unix.o: http_unix.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-http_unix.o -MD -MP -MF $(DEPDIR)/wmcoincoin-http_unix.Tpo -c -o wmcoincoin-http_unix.o `test -f 'http_unix.c' || echo '$(srcdir)/'`http_unix.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-http_unix.Tpo $(DEPDIR)/wmcoincoin-http_unix.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='http_unix.c' object='wmcoincoin-http_unix.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-http_unix.o `test -f 'http_unix.c' || echo '$(srcdir)/'`http_unix.c
+
+wmcoincoin-http_unix.obj: http_unix.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-http_unix.obj -MD -MP -MF $(DEPDIR)/wmcoincoin-http_unix.Tpo -c -o wmcoincoin-http_unix.obj `if test -f 'http_unix.c'; then $(CYGPATH_W) 'http_unix.c'; else $(CYGPATH_W) '$(srcdir)/http_unix.c'; fi`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-http_unix.Tpo $(DEPDIR)/wmcoincoin-http_unix.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='http_unix.c' object='wmcoincoin-http_unix.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-http_unix.obj `if test -f 'http_unix.c'; then $(CYGPATH_W) 'http_unix.c'; else $(CYGPATH_W) '$(srcdir)/http_unix.c'; fi`
+
+wmcoincoin-fake-getaddrinfo.o: fake-getaddrinfo.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-fake-getaddrinfo.o -MD -MP -MF $(DEPDIR)/wmcoincoin-fake-getaddrinfo.Tpo -c -o wmcoincoin-fake-getaddrinfo.o `test -f 'fake-getaddrinfo.c' || echo '$(srcdir)/'`fake-getaddrinfo.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-fake-getaddrinfo.Tpo $(DEPDIR)/wmcoincoin-fake-getaddrinfo.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fake-getaddrinfo.c' object='wmcoincoin-fake-getaddrinfo.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-fake-getaddrinfo.o `test -f 'fake-getaddrinfo.c' || echo '$(srcdir)/'`fake-getaddrinfo.c
+
+wmcoincoin-fake-getaddrinfo.obj: fake-getaddrinfo.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-fake-getaddrinfo.obj -MD -MP -MF $(DEPDIR)/wmcoincoin-fake-getaddrinfo.Tpo -c -o wmcoincoin-fake-getaddrinfo.obj `if test -f 'fake-getaddrinfo.c'; then $(CYGPATH_W) 'fake-getaddrinfo.c'; else $(CYGPATH_W) '$(srcdir)/fake-getaddrinfo.c'; fi`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-fake-getaddrinfo.Tpo $(DEPDIR)/wmcoincoin-fake-getaddrinfo.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fake-getaddrinfo.c' object='wmcoincoin-fake-getaddrinfo.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-fake-getaddrinfo.obj `if test -f 'fake-getaddrinfo.c'; then $(CYGPATH_W) 'fake-getaddrinfo.c'; else $(CYGPATH_W) '$(srcdir)/fake-getaddrinfo.c'; fi`
+
+wmcoincoin-fake-getnameinfo.o: fake-getnameinfo.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-fake-getnameinfo.o -MD -MP -MF $(DEPDIR)/wmcoincoin-fake-getnameinfo.Tpo -c -o wmcoincoin-fake-getnameinfo.o `test -f 'fake-getnameinfo.c' || echo '$(srcdir)/'`fake-getnameinfo.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-fake-getnameinfo.Tpo $(DEPDIR)/wmcoincoin-fake-getnameinfo.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fake-getnameinfo.c' object='wmcoincoin-fake-getnameinfo.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-fake-getnameinfo.o `test -f 'fake-getnameinfo.c' || echo '$(srcdir)/'`fake-getnameinfo.c
+
+wmcoincoin-fake-getnameinfo.obj: fake-getnameinfo.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-fake-getnameinfo.obj -MD -MP -MF $(DEPDIR)/wmcoincoin-fake-getnameinfo.Tpo -c -o wmcoincoin-fake-getnameinfo.obj `if test -f 'fake-getnameinfo.c'; then $(CYGPATH_W) 'fake-getnameinfo.c'; else $(CYGPATH_W) '$(srcdir)/fake-getnameinfo.c'; fi`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-fake-getnameinfo.Tpo $(DEPDIR)/wmcoincoin-fake-getnameinfo.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fake-getnameinfo.c' object='wmcoincoin-fake-getnameinfo.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-fake-getnameinfo.obj `if test -f 'fake-getnameinfo.c'; then $(CYGPATH_W) 'fake-getnameinfo.c'; else $(CYGPATH_W) '$(srcdir)/fake-getnameinfo.c'; fi`
+
+wmcoincoin-inet_aton.o: inet_aton.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-inet_aton.o -MD -MP -MF $(DEPDIR)/wmcoincoin-inet_aton.Tpo -c -o wmcoincoin-inet_aton.o `test -f 'inet_aton.c' || echo '$(srcdir)/'`inet_aton.c
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-inet_aton.Tpo $(DEPDIR)/wmcoincoin-inet_aton.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='inet_aton.c' object='wmcoincoin-inet_aton.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-inet_aton.o `test -f 'inet_aton.c' || echo '$(srcdir)/'`inet_aton.c
+
+wmcoincoin-inet_aton.obj: inet_aton.c
+ at am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-inet_aton.obj -MD -MP -MF $(DEPDIR)/wmcoincoin-inet_aton.Tpo -c -o wmcoincoin-inet_aton.obj `if test -f 'inet_aton.c'; then $(CYGPATH_W) 'inet_aton.c'; else $(CYGPATH_W) '$(srcdir)/inet_aton.c'; fi`
+ at am__fastdepCC_TRUE@	mv -f $(DEPDIR)/wmcoincoin-inet_aton.Tpo $(DEPDIR)/wmcoincoin-inet_aton.Po
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='inet_aton.c' object='wmcoincoin-inet_aton.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -c -o wmcoincoin-inet_aton.obj `if test -f 'inet_aton.c'; then $(CYGPATH_W) 'inet_aton.c'; else $(CYGPATH_W) '$(srcdir)/inet_aton.c'; fi`
+
+ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
+	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	mkid -fID $$unique
+tags: TAGS
+
+TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
+	  test -n "$$unique" || unique=$$empty_fix; \
+	  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	    $$tags $$unique; \
+	fi
+ctags: CTAGS
+CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
+	unique=`for i in $$list; do \
+	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+	  done | \
+	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
+	      END { if (nonempty) { for (i in files) print i; }; }'`; \
+	test -z "$(CTAGS_ARGS)$$tags$$unique" \
+	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+	     $$tags $$unique
+
+GTAGS:
+	here=`$(am__cd) $(top_builddir) && pwd` \
+	  && cd $(top_srcdir) \
+	  && gtags -i $(GTAGS_ARGS) $$here
+
+distclean-tags:
+	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+	list='$(DISTFILES)'; \
+	  dist_files=`for file in $$list; do echo $$file; done | \
+	  sed -e "s|^$$srcdirstrip/||;t" \
+	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+	case $$dist_files in \
+	  */*) $(MKDIR_P) `echo "$$dist_files" | \
+			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+			   sort -u` ;; \
+	esac; \
+	for file in $$dist_files; do \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  if test -d $$d/$$file; then \
+	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
+	    fi; \
+	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
+	  else \
+	    test -f $(distdir)/$$file \
+	    || cp -p $$d/$$file $(distdir)/$$file \
+	    || exit 1; \
+	  fi; \
+	done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+	for dir in "$(DESTDIR)$(bindir)"; do \
+	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+	done
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+	  `test -z '$(STRIP)' || \
+	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+
+maintainer-clean-generic:
+	@echo "This command is intended for maintainers to use"
+	@echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-generic mostlyclean-am
+
+distclean: distclean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+	distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-exec-am: install-binPROGRAMS
+
+install-html: install-html-am
+
+install-info: install-info-am
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-ps: install-ps-am
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+	-rm -rf ./$(DEPDIR)
+	-rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \
+	clean-generic ctags distclean distclean-compile \
+	distclean-generic distclean-tags distdir dvi dvi-am html \
+	html-am info info-am install install-am install-binPROGRAMS \
+	install-data install-data-am install-dvi install-dvi-am \
+	install-exec install-exec-am install-html install-html-am \
+	install-info install-info-am install-man install-pdf \
+	install-pdf-am install-ps install-ps-am install-strip \
+	installcheck installcheck-am installdirs maintainer-clean \
+	maintainer-clean-generic mostlyclean mostlyclean-compile \
+	mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \
+	uninstall-am uninstall-binPROGRAMS
+
+
+#useragents_file.c
+
+#defaultuseragents.h: ../useragents
+#	cat ../useragents | sed -e '/^#%.*/d' | sed -e 's/\\/\\\\/g' | sed -e 's/	/\\t/g' | sed -e 's/^/fprintf(f,"/g' | sed -e 's/$$/\\n");/g' > ./defaultuseragents.h
+
+#defaultoptionsfile.h: ../options
+#	cat ../options | sed -e '/^#%.*/d' | sed -e 's/\\/\\\\/g' | sed -e 's/"/\\"/g' | sed -e 's/	/\\t/g' | sed -e 's/^/fprintf(f,"/g' | sed -e 's/$$/\\n");/g' | sed -e 's/%/%%/g' > ./defaultoptionsfile.h
+
+options_list.h: ../options
+	cd ..; /bin/sh ./genoptlst.sh
+
+#useragents_file.o: defaultuseragents.h
+
+#coincoin_prefs.o: defaultoptionsfile.h
+
+install: install-am
+# petite update merci anvil !
+#	ln -sf $(DESTDIR)$(bindir)/wmcoincoin $(DESTDIR)$(bindir)/wmcoincoin-kde
+#	(cd $(DESTDIR)$(bindir) ; ln -sf wmcoincoin wmcoincoin-kde)
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/src/balloon.c b/src/balloon.c
new file mode 100644
index 0000000..b39d2f5
--- /dev/null
+++ b/src/balloon.c
@@ -0,0 +1,403 @@
+/*
+    wmCoinCoin, the stupidest WindowMaker dock applet
+
+    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., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+
+
+ */
+
+/*
+  rcsid=$Id: balloon.c,v 1.12 2004/02/29 19:01:26 pouaite Exp $
+  ChangeLog:
+  $Log: balloon.c,v $
+  Revision 1.12  2004/02/29 19:01:26  pouaite
+  et hop
+
+  Revision 1.11  2004/02/29 15:01:19  pouaite
+  May the charles bronson spirit be with you
+
+  Revision 1.10  2003/07/20 22:22:28  pouaite
+  ce commit est dedie a Pierre Tramo
+
+  Revision 1.9  2003/06/25 20:18:21  pouaite
+  support xinerama qui marche
+
+  Revision 1.8  2003/06/24 22:27:56  pouaite
+  speciale dedicace a nos amis de l'ile de beaute
+
+  Revision 1.7  2002/06/23 10:44:05  pouaite
+  i18n-isation of the coincoin(kwakkwak), thanks to the incredible jjb !
+
+  Revision 1.6  2002/04/01 01:39:38  pouaite
+  grosse grosse commition (cf changelog)
+
+  Revision 1.5  2002/03/03 10:10:04  pouaite
+  bugfixes divers et vari�s
+
+  Revision 1.4  2001/12/18 12:43:37  pouaite
+  ajout de l'option de la fonte des ballons d'aide (pour mr. imr !) + bugfix d'une connerie assez naze dans la gestion du nom du fichier d'options (merci glandium de me l'avoir signal�)
+
+  Revision 1.3  2001/12/16 16:46:12  pouaite
+  Clippouille joins C0IN C0IN
+
+  Revision 1.2  2001/12/02 18:34:54  pouaite
+  ajout de tags cvs Id et Log un peu partout...
+
+*/
+
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+#include <X11/extensions/shape.h>
+#include "coincoin.h"
+#include "coin_xutil.h"
+#include "dock.h"
+
+#include <libintl.h>
+#define _(String) gettext(String)
+
+/* TRES largement inspire de balloon.c de Windowmaker ... */
+
+struct _Balloon {
+  Window win;
+  Pixmap pix;
+  GC monoGC;
+  PicoHtml *ph;
+  int mapped;
+  unsigned long bgpixel;
+
+  Pixmap imgpix; /* affichage d'un pixmap � gauche (pour le clippy dans editwin ! ) */
+  int imgpix_w, imgpix_h;
+};
+
+
+#define TOP	0
+#define BOTTOM	1
+#define LEFT	0
+#define RIGHT	2
+
+#define 	SPACE	12
+
+void
+balloon_build(Dock *dock)
+{
+  XSetWindowAttributes wa;
+  Balloon *b;
+
+  ALLOC_OBJ(b, Balloon);
+
+  /* couleur de fond */
+  b->bgpixel = RGB2PIXEL(255,231,186);
+  
+  /* creation fenetre (une bonne fois pour toutes) */
+  b->win = XCreateSimpleWindow (dock->display, RootWindow(dock->display,dock->screennum), 0, 0, 64, 64, 0,
+				BlackPixel(dock->display, dock->screennum),
+				b->bgpixel);
+  
+  //wa.background_pixmap = ButtonBarImage ;
+  wa.event_mask =
+    ExposureMask | 
+    PointerMotionMask | 
+    EnterWindowMask | 
+    LeaveWindowMask;
+  wa.override_redirect = True ;
+  wa.save_under = True;
+  XChangeWindowAttributes (dock->display, b->win,
+			   //CWBackPixmap | 
+			   CWSaveUnder | CWEventMask | CWOverrideRedirect, &wa);
+  //  b->gc = XCreateGC(dock->display, b->win, 0, NULL);
+  //  XSetFont(display, b->gc, tw->fn_base->fid);
+  b->monoGC = None;
+  b->mapped = 0;
+  b->imgpix = None; b->imgpix_w = b->imgpix_h = 0;
+
+  b->ph = picohtml_create(dock, Prefs.balloon_fn_family, Prefs.balloon_fn_size, 0);
+  picohtml_set_parag_skip(b->ph, 1.0);
+  picohtml_set_line_skip(b->ph, 1.0);
+  picohtml_set_parag_indent(b->ph, 0);
+  picohtml_set_tabul_skip(b->ph, 10);
+
+  dock->balloon = b;
+}
+
+#ifdef TEST_MEMLEAK
+void
+balloon_destroy(Dock *dock) {
+  Balloon *b = dock->balloon;
+  
+  if (b->imgpix != None) XFreePixmap(dock->display, b->imgpix);
+  XDestroyWindow(dock->display, b->win);
+  if (b->ph) { picohtml_destroy(dock->display, b->ph); b->ph = NULL; }
+  free(dock->balloon); dock->balloon = NULL;
+}
+#endif
+
+static void
+balloon_draw_frame(Display *dpy, Pixmap pix, GC gc, int x, int y, int w, int h, int side)
+{
+  //int rad = 6; //h*3/10;
+  //XPoint pt[3];
+  
+  /*
+    XFillArc(dpy, pix, gc, x, y, rad, rad, 90*64, 90*64);
+    XFillArc(dpy, pix, gc, x, y+h-1-rad, rad, rad, 180*64, 90*64);
+    
+    XFillArc(dpy, pix, gc, x+w-1-rad, y, rad, rad, 0*64, 90*64);
+    XFillArc(dpy, pix, gc, x+w-1-rad, y+h-1-rad, rad, rad, 270*64, 90*64);
+    XFillRectangle(dpy, pix, gc, x, y+rad/2, w, h-rad);
+    XFillRectangle(dpy, pix, gc, x+rad/2, y, w-rad, h);
+  */
+  
+  XFillRectangle(dpy, pix, gc, x, y, w, h);
+  /*
+  if (side & BOTTOM) {
+    pt[0].y = y+h-1;
+    pt[1].y = y+h-1+SPACE;
+    pt[2].y = y+h-1;
+  } else {
+    pt[0].y = y;
+    pt[1].y = y-SPACE;
+    pt[2].y = y;
+  }
+  if (side & RIGHT) {
+    pt[0].x = x+w-h+2*h/16;
+    pt[1].x = x+w-h+11*h/16;
+    pt[2].x = x+w-h+7*h/16;
+  } else {
+    pt[0].x = x+h-2*h/16;
+    pt[1].x = x+h-11*h/16;
+    pt[2].x = x+h-7*h/16;
+  }
+  XFillPolygon(dpy, pix, gc, pt, 3, Convex, CoordModeOrigin);
+  */
+  side=0;
+}
+
+static void
+balloon_makepixmap(Dock *dock, Balloon *b, int bx, int by, int width, int height, int side, Pixmap *pix, Pixmap *mask)
+{
+    Pixmap bitmap;
+    Pixmap pixmap;
+    int x, y;
+
+    bitmap = XCreatePixmap(dock->display, dock->rootwin, width+SPACE, height+SPACE, 1);
+
+    if (!b->monoGC) {
+      b->monoGC = XCreateGC(dock->display, bitmap, 0, NULL);
+    }
+    
+    if (side & BOTTOM) {
+	y = 0;
+    } else {
+	y = SPACE;
+    }
+    x = 0;
+
+    XSetForeground(dock->display, b->monoGC, 0); 
+    XFillRectangle(dock->display, bitmap, b->monoGC, 0, 0, width+SPACE, height+SPACE);
+    pixmap = XCreatePixmap(dock->display, dock->rootwin, width+SPACE, height+SPACE,
+			   DefaultDepth(dock->display,dock->screennum));
+                   
+    XSetForeground(dock->display, dock->NormalGC, BlackPixel(dock->display,dock->screennum));
+    XFillRectangle(dock->display, pixmap, dock->NormalGC, 0, 0, width+SPACE, height+SPACE);
+    XSetForeground(dock->display, dock->NormalGC, b->bgpixel); //WhitePixel(dock->display,dock->screennum));
+    balloon_draw_frame(dock->display, pixmap, dock->NormalGC, x+1, y+1, width-2, height-2, side);
+
+    XSetForeground(dock->display, b->monoGC, 1);
+    balloon_draw_frame(dock->display, bitmap, b->monoGC, x, y, width, height, side);
+
+    *mask = bitmap;
+    *pix = pixmap;
+    bx = by = 0;
+}
+
+void
+balloon_hide(Dock *dock)
+{
+  Balloon *b = dock->balloon;
+
+  BLAHBLAH(3, printf(_("hide balloon\n")));
+  if (b->mapped) {
+    b->mapped = 0;
+    
+    picohtml_freetxt(b->ph);
+    XUnmapWindow(dock->display, b->win);
+    assert(b->pix);
+    XFreePixmap(dock->display, b->pix); b->pix = None;
+
+    b->imgpix = None; b->imgpix_w = b->imgpix_h = 0;
+  }
+}
+
+/* ceci ressemble � WindowMaker/src/balloon.c ... 
+ [x,y,h,w] = position & dimension de la zone rectangulaire que doit designer
+ le ballon
+*/
+void
+balloon_show(Dock *dock, int x, int y, int h, int w, const char *text, int bwidth)
+{
+  int width;
+  int height;
+  Pixmap mask;
+  int side = 0;
+  int ty;
+  int bx, by;
+  Balloon *b = dock->balloon;
+  int xiscr;
+  int sx,sy,sw,sh;
+  xiscr = MAX(dock_find_xiscreen_num(dock,x,y),0);
+  sx = dock->xiscreen[xiscr].x_org; sw = dock->xiscreen[xiscr].width;
+  sy = dock->xiscreen[xiscr].y_org; sh = dock->xiscreen[xiscr].height;
+  if (b->mapped) {
+    balloon_hide(dock);
+  }
+  assert(b->pix == None);
+  assert(picohtml_isempty(b->ph));
+  
+  width = bwidth; //300; //w - 10;
+  picohtml_parse(b->ph, text, width);
+  picohtml_gettxtextent(b->ph, &width, &height);
+  
+  height = MAX(height, b->imgpix_h);
+  height += 7;
+  width += 10 + b->imgpix_w;
+  
+  if (height < 16)
+    height = 16;
+  if (width < height)
+    width = height;
+  
+
+  if (x + width > sx + sw) {
+    side = RIGHT;
+    bx = x - width + w/2;
+    if (bx < sx)
+      bx = sx;
+  } else {
+    side = LEFT;
+    bx = x + w/2;
+  }
+  if (bx + width > sx+sw)
+    bx = sx+sw - width;
+
+  if (y - (height + SPACE) < sy) {
+    side |= TOP;
+    by = y+h-1;
+    ty = SPACE;
+  } else {
+    side |= BOTTOM;
+    by = y - (height + SPACE);
+    ty = 0;
+  }
+  //printf("ballon x=%d y=%d width=%d, h=%d side=%d, x=%d y=%d sx=%d sy=%d sw=%d sh=%d\n", bx, by, width, height,side,x,y,sx,sy,sw,sh);
+
+  XSetForeground(dock->display, dock->NormalGC, BlackPixel(dock->display, dock->screennum));
+  
+  balloon_makepixmap(dock, b, bx, by, width, height, side, &b->pix, &mask);
+
+  picohtml_render(b->ph, b->pix, 5+b->imgpix_w, 3+ty);
+
+  if (b->imgpix != None) {
+    XCopyArea(dock->display, b->imgpix, b->pix, dock->NormalGC, 0, 0, b->imgpix_w, b->imgpix_h, 3, 3);
+  }
+
+  XSetWindowBackgroundPixmap(dock->display, b->win, b->pix);
+
+  XResizeWindow(dock->display, b->win, width, height+SPACE);
+  XShapeCombineMask(dock->display, b->win, ShapeBounding, 0, 0, mask,
+		    ShapeSet);
+  XFreePixmap(dock->display, mask);
+  XMoveWindow(dock->display, b->win, bx, by);
+  XMapRaised(dock->display, b->win);
+    
+  b->mapped = 1;
+}
+
+void
+balloon_show_with_image(Dock *dock, int x, int y, int h, int w, const char *text, int bwidth, Pixmap image, int img_w, int img_h)
+{
+  Balloon *b = dock->balloon;
+  b->imgpix = image;
+  b->imgpix_w = img_w;
+  b->imgpix_h = img_h;
+  balloon_show(dock,x,y,h,w,text,bwidth);
+}
+
+int 
+balloon_ismapped(Dock *dock)
+{
+  return dock->balloon->mapped;
+}
+
+unsigned check_key=0;
+
+void 
+balloon_check_event(Dock *dock, XEvent *event)
+{
+  Balloon *b = dock->balloon;
+
+  if (b->mapped) {
+    switch (event->type) {
+    case ButtonPress:
+    case ButtonRelease:
+    case MotionNotify:
+      //    case EnterNotify:
+      //case LeaveNotify:
+      balloon_hide(dock);
+      break;
+    case KeyPress:
+      {
+        if (event->xkey.keycode != check_key)
+          balloon_hide(dock);
+        check_key = 0;
+      } break;
+    }
+  }
+}
+
+void
+balloon_disable_key(Dock *dock UNUSED, unsigned keycode) {
+  check_key=keycode;
+}
+
+int
+balloon_test_nomsg(Dock *dock, int x, int y, int bcnt, int bx, int by, int bw, int bh) {
+  if (dock->mouse_cnt >= (bcnt)) {
+    if (IS_INSIDE(x,y,(bx),(by),(bx)+(bw)-1,(by)+(bh)-1)) {
+      return 1;
+    }
+  }
+  return 0;
+}
+
+
+int
+balloon_test(Dock *dock, int x, int y, int winx, int winy, int bcnt, int bx, int by, int bw, int bh, const char *btxt) {
+  if (balloon_test_nomsg(dock,x,y,bcnt,bx,by,bw,bh)) {
+    balloon_show(dock, winx+(bx), winy+(by), (bw), (bh), (btxt), 300);
+    return 1;
+  }
+  return 0;
+}
+
+int
+balloon_test_with_image(Dock *dock, int x, int y, int winx, int winy, int bcnt, int bx, int by, int bw, int bh, const char *btxt, Pixmap image, int img_w, int img_h) {
+  if (dock->mouse_cnt >= (bcnt)) {
+    if (IS_INSIDE(x,y,(bx),(by),(bx)+(bw)-1,(by)+(bh)-1)) {
+      balloon_show_with_image(dock, winx+(bx), winy+(by), (bw), (bh), (btxt), 300, image, img_w, img_h);
+      return 1;
+    }
+  }
+  return 0;
+}
diff --git a/src/balltrap.c b/src/balltrap.c
new file mode 100644
index 0000000..716d4e3
--- /dev/null
+++ b/src/balltrap.c
@@ -0,0 +1,463 @@
+#include "coincoin.h"
+#include "coin_xutil.h"
+#include "board_util.h"
+#include "site.h"
+#include "balltrap.h"
+#include <X11/Xlib.h>
+#include <X11/cursorfont.h>
+#include <X11/extensions/shape.h>
+#include <math.h>
+
+
+#include "../xpms/duck.xpm"
+
+#define DUCK_NCX 4
+struct _Duck {
+  id_type id;
+  float x,y;
+  float angle_ampli[DUCK_NCX], angle_phase[DUCK_NCX];
+  float speed_ampli[DUCK_NCX], speed_phase[DUCK_NCX];
+  int step, age, xiscreen;
+  Window win;
+  int shot;
+  struct _Duck *next;
+};
+
+#define NB_DUCK_XPM_IMG 9
+#define NB_DUCK_IMG (NB_DUCK_XPM_IMG*2)
+
+struct DuckImgs {
+  Pixmap masks[NB_DUCK_IMG];
+  Pixmap pix;
+} duck_img;
+
+double wmcc_drand() {
+  static int isinit = 0;
+  if (!isinit) { srand((unsigned)time(NULL)); isinit = 1; }
+  return rand()/(RAND_MAX+1.);
+}
+
+int wmcc_rand(int sup) {
+  return (int)(sup*wmcc_drand());
+}
+
+
+void
+balltrap_build(Dock *dock) {
+  RGBAImage *rsrc,*rdst;
+  int i,j,k;
+  dock->nb_duck = 0; dock->duck_lst = NULL;
+  rsrc = RGBACreateRImgFromXpmData(dock->rgba_context, duck_xpm);
+  assert(rsrc->h == 32);
+  rdst = RGBACreateImage(rsrc->w*2, rsrc->h);  
+  for (j = 0; j < 32; ++j)
+    for (k = 0; k < 32*NB_DUCK_XPM_IMG; ++k) {
+      rdst->data[j][k] = rsrc->data[j][k];
+      rdst->data[j][32*NB_DUCK_IMG - k - 1] = rsrc->data[j][k];
+    }
+  for (i = 0; i < NB_DUCK_IMG; ++i) {
+    char xbm[32][32/8];
+    memset(xbm, 0, sizeof xbm);
+    for (j = 0; j < 32; ++j) 
+      for (k = 0; k < 32; ++k) 
+        if (rdst->data[j][k + i*32].v)
+          xbm[j][k/8] |= (1<<(k % 8));
+    duck_img.masks[i] = XCreateBitmapFromData(dock->display, dock->win, 
+                                              (char*)xbm, 32, 32);
+  }
+  duck_img.pix = RGBAImage2Pixmap(dock->rgba_context, rdst);
+  RGBADestroyImage(rsrc);
+  RGBADestroyImage(rdst);
+}
+
+static int duck_find_screen(Dock *dock, float x, float y) {
+  int i, ix=(int)x, iy=(int)y;
+  for (i=0; i < dock->nb_xiscreen; ++i) {
+    if (ix >= dock->xiscreen[i].x_org && iy >= dock->xiscreen[i].y_org &&
+        ix <= dock->xiscreen[i].x_org + dock->xiscreen[i].width -20 && 
+        iy <= dock->xiscreen[i].y_org + dock->xiscreen[i].height-20) {
+      return i;
+    }
+  }
+  return 0;
+}
+
+void
+balltrap_add(Dock *dock, id_type id) {  
+  if (dock->nb_duck < Prefs.hunt_max_duck) {
+    Duck *d;
+    XSetWindowAttributes wa;
+    int i;
+
+    ALLOC_OBJ(d,Duck);
+    dock->nb_duck++;
+    d->next = dock->duck_lst; dock->duck_lst = d;
+    d->id = id;
+    d->step = 0;
+    d->age = 0;
+    d->shot = 0;
+    for (i=0; i < DUCK_NCX; ++i) { 
+      d->speed_phase[i] = wmcc_drand()*M_PI*2;
+      d->angle_phase[i] = wmcc_drand()*M_PI*2;
+      d->speed_ampli[i] = wmcc_drand()*(DUCK_NCX-i);
+      d->angle_ampli[i] = wmcc_drand()/1.6;
+    }
+    int dx,dy;
+    get_window_pos_with_decor(dock->display, DOCK_WIN(dock), &dx, &dy);
+    d->x = dx - 20 + wmcc_rand(40); d->y = dy - 20 + wmcc_rand(40);
+    d->xiscreen = duck_find_screen(dock, dx, dy);
+    d->win = XCreateSimpleWindow(dock->display, dock->rootwin, 0, 0, 32, 32, 0,
+                                 cccolor_pixel(dock->white_color),
+                                 cccolor_pixel(dock->black_color));
+    wa.event_mask = ButtonPressMask | ButtonReleaseMask;
+    wa.override_redirect = True;
+    wa.save_under = True;
+    wa.cursor = XCreateFontCursor(dock->display, XC_target); //XC_cross);
+    XChangeWindowAttributes (dock->display, d->win,
+                             CWCursor | CWSaveUnder | CWEventMask | CWOverrideRedirect, &wa);
+    XMapRaised(dock->display, d->win);
+  }
+}
+
+static void
+balltrap_remove(Dock *dock, Duck *d) {
+  if (d == dock->duck_lst) {
+    dock->duck_lst = d->next;
+  } else {
+    Duck *dd;
+    for (dd = dock->duck_lst; dd->next != d; dd = dd->next) 
+      assert(dd); 
+    dd->next = d->next;
+  }
+  dock->nb_duck--;
+  XDestroyWindow(dock->display, d->win);
+  free(d);
+}
+
+enum {DUCK_GOING_LEFT0=0, DUCK_GOING_LEFT1=7,
+      DUCK_GOING_RIGHT0=8, DUCK_GOING_RIGHT1=15,
+      DUCK_TURNS_LHR0=16, DUCK_TURNS_LHR1=23,
+      DUCK_TURNS_RHL0=24, DUCK_TURNS_RHL1=31,
+      DUCK_DIES_LEFT0=32,DUCK_DIES_LEFT1=54,
+      DUCK_DIES_RIGHT0=55,DUCK_DIES_RIGHT1=77};
+
+enum {DUCKIMG_GOING_LEFT0=0, DUCKIMG_GOING_LEFT1=3,
+      DUCKIMG_TURNS_LHR0=4, DUCKIMG_TURNS_LHR1=7,
+      DUCKIMG_DIES_LEFT=8,
+      DUCKIMG_DIES_RIGHT=9,
+      DUCKIMG_TURNS_RHL0=10, DUCKIMG_TURNS_RHL1=13,
+      DUCKIMG_GOING_RIGHT0=14, DUCKIMG_GOING_RIGHT1=17};
+
+
+static int duck_dies_right(Duck *d) {
+  return (d->step >= DUCK_DIES_RIGHT0 && d->step <= DUCK_DIES_RIGHT1);
+}
+static int duck_dies_left(Duck *d) { 
+  return (d->step >= DUCK_DIES_LEFT0 && d->step <= DUCK_DIES_LEFT1);
+}
+static int duck_is_dead(Duck *d) {
+  return duck_dies_left(d) || duck_dies_right(d);
+}
+static int duck_going_left(Duck *d) { 
+  return (d->step >= DUCK_GOING_LEFT0 && d->step <= DUCK_GOING_LEFT1);
+}
+static int duck_going_right(Duck *d) { 
+  return (d->step >= DUCK_GOING_RIGHT0 && d->step <= DUCK_GOING_RIGHT1);
+}
+static int duck_turns_lhr(Duck *d) { 
+  return (d->step >= DUCK_TURNS_LHR0 && d->step <= DUCK_TURNS_LHR1);
+}
+static int duck_turns_rhl(Duck *d) { 
+  return (d->step >= DUCK_TURNS_RHL0 && d->step <= DUCK_TURNS_RHL1);
+}
+static int duck_in_translation(Duck *d) { return duck_going_left(d) || duck_going_right(d); }
+static int duck_in_rotation(Duck *d) { return duck_turns_rhl(d) || duck_turns_lhr(d); }
+
+static int duck_current_img(Duck *d) {
+  if (duck_going_left(d)) {
+    return DUCKIMG_GOING_LEFT0 + 
+      ((d->step - DUCK_GOING_LEFT0) * (DUCKIMG_GOING_LEFT1 - DUCKIMG_GOING_LEFT0 + 1))/(DUCK_GOING_LEFT1-DUCK_GOING_LEFT0 + 1);
+  } else if (duck_going_right(d)) {
+    return DUCKIMG_GOING_RIGHT0 + 
+      ((d->step - DUCK_GOING_RIGHT0) * (DUCKIMG_GOING_RIGHT1 - DUCKIMG_GOING_RIGHT0 + 1))/(DUCK_GOING_RIGHT1-DUCK_GOING_RIGHT0 + 1);
+  } else if (duck_turns_lhr(d)) {
+    return DUCKIMG_TURNS_LHR0 + 
+      ((d->step - DUCK_TURNS_LHR0) * (DUCKIMG_TURNS_LHR1 - DUCKIMG_TURNS_LHR0 + 1))/(DUCK_TURNS_LHR1-DUCK_TURNS_LHR0 + 1);
+  } else if (duck_turns_rhl(d)) {
+    return DUCKIMG_TURNS_RHL0 + 
+      ((d->step - DUCK_TURNS_RHL0) * (DUCKIMG_TURNS_RHL1 - DUCKIMG_TURNS_RHL0 + 1))/(DUCK_TURNS_RHL1-DUCK_TURNS_RHL0 + 1);
+  } else if (duck_is_dead(d)) {
+    return (d->step >= DUCK_DIES_LEFT0 && d->step <= DUCK_DIES_LEFT1) ?
+            DUCKIMG_DIES_LEFT : DUCKIMG_DIES_RIGHT;
+  } else assert(0);
+  return 1<<30;
+}
+/*static int duck_going_left(Duck *d) { return (d->step >= 0 && d->step <= 3); }
+static int duck_going_right(Duck *d) { return (d->step >= 14 && d->step <= 17); }
+static int duck_turns_lhr(Duck *d) { return (d->step >= 4 && d->step <= 7); }
+static int duck_turns_rhl(Duck *d) { return (d->step >= 10 && d->step <= 13); }
+*/
+
+static int duck_repousse(Dock *dock, Duck *d, float x, float y, float *pvx, float *pvy) {
+  int i, ix=(int)x, iy=(int)y;
+  //for (i=0; i < dock->nb_xiscreen; ++i) {
+  i = d->xiscreen;
+    if (ix <= dock->xiscreen[i].x_org + 20) { *pvx += 1; return duck_going_left(d); }
+    if (ix <= dock->xiscreen[i].x_org + 10) { *pvx += 3; return duck_going_left(d); }
+    if (ix >= dock->xiscreen[i].x_org + dock->xiscreen[i].width - 20) { *pvx -= 1; return duck_going_right(d); }
+    if (ix >= dock->xiscreen[i].x_org + dock->xiscreen[i].width - 10) { *pvx -= 3; return duck_going_right(d); }
+    if (iy <= dock->xiscreen[i].y_org + 20) *pvy += 1;
+    if (iy <= dock->xiscreen[i].y_org + 10) *pvy += 3;
+    if (iy >= dock->xiscreen[i].y_org + dock->xiscreen[i].height - 20) *pvy -= 1;
+    if (iy >= dock->xiscreen[i].y_org + dock->xiscreen[i].height - 10) *pvy -= 3;
+    //}
+  return 0;
+}
+
+void balltrap_animate(Dock *dock) {
+  Duck *d, *d_next;
+  static float t = 0.;
+  static float dt = 0.1;
+  t += dt;
+  for (d = dock->duck_lst; d; d = d_next) {
+    int oldimg = duck_current_img(d);
+    int destroy_it = 0;
+    d_next = d->next;
+    d->age++;
+    if (!duck_is_dead(d)) {
+      float angle = 0, speed = 3 /* vitess mini */, vx, vy;
+      int k;
+      for (k=0; k < DUCK_NCX; ++k) {
+        angle += d->angle_ampli[k]*sin(d->angle_phase[k]+t*k);
+        speed += d->speed_ampli[k]*(1.+sin(d->speed_phase[k]+t*(k+1)));
+      }
+      if (duck_going_left(d)) {
+        speed = -speed;
+      }
+      if (duck_in_translation(d)) {
+        vx = speed*cos(angle);
+        vy = speed*sin(angle);
+      }
+      int tourne = 0;
+      if (!duck_in_rotation(d)) {
+        tourne = (wmcc_rand(200) == 0) ? 100 : 0;
+        if (duck_repousse(dock, d, d->x, d->y, &vx, &vy)) tourne = 1;
+      }
+      //printf("angle = %f, speed = %+f, tourne = %d, vx=%+f, vy=%+f, step=%d", angle,speed,tourne,vx,vy,d->step);
+      if (duck_going_left(d)) {
+        d->x += vx; d->y += vy;
+        if (!tourne) {
+          if (++d->step > DUCK_GOING_LEFT1) d->step = DUCK_GOING_LEFT0;
+        } else d->step = DUCK_TURNS_LHR0;
+      } else if (duck_going_right(d)) {
+        d->x += vx; d->y += vy;
+        if (!tourne) {
+          if (++d->step > DUCK_GOING_RIGHT1) d->step = DUCK_GOING_RIGHT0;
+        } else d->step = DUCK_TURNS_RHL1;
+      } else if (duck_turns_lhr(d)) {
+        if (++d->step > DUCK_TURNS_LHR1) d->step = DUCK_GOING_RIGHT1;
+      } else if (duck_turns_rhl(d)) {
+        if (--d->step < DUCK_TURNS_RHL0) d->step = DUCK_GOING_LEFT0;
+      }
+      assert(!duck_is_dead(d));
+    } else {
+      if (d->shot) {
+        d->shot = 0;
+        board_msg_info *mi = boards_find_id(dock->sites->boards, d->id);
+        if (mi && mi->is_my_message) {
+          myprintf("proutch ... you killed yourself\n");
+        } else if (mi && Prefs.site[id_type_sid(d->id)]->post_url) {
+          char s[200], s_subts[3];
+          Site *site = sl_find_site_id(dock->sites, id_type_sid(d->id)); assert(site);
+          snprintf(s, sizeof s, "[%s]", Prefs.site[id_type_sid(d->id)]->site_name);
+          pp_set_download_info(s, "PAN ! PAN !");
+          s_subts[0] = s_subts[1] = s_subts[2] = 0;
+          switch(mi->sub_timestamp) {
+            case -1: break;
+            case 0: s_subts[0] = '�'; break;
+            case 1: s_subts[0] = '�'; break;
+            case 2: s_subts[0] = '�'; break;
+            default: s_subts[0] = ':'; s_subts[1] = '1' + mi->sub_timestamp;
+          }
+          snprintf(s, sizeof s, "%02d:%02d:%02d%s %s", mi->hmsf[0], mi->hmsf[1], mi->hmsf[2], s_subts,
+                   wmcc_rand(15) != 13 ? "pan ! pan !" : "cliclic (fusil enray�)");;
+          BLAHBLAH(1,myprintf("BALLTRAP : [%s] %s\n", Prefs.site[id_type_sid(d->id)]->site_name, s));
+          ccqueue_push_board_post(site->site_id,  
+                                  site->board->coin_coin_useragent, s);
+        } else {
+          myprintf("%<BLU clic ! clic !> you shot a plastic duck\n");
+        }
+      }
+      if (duck_dies_left(d)) { d->x -= 1; d->step++; if (!duck_dies_left(d)) destroy_it = 1; }
+      else { d->step++; if (!duck_dies_right(d)) destroy_it = 1; d->x += 1; }
+      d->y += 3;      
+    }
+    if (destroy_it || d->age > 20000) {
+      balltrap_remove(dock, d);
+    } else {
+      int newimg = duck_current_img(d);
+      //printf("  --> x=%+f y=%+f, step=%d oldim=%d img=%d\n", d->x, d->y,d->step,oldimg, newimg);
+      //XUnmapWindow(dock->display,d->win);
+      XMoveWindow(dock->display, d->win, d->x, d->y);    
+      //XMapRaised(dock->display,d->win);
+      if (newimg != oldimg || d->age == 1 || d->step == DUCK_DIES_LEFT0+1 || d->step == DUCK_DIES_RIGHT0+1) {
+        XShapeCombineMask(dock->display, d->win, ShapeBounding, 0, 0, duck_img.masks[newimg],
+                          ShapeSet);
+        XCopyArea(dock->display, duck_img.pix, d->win, dock->NormalGC, newimg * 32, 0, 32, 32, 0, 0);
+      }
+    }
+  }
+  //if ((++cnt % 10) == 0) XFlush(dock->display);
+}
+
+void balltrap_airstrike(Dock *dock) {
+  Duck *d;
+  for (d = dock->duck_lst; d; d = d->next) 
+    if (!duck_is_dead(d)) {
+      if (duck_going_left(d) || duck_turns_rhl(d)) {
+        d->step = DUCK_DIES_LEFT0;
+      } else d->step = DUCK_DIES_RIGHT0;
+    }
+}
+
+void balltrap_armageddon(Dock *dock) {
+  while (dock->duck_lst) balltrap_remove(dock, dock->duck_lst);
+}
+
+int
+balltrap_dispatch_event(Dock *dock, XEvent *ev) {
+  switch (ev->type) {
+    case ButtonPress: {
+      if (ev->xbutton.button == Button1) {
+        Duck *d;      
+        for (d = dock->duck_lst; d; d = d->next) {
+          if (ev->xany.window == d->win) {
+            if (!duck_is_dead(d)) {
+              if (duck_going_left(d) || duck_turns_rhl(d)) {
+                d->step = DUCK_DIES_LEFT0;
+              } else d->step = DUCK_DIES_RIGHT0;
+              d->shot = 1;
+            }
+            return 1;
+          }
+        }
+      }
+    } break;
+    default: break;
+  }
+  return 0;
+}
+
+
+static int queue_sz = 0;
+#define MAX_QUEUE 50
+static id_type queue[MAX_QUEUE];
+
+static void pan_pan(Dock *dock, board_msg_info *mi) {
+  int i, j;
+  /* tri des canards morts dans le duck-lancher */
+  for (i = 0, j = 0; i < queue_sz; ++i) {
+    if (!id_type_eq(queue[i],mi->id)) {
+      queue[j++] = queue[i];
+    }
+  }
+  queue_sz = j;
+  /* et on liquide les canards tir�s en plein vol */
+  Duck *d, *d_next;
+  for (d = dock->duck_lst; d; d = d_next) {
+    d_next = d->next;
+    if (id_type_eq(d->id, mi->id)) {
+      if (!duck_is_dead(d)) {
+        if (duck_going_left(d) || duck_turns_rhl(d)) {
+              d->step = DUCK_DIES_LEFT0;
+            } else d->step = DUCK_DIES_RIGHT0;
+        break; /* un de moins (si plusieurs ont �t� laches par un meme post, il faudra plusieurs coups de fusil) */
+      }
+      //balltrap_remove(dock, d);
+    }
+  }
+}
+
+void balltrap_check_message(id_type id, const unsigned char *msg) {
+  int coin_found = 0, pan_found = 0;
+  if (!Prefs.hunt_opened || get_dock()->horloge_mode) return;
+  if (id_type_sid(id) >= 0 && !Prefs.site[id_type_sid(id)]->hunt_opened_on_site) return;
+  board_msg_info *mi = boards_find_id(get_dock()->sites->boards, id);
+  if (mi == NULL) return;
+  
+  if (1) { //!mi->is_my_message) {    
+    /* on compte le nombre de ascii-canards */
+    const char *p, *q, **ad;
+    const char *ascii_ducks[] = {"\\_o<", "\\_O<", "\\_0<", "\\_�<", ">o_/", ">O_/", ">0_/", ">�_/", NULL};
+    for (ad = ascii_ducks; *ad; ++ad) {
+      p = msg;
+      while ((q=strstr(p, *ad))) {
+        coin_found++; p = q+strlen(*ad);
+      }
+    }
+    coin_found = MIN(coin_found, 4); /* faut pas exagerer non plus! */
+
+    /* et les coin ! coin ! */
+    {
+      char *pattern = "(.*[^A-Za-z0-9_]|^)([cC][oO0][iI1][nN] *! *[cC][oO0][iI1][nN] *!|[Pp][oO]*[uU]+[lL]+[eE]? *!)([^A-Za-z0-9_].*|$)";
+      static regex_t re;
+      static int isinit = 0;
+      if (!isinit) {
+        if (regcomp(&re, pattern, REG_EXTENDED | REG_NOSUB)) assert(0);
+        isinit = 1;
+      }
+      if (regexec(&re, msg, 0, NULL, 0) == 0) {
+        //printf("hunt candidat : %s\n", msg);
+        coin_found++;
+      }
+      /*if (strstr(msg, "coin !")) {
+        printf("COIN candidate : %s -> coin_found=%d\n", msg, coin_found);
+        }*/
+    }
+    if (mi->in_boitakon) coin_found = 0;
+  }
+
+  if (!mi->is_my_message) {
+    char *pattern = "(.*[^A-Za-z0-9_]|^)(([pP][aA4]+[nNfF]+[gG]?)|([bB]+[lL]+[aA4]+[mM]+)|([bB]+[oO]+[uU]+[mM]+))([^A-Za-z0-9_].*|$)";
+    static regex_t re;
+    static int isinit = 0;
+    if (!isinit) {
+      if (regcomp(&re, pattern, REG_EXTENDED | REG_NOSUB)) assert(0);
+      isinit = 1;
+    }
+    //printf("test: %s\n", msg);
+    /*if (strstr(msg, "pan")) {
+      printf("pan candidate: %s\n", msg);
+      }*/
+    if (regexec(&re, msg, 0, NULL, 0) == 0) {
+      BLAHBLAH(1, printf("PAN FOUND! %s\n", msg));
+      pan_found = 1;
+    }
+  }
+
+  while (coin_found && queue_sz < MAX_QUEUE) {
+    queue[queue_sz++] = id;
+    BLAHBLAH(1, myprintf("duck hunt is opened ! prepare your guns!\n -> [%s] msg=%s\n", Prefs.site[id_type_sid(id)]->site_name, msg));
+    coin_found--;
+    //balltrap_add(get_dock(), id);
+  }
+  if (pan_found) {
+    if (mi) {
+      int i;
+      for (i = 0; i < mi->nb_refs; ++i) {
+        if (mi->refs[i].mi) pan_pan(get_dock(), mi->refs[i].mi);
+      }
+    }
+  }
+}
+
+/* on randomise un peu le lacher de canard pour les grandes occasions genre ouverture de la chasse */
+void balltrap_launch() {
+  while (queue_sz) {
+    int i = wmcc_rand(queue_sz);   assert(i < queue_sz);
+    balltrap_add(get_dock(), queue[i]);
+    BLAHBLAH(1,printf("new duck launched : %s\n", boards_find_id(get_dock()->sites->boards, queue[i])->msg));
+    memmove(queue+i, queue+i+1, (queue_sz - i - 1)*sizeof(queue[0]));
+    queue_sz--;
+  }
+}
diff --git a/src/balltrap.h b/src/balltrap.h
new file mode 100644
index 0000000..cde0d9d
--- /dev/null
+++ b/src/balltrap.h
@@ -0,0 +1,12 @@
+#ifndef BALLTRAP_H
+#define BALLTRAP_H
+
+void balltrap_build(Dock *dock);
+void balltrap_add(Dock *dock, id_type id);
+void balltrap_animate(Dock *dock);
+int balltrap_dispatch_event(Dock *dock, XEvent *ev);
+void balltrap_check_message(id_type id, const unsigned char *msg);
+void balltrap_launch();
+void balltrap_airstrike(Dock *dock);
+void balltrap_armageddon(Dock *dock);
+#endif
diff --git a/src/base64.c b/src/base64.c
new file mode 100644
index 0000000..50c61de
--- /dev/null
+++ b/src/base64.c
@@ -0,0 +1,115 @@
+/* this file is part of fetchmail
+   sources taken here: http://www.opensource.apple.com/darwinsource/10.3/fetchmail-9/fetchmail/base64.c
+   licence: gpl v2 
+*/
+
+/*
+ * base64.c -- base-64 conversion routines.
+ *
+ * For license terms, see the file COPYING in this directory.
+ *
+ * This base 64 encoding is defined in RFC2045 section 6.8,
+ * "Base64 Content-Transfer-Encoding", but lines must not be broken in the
+ * scheme used here.
+ */
+#include "config.h"
+#include <ctype.h>
+
+static const char base64digits[] =
+   "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+
+#define BAD	-1
+static const char base64val[] = {
+    BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD,
+    BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD,
+    BAD,BAD,BAD,BAD, BAD,BAD,BAD,BAD, BAD,BAD,BAD, 62, BAD,BAD,BAD, 63,
+     52, 53, 54, 55,  56, 57, 58, 59,  60, 61,BAD,BAD, BAD,BAD,BAD,BAD,
+    BAD,  0,  1,  2,   3,  4,  5,  6,   7,  8,  9, 10,  11, 12, 13, 14,
+     15, 16, 17, 18,  19, 20, 21, 22,  23, 24, 25,BAD, BAD,BAD,BAD,BAD,
+    BAD, 26, 27, 28,  29, 30, 31, 32,  33, 34, 35, 36,  37, 38, 39, 40,
+     41, 42, 43, 44,  45, 46, 47, 48,  49, 50, 51,BAD, BAD,BAD,BAD,BAD
+};
+#define DECODE64(c)  (isascii(c) ? base64val[c] : BAD)
+
+void to64frombits(unsigned char *out, const unsigned char *in, int inlen)
+/* raw bytes in quasi-big-endian order to base 64 string (NUL-terminated) */
+{
+    for (; inlen >= 3; inlen -= 3)
+    {
+	*out++ = base64digits[in[0] >> 2];
+	*out++ = base64digits[((in[0] << 4) & 0x30) | (in[1] >> 4)];
+	*out++ = base64digits[((in[1] << 2) & 0x3c) | (in[2] >> 6)];
+	*out++ = base64digits[in[2] & 0x3f];
+	in += 3;
+    }
+    if (inlen > 0)
+    {
+	unsigned char fragment;
+    
+	*out++ = base64digits[in[0] >> 2];
+	fragment = (in[0] << 4) & 0x30;
+	if (inlen > 1)
+	    fragment |= in[1] >> 4;
+	*out++ = base64digits[fragment];
+	*out++ = (inlen < 2) ? '=' : base64digits[(in[1] << 2) & 0x3c];
+	*out++ = '=';
+    }
+    *out = '\0';
+}
+
+int from64tobits(char *out, const char *in, int maxlen)
+/* base 64 to raw bytes in quasi-big-endian order, returning count of bytes */
+/* maxlen limits output buffer size, set to zero to ignore */
+{
+    int len = 0;
+    register unsigned char digit1, digit2, digit3, digit4;
+    char *a, *b;
+
+    for (a = (char*)in, b=(char*)in; *a; ++a) {
+      if (!isspace(*a)) *b++ = *a;
+    }
+
+    if (in[0] == '+' && in[1] == ' ')
+	in += 2;
+    if (*in == '\r')
+	return(0);
+
+    do {
+	digit1 = in[0];
+	if (DECODE64(digit1) == BAD)
+	    return(-1);
+	digit2 = in[1];
+	if (DECODE64(digit2) == BAD)
+	    return(-1);
+	digit3 = in[2];
+	if (digit3 != '=' && DECODE64(digit3) == BAD)
+	    return(-1); 
+	digit4 = in[3];
+	if (digit4 != '=' && DECODE64(digit4) == BAD)
+	    return(-1);
+	in += 4;
+	++len;
+	if (maxlen && len > maxlen)
+	    return(-1);
+	*out++ = (DECODE64(digit1) << 2) | (DECODE64(digit2) >> 4);
+	if (digit3 != '=')
+	{
+	    ++len;
+	    if (maxlen && len > maxlen)
+	        return(-1);
+	    *out++ = ((DECODE64(digit2) << 4) & 0xf0) | (DECODE64(digit3) >> 2);
+	    if (digit4 != '=')
+	    {
+	        ++len;
+		if (maxlen && len > maxlen)
+		    return(-1);
+		*out++ = ((DECODE64(digit3) << 6) & 0xc0) | DECODE64(digit4);
+	    }
+	}
+    } while 
+	(*in && *in != '\r' && digit4 != '=');
+
+    return (len);
+}
+
+/* base64.c ends here */
diff --git a/src/base64.h b/src/base64.h
new file mode 100644
index 0000000..7d9b65f
--- /dev/null
+++ b/src/base64.h
@@ -0,0 +1,7 @@
+#ifndef BASE64_H
+#define BASE64_H
+
+void to64frombits(unsigned char *out, const unsigned char *in, int inlen);
+int from64tobits(char *out, const char *in, int maxlen);
+
+#endif
diff --git a/src/board.c b/src/board.c
new file mode 100644
index 0000000..a5e4c0c
--- /dev/null
+++ b/src/board.c
@@ -0,0 +1,2302 @@
+/*
+    wmCoinCoin, the stupidest WindowMaker dock applet
+    Copyright (C) 2001  Julien Pommier
+
+    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., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+
+
+ */
+
+/*
+  rcsid=$Id: board.c,v 1.32 2005/09/25 12:08:55 pouaite Exp $
+  ChangeLog:
+  $Log: board.c,v $
+  Revision 1.32  2005/09/25 12:08:55  pouaite
+  ca marche encore ca ?
+
+  Revision 1.31  2005/06/11 22:47:41  pouaite
+  prout?
+
+  Revision 1.30  2005/02/22 18:45:26  pouaite
+  *** empty log message ***
+
+  Revision 1.29  2004/05/16 12:54:29  pouaite
+  250c
+
+  Revision 1.28  2004/04/26 20:32:31  pouaite
+  roger demande le commit
+
+  Revision 1.27  2004/04/18 15:37:28  pouaite
+  un deux un deux
+
+  Revision 1.26  2004/03/07 13:51:12  pouaite
+  commit du dimanche
+
+  Revision 1.25  2004/03/03 23:00:39  pouaite
+  commit du soir
+
+  Revision 1.24  2004/02/29 19:01:26  pouaite
+  et hop
+
+  Revision 1.23  2004/02/29 15:01:19  pouaite
+  May the charles bronson spirit be with you
+
+  Revision 1.22  2003/08/26 21:50:48  pouaite
+  2.6.4b au mastic
+
+  Revision 1.21  2003/07/20 22:22:28  pouaite
+  ce commit est dedie a Pierre Tramo
+
+  Revision 1.20  2003/06/29 23:58:35  pouaite
+  suppression de l'overrideredirect du palmi et ajout de pinnipede_totoz.c et wmcoincoin-totoz-get etc
+
+  Revision 1.19  2003/06/21 14:48:45  pouaite
+  g cho
+
+  Revision 1.18  2003/03/09 13:02:47  pouaite
+  ou������
+
+  Revision 1.17  2003/01/11 17:44:10  pouaite
+  ajout de stats/coinping sur les sites
+
+  Revision 1.16  2002/12/20 18:11:46  pouaite
+  bon...
+
+  Revision 1.15  2002/12/20 15:49:51  pouaite
+  prout 2.4.2b ?
+
+  Revision 1.14  2002/11/30 00:10:39  pouaite
+  2.4.2a
+
+  Revision 1.13  2002/10/13 23:30:49  pouaite
+  plop
+
+  Revision 1.12  2002/09/25 22:02:15  pouaite
+  hungry boitakon
+
+  Revision 1.11  2002/09/08 14:28:45  pouaite
+  bugfixes salutaires
+
+  Revision 1.10  2002/09/07 16:21:15  pouaite
+  �a va releaser en douce
+
+  Revision 1.9  2002/09/05 23:11:57  pouaite
+  <blog>ce soir g mang� une omelette</blog>
+
+  Revision 1.8  2002/09/02 23:24:41  pouaite
+  bugfixes de la soiree
+
+  Revision 1.7  2002/08/29 00:15:53  pouaite
+  cosm�tique et capillotraction
+
+  Revision 1.6  2002/08/26 00:52:22  pouaite
+  coin coin coin
+
+  Revision 1.5  2002/08/21 20:22:16  pouaite
+  fix compil
+
+  Revision 1.4  2002/08/21 01:11:49  pouaite
+  commit du soir, espoir
+
+  Revision 1.3  2002/08/18 19:00:28  pouaite
+  plop
+
+  Revision 1.2  2002/08/18 00:29:30  pouaite
+  en travaux .. pri�re de porter le casque
+
+  Revision 1.1  2002/08/17 18:33:38  pouaite
+  grosse commition
+
+
+  ---------------- renommage en board.c --------------------
+
+  Revision 1.39  2002/06/26 22:19:49  pouaite
+  ptit fix pour la tribune de f-cpu + patch de lordoric
+
+  Revision 1.38  2002/06/23 22:26:01  pouaite
+  bugfixes+support � deux francs des visuals pseudocolor
+
+  Revision 1.37  2002/06/23 10:44:05  pouaite
+  i18n-isation of the coincoin(kwakkwak), thanks to the incredible jjb !
+
+  Revision 1.35  2002/06/01 17:54:04  pouaite
+  nettoyage
+
+  Revision 1.34  2002/05/28 20:11:55  pouaite
+  modif pr un pinnipede + fluide qd il y a bcp de messages stock�s + tribune sur plusieurs jours
+
+  Revision 1.33  2002/05/12 22:06:27  pouaite
+  grosses modifs dans http.c
+
+  Revision 1.32  2002/04/13 11:55:19  pouaite
+  fix kde3 + deux trois conneries
+
+  Revision 1.31  2002/04/11 23:16:54  pouaite
+  boitakon mega combo
+
+  Revision 1.30  2002/04/09 23:38:29  pouaite
+  boitakon et son cort�ge de bugfixes
+
+  Revision 1.29  2002/04/09 00:28:19  pouaite
+  quelques modifs faites dans un �tat d'h�b�tude avanc� /!\ travaux en cours /!\
+
+  Revision 1.28  2002/04/01 22:56:03  pouaite
+  la pseudo-transparence du pinni, bugfixes divers, option tribune.backend_type
+
+  Revision 1.27  2002/04/01 01:39:38  pouaite
+  grosse grosse commition (cf changelog)
+
+  Revision 1.26  2002/03/27 23:27:10  pouaite
+  tjs des bugfixes (pour gerer des posts qui peuvent atteindre 10ko !), en parallele de la v2.3.6-5
+
+  Revision 1.25  2002/03/27 19:02:04  pouaite
+  bugfix pour le nouveau format du backend
+
+  Revision 1.24  2002/03/18 22:46:49  pouaite
+  1 ou 2 bugfix mineurs, et surtout suppression de la dependance avec la libXpm .. un premier pas vers wmc� en 8bits
+
+  Revision 1.23  2002/03/03 10:10:04  pouaite
+  bugfixes divers et vari�s
+
+  Revision 1.22  2002/03/01 00:27:40  pouaite
+  trois fois rien
+
+  Revision 1.21  2002/02/27 00:32:19  pouaite
+  modifs velues
+
+  Revision 1.20  2002/02/24 22:13:56  pouaite
+  modifs pour la v2.3.5 (selection, scrollcoin, plopification, bugfixes)
+
+  Revision 1.19  2002/02/03 23:07:32  pouaite
+  *** empty log message ***
+
+  Revision 1.18  2002/02/02 23:49:17  pouaite
+  plop
+
+  Revision 1.17  2002/01/20 20:53:22  pouaite
+  bugfix configure.in && http_win.c pour cygwin + 2-3 petis trucs
+
+  Revision 1.16  2002/01/20 02:17:13  pouaite
+  modifs d'ordre esthetique (!) sans grand interet
+
+  Revision 1.15  2002/01/18 00:28:42  pouaite
+  le m�nage continue + grosses modifs (experimentales pour l'instant)
+
+  Revision 1.14  2002/01/16 00:35:26  pouaite
+  debut de detection des reponse � nos message avec des couleurs hideuses et certainement plein de bugs moisis
+
+  Revision 1.13  2002/01/15 15:30:17  pouaite
+  rien d'interessant
+
+  Revision 1.12  2002/01/14 23:54:06  pouaite
+  reconnaissance des posts effectu� par l'utilisateur du canard (� suivre...)
+
+  Revision 1.11  2002/01/13 20:06:14  pouaite
+  decidement je fais rien que des conneries
+
+  Revision 1.10  2002/01/13 19:44:48  pouaite
+  minifix pour �viter que la commande externe soit lanc�e sur tous les messages � l'initialisation du coincoin
+
+  Revision 1.9  2002/01/13 15:19:00  pouaite
+  double patch: shift -> tribune.post_cmd et lordOric -> tribune.archive
+
+  Revision 1.8  2002/01/12 17:29:08  pouaite
+  support de l'iso8859-15 (euro..)
+
+  Revision 1.7  2002/01/10 09:03:06  pouaite
+  integration du patch de glandium (requetes http/1.1 avec header 'If-Modified-Since' --> coincoin plus gentil avec dacode)
+
+  Revision 1.6  2002/01/06 16:52:37  pouaite
+  preparation pour la prochaine v. de la tribune avec sa gestion integree du wiki et des logins, tout �a ..
+
+  Revision 1.5  2001/12/16 21:51:22  pouaite
+  *** empty log message ***
+
+  Revision 1.4  2001/12/16 20:28:45  pouaite
+  bugfixes divers
+
+  Revision 1.3  2001/12/16 01:43:33  pouaite
+  filtrage des posts, meilleure gestion des posts multiples
+
+  Revision 1.2  2001/12/02 18:34:54  pouaite
+  ajout de tags cvs Id et Log un peu partout...
+
+*/
+#include "board_priv.h"
+#include "balltrap.h"
+
+
+
+static md5_and_time *
+load_md5_array(FILE *f) {
+  md5_and_time *m = NULL;
+  if (f) {
+    char tstamp[15];
+    unsigned char md5txt[33];
+    int viewed;
+    while (fscanf(f, " MD5:%s %s %d", md5txt, tstamp, &viewed) == 3) {
+      if (strlen(md5txt) == 32 && strlen(tstamp)==14) {
+        BLAHBLAH(2, myprintf("loaded md5 %<grn %s> tstamp %<cya %s> viewed=%d\n", md5txt, tstamp,viewed));
+        int i;
+        md5_and_time *n; ALLOC_OBJ(n,md5_and_time);
+        n->next = m; m = n;
+        strcpy(m->tstamp,tstamp);
+        for (i=0; i < 16; ++i) {
+          int j;
+          sscanf(md5txt+2*i,"%02x",&j); m->md5[i] = j;
+        }
+        m->viewed = viewed;
+      }
+    }
+  }
+  return m;
+}
+
+void release_md5_array(Board *b) {
+  if (b) {
+    md5_and_time *m = b->oldmd5;
+    while (m) {
+      md5_and_time *n = m->next; free(m); m = n;
+    }
+    b->oldmd5 = NULL;
+  }
+}
+
+md5_and_time *
+find_md5_in_md5_array(md5_byte_t md5[16], md5_and_time *m) {
+  while (m) {
+    if (memcmp(md5, m->md5,16) == 0)
+      return m;
+    m = m->next;
+  }
+  return NULL;
+}
+
+
+static void save_md5_and_time(FILE *f, md5_byte_t md5[16], char tstamp[15], int viewed) {
+  char md5txt[33];
+  int i;
+  for (i = 0; i < 16; ++i) {
+    md5txt[2*i  ] = "0123456789ABCDEF"[md5[i]/16];
+    md5txt[2*i+1] = "0123456789ABCDEF"[md5[i]%16];
+  }
+  md5txt[32] = 0;
+  fprintf(f, "MD5:%s %s %d\n", md5txt, tstamp, viewed);
+}
+
+static void save_md5_array_recurs(FILE *f, Board *b, board_msg_info *mi) {
+  char tstamp[15];
+  if (!mi) return;
+  time_t_to_tstamp(mi->timestamp, tstamp);
+
+  if (mi->ri) save_md5_and_time(f,mi->ri->md5,tstamp, id_type_lid(mi->id) <= b->last_viewed_id);
+
+  save_md5_array_recurs(f, b, mi->left);
+  save_md5_array_recurs(f, b, mi->right);
+}
+
+int board_is_rss_feed(Board *b) {
+  if (!b) return 0;
+  return b->site->prefs->backend_type == BACKEND_TYPE_RSS;
+}
+
+int board_is_regular_board(Board *b) {
+  if (!b) return 0;
+  return b->site->prefs->backend_type == BACKEND_TYPE_BOARD;
+}
+
+int board_is_pop3(Board *b) {
+  if (!b) return 0;
+  return b->site->prefs->backend_type == BACKEND_TYPE_POP;
+}
+
+int board_can_post_messages(Board *b) {
+  if (!b) return 0;
+  if (b->site->prefs->post_url && strlen(b->site->prefs->post_url) &&
+      b->site->prefs->post_template && strlen(b->site->prefs->post_template)) {
+    if (str_startswith(b->site->prefs->post_url, "fucking_broken")) {
+      myprintf("\n\n%<RED BROKEN POST_URL DETECTED>: %s FIX THAT (update your options file and use the new '.post.url:' and '.post.template:' ones\n\n", b->site->prefs->post_url);
+      return 0;
+    }
+    return 1;
+  }
+  else return 0;
+}
+
+void board_save_state(FILE *f, Board *board) {
+  long tmin=LONG_MIN,tmax=LONG_MAX,t=0;
+  tmin = board->time_shift_min;
+  tmax = board->time_shift_max;
+  t = board->time_shift;
+  BLAHBLAH(1,myprintf("%<yel site_save_state> %10s : tmin -> %<cya %3ld> tmax -> %<cya %3ld> t -> %<CYA %3ld>\n",
+                      board->site->prefs->site_name, tmin, tmax, t));
+  fprintf(f, "time_shift_min=%ld time_shift_max=%ld time_shift=%ld\n", (long)tmin, (long)tmax, (long)t);
+  fprintf(f, "last_viewed_id=%d\n", board->last_viewed_id);
+  if (board_is_rss_feed(board) || board_is_pop3(board)) {
+    if (board->mi_tree_root) {
+      save_md5_array_recurs(f, board, board->mi_tree_root);
+    } else { /* on n'a pas fait un seul refresh, �a serait bete de tout ecraser
+                et comme le fichier a dej� ete ouvert en ecriture .. */
+      md5_and_time *m = board->oldmd5;
+      while (m) {
+        save_md5_and_time(f, m->md5, m->tstamp, m->viewed); m = m->next;
+      }
+    }
+  }
+}
+
+void board_restore_state(FILE *f, Board *board) {
+  long tmin,tmax,t;
+  if (fscanf(f, "time_shift_min=%ld time_shift_max=%ld time_shift=%ld\n",&tmin, &tmax, &t) != 3) return;
+  if (tmin <= tmax && tmin <= t && t <= tmax && board) {
+    BLAHBLAH(1,myprintf("%<yel site_restore_state> %10s : tmin <- %<cya %3ld> tmax <- %<cya %3ld> t <- %<CYA %3ld>\n",
+			board->site->prefs->site_name, tmin, tmax, t));
+    board->time_shift_min = tmin;
+    board->time_shift_max = tmax;
+    board->time_shift = t;
+  }
+  fscanf(f, "last_viewed_id=%d", &board->last_viewed_id);
+  if (board_is_rss_feed(board) || board_is_pop3(board)) {
+    board->last_viewed_id = -1; /* on dispose d'une liste de md5 */
+    release_md5_array(board);
+    board->oldmd5 = load_md5_array(f);
+  } else board->oldmd5 = NULL;
+}
+
+
+void
+board_set_viewed(Board *board, int id) {
+  board->last_viewed_id = MAX(id,board->last_viewed_id);
+  board->nb_msg_since_last_viewed = MAX(board->last_post_id - board->last_viewed_id,0);
+}
+
+
+Board *
+board_create(Site *site, Boards *boards)
+{
+  SitePrefs *sp = site->prefs;
+  Board *board;
+
+  assert(boards);
+  ALLOC_OBJ(board, Board);
+  strncpy(board->last_post_time, "xx:xx", 5);
+  board->msg = NULL;
+  board->last_post_id = -1;
+  board->last_post_id_prev = -1;
+  board->wmcc_tic_cnt_last_check = 0;
+  board->last_post_timestamp = 0;
+  board->nbsec_since_last_msg = 0;
+  board->last_viewed_id = -1; board->nb_msg_since_last_viewed = 0;
+  board->nb_msg_at_last_check = 0;
+  board->local_time_last_check = time(NULL);
+  //board->rules = NULL;
+  board->last_modified = NULL;
+  board->flag_answer_to_me = 0;
+  board->board_refresh_delay = sp->board_check_delay*(1000/WMCC_TIMER_DELAY_MS);
+  /* juste pour que le premier check se fasse avant celui des news */
+  board->board_refresh_decnt = 10; 
+  strncpy(board->coin_coin_useragent, sp->user_agent, USERAGENT_MAXMAX_LEN);
+  board->coin_coin_useragent[USERAGENT_MAXMAX_LEN] = 0;
+
+  board->site = site;
+  board->boards = boards;
+
+  board->time_shift_min = LONG_MIN;
+  board->time_shift_max = LONG_MAX;
+  board->time_shift = 0;
+  board->auto_refresh = 1; //sp->board_auto_refresh;
+  board->oldmd5 = NULL;
+  board->rss_title = NULL;
+  board->encoding = NULL;
+  return board;
+}
+
+/* delie un message de la liste globale (avec sa suppression effective) */
+static void
+board_global_unlink_msg(Boards *boards, board_msg_info *mi)
+{
+  assert(mi);
+
+  if (mi->g_prev) {
+    mi->g_prev->g_next = mi->g_next;
+  } else {
+    assert(boards->first == mi);
+    boards->first = mi->g_next;
+    if (boards->first) boards->first->g_prev = NULL;
+  }
+  if (mi->g_next) {
+    mi->g_next->g_prev = mi->g_prev;
+  } else {
+    assert(boards->last == mi);
+    boards->last = mi->g_prev;
+    if (boards->last) boards->last->g_next = NULL;
+  }
+  if (boards->first == NULL || boards->last == NULL) {
+    assert(boards->last == NULL);
+    assert(boards->first == NULL);
+  }
+}
+
+
+void
+board_destroy(Board *board)
+{
+  board_msg_info *mi, *nmi;
+  Boards *boards = board->boards;
+
+  boards->btab[board->site->site_id] = NULL;
+  /* 
+     effacage de toutes les refs � des messages de cette board 
+     c'est pas joli joli, mais faut bien faire le sale boulot
+   */
+  mi = board->boards->first;
+  while (mi) {
+    int i;
+    if (mi->nb_refs) {
+      for (i = 0; i < mi->nb_refs; i++) {
+	if (mi->refs[i].mi) {
+	  Board *ref_board = NULL;
+	  ref_board = boards->btab[id_type_sid(mi->refs[i].mi->id)];
+	  if (ref_board == board) mi->refs[i].mi = NULL;
+	}
+      }
+    }
+    mi = mi->g_next;
+  }
+
+  /*
+    j'vais lui montrer qui c'est Raoul. Au 4 coins d'Paris qu'on va l'retrouver 
+    �parpill� par petits bouts fa�on puzzle... Moi quand on m'en fait trop 
+    j'correctionne plus, j'dynamite... j'disperse... et j'ventile...
+  */
+  mi = board->msg;
+  while (mi) {
+    board_global_unlink_msg(board->boards, mi);
+    nmi = mi->next;
+    if (mi->refs) free(mi->refs); mi->refs = NULL;
+    mi->next = NULL;
+    free(mi);
+    mi = nmi;
+  }
+
+  board->msg = NULL;
+  if (board->last_modified) free(board->last_modified);
+  if (board->rss_title) free(board->rss_title);
+  if (board->encoding) free(board->encoding);
+  release_md5_array(board);
+  free(board);
+}
+
+
+/*
+  statistique � la noix sur le nombre de personnes sur la tribune
+*/
+#define TF_HASH_SZ 2048
+void
+board_frequentation(const Board *board, int nb_minutes, int *ua_cnt, int *msg_cnt, int *my_msg_cnt) {
+  unsigned short hash_cnt[TF_HASH_SZ];
+  unsigned hash_val;
+  const unsigned c2 = 31117, c1 = 11279; 
+
+  time_t t_last;
+
+  board_msg_info *it;
+  int i;
+  
+
+  
+
+  *ua_cnt = 0;
+  *msg_cnt = 0;
+  *my_msg_cnt = 0;
+
+  it = board_find_id(board, board->last_post_id);
+  if (it == NULL) return;
+  t_last = it->timestamp;
+  t_last += board->nbsec_since_last_msg;
+
+  memset(hash_cnt, 0, sizeof(hash_cnt));
+  it = board->msg; 
+  while (it) {
+    if (difftime(t_last, it->timestamp) < nb_minutes*60) {
+      const char *s;
+      if (it->login[0] == 0) {
+	s = it->useragent;
+      } else {
+	s = it->login;
+      }
+      /* au pifometre... faudra ptet verifier qu'on hache correctement */
+      hash_val = 1;
+      for (i=0; s[i]; i++) {
+	hash_val = ((hash_val*((unsigned char)s[i] + c1)) + 1) % c2;
+      }
+      hash_val = hash_val % TF_HASH_SZ;
+      hash_cnt[hash_val]++;
+      (*msg_cnt)++;
+      if (it->is_my_message) (*my_msg_cnt)++;
+    }
+
+    it = it->next;
+  }
+  for (i=0; i < TF_HASH_SZ; i++) {
+    if (hash_cnt[i]) (*ua_cnt)++;
+  }
+}
+
+
+/* je l'aime bien celle la */
+static void
+miniua_eval_from_ua(MiniUARules *rules, board_msg_info *mi)
+{
+#define MUA_MAX_MATCH 9
+
+  MiniUARule *r;
+  MiniUA *mua;
+  int sid, matched;
+  int color_done = 0, ua_done = 0, symb_done = 0;
+  static unsigned default_colors[] = { 
+    0x82e734, /*joli vert*/
+    0xd2262f, /*rouge qui claque*/
+    0xedd92e, /*jaune*/
+    0xed992c, /*orange*/
+    0xed610d, /*tres orange*/
+    0x526bed, /*bleu electrique*/
+    0x9c9c9c, /*gris*/
+    0xed6b52, /*rose*/
+    0x23b6ff, /*joli bleu*/
+    0xd264ed, /*violet*/
+    0x9523ff, /*plus violet*/
+    0xd5008b, /*encore plus*/
+    0x1Feda7, /*bleu-vert*/
+    0xd5e734, /*jaune-vert*/
+  };
+
+  assert(mi);
+  mua = &mi->miniua;
+  sid = id_type_sid(mi->id);
+
+  /* valeur par defaut -- on essaye de prendre quelque chose d'un peu chattoyant */
+  int coul = default_colors[((unsigned)str_hache(Prefs.site[id_type_sid(mi->id)]->site_name,-1)>>4) 
+                            % (sizeof default_colors / sizeof default_colors[0])];
+  //printf("coul = %06x mx=%d\n", coul, (sizeof default_colors / sizeof default_colors[0]));
+  mua->R = coul >> 16;
+  mua->G = (coul >> 8) & 0xff;
+  mua->B = coul & 0xff;
+  if (Prefs.site[id_type_sid(mi->id)]->backend_type == BACKEND_TYPE_RSS) { mua->symb = 1; /* carre */ }
+  else if (Prefs.site[id_type_sid(mi->id)]->backend_type == BACKEND_TYPE_POP) { mua->symb = 10; /* cercle*/ }
+  else {
+    md5_byte_t md5[16];    
+    if (mi->login && strlen(mi->login)) { 
+      md5_digest(mi->login, md5); mua->symb = (md5[0]%8)+2; 
+    } else if (mi->useragent && strlen(mi->useragent)) { 
+      md5_digest(mi->useragent, md5); mua->symb = (md5[0]%8)+2;
+    } else { mua->symb = 13; }
+  }
+  make_short_name_from_ua(mi->useragent, mua->name, MIN(MINIUA_SZ,15));
+
+  for (r = rules->first; r; r = r->next) {
+    int res;
+    
+    matched = 0;
+
+    /* �a colle pour le login / nom du site ? */
+    if ((r->site_name == NULL || strcasecmp(Prefs.site[sid]->site_name, r->site_name) == 0) &&
+	(r->user_login == NULL || strcasecmp(mi->login, r->user_login) == 0)) {
+      regmatch_t match[MUA_MAX_MATCH];
+
+      /* y'a-t-il une regexp � matcher ? */
+      if (r->rgx) {
+	res = regexec(r->rgx, mi->useragent, MUA_MAX_MATCH, match, 0);
+	if (res == 0) { /*       \o/      */
+	  matched = 1;
+	  /* y'a -t-il une regle de remplacement de l'ua ? */
+	  if (r->rua && ua_done == 0) {
+	    const char *keys[] = {"\\0", "\\1", "\\2", "\\3", "\\4", "\\5", "\\6", "\\7", "\\8", "\\9"};
+	    char *repl[MUA_MAX_MATCH];
+	    char *s;
+	    int i;
+
+	    for (i = 0; i < MUA_MAX_MATCH; i++) {
+	      int i0, i1;
+	      i0 = match[i].rm_so; i1 = match[i].rm_eo;
+	      if (i0 != -1 && i1 != -1) { 
+		assert(i0 <= i1);
+		repl[i] = malloc(i1-i0 + 1);
+		strncpy(repl[i], mi->useragent + i0, i1-i0);
+		repl[i][i1-i0] = 0;
+	      } else repl[i] = strdup("<!>");
+	    }
+	    /* sale cast */
+	    s = str_multi_substitute(r->rua, keys, (const char **)repl, MUA_MAX_MATCH);
+	    
+	    /* printf("miniua <--- '%s' 1:'%s' 2:'%s' 3:'%s'\n", s, repl[0], repl[1], repl[2]); */
+
+	    strncpy(mua->name, s, MINIUA_SZ); mua->name[MINIUA_SZ-1] = 0;
+	    free(s);
+	    for (i = 0; i < MUA_MAX_MATCH; i++) free(repl[i]);
+
+	    ua_done = r->ua_terminal;
+	  }
+	}
+      } else {
+	matched = 1;
+	if (r->rua) { /* une regle statique */
+	  strncpy(mua->name, r->rua, MINIUA_SZ); mua->name[MINIUA_SZ-1] = 0;
+	}
+      }
+    }
+
+    if (matched) {
+      if (r->color >= 0 && color_done == 0) {
+	mua->R = (r->color & 0xff0000) >> 16;
+	mua->G = (r->color & 0x00ff00) >> 8;
+	mua->B = (r->color & 0x0000ff);
+	color_done = r->color_terminal;
+      }
+      if (r->symb >= 0 && symb_done == 0) {
+	mua->symb = r->symb;
+	symb_done = r->symb_terminal;
+      }
+    }
+/*     if (matched) { */
+/*       printf("msg %d [%.20s] matched width {%s,%s,%p} %s\n", id_type_lid(mi->id), mi->useragent, r->site_name, r->rua, r->rgx, r->terminal ? "[TERMINAL]" : ""); */
+/*     } */
+    if (color_done && ua_done && symb_done)
+      break;
+  }
+}
+
+/* 
+   renvoie l'age du message, en secondes 
+*/
+time_t
+board_get_msg_age(const Board *board, const board_msg_info *it)
+{
+  return MAX(time(NULL) - (it->timestamp + board->time_shift),0);
+}
+
+/*
+  construction d'un arbre binaire pour retrouver + rapidement les
+  messages en fonction de l'id
+*/
+
+static board_msg_info *
+board_build_tree_recurs(board_msg_info **v, int cnt)
+{
+  int i_root;
+  board_msg_info *root;
+
+  assert(cnt>0);
+  i_root = cnt/2;
+  
+  root = v[i_root]; assert(root); v[i_root] = NULL;
+
+  if (i_root > 0) {
+    root->left = board_build_tree_recurs(v, i_root);
+  } else root->left = NULL;
+  if (i_root+1 < cnt) {
+    root->right = board_build_tree_recurs(v+i_root+1, cnt - i_root - 1);
+  } else root->right = NULL;
+  return root;
+}
+
+static void
+board_build_tree(Board *board)
+{
+  int count = 0, i;
+  board_msg_info *it;
+  board_msg_info **vec;
+
+  /* remise � zero de l'arbre */
+  board->mi_tree_root = NULL;
+
+  /* on compte le nb de messages */
+  it = board->msg; 
+  while (it) { count++; it = it->next; }
+  
+  if (count == 0) return;
+
+  /* on s'offre temporairement un acc�s s�quentiel */
+  vec = (board_msg_info**) calloc(count, sizeof(board_msg_info*)); assert(vec);
+  it = board->msg; i = 0;
+  while (it) { 
+    vec[i] = it;  it = it->next; i++;
+  }
+  
+  board->mi_tree_root = board_build_tree_recurs(vec, count);
+
+  for (i=0; i < count; i++) {
+    assert(vec[i] == NULL); /* sinon j'ai encore laiss� trainer une pouille */
+  }
+
+  free(vec);
+}
+
+/*
+  c'est triste, mais il faut bien que quelqu'un se charge d'�liminer les messages trop vieux
+*/
+static void
+board_remove_old_msg(Board *board)
+{
+  board_msg_info *it, *pit;
+  int cnt;
+  int removed = 0;
+
+  cnt = 0;
+  it = board->msg; pit = NULL;
+  while (it) {
+    cnt++;
+    it = it->next;
+  }
+  while (cnt > board->site->prefs->board_max_msg && board->msg) {
+    BLAHBLAH(4, printf(_("[%s] board_remove_old_msg: destroying id=%d (date=%s)\n"), 
+		       board->site->prefs->site_name, id_type_lid(board->msg->id), 
+		       ctime(&board->msg->timestamp)));
+
+    /* on le supprime d'abord de la liste globable */
+    board_global_unlink_msg(board->boards, board->msg);
+
+    /* on sauve le prochain premier message */
+    it = board->msg->next;
+
+
+    /* nettoyage des references � board->msg 
+       on fait �a sur boards pour aussi gerer les ref. cross tribune
+    */
+    {
+      board_msg_info *mi;
+      int i;
+      mi = board->boards->first;
+      while (mi) {
+	for (i=0; i < mi->nb_refs; i++) {
+	  /* si on trouve un ref � ce message ... */
+	  if (mi->refs[i].mi == board->msg) {
+	    assert(mi->refs[i].nbmi>=1);
+	    
+	    /* alors on l'efface si la ref pointe uniquement sur lui,
+	       et si c'est un ref sur plusieurs messages cons�cutifs, alors
+	       un decremente le compteur et on la fait pointer sur le suivant. 
+	       c'est finaud en fait : comme �a il n'y a pas de bug lors de la
+	       suppression de 11:11:11� car on a supprim� *auparavant* 11:11:11�
+	    */
+	    mi->refs[i].nbmi--;
+	    if (mi->refs[i].nbmi == 0) {
+	      mi->refs[i].mi = NULL;
+	    } else {
+	      mi->refs[i].mi = board->msg->next;
+	    }
+	  }
+	}
+	mi = mi->g_next;
+      }
+    }
+
+    free(board->msg);
+    cnt--;
+    board->msg = it;
+    removed++;
+  }
+  
+  if (removed) {
+    board_build_tree(board);
+  }
+}
+
+/*
+  prout
+*/
+
+/* verifie pour chaque message, si il est necessaire d'afficher les secondes, ou bien
+   si le poste peut etre identifie sans ambiguite par hh:ss 
+
+   nouveau (v2.3.2) -> g�re aussi les sub_timestamp 
+*/
+static void 
+update_secondes_flag(Board *board)
+{
+  board_msg_info *it,*pit;
+
+  pit = board->msg;
+  if (pit == NULL) return;
+  it = pit->next;
+  while (it) {
+    if (it->next) it->hmsf[3] = 0; 
+    if (it->hmsf[0] == pit->hmsf[0] && it->hmsf[1] == pit->hmsf[1]) {
+      it->hmsf[3] = 1; pit->hmsf[3] = 1;
+    }
+    if (it->timestamp == pit->timestamp) {
+      if (pit->sub_timestamp == -1) {
+	pit->sub_timestamp = 0;
+      }
+      it->sub_timestamp = MIN(pit->sub_timestamp+1,9); /* MIN(10,.) sinon y'aura des pb dans le pinnipede */
+    }
+    pit = it;
+    it = it->next;
+  }
+}
+
+/*
+  enleve les commentaires xml (qui sont inseres autour des lien du wiki etc)
+*/
+static char *
+nettoie_message_tags(const char *inmsg) 
+{
+  char *outmsg;
+  const char *s; char *w, *p;
+  int in_comment;
+
+  outmsg = malloc(strlen(inmsg)+1);
+  in_comment = 0;
+  p = outmsg;
+  for (s = inmsg; *s; s++) {
+    if (strncmp(s, "\t<!--",5)==0 && in_comment == 0) {
+      w = strstr(s, "--\t>");
+      if (w) {
+	in_comment = w+4-s;
+      }
+    }
+    if (in_comment == 0) {
+      *p = *s; p++;
+    } else in_comment--;
+  }
+  *p = 0;
+  return outmsg;
+}
+
+/*
+  rajoute du pseudo-html � la noix autour du mot 
+  et renvoie le resultat
+*/
+static char *
+wiki_url_encode(Board *board,const unsigned char *w)
+{
+  unsigned char *w2, *ret;
+  w2 = str_preencode_for_http(w);
+  ret = str_printf("\t<a href=\"%s%s\"\t>[%s]\t</a\t>", board->site->prefs->board_wiki_emulation, w2, w);
+  free(w2); 
+  return ret;
+}
+
+/* 
+   transforme les occurences de [mots entre crochets] par des <a href=> vers le wiki 
+   
+   si cette fonction est appel�e avec 'dest == NULL' , alors elle se contente de renvoyer 
+   la longueur finale obtenue
+*/
+static int
+do_wiki_emulation(Board *board, const char *inmsg, char *dest) 
+{
+  int j;
+  const char *s;
+
+  int in_a_href = 0;
+  s = inmsg; j = 0;
+  while (*s) {
+    if (*s == '\t') {
+      /* pas touche � ce qui est d�j� dans une <a> </a> */
+      if (strncasecmp(s, "\t<a href", 8) == 0 && in_a_href==0) {
+	in_a_href = 1;
+      } else if (strncasecmp(s, "\t</a", 4) == 0 && in_a_href) {
+	in_a_href = 0;
+      }
+    }
+    if (*s == '[') {
+      char *pfin;
+      
+      pfin = strchr(s+1, ']');
+      
+      if (pfin && in_a_href == 0) {
+	char *ptag, *pautre;
+	ptag = strchr(s+1, '\t');
+	pautre = strchr(s+1, '[');
+
+	/* on a un truc entre crochets sans autre crochet ouvrant � l'int�rieur? */
+	if ((pautre == NULL || pautre > pfin) &&
+	    (ptag == NULL || ptag > pfin)) {
+	  char *wiki_word, *wiki_url, *p;
+
+	  /* on copie le mot-wiki */
+	  wiki_word = malloc(pfin-s); assert(wiki_word);
+	  strncpy(wiki_word, s+1, pfin-s-1); wiki_word[pfin-s-1] = 0;
+
+	  /* on le modifie un peu (' ' --> '+' par ex. ) */
+	  wiki_url = wiki_url_encode(board, wiki_word); free(wiki_word); wiki_word = NULL;
+	  p = wiki_url;
+	  while (*p) { 
+	    if (dest) dest[j] = *p; 
+	    j++; p++;
+	  }
+	  s = pfin+1;
+	  free(wiki_url); wiki_url = NULL;
+	  continue;
+	}
+      }
+    }
+    if(dest) dest[j] = *s; 
+    j++; s++;
+  }
+  if (dest) dest[j] = 0;
+  j++;
+  return j;
+}
+
+/* remplace (laborieusement) une [url] par [yahoo] ou [prout] */
+void
+do_url_replacements(char **pmessage)
+{
+  unsigned char *src1, *src2, *insert, *src3;
+  unsigned char *message;
+  int repl = 0;
+
+  message = NULL;
+  src1 = *pmessage;
+  assert(src1);
+  while (src1) {
+    src3 = insert = NULL;
+    src2 = src1;
+    while (*src2 && insert == NULL) {
+      insert = NULL;
+      
+      if (*src2 == '\t' && strncasecmp(src2, "\t<a href=\"", 10) == 0) {
+	unsigned char *deb_url, *fin_url, *tag_fermant;
+	deb_url = src2+10;
+	fin_url = strstr(deb_url, "\t>[url]\t</");
+	tag_fermant = strstr(deb_url, "\t</a");
+	if (deb_url && fin_url && tag_fermant && (tag_fermant > fin_url)) {
+	  
+	  URLReplacement *ur = Prefs.url_repl.first;
+	  unsigned char *url, *crochet;
+	  crochet = fin_url+2;
+	  while (fin_url > deb_url+1 && *fin_url != '"') fin_url--;
+	  url = str_ndup(deb_url, MIN(fin_url-deb_url,1024));
+	  str_tolower(url);
+	  while (ur) {
+	    if (strstr(url, ur->key)) {
+	      break;
+	    }
+	    ur = ur->next;
+	  }
+	  free(url);
+	  if (ur) {
+	    src2 = crochet;
+	    src3 = crochet+5;
+	    insert = ur->repl;
+	    repl++;
+	  }
+	}
+      }
+      
+      if (insert == NULL)
+	src2++;
+    }
+
+    assert(src2);
+      
+    message = str_ncat(message, src1, src2-src1);
+    if (insert) {
+      message = str_cat(message, insert);
+    }
+    src1 = src3;
+  }
+  free(*pmessage);
+  *pmessage = message;
+  if (repl) {
+    BLAHBLAH(4,myprintf("replaced (%d)! '%<yel %s>'\n", repl, message));
+  }
+}
+
+/* Triton> Remplace (tout aussi laborieusement)
+ * <clock time="..."[ site="..."]>nhorloge</clock> par nhorloge
+ * Pour fonctionner avec les tribunes zoreliennes
+ * (zorel, tifauv, bouchot.org, !llinfo, ...)
+ */
+void
+do_clean_zorel_clocks(char **pmessage)
+{
+  /* zorel< est bien gentil avec ses tags clock mais ca fout en l'air
+   * l'affichage dans wmcoincoin. En plus, wmcc est deja pourvu d'un fantastique
+   * detecteur de nhorloges donc on va purement et simplement virer son bordel.
+   * message     = contenu du message nettoye
+   * not_parsed  = debut du message non parse
+   * deb_clock   = debut du tag clock (tabulation initiale incluse)
+   * fin_clock   = fin de ce meme tag clock
+   * tag_fermant = debut du tag de fermeture de clock (10 car avec les tabulations)
+   */
+  unsigned char *not_parsed, *deb_clock, *fin_clock, *tag_fermant;
+  unsigned char *message = NULL;
+
+	message = malloc(1);
+	*message = '\0';
+
+  not_parsed = *pmessage;
+  assert(not_parsed);
+  /* Tant que le message n'est pas fini de parser et qu'il y a des horloges.
+   * On en profite pour noter l'endroit ou commence l'horloge dans deb_clock.
+   */
+  while (not_parsed && (deb_clock = strstr(not_parsed, "\t<clock time=\""))) {
+    fin_clock = strstr(deb_clock, "\t>");
+		/* Ca fini _apres_ "\t>" donc +2 mais seulement si non nul */
+		if (fin_clock) fin_clock += 2;
+    tag_fermant = strstr(deb_clock, "\t</clock\t>");
+    /* Si tag_fermant est non nul, fin_clock l'est forcement (= tag_fermant + 8 dans le pire des cas) */
+    if (tag_fermant && (tag_fermant > fin_clock)) {
+      /* Bon, on a trouve une horloge zorelienne a peu pres correcte.
+       * Maintenant, faut nettoyer de deb_clock � fin_clock
+       * et de tag_fermant a tag_fermant+10
+       */
+      message = str_ncat(message, not_parsed, deb_clock - not_parsed); /* Avant le tag : copie */
+      message = str_ncat(message, fin_clock, tag_fermant - fin_clock); /* La nhorloge : copiee */
+      not_parsed = tag_fermant+10; /* Pas de nhorloge dans l'intervalle, on saute */
+    }
+    else if (tag_fermant) {
+      /* Le tag semble en vrac mais on va quand m�me regarder la suite si elle existe */
+      message = str_ncat(message, not_parsed, (tag_fermant+10) - not_parsed);
+      not_parsed = tag_fermant + 10;
+    }
+    else if (fin_clock) {
+      /* Il n'y a pas de tag de fermeture, tant pis, on supprime celui d'ouverture. */
+      message = str_ncat(message, not_parsed, deb_clock - not_parsed); /* Avant le tag : copie */
+      message = str_cat(message, fin_clock); /* on copie la fin du message */
+      not_parsed = NULL;
+    }
+    else {
+      /* C'est pas la merde maintenant, on n'a meme pas de fin de tag. */
+      message = str_cat(message, not_parsed); /* On n'a plus qu'� copier la fin du message. */
+      not_parsed = NULL;
+    }
+    /* Si on est la fin (cas nominal ou tag en vrac) */
+    if (not_parsed && ((*not_parsed) == '\0')) {
+      not_parsed = NULL;
+    }
+  }
+	/* S'il reste une partie non lue, c'est qu'il n'y a plus d'horloge dedans, on la copie */
+	if (not_parsed) message = str_cat(message, not_parsed);
+  /* On efface le message d'origine et on le remplace par la version epuree */
+  free(*pmessage);
+  *pmessage = message;
+}
+
+/* Triton> Remplace (toujours laborieusement)
+ * <a class=" smiley ..." href="...">[:totoz]</a> par [:totoz]
+ * Pour fonctionner avec les tribunes zoreliennes
+ * (zorel, tifauv, bouchot.org, !llinfo, ...)
+ */
+void
+do_clean_zorel_totozz(char **pmessage)
+{
+  /* zorel< est bien gentil avec ses tags autour des [:totoz] mais ca fout en
+	 * l'air l'affichage dans wmcoincoin. En plus, wmcc est deja pourvu d'un
+   * extraordinaire detecteur de [:totoz] donc on va purement et simplement
+	 * virer son bordel.
+   * message     = contenu du message nettoye
+   * not_parsed  = debut du message non parse
+   * deb_totoz   = debut du tag <a class="smiley snap_nopreview"
+   * fin_totoz   = fin de ce meme tag d'ancre
+   * tag_fermant = debut du tag de fermeture de [:totoz]
+   */
+  unsigned char *not_parsed, *deb_totoz, *fin_totoz, *tag_fermant;
+  unsigned char *message = NULL;
+
+	message = malloc(1);
+	*message = '\0';
+
+  not_parsed = *pmessage;
+  assert(not_parsed);
+  /* Tant que le message n'est pas fini de parser et qu'il y a des [:totoz].
+   * On en profite pour noter l'endroit ou commence les [:totoz] dans deb_totoz.
+   */
+  while (not_parsed && (deb_totoz = strstr(not_parsed, "\t<a class=\"smiley "))) {
+    fin_totoz = strstr(deb_totoz, "\t>[:");
+		/* Ca fini _apres_ "\t>" donc +2 mais seulement si non nul */
+		if (fin_totoz) fin_totoz += 2;
+    tag_fermant = strstr(deb_totoz, "]\t</a\t>");
+		/* Le crochet fermant, c'est juste pour s'assurer du fait que c'est un [:totoz] */
+		if (tag_fermant) ++tag_fermant;
+		/* Si tag_fermant > fin_totoz et fin_totoz > 0 alors tag_fermant > 0, c'est pourtant evident */
+    if (fin_totoz && (tag_fermant > fin_totoz)) {
+      /* Bon, on a trouve un tag zorelien a peu pres correct.
+       * Maintenant, faut nettoyer de deb_totoz � fin_totoz
+       * et de tag_fermant a tag_fermant+6
+       */
+      message = str_ncat(message, not_parsed, deb_totoz - not_parsed); /* Avant le tag : copie */
+      message = str_ncat(message, fin_totoz, tag_fermant - fin_totoz); /* Le [:totoz]  : copie */
+      not_parsed = tag_fermant+6; /* Pas de [:totoz] dans l'intervalle, on saute */
+    }
+    else if (tag_fermant && fin_totoz) {
+      /* Le tag semble en vrac mais on va quand m�me regarder la suite si elle existe */
+      message = str_ncat(message, not_parsed, (tag_fermant+6) - not_parsed);
+      not_parsed = tag_fermant + 6;
+    }
+    else if (fin_totoz && (NULL == tag_fermant)) {
+      /* Il n'y a pas de tag de fermeture, tant pis, on supprime celui d'ouverture. */
+      message = str_ncat(message, not_parsed, deb_totoz - not_parsed); /* Avant le tag : copie */
+      message = str_cat(message, fin_totoz); /* on copie la fin du message */
+      not_parsed = NULL;
+    }
+    else {
+      /* C'est pas la merde maintenant, on n'a meme pas de fin de tag. */
+      message = str_cat(message, not_parsed); /* On n'a plus qu'� copier la fin du message. */
+      not_parsed = NULL;
+    }
+    /* Si on est la fin (cas nominal ou tag en vrac) */
+    if (not_parsed && ((*not_parsed) == '\0')) {
+      not_parsed = NULL;
+    }
+  }
+	/* S'il reste une partie non lue, c'est qu'il n'y a plus d'horloge dedans, on la copie */
+	if (not_parsed) message = str_cat(message, not_parsed);
+  /* On efface le message d'origine et on le remplace par la version epuree */
+  free(*pmessage);
+  *pmessage = message;
+}
+
+typedef struct URLhash {
+  unsigned char md5digest[16];
+  struct URLhash *next;
+  id_type id;
+  unsigned cnt;
+} URLhash;
+
+#define URL_HASH_SZ 233
+URLhash *urlh[URL_HASH_SZ];
+
+static URLhash *
+logged_urls_find_url_(unsigned char *url_, unsigned char digest[16], unsigned *pnn) {
+  /* on canonise l'url , c'est un hommage a jean-paul II */
+  unsigned char url[2048]; strncpy(url,url_,2047); url[2047] = 0;
+  url_au_coiffeur(url,0);
+  str_tolower(url);
+  /* remplace les %xx par le car correspondant */
+  unsigned i=0,j=0;
+  while (url[i]) {
+    if (url[i] != '%' || url[i+1] == '%') url[j++] = url[i++];
+    else {
+      unsigned v; sscanf(url+i+1, "%02x", &v); if (v < 32) v = ' '; url[j] = v;
+      i+=3; j++;
+    }
+  }
+
+  /* insert your comment here */
+  md5_digest(url, digest);
+  unsigned nn = (digest[0] + digest[1]*256 + digest[2] * 65536)%URL_HASH_SZ;
+  URLhash *h = urlh[nn];
+  while (h) {
+    if (memcmp(digest, h->md5digest, 16) == 0) break;
+    h = h->next;
+  }
+  if (pnn) *pnn = nn;
+  return h;
+}
+
+static int
+logged_urls_add_url(id_type id, unsigned char *url) {
+  unsigned char digest[16];
+  unsigned nn;
+  URLhash *h = logged_urls_find_url_(url, digest, &nn);
+  if (h) { h->cnt++; return h->cnt-1; }
+  ALLOC_OBJ(h, URLhash);
+  h->next = urlh[nn]; urlh[nn] = h;
+  h->id = id;
+  h->cnt = 1;
+  memcpy(h->md5digest, digest, 16);
+  return 0;
+}
+
+/* utilise pour l'antibloub */
+int 
+logged_urls_find_url(unsigned char *url, id_type *pid) {
+  unsigned char digest[16];
+  URLhash *h = logged_urls_find_url_(url, digest, NULL);
+  if (h) {
+    if (pid) *pid = h->id;
+    return 1;
+  } else return 0;
+}
+
+/* stocke les md5 des urls recentes */
+static void
+log_urls(char *msg, id_type id)
+{
+  unsigned char url[2048];
+  for ( ; *msg; ++msg) {
+    if (*msg == '\t' && strncasecmp(msg, "\t<a href=\"", 10) == 0) {
+      unsigned char *deb_url, *fin_url, *tag_fermant;
+      deb_url = msg+10;
+      fin_url = strstr(deb_url, "\t>");
+      tag_fermant = strstr(deb_url, "\t</a");
+      if (deb_url && fin_url && tag_fermant && (tag_fermant > fin_url)) {
+        while (fin_url > deb_url+1 && *fin_url != '"') fin_url--;
+        unsigned n = MIN(fin_url-deb_url,2047);
+        strncpy(url, deb_url, n); url[n] = 0;
+        unsigned cnt = logged_urls_add_url(id, url);
+        BLAHBLAH(2,myprintf("nouvelle URL: '%<grn %s>' : %d\n", url, cnt));
+      }
+    }
+  }
+}
+
+
+inline static void
+mi_check_boitakon(Boards *boards, board_msg_info *mi)
+{
+  int i, one_ref_in_bak, all_refs_in_bak;
+  KeyList *hk;
+
+  hk = board_key_list_test_mi_num(boards, mi, Prefs.plopify_key_list, 2);
+  mi->in_boitakon = 0;
+  mi->contagious_boitakon = 0;
+  if (hk) { /* bienvenu dans la boitakon */
+    mi->in_boitakon = 1;
+    if (hk->num == 3) mi->contagious_boitakon = 1;
+  }
+
+  /* maintenant on verifie si il repond � une boitakon contagieuse */
+  one_ref_in_bak = 0;
+  all_refs_in_bak = 1;
+  for (i=0; i < mi->nb_refs; i++) {
+    int j;
+    board_msg_info *mi2;
+    mi2 = mi->refs[i].mi;
+    for (j=0; mi2 && j < mi->refs[i].nbmi; j++) {
+      if (mi2->contagious_boitakon) one_ref_in_bak = 1;
+      else all_refs_in_bak = 0;
+    }
+  }
+  if (one_ref_in_bak) {
+    mi->in_boitakon = Prefs.hungry_boitakon ? 1 : (all_refs_in_bak || mi->in_boitakon);
+    mi->contagious_boitakon = mi->in_boitakon;
+  }
+}
+
+/*
+  comme son nom l'indique ..
+*/
+void
+boards_update_boitakon(Boards *boards)
+{
+  board_msg_info *mi = boards->first;
+  while (mi) {
+    mi_check_boitakon(boards, mi);
+    mi = mi->g_next;
+  }
+  flag_board_updated = 1;
+}
+
+/* la chasse au bug chelou est ouverte */
+void
+assert_boards_ok(Boards *boards) {
+  int pid = -1,i, ptab[MAX_SITES],sid;
+  board_msg_info *mi;
+
+  if (boards->last) {
+    assert(boards->last->next == NULL);
+    assert(boards->last->g_next == NULL);
+  }
+  if (boards->first) {
+    assert(boards->first->g_prev == NULL);
+  }
+  for (i = 0; i < MAX_SITES; ++i) {
+    Board *board = boards->btab[i];
+    if (board) {
+      pid = -1;
+      for (mi = board->msg; mi; mi = mi->next) {
+        assert(id_type_lid(mi->id)>pid);
+        pid = id_type_lid(mi->id);
+      }
+    }
+  }
+  for (i = 0; i < MAX_SITES; ++i) ptab[i] = -1;
+  for (mi = boards->first; mi; mi = mi->g_next) {
+    sid = id_type_sid(mi->id);
+    assert(ptab[sid] < id_type_lid(mi->id));
+    ptab[sid] = id_type_lid(mi->id);
+    if (mi->g_next) assert(mi->g_next->g_prev == mi);
+  }
+  for (i = 0; i < MAX_SITES; ++i) ptab[i] = 2000000000;
+  for (mi = boards->last; mi; mi = mi->g_prev) {
+    sid = id_type_sid(mi->id);
+    assert(ptab[sid] > id_type_lid(mi->id));
+    ptab[sid] = id_type_lid(mi->id);
+    if (mi->g_prev) assert(mi->g_prev->g_next == mi);
+  }
+}
+
+/*
+  enregistre un nouveau message
+*/
+board_msg_info *
+board_log_msg(Board *board, char *ua, char *login, char *stimestamp, char *_message, int id, 
+              const unsigned char *my_useragent)
+{
+  board_msg_info *nit, *pit, *ppit, *it;
+  board_msg_info *g_it, *pg_it;
+  char *message = NULL;
+  Boards *boards = board->boards;
+
+  message = nettoie_message_tags(_message);
+
+  do_url_replacements(&message);
+  /* Triton> Le slip de zorel< est plein de morceaux */
+  do_clean_zorel_clocks(&message);
+  do_clean_zorel_totozz(&message);
+
+  char *saved_message = strdup(message);
+
+  /* emulation du wiki (en ins�rant les bons tags dans le message) */
+  if (board->site->prefs->board_wiki_emulation) {
+    char *tmp = message;
+    int sz;
+    sz = do_wiki_emulation(board, tmp, NULL); 
+    message = malloc(sz); 
+    do_wiki_emulation(board, tmp, message);
+    free(tmp);
+  }
+#ifdef WMCC_EXTRA_CHECKS
+  assert_boards_ok(boards);
+#endif
+  /*if (Prefs.verbosity >= 0) {
+    int i; 
+    printf("log new message MD5="); 
+    for (i=0; i < 16; ++i) myprintf("%<CYA %02X>", md5[i]);
+    printf(") tstamp = %s login=%s", stimestamp, login);
+    if (Prefs.verbosity > 3) {
+      printf(_(" content: '%s'\n"), message);
+    } else printf("\n");
+  }
+  */
+  nit = board->msg;
+  pit = NULL;
+  ppit = NULL;
+  while (nit) {
+    if (nit->id.lid > id) {
+      break;
+    }
+    ppit = pit;
+    pit = nit;
+    nit = nit->next;
+  }
+
+  it = (board_msg_info*) malloc(sizeof(board_msg_info)+strlen(ua)+1+strlen(message)+1+strlen(login)+1);
+  assert(str_to_time_t(stimestamp, &it->timestamp));
+  it->sub_timestamp = -1;
+  it->useragent = ((char*)it) + sizeof(board_msg_info);
+  it->msg = ((char*)it) + sizeof(board_msg_info) + strlen(ua) + 1;
+  it->login = it->msg + strlen(message) + 1;
+  it->ri = NULL;
+  it->in_boitakon = 0; /* voir plus bas */
+  it->left = NULL; it->right = NULL;
+
+  /* insere le message dans la liste de la tribune locale */
+  it->next = nit;
+  if (pit) {
+    pit->next = it;
+  } else {
+    board->msg = it;
+  }
+  id_type_set_lid(&it->id, id);
+  id_type_set_sid(&it->id, board->site->site_id);
+  
+  /* insertion dans la grande chaine de messages globale (inter-sites)*/
+  g_it = pit ? pit : boards->first; /* on demarre sur le dernier message de la 
+                                       m�me tribune d'id inf�rieur
+                                       histoire de respecter inconditionnellement 
+                                       l'ordre par tribune
+                                       (sinon il y a des probl�mes quand 
+                                       un backend laggue et qu'il y
+                                       a des sauts de 'time_shift' */
+  pg_it = g_it ? g_it->g_prev : NULL;
+  while (g_it &&
+         (it->timestamp +  board->boards->btab[it->id.sid]->time_shift >= 
+          g_it->timestamp +board->boards->btab[g_it->id.sid]->time_shift)) {
+    if (it->id.sid == g_it->id.sid && it->id.lid < g_it->id.lid) 
+      break; /* respect de l'ordre sur le site */
+    pg_it = g_it;
+    g_it = g_it->g_next;
+  }
+
+  if (pg_it) {
+    pg_it->g_next = it;
+  } else {
+    boards->first = it;
+  }
+  it->g_prev = pg_it;
+  if (g_it) {
+    g_it->g_prev = it;
+  } else {
+    boards->last = it;
+  }
+  it->g_next = g_it;
+#ifdef WMCC_EXTRA_CHECK
+  assert_boards_ok(boards);
+#endif
+
+  if (board->last_post_id < it->id.lid) {
+    board->last_post_timestamp = it->timestamp;
+    board->last_post_id = it->id.lid;
+    board->last_post_time[0] = stimestamp[8];
+    board->last_post_time[1] = stimestamp[9];
+    board->last_post_time[2] = ':';
+    board->last_post_time[3] = stimestamp[10];
+    board->last_post_time[4] = stimestamp[11];
+  }
+
+  it->hmsf[0] = (stimestamp[8]-'0')*10 + (stimestamp[9]-'0');
+  it->hmsf[1] = (stimestamp[10]-'0')*10 + (stimestamp[11]-'0');
+  it->hmsf[2] = (stimestamp[12]-'0')*10 + (stimestamp[13]-'0');
+  it->hmsf[3] = 1;
+
+  strcpy(it->useragent, ua);
+  strcpy(it->msg, message);
+  strcpy(it->login, login);
+
+  it->nb_refs = 0;
+  it->refs = NULL; /* �a sera trait� un peu plus tard */
+
+  BLAHBLAH(3, myprintf("log msg id=%d, login=%s timestamp=%u msg='%<YEL %s>'\n", id, it->login, (unsigned)it->timestamp, it->msg));
+
+  /* et on n'oublie pas..*/
+  board->nbsec_since_last_msg = 0;
+
+  /* remise a jour du flag d'affichage des secondes */
+  update_secondes_flag(board);
+
+  /* essaye de detecter si vous �tes l'auteur du message */
+  if (id == board->last_posted_id) {
+    it->is_my_message = 1;
+  } else if (board->site->prefs->user_login && board->site->prefs->user_login[0] && board->just_posted_anonymous == 0) {
+    it->is_my_message = !strcasecmp(board->site->prefs->user_login, it->login);
+  } else {
+    /* special pour les sites qui rajoutent des trucs � la fin,
+       on limite la longueur de la comparaison */
+    it->is_my_message = my_useragent && !strncmp(my_useragent, it->useragent, board->site->prefs->palmi_ua_max_len-1);
+/*    if (it->is_my_message) {
+      myprintf("my_message: '%<yel %s>' == '%<grn %s>'\n", it->useragent, my_useragent);
+    }*/
+  }
+  board->just_posted_anonymous = 0;
+
+
+  it->is_answer_to_me = 0;
+
+  /* essaye d'identifier le user agent */
+  miniua_eval_from_ua(&Prefs.miniuarules, it);
+
+  /* evalue le potentiel trollesque */
+  if (id_type_lid(it->id) == 9348) {
+    printf("attention ch�rie �a va couper\n");
+  }
+
+  mi_check_boitakon(board->boards, it);
+  if (it->in_boitakon) { /* bienvenu dans la boitakon */
+    BLAHBLAH(2, myprintf(_("Welcome to the message from '%.20s' in the boitakon\n"), it->login ? it->login : it->useragent));
+  }
+
+  /* oui faire �a ici c'est pas efficace, surtout quand le coincoin d�marre
+     et qu'il ajoute 100 messages d'un coup -> on va refaire 100 fois l'arbre
+
+     mais pour l'instant, �a reste comme �a (c'est quand m�me tr�s peu couteux finalement)
+
+     et comme le pinnipede peut etre mis a jour en plein milieu du d/l du backend,
+     �a �vite toute inconsistence entre la structure de liste des messages, et
+     celle d'arbre */
+     
+  board_build_tree(board);
+
+  /* attention le troll detector prend du temps .. du coup on vire le flag de toute
+     fa�on il n'a aucun impact ici */
+  flag_updating_board--;
+  troll_detector(it);
+  flag_updating_board++;
+
+  if (board_is_regular_board(board))
+    log_urls(saved_message, it->id);
+
+  free(saved_message);
+  free(message);
+  return it;
+}
+
+/* 
+   renvoie le nombre moyen de messages postes sur la tribune libre au
+   cours des derniere 'trollo_log_extent' secondes
+*/
+void
+board_get_trollo_rate(const Board *board, float *trollo_rate, float *trollo_score)
+{
+  board_msg_info *it;
+  int cnt;
+  
+  it = board->msg;
+
+  *trollo_score = 0.;
+  cnt = 0;
+  while (it) {
+    int age;
+    float coef;
+    
+    age = board_get_msg_age(board, it);
+    //    printf("id=%d, %d , age=%d\n", it->id.lid, cnt, board_get_msg_age(board, it));
+    if (board_get_msg_age(board, it) <= trollo_log_extent*60) {
+      cnt++;
+      coef = 0.1 * (trollo_log_extent*60 - age)/((float)(trollo_log_extent*60));
+      *trollo_score += (it->troll_score)*coef;
+    }
+    it = it->next;
+  }
+  /* renvoie le nb de messages par minute */
+  *trollo_rate = (float)cnt/(float)trollo_log_extent;
+
+}
+
+static void
+board_do_balltrap(Board *board, int last_id) {
+ board_msg_info *it = board->msg;
+ BLAHBLAH(1, myprintf("board_call_external, id=%d - %d\n", last_id, board->last_post_id));
+ if (last_id != -1) { /* si ce n'est pas le premier appel.. */
+   it = board_find_id(board, last_id);
+   if (it) it = it->next;
+ } else {
+   return; /* � l'initialisation, on de lacher un milliard de canards */
+  }
+  while (it) { 
+    balltrap_check_message(it->id, it->msg);
+    it = it->next;
+  }
+  balltrap_launch();
+}
+/*
+  merci shift pour ce patch !
+
+  appelle le programme externe (dans l'ordre des id) pour chaque nouveau message re�u
+*/
+static void
+board_call_external_(Board *board, int last_id, char *cmd) {
+  board_msg_info *it;
+  BLAHBLAH(1, myprintf("board_call_external, id=%d - %d\n", last_id, board->last_post_id));
+  if (last_id != -1) { /* si ce n'est pas le premier appel.. */
+    it = board_find_id(board, last_id);
+    if (it) it = it->next;
+  } else {
+    return; /* � l'initialisation, on �vite de passer tous les messages dans le coincoin */
+  }
+  while (it) {
+    char *qlogin;
+    char *qmessage;
+    char *qua;
+    char *qhost;
+    char sid[20], stimestamp[20], strollscore[20], *stypemessage,  stypemessage2[4];
+    int typemessage;
+    char *shift_cmd;
+
+    const char *keys[] = {"$l", "$m", "$u", "$i", "$t", "$s", "$r", "$R", "$v","$h"};
+    const char *subs[] = {  "",   "",   "",   "",   "",   "",   "", "", VERSION, ""};
+
+    //----< Code pour passer les infos d'un post � une commande ext�rieure >
+
+    qlogin = shell_quote(it->login);
+    qmessage = shell_quote(it->msg);
+    qua = shell_quote(it->useragent);
+    qhost = shell_quote(board->site->prefs->site_name);
+    snprintf(sid, 20, "%d", it->id.lid);
+    snprintf(stimestamp, 20, "%lu", (unsigned long)it->timestamp);
+    snprintf(strollscore, 20, "%d", it->troll_score);
+    
+    /* je garde �a pendant qqes version pour pas casser les bigornos, 
+       mais l'option � utiliser dor�navant, c'est plutot $R */
+    stypemessage = "0";
+    if (it->is_my_message) stypemessage = "1";
+    else if (it->is_answer_to_me) stypemessage = "2";
+    else if (board_key_list_test_mi(board->boards, it, Prefs.hilight_key_list)) stypemessage = "3";
+    else if (board_key_list_test_mi(board->boards, it, Prefs.plopify_key_list)) stypemessage = "4";
+
+    /* pour $R */
+    typemessage = 0;
+    if (it->is_my_message) typemessage |= 1;
+    if (it->is_answer_to_me) typemessage |= 2;
+    if (board_key_list_test_mi(board->boards, it, Prefs.hilight_key_list)) typemessage |= 4;
+    if (board_key_list_test_mi(board->boards, it, Prefs.plopify_key_list)) typemessage |= 8;
+    snprintf(stypemessage2, 4, "%d", typemessage);
+
+    subs[0] = qlogin;
+    subs[1] = qmessage;
+    subs[2] = qua;
+    subs[3] = sid;
+    subs[4] = stimestamp;
+    subs[5] = strollscore;
+    subs[6] = stypemessage;
+    subs[7] = stypemessage2;
+    subs[9] = qhost;
+    shift_cmd = str_multi_substitute(cmd, keys, subs, 10);
+    BLAHBLAH(2, myprintf("post_cmd: /bin/sh -c %<YEL %s>\n", shift_cmd));
+    system(shift_cmd);
+
+    free(shift_cmd);
+    free(qlogin);
+    free(qmessage);
+    free(qua);
+    free(qhost);
+    //----</ Code >
+    it = it->next;
+
+    ALLOW_X_LOOP;
+  }
+}
+
+static void
+board_call_external(Board *board, int last_id)
+{
+  int i;
+  for (i=0; i < NB_BIGORNO; ++i) {
+    if (Prefs.post_cmd[i] && Prefs.post_cmd_enabled[i]) {
+      board_call_external_(board,last_id,Prefs.post_cmd[i]);
+    }
+  }
+}
+
+
+
+
+/*
+  detecte les refs par petites horloges
+  (mais ne tente rien pour ipot)
+*/
+void
+board_check_my_messages(Board *board, int old_last_post_id) { 
+  if (board->last_post_id != old_last_post_id) { /* si de nouveaux messages ont �t� re�us */
+    board_msg_info *it;
+    /* truc batard ci-dessous... il faudrait faire mieux */
+    char *callme = NULL;
+    if (!str_is_empty(board->site->prefs->user_login)) callme = str_printf("%s<", board->site->prefs->user_login);
+
+    /* essaye de detecter si il s'agit d'une r�ponse � un de vos messages 
+     */
+    if (old_last_post_id != -1) { /* si ce n'est pas le premier appel.. */
+      it = board_find_id(board, old_last_post_id);
+      if (it) it = it->next;
+    } else {
+      it = board->msg;
+    }
+    while (it) {
+      flag_updating_board++;
+      board_msg_find_refs(board, it); // rhoo il etait bien cach� cet appel sournois
+      mi_check_boitakon(board->boards, it); /* ce deuxi�me appel est un peu redondant
+					       mais il permet de s'assurer de la contagion des
+					       boitakon */
+      flag_updating_board--;
+
+      if (!it->in_boitakon) {
+        if (board_msg_is_ref_to_me(board->boards, it) ||
+            (callme && str_case_str(it->msg, callme))) {
+          flag_updating_board++;
+          it->is_answer_to_me = 1;
+          flag_updating_board--;
+          if (old_last_post_id != -1 && !it->is_my_message) board->flag_answer_to_me = 1;
+        }
+      }
+      it = it->next;
+    }
+    FREE_STRING(callme);
+  }
+}
+
+
+void
+cctime(const time_t* t, char *s)
+{
+  sprintf(s, "%02ld:%02ld:%02ld", (*t/3600)%24, (*t/60)%60, *t%60);
+}
+/*
+  determination approximative du d�calage horaire 
+*/
+static void
+board_update_time_shift(Board *board, int old_last_post_id) { 
+  if (!board_is_regular_board(board)) {
+    board->time_shift_min = board->time_shift_max = 0; // fait chier sinon
+  } else if (board->last_post_id != old_last_post_id) { /* si de nouveaux messages ont �t� re�us */
+    char s1[15],s2[15];
+    board_msg_info *it;
+    time_t t_min = 0, t_max = 0;
+    int nbmsg = 1;
+    /* essaye de detecter si il s'agit d'une r�ponse � un de vos messages 
+     */
+    if (old_last_post_id == -1) { /* si ce n'est pas le premier appel.. */
+      return;
+    }
+    it = board_find_id(board, old_last_post_id);
+    if (it && it->next) {
+      it = it->next;      
+      t_min = it->timestamp;
+      t_max = it->timestamp;
+      it = it->next;
+    } else 
+      return;
+
+    while (it) {
+      t_min = MIN(t_min, it->timestamp);
+      t_max = MAX(t_max, it->timestamp);
+      nbmsg ++;
+      it = it->next;
+    }
+
+
+    if (t_max - t_min > board->local_time_last_check_end-board->local_time_last_check_old) {
+      BLAHBLAH(1,myprintf("%<YEL ------------------------------\nle backend LAGGUE !!\n----------------->\n"));
+    }
+    board->time_shift_min = MAX(board->time_shift_min, 
+				board->local_time_last_check_old - t_min);
+    board->time_shift_max = MIN(board->time_shift_max, 
+				board->local_time_last_check_end - t_max);
+
+    if (board->time_shift_min == board->time_shift_max) {
+      board->time_shift_min--;
+      board->time_shift_max++;
+    }
+
+    if (board->time_shift_min >  board->time_shift_max) {
+      int marge;
+      time_t tmp;
+      if (board->time_shift_min - board->time_shift_max > 1) {
+	BLAHBLAH(1,myprintf("%<YEL ------------------------------\nRAAAAAAAAAAAAH SWAP!!\n----------------->\n"));
+	marge = 10;
+      } else {
+	BLAHBLAH(1,myprintf("%<YEL petit ajustement>\n"));
+	marge = 1;
+      }
+      tmp = board->time_shift_min;
+      board->time_shift_min = board->time_shift_max-marge;
+      board->time_shift_max = tmp+marge;
+    }
+
+
+    board->time_shift = (board->time_shift_min+board->time_shift_max)/2;
+    
+    if (Prefs.verbosity >= 1) {
+      myprintf("%<YEL %s>\n", board->site->prefs->site_name);
+      cctime(&t_min,s1); cctime(&t_max,s2);
+      printf("t_min : %s, t_max : %s, d=%ld nbmsg=%d\n", s1, s2, 
+	     t_max-t_min, nbmsg);
+    
+      cctime(&board->local_time_last_check_old,s1); cctime(&board->local_time_last_check_end,s2); 
+      printf("loct1 : %s, loct2 : %s, d=%ld\n", s1, s2,
+	     board->local_time_last_check_end-board->local_time_last_check_old);
+      printf("time_shift_min : %ld, time_shift_max : %ld, ts=%ld\n", 
+	     board->time_shift_min, board->time_shift_max,board->time_shift);
+    }
+  }
+}
+
+/* decodage du message, quel que soit l'�tat du backend .. */
+void
+board_decode_message(Board *board, char *dest, const char *src) {
+  strncpy(dest, src, BOARD_MSG_MAX_LEN); dest[BOARD_MSG_MAX_LEN-1] = 0;
+  if (board->site->prefs->backend_flavour == BACKEND_FLAVOUR_UNENCODED) {
+    mark_html_tags(dest, BOARD_MSG_MAX_LEN);
+  }
+  convert_to_ascii(dest, dest, BOARD_MSG_MAX_LEN);
+  if (board->site->prefs->backend_flavour == BACKEND_FLAVOUR_ENCODED) {
+    mark_html_tags(dest, BOARD_MSG_MAX_LEN);    
+    convert_to_ascii(dest, dest, BOARD_MSG_MAX_LEN);
+  }
+
+  /* cette partie est destin�e a etre modifi�e � chaque fois que le backend 
+     sera dans un �tat pas presentable � un validator, 
+     par ex. un backend avec des poils qui depassent du string */
+  if (board->site->prefs->backend_flavour == BACKEND_FLAVOUR_NO_PANTS) {
+    char *s, *s2;
+    
+    s = strdup(dest); assert(s);
+    s2 = str_substitute(s, "</bgt;", "\t</b\t>"); free(s); s = s2; /* special super bug.. */
+    s2 = str_substitute(s, "<b>", "\t<b\t>"); free(s); s = s2;
+    s2 = str_substitute(s, "</b>", "\t</b\t>"); free(s); s = s2;
+    s2 = str_substitute(s, "<i>", "\t<i\t>"); free(s); s = s2;
+    s2 = str_substitute(s, "</i>", "\t</i\t>"); free(s); s = s2;
+    s2 = str_substitute(s, "<u>", "\t<u\t>"); free(s); s = s2;
+    s2 = str_substitute(s, "</u>", "\t</u\t>"); free(s); s = s2;
+    s2 = str_substitute(s, "<s>", "\t<s\t>"); free(s); s = s2;
+    s2 = str_substitute(s, "</s>", "\t</s\t>"); free(s); s = s2;
+    s2 = str_substitute(s, "<a ", "\t<a "); free(s); s = s2;
+    s2 = str_substitute(s, "\">", "\"\t>"); free(s); s = s2;
+    s2 = str_substitute(s, "</a>", "\t</a\t>"); free(s); s = s2;
+    s2 = str_substitute(s, "<clock time", "\t<clock time"); free(s); s = s2;
+    s2 = str_substitute(s, "</clock>", "\t</clock\t>"); free(s); s = s2;
+    s2 = str_substitute(s, "<!--", "\t<!--"); free(s); s = s2;
+    s2 = str_substitute(s, "-->", "--\t>"); free(s); s = s2;
+    strncpy(dest, s, BOARD_MSG_MAX_LEN); dest[BOARD_MSG_MAX_LEN-1] = 0; free(s);
+    convert_to_ascii(dest, dest, BOARD_MSG_MAX_LEN); /* deuxi�me passe, � tout hasard */
+  }
+  BLAHBLAH(4,myprintf(_("Original message: '%<CYA %s>'\n"), src));
+  BLAHBLAH(4,myprintf(_("Decoded message: '%<MAG %s>'\n"), dest));
+}
+
+/* bou comme c'est laid */
+int 
+http_get_line_and_convert(HttpRequest *r, char *s, size_t sz, const char *encoding) {
+  int cnt = http_get_line_trim(r, s, sz);
+  if (cnt) {
+    char *w = strdup(s); assert(w);
+    convert_to_utf8(encoding, &w);
+    strncpy(s,w,sz); s[sz-1] = 0;
+    free(w);
+  }
+  return cnt;
+}
+
+int 
+regular_board_update_old(Board *board, char *path) {
+  HttpRequest r;
+  int http_err_flag = 0;
+  char *errmsg = NULL;
+  char s[16384]; /* must be large enough to handle very long lines
+		    (especially with broken backends, yes it happens sometimes) */
+
+  const char *board_sign_post = "<post";
+  const char *board_sign_time = "time=";
+  const char *board_sign_info = "<info>";
+  const char *board_sign_msg = "<message>";
+  const char *board_sign_login = "<login>";
+  const char *my_useragent = board->coin_coin_useragent;
+  wmcc_init_http_request_with_cookie(&r, board->site->prefs, path);
+  /* Triton> D'abord, c'est plus propre que Accept: * / *
+             ensuite ca evite de recuperer un truc gzippe par le serveur web
+             parce que ce boulet de zorel< ne pense qu'a lui -__-'
+   */
+  r.accept = strdup("text/xml");
+  if (board->site->prefs->use_if_modified_since) { r.p_last_modified = &board->last_modified; }
+  http_request_send(&r);
+  wmcc_log_http_request(board->site, &r);
+
+  /* 
+     premi�re ligne : on essaye de chopper l'encoding -- du coup, �a devrait assurer une
+     relative compatibilit� avec les tribunes en UTF-8 ou autre.
+  */
+  if (http_get_line_trim(&r, s, 16384)) {
+    XMLBlock xmlb;
+    int pos;
+    clear_XMLBlock(&xmlb);
+    if ((pos = get_XMLBlock(s, strlen(s), "?xml", &xmlb))>=0) {
+      XMLAttr *a;
+      int found = 0;
+      if (board->encoding) free(board->encoding);
+      for (a = xmlb.attr; a; a = a->next) {
+        if (str_case_startswith(a->name, "encoding")) {
+          board->encoding = str_ndup(a->value,a->value_len);
+          BLAHBLAH(1,printf("%s: found encoding: value = '%s'\n", board->site->prefs->site_name, board->encoding));
+          found = 1;
+          break;
+        }
+      }
+      if (!found) board->encoding = strdup("UTF-8"); /* defaut si pas d'encoding specifie */
+    }
+    destroy_XMLBlock(&xmlb);
+  }
+
+
+  if (http_is_ok(&r)) {
+    int roll_back_cnt = 0;
+    while (http_get_line_and_convert(&r, s, 16384,board->encoding) > 0 && http_is_ok(&r)) {
+      if (strncasecmp(s,board_sign_post, strlen(board_sign_post)) == 0 && strstr(s, board_sign_time)) {
+        md5_byte_t md5[16]; md5_state_t md5_state;
+	char stimestamp[15];
+	char ua[BOARD_UA_MAX_LEN];
+	char msg[BOARD_MSG_MAX_LEN];
+	char login[BOARD_LOGIN_MAX_LEN];
+	int id;
+	char *p;
+
+
+        md5_init(&md5_state);
+	p = strstr(s, board_sign_time) + strlen(board_sign_time);
+        while (*p && (isspace(*p) || *p == '"')) ++p;
+	strncpy(stimestamp, p, 14); stimestamp[14] = 0;
+        md5_append(&md5_state,stimestamp,14);
+        /* de nombreux coincoins sont morts sur le champ d'honneur, ci-dessous un petit bugfix � leur m�moire.
+           Qu'ils reposent en paix */
+        if (strlen(stimestamp) < 14) { fprintf(stderr,"timestamp POURRI: '%s'\n",stimestamp); errmsg = "slip woof?"; goto err; }
+	p = strstr(s, "id=");
+	if (p == NULL) { errmsg = "id="; goto err; }
+	id = atoi(p+4);
+	if (id < 0) { errmsg="id sgn"; goto err; }
+
+        //printf("id=%d , last=%d\n",id,board->last_post_id);
+
+	if (board_find_id(board,id) && roll_back_cnt == 0) {
+	  /*	  break;
+            Rollback bugfix
+
+	    il semblerait qu'il arrive parfois une sorte de race condition dans le backend (lors de posts multiples dans la
+	    m�me seconde) :  � l'instant t, le backend contient les ids {n, n-1, n-2, ..}, et � l'instant t+1 
+	    il re�oit le message n+1 en DEUXIEME POSITION: {n, n+1, n-1, n-2,...} du coup si le coincoin avait fait son
+	    update entre t et t+1, il va rater le message n+1, puisque lors de la prochaine update, la lecture du backend 
+	    s'arr�tera sur le message n, d�j� connu.
+
+	    solution: on fait un rollback lorsqu'il y un trou dans les id des 3 derniers messages
+	  */
+	  int need_roll_back = 0;
+
+	  /* on regarde (comme un boeuf) si les message id-1, id-2 et id-3 ont bien �t� re�us */
+	  if (id > 1 && board->msg) {
+	    if (board_find_id(board, id-1) == NULL) need_roll_back = 2;
+	    if (id > 2 && board->msg->next) {
+	      if (board_find_id(board, id-2) == NULL) need_roll_back = 3;
+	      if (id > 3 && board->msg->next->next) {
+		if (board_find_id(board, id-3) == NULL) need_roll_back = 4;
+	      }
+	    }
+	  }
+	  if (need_roll_back == 0) {
+	    break; /* �a roule, cassos */
+	  } else {
+	    /* il manque un message, soit il provient de la tribune des mod�rateurs et est donc inaccessible,
+	       soit il y a effectivement eu une race condition dans dacode */
+	    
+	    roll_back_cnt = 3;
+	  }
+	}
+
+	if (http_get_line_and_convert(&r, s, 16384, board->encoding) <= 0) { errmsg="httpgetline(info)"; goto err; }
+
+	if (strncasecmp(s, board_sign_info,strlen(board_sign_info))) { errmsg="infosign"; goto err; }
+	if (strncasecmp("</info>", s+strlen(s)-7,7)) { errmsg="</info>"; goto err; }
+	s[strlen(s)-7] = 0; /* vire le /info */
+	p = s + strlen(board_sign_info);
+
+        //myprintf("UA = '%<GRN %s>'\n", p);
+        md5_append(&md5_state,p,strlen(p));
+
+        convert_to_ascii(ua, p, BOARD_UA_MAX_LEN);
+
+	if (http_get_line_and_convert(&r, s, 16384, board->encoding) <= 0) { errmsg="httpgetline(message)"; goto err; }
+
+	if (strncasecmp(s, board_sign_msg,strlen(board_sign_msg))) { errmsg="messagesign"; goto err; }
+	
+	//	myprintf("message: '%<YEL %s>'\n\n", s); 
+
+	// il arrive que le post tienne sur plusieurs lignes (je sais pas pourquoi) 
+	{
+	  int l;
+	  l = strlen(s);
+	  while (strncasecmp("</message>", s+l-10,10)) {
+	    if (http_get_line_and_convert(&r, s+l, 16384 - l, board->encoding) <= 0) {
+	      errmsg="</message>"; goto err; 
+	    }
+	    l = strlen(s);
+	  }
+	}
+
+	
+
+	s[strlen(s)-10] = 0; /* vire le </message> */
+	p = s + strlen(board_sign_msg);
+
+        md5_append(&md5_state,p,strlen(p));
+
+	/* nettoyage des codes < 32 dans le message */
+	{
+	  int i = 0;
+
+	  while (i < BOARD_MSG_MAX_LEN && p[i]) {
+	    if ((unsigned char)p[i] < ' ') p[i] = ' ';
+	    i++;
+	  }
+	}
+
+	/* attention, les '<' deviennent '\t<' et les '&lt;' devienne '<' */
+	board_decode_message(board, msg, p);
+
+	if (http_get_line_and_convert(&r, s, 16384, board->encoding) <= 0) { errmsg="httpgetline(login)"; goto err; }
+	if (strncasecmp(s, board_sign_login,strlen(board_sign_login))) { errmsg="messagesign_login"; goto err; }
+	if (strncasecmp("</login>", s+strlen(s)-8,8)) { errmsg="</login>"; goto err; }
+
+	s[strlen(s)-8] = 0; 
+	p = s + strlen(board_sign_login);
+
+        md5_append(&md5_state,p,strlen(p));
+
+	if (strcasecmp(p, "Anonyme") != 0) {
+	  convert_to_ascii(login, p, BOARD_LOGIN_MAX_LEN);
+	} else {
+	  login[0] = 0;
+	}
+
+	if (roll_back_cnt == 0 || board_find_id(board,id) == NULL) {
+	  if (roll_back_cnt) {
+	    myprintf(_("%<YEL \\o/ Maybe there just has been a race condition in the board backend !> (id=%d).\n"
+		     "DON'T PANIC, the coincoin handles this well, it only proves I didn't write\n"
+		     "this bugfix for coconuts.\n"), id);
+	  }
+          md5_finish(&md5_state,md5);
+	  flag_updating_board++;
+	  if (!board_log_msg(board, ua, login, stimestamp, msg, id, my_useragent)->in_boitakon) {
+            board->nb_msg_at_last_check++;
+            if (id > board->last_viewed_id) {
+              board->nb_msg_since_last_viewed++;
+            }
+          }
+	  flag_updating_board--;
+	}
+
+	BLAHBLAH(1, myprintf("[%<YEL %s>] board_update: last_post_time=%5s - last_post_id=%d\n",
+			   board->site->prefs->site_name, board->last_post_time, id));
+	if (roll_back_cnt > 1) roll_back_cnt--;
+	else if (roll_back_cnt == 1) break;
+      }
+    }
+    if (!http_is_ok(&r)) { http_err_flag = 1; }
+  err:
+    if (errmsg) {
+      myfprintf(stderr, _("[%<YEL %s>] There is a problem in '%s',  I can't parse it... "
+			  "error:%<YEL %s>\n"),
+		board->site->prefs->site_name,
+		board->site->prefs->backend_url, errmsg);
+    }
+  } else {
+    http_err_flag = 1;
+    myfprintf(stderr, _("[%<YEL %s>] Error while downloading '%<YEL %s>' : %<RED %s>\n"), 
+	      board->site->prefs->site_name, board->site->prefs->backend_url, http_error());
+  }
+  http_request_close(&r);
+  return http_err_flag;
+}
+
+int 
+regular_board_update(Board *board, char *path) {
+  HttpRequest r;
+  int http_err_flag = 0;
+  char *errmsg = NULL;
+  char s[16384]; /* must be large enough to handle very long lines
+		    (especially with broken backends, yes it happens sometimes) */
+  const char *my_useragent = board->coin_coin_useragent;
+  wmcc_init_http_request_with_cookie(&r, board->site->prefs, path);
+  /* Triton> Pour les commentaires, il faut voir au dessus */
+  r.accept = strdup("text/xml");
+  if (board->site->prefs->use_if_modified_since) { r.p_last_modified = &board->last_modified; }
+  http_request_send(&r);
+  wmcc_log_http_request(board->site, &r);
+
+  /* 
+     premi�re ligne : on essaye de chopper l'encoding -- du coup, �a devrait assurer une
+     relative compatibilit� avec les tribunes en UTF-8 ou autre.
+  */
+  if (http_get_line_trim(&r, s, 16384)) {
+    XMLBlock xmlb;
+    int pos;
+    clear_XMLBlock(&xmlb);
+    if ((pos = get_XMLBlock(s, strlen(s), "?xml", &xmlb))>=0) {
+      XMLAttr *a;
+      int found = 0;
+      if (board->encoding) free(board->encoding);
+      for (a = xmlb.attr; a; a = a->next) {
+        if (str_case_startswith(a->name, "encoding")) {
+          board->encoding = str_ndup(a->value,a->value_len);
+          BLAHBLAH(1,printf("%s: found encoding: value = '%s'\n", board->site->prefs->site_name, board->encoding));
+          found = 1;
+          break;
+        }
+      }
+      if (!found) board->encoding = strdup("UTF-8"); /* defaut si pas d'encoding specifie */
+    }
+    destroy_XMLBlock(&xmlb);
+  }
+
+  strbuf sb; strbuf_init(&sb, "");
+  while (http_is_ok(&r) && !errmsg) {
+    XMLBlock post; clear_XMLBlock(&post);
+    int ok = 0;
+
+    sb.len = 0; /* petit coup de flemme : �a va chier si on 
+                   enchaine les posts sur une m�me ligne */
+    while (http_get_line_and_convert(&r, s, sizeof s,board->encoding) > 0 && http_is_ok(&r) && sb.len < 500000) {
+      strbuf_cat(&sb, s);
+      if (get_XMLBlock(sb.str, sb.len, "post", &post)>=0) {
+        ok = 1;
+        break;
+      }
+    }
+    if (!ok) break;
+
+    char stimestamp[15];
+    char ua[BOARD_UA_MAX_LEN];
+    char msg[BOARD_MSG_MAX_LEN];
+    char login[BOARD_LOGIN_MAX_LEN];
+    int id;
+    stimestamp[0] = ua[0] = msg[0] = login[0] = 0; id = -1;
+    
+    BLAHBLAH(3, myprintf("got new post: %s\n", post.content));
+
+    XMLAttr *a = post.attr;
+    while (a) {
+      unsigned l = MIN(a->name_len, (int)((sizeof s) - 1));
+      strncpy(s, a->name, l); s[l] = 0;
+      if (strcasecmp(s, "time")==0) {
+        unsigned l = MIN((sizeof stimestamp)-1,(unsigned)a->value_len);
+        strncpy(stimestamp, a->value, l); stimestamp[l] = 0;
+      } else if (strcasecmp(s, "id")==0) {
+        if (a->value_len == 0 || !isdigit(a->value[0]))
+          id = -1000;
+        else id = atoi(a->value);
+      }
+      a = a->next;
+    }
+      
+    XMLBlock xmlb; clear_XMLBlock(&xmlb);
+    if (get_XMLBlock(post.content, post.content_len, "login",&xmlb)) {
+      unsigned l = MIN(BOARD_LOGIN_MAX_LEN-1, xmlb.content_len);
+      strncpy(login, xmlb.content, l); login[l]=0;
+      if (strcasecmp(login, "Anonyme") != 0) {
+        convert_to_ascii(login, login, BOARD_LOGIN_MAX_LEN);
+      } else login[0] = 0;
+    }
+    if (get_XMLBlock(post.content, post.content_len, "info",&xmlb)) {
+      unsigned l = MIN(BOARD_UA_MAX_LEN-1, xmlb.content_len);
+      strncpy(ua, xmlb.content, l); ua[l]=0;
+      convert_to_ascii(ua, ua, BOARD_UA_MAX_LEN);
+    }
+    if (get_XMLBlock(post.content, post.content_len, "message",&xmlb)) {
+      char *p = str_ndup(xmlb.content, xmlb.content_len); assert(p);
+      int i;
+      /* nettoyage des codes < 32 dans le message */
+      for (i=0; i < xmlb.content_len; ++i) {
+        if ((unsigned char)p[i] < ' ') 
+          p[i] = ' ';
+      }
+      board_decode_message(board, msg, p);
+      free(p);
+    } else errmsg = "no <message> tag!";
+    destroy_XMLBlock(&xmlb);
+    
+    if (!errmsg && strlen(stimestamp) < 14) {
+      fprintf(stderr,"timestamp POURRI: '%s'\n",stimestamp); 
+      errmsg = "slip woof?"; 
+    }
+    if (!errmsg && id < 0) { 
+      errmsg="id sgn"; 
+    }
+    destroy_XMLBlock(&post);
+    if (board_find_id(board,id)) break;
+    if (!errmsg) { /* encore une victoire de xmlcoincoin */
+      flag_updating_board++;
+      if (!board_log_msg(board, ua, login, stimestamp, 
+                         msg, id, my_useragent)->in_boitakon) {
+        board->nb_msg_at_last_check++;
+        if (id > board->last_viewed_id) {
+          board->nb_msg_since_last_viewed++;
+        }
+      }
+      flag_updating_board--;
+      BLAHBLAH(1, myprintf("[%<YEL %s>] board_update: "
+                           "last_post_time=%5s - last_post_id=%d\n",
+                           board->site->prefs->site_name, 
+                           board->last_post_time, id));
+    } else if (errmsg) {
+      myfprintf(stderr, _("[%<YEL %s>] There is a problem in '%s', "
+                          "I can't parse it... error:%<YEL %s>\n"),
+                board->site->prefs->site_name,
+                board->site->prefs->backend_url, errmsg);
+    }
+  }
+  strbuf_free(&sb);
+
+  if (!http_is_ok(&r)) { 
+    http_err_flag = 1;
+    myfprintf(stderr, _("[%<YEL %s>] Error while downloading "
+                        "'%<YEL %s>' : %<RED %s>\n"), 
+	      board->site->prefs->site_name, 
+              board->site->prefs->backend_url, http_error());
+  }
+  http_request_close(&r);
+  return http_err_flag;
+}
+
+
+/*
+  lecture des nouveaux messages re�us
+
+  my_useragent: useragent derni�rement utilis�, sert � reconnaitre si on est 
+  l'auteur d'un post, ou non
+*/
+void
+board_update(Board *board)
+{
+  char path[2048];
+
+  int old_last_post_id;
+
+  int http_err_flag = 0;
+
+  /* maj du nombre de secondes ecoulees depuis le dernier message recu
+     (pour pouvoir calculer l'age des message -> on part du principe
+     que l'horloge locale et l'horloge de linuxfr ne sont pas synchrones)
+  */
+
+  old_last_post_id = board->last_post_id;
+
+  board->local_time_last_check_old = board->local_time_last_check;
+  board->local_time_last_check = time(NULL);
+
+  /* �a c'est pour le pinni */
+  board->wmcc_tic_cnt_last_check = wmcc_tic_cnt;
+  board->last_post_id_prev = old_last_post_id;
+
+  board->nbsec_since_last_msg += difftime(board->local_time_last_check, board->local_time_last_check_old);
+  /* des fois qu'une des 2 horloges soit modifie a l'arrache */
+  board->nbsec_since_last_msg = MAX(board->nbsec_since_last_msg,0);
+  board->nb_msg_at_last_check = 0;
+
+  if ((Prefs.debug & 2) == 0) {
+    snprintf(path, 2048, "%s", board->site->prefs->backend_url);
+  } else {
+    snprintf(path, 2048, "%s/wmcoincoin/test/%s/remote.xml", getenv("HOME"), board->site->prefs->site_name);
+    myprintf(_("DEBUG: opening '%<RED %s>'\n"), path);
+  }
+
+  if (board_is_regular_board(board)) {
+    pp_set_download_info(board->site->prefs->site_name, "updating board");
+    http_err_flag = regular_board_update(board, path);
+  } else if (board_is_rss_feed(board)) {
+    pp_set_download_info(board->site->prefs->site_name, "updating RSS");
+    http_err_flag = rss_board_update(board,path);
+  } else if (board_is_pop3(board)) {
+    pp_set_download_info(board->site->prefs->site_name, "updating POP3");
+    http_err_flag = pop3_board_update(board,path);
+  }
+  if (http_err_flag) {
+    board->site->http_error_cnt++;
+    board->site->http_recent_error_cnt++;
+  } else {
+    board->site->http_success_cnt++;
+    board->site->http_recent_error_cnt = 0;
+  }
+
+  board->local_time_last_check_end = time(NULL);
+
+  /* cleanup .. */
+  flag_updating_board++;
+  board_remove_old_msg(board);
+  flag_updating_board--;
+
+
+  board_check_my_messages(board, old_last_post_id);
+  board_update_time_shift(board, old_last_post_id);
+
+  pp_set_download_info(NULL, NULL);
+
+  flag_board_updated = (board->last_post_id != old_last_post_id) ? 1 : 0;  
+
+  if (board->last_post_id != old_last_post_id) { /* si de nouveaux messages ont �t� re�us */
+    board_call_external(board, old_last_post_id);    
+    if (board_is_regular_board(board)) board_do_balltrap(board, old_last_post_id);
+  }
+
+}
diff --git a/src/board_pop3.c b/src/board_pop3.c
new file mode 100644
index 0000000..6743863
--- /dev/null
+++ b/src/board_pop3.c
@@ -0,0 +1,332 @@
+#include "board_priv.h"
+#include "base64.h"
+
+int pop3_ok(const char *s) {
+  if (s == NULL || strlen(s) < 3 || strncmp(s, "+OK", 3)) return 0;
+  else return 1;
+}
+
+int pop3_end_multiline(char *s) {
+  str_rtrim_lf(s);
+  if (strlen(s) == 1 && s[0] == '.') return 1;
+  else return 0;
+}
+
+int
+pop3_wait_ok_line(TelnetSession *ts) {
+  char line[512];
+  if (ts->error) return 0;
+  telnet_get_line(ts, line, 512);
+  if (!ts->error) {
+    return pop3_ok(line);
+  }
+  return 0;
+}
+
+static void unhtml_body(char *txt) {
+  char *src, *dest, in_tag = 0;
+  for (src = txt, dest = txt; *src; ++src) {
+    if (*src == '<' && !in_tag) in_tag++;
+    else if (*src == '>' && in_tag != 0) in_tag--;
+    else if (!in_tag) { *dest++ = *src; }
+  }
+  *dest=0;
+}
+
+char* copy_text_between_angles(const char *src, char *dest, size_t dest_sz) {
+  char *a, *b;
+  size_t n;
+  a = strchr(src, '<'); if (!a) return NULL;
+  b = strchr(a, '>'); if (!b) return NULL;
+  n = MIN(dest_sz, (size_t)(b-a+1));
+  memmove(dest, a, dest_sz);
+  if ((size_t)(b-a+1) < dest_sz) dest[b-a+1] = 0;
+  else dest[dest_sz-1] = 0;
+  return b;
+}
+
+/* ref: rfc1521 rfc1522
+   dequoteur � coulisse
+*/
+void dequote_printable(char *s, int is_quoted_printable) {
+  int rfc1522_section = 0;
+  char *d = s, *p;
+  while (*s) {
+    if (s[0] == '=' && s[1] == '?') {
+      p = strchr(s+2,'?');
+      if (p && p[1] == 'Q') { /* pour l'instant le B-encoding c'est dtc, base64 �a fait chier */
+        rfc1522_section = 1; s = p+3;
+      }
+    }
+    if (rfc1522_section && s[0] == '?' && s[1] == '=') {
+      rfc1522_section = 0; s+=2;
+    }
+    if (*s != '=' || !(is_quoted_printable || rfc1522_section)) {
+      *d++ = *s++;
+    } else {
+      unsigned code;
+      s++;
+      if (*s > ' ' && sscanf(s, "%02X", &code)==1 && code < 256) {
+        *d++ = MAX(' ',code);
+        s+=2;
+      } else if (*s <= ' ') s++;
+    }
+  }
+  *d = 0;
+}
+
+int
+pop3_check_message(Board *board, TelnetSession *ts, int msgnum, const char *uidl) {
+  Boards *boards = board->boards;
+  int was_already_viewed = 0;
+  md5_byte_t md5[16];
+  md5_digest(uidl,md5);
+  /* cherche le news dans le cache (au premier dl uniquement) */
+  if (board->oldmd5) {
+    md5_and_time *m = find_md5_in_md5_array(md5,board->oldmd5);
+    if (m && strlen(m->tstamp) == 14) {
+      was_already_viewed = m->viewed;
+      BLAHBLAH(1, myprintf("the mail '%<GRN %s>' was found in the cache!\n", uidl));
+    }
+  }
+  /* cherche dans la liste des news dej� lues (apr�s le premier dl) */
+  if (board_find_md5(board, md5)) {
+    BLAHBLAH(1,myprintf("the mail %<MAG %s>/%<CYA %s> is already known\n", ts->host, uidl));
+  } else {
+    char ua[100];
+    char subject[100];
+    char body[4000];
+    char sender[100];
+    char message_id[200];
+    char refmsg[500];
+    char mime_boundary[100];
+    char s[40]; 
+    int in_body = 0, html_junk=0, is_quoted_printable = 0, is_base64 = 0, body_line_count = 0;
+    time_t timestamp = time(NULL);
+    ua[0] = 0; subject[0] = 0; body[0] = 0; sender[0] = 0; mime_boundary[0] = 0; 
+    message_id[0] = 0; refmsg[0] = 0;
+    snprintf(s, 40, "TOP %d 40\r\n", msgnum);
+    BLAHBLAH(1,myprintf("sending %s", s));
+    telnet_send(ts, s);
+    if (!pop3_wait_ok_line(ts)) return -1;
+    do {
+      char line[512];
+      telnet_get_line(ts, line, 512); str_rtrim_lf(line);
+      if (ts->error) return -2;
+      if (line[0] == '.') {
+        if (strlen(line) == 1) { 
+          break;
+        } else memmove(line, line+1, strlen(line)+1);
+      }
+      if (str_startswith(line, "User-Agent:")) {
+        strncpy(ua, line+11, 100); ua[99] = 0; str_trim(ua); 
+      }
+      if (str_startswith(line, "X-Mailer:")) {
+        strncpy(ua, line+9, 100); ua[99] = 0; str_trim(ua); 
+      }
+      if (str_startswith(line, "Return-Path:")) {
+        strncpy(sender, line+12, 100); sender[99] = 0; str_trim(sender); 
+      }
+      if (str_startswith(line, "From:")) {
+        strncpy(sender, line+6, 100); sender[99] = 0; str_trim(sender); 
+      }
+      if (str_startswith(line, "Subject:")) {
+        strncpy(subject, line+8, 100); subject[99] = 0; str_trim(subject);         
+      }
+      if (str_startswith(line, "Date:")) {
+        if (str_to_time_t(line+5, &timestamp)) {
+          char stimestamp[15];
+          time_t_to_tstamp(timestamp, stimestamp);
+          BLAHBLAH(1,myprintf("got time! : %<CYA %s> -> %<YEL %ld> -> %<MAG %s>\n", line, (long)timestamp, stimestamp));
+          if (timestamp > time(NULL)) timestamp = time(NULL);
+        }
+        else printf("could not convert '%s' to a date\n", line+5);
+      }
+      if (!in_body && strstr(line, "boundary=")) {
+        char *sbound = strstr(line, "boundary=");
+        if (sbound) { 
+          str_rtrim_lf(line);
+          char *tmp = str_dup_unquoted(sbound+9);
+          strncpy(mime_boundary, tmp, 100); mime_boundary[99] = 0; 
+          BLAHBLAH(1,printf("looking mime-boundary: '%s'\n", mime_boundary)); 
+          free(tmp);
+        }
+      } else if (strlen(mime_boundary) && strstr(line, mime_boundary)) {
+        BLAHBLAH(1,printf("found mime-boundary %s\n", mime_boundary));
+        mime_boundary[0] = 0;
+      }
+      if (!in_body && str_startswith(line, "Message-Id:")) {
+        if (copy_text_between_angles(line, message_id, sizeof message_id)) {
+          BLAHBLAH(1,myprintf("got message_id : %<grn %s>\n", message_id));
+        }
+      }
+      if (!in_body && (str_startswith(line, "In-Reply-To:") || 
+                       str_startswith(line, "References:"))) {
+        char in_reply_to[200] ,*p = line;
+        BLAHBLAH(1,myprintf("got reply : %<GRN %s>", in_reply_to));
+        while ((p=copy_text_between_angles(p, in_reply_to, sizeof in_reply_to))) {
+          RSSBonusInfo *bi = rss_find_from_link(boards, in_reply_to);
+          if (bi) {
+            board_msg_info *ref_mi = boards_find_id(boards, bi->id);
+            if (ref_mi) {
+              char reftmp[100];
+              snprintf(reftmp, 100, 
+                       "%02d:%02d:%02d ", ref_mi->hmsf[0], ref_mi->hmsf[1], ref_mi->hmsf[2]);              
+              BLAHBLAH(1,printf(" FOUND!!! : %s (id=%d)", refmsg, id_type_lid(ref_mi->id)));
+              if (!strstr(refmsg,reftmp) && strlen(refmsg)+strlen(reftmp)+1 < sizeof refmsg) {
+                strcat(refmsg, reftmp);
+              }
+            }
+          }
+          BLAHBLAH(1,printf("\n")); 
+        }
+      }
+      if (!in_body && str_startswith(line, "Content-Transfer-Encoding: quoted-printable")) {
+        is_quoted_printable = 1;
+      }
+      if (!in_body && str_startswith(line, "Content-Transfer-Encoding: base64")) {
+        is_base64 = 1;
+      }
+      
+      if (!in_body && strstr(line, "text/html")) {
+        html_junk = 1;
+      }
+      if (strlen(line) == 0 && mime_boundary[0] == 0) in_body = 1;
+      else if (in_body) {
+        str_trim(line);
+        if (strlen(line)) body_line_count++;
+        if ((str_startswith(line, ">") || str_startswith(line, "|")) &&
+            body_line_count == 2 && strrchr(body, ':')) { /* detecte les "On Tue, Mar 09, 2004 at 02:29:43PM -0800, plop wrote:" */
+          body[0] = 0;
+        }
+        if (!str_startswith(line, ">") && !str_startswith(line, "|")) {
+          strncat(body, " ", 3999 - strlen(body)); body[3999] = 0;
+          strncat(body, line, 3999 - strlen(body)); body[3999] = 0;
+        }
+      }
+    } while (1);
+    if (strlen(sender) == 0) strcpy(sender, "(unknown)");    
+
+    dequote_printable(body, is_quoted_printable);
+    if (is_base64) {
+      BLAHBLAH(1,myprintf("%<yel DECODING:> '%<CYA %s>'\n", body));
+      from64tobits(body,body,0); //base64_decode(body);
+    }
+    if (html_junk) unhtml_body(body);
+    
+    str_trunc_nice(body, 512);
+    { int i; for (i = 0; body[i]; ++i) if (body[i] > 0 && body[i] < ' ') body[i] = ' '; }
+    dequote_printable(subject, 0);
+    dequote_printable(sender, 0);
+
+    BLAHBLAH(1,myprintf("fin, tout est ok: subject=%<YEL %s>\nbody=%s\nua=%s\nsender=%<yel %s>\nmessageid=%s\nreply_to=%s\n\n\n", subject, body, ua, sender, message_id, refmsg));
+    {
+      char msgd[BOARD_MSG_MAX_LEN];
+      char *subject2, *body2, /**ua2,*/ /**sender2,*/ *msg = NULL;
+      static const char *htmlkeys[] = { "<", ">", "&", "\"" };
+      static const char *htmlsubs[] = { "<", ">", "&", """ };
+      subject2 = str_multi_substitute(subject, htmlkeys, htmlsubs, 4);
+      body2 = str_multi_substitute(body, htmlkeys, htmlsubs, 4);
+      //ua2 = str_multi_substitute(ua, htmlkeys, htmlsubs, 4);
+      //sender2 = str_multi_substitute(sender, htmlkeys, htmlsubs, 4);
+
+      msg = str_printf("%s<u><b>%s</b></u> -- %s", refmsg, subject2, body2);
+      board_decode_message(board, msgd, msg);
+
+      prelog_add(ua,sender,timestamp,msgd,message_id[0] ? message_id : NULL, md5, was_already_viewed);
+      board->nb_msg_at_last_check++;
+      if (!was_already_viewed) board->nb_msg_since_last_viewed++;
+      free(msg); /*free(ua2);*/ free(body2); free(subject2); /*free(sender2);*/
+    }
+  }
+  return 0;
+}
+
+int pop3_board_update(Board *board, char *path) {
+  TelnetSession ts; 
+  SplittedURL su;
+  char greeting[512],line[512];
+  char *user, *pass;
+  int nb_msg = 0, mailbox_size = 0, msgcnt;
+  char **uidls = NULL;
+  int use_normal_auth = 1;
+  BLAHBLAH(1,printf("update de %s\n",path));
+
+  prelog_clear();
+
+  user = board->site->prefs->pop3_user;
+  pass = board->site->prefs->pop3_pass;
+  if (str_is_empty(user) || str_is_empty(pass)) {
+    myprintf("%<RED I can't log you into %s, stupid !> no login/pass known for this site (fill .wmcoincoin/options.auth)\n", path);
+    return 1;
+  };
+
+  telnet_session_init(&ts);
+  if (split_url(path,&su)) assert(0);
+  assert(su.type == POP3_URL || su.type == APOP_URL);
+  ts.host = strdup(su.host);
+  ts.port = su.port;
+  telnet_session_open(&ts);
+  if (ts.error) goto err;
+  telnet_get_line(&ts, greeting, 512);
+  BLAHBLAH(1,myprintf("got greeting from %s : '%<YEL %s>'\n", path, greeting));
+  if (ts.error || !pop3_ok(greeting)) goto err;
+  if (0 && /* APOP ne marche pas sur free :-/ pas pig� pourquoi, le digest a pourtant l'air bon */
+      copy_text_between_angles(greeting, greeting, sizeof(greeting))) {
+    char *msgid, *apop_cmd = NULL;
+    md5_byte_t md5[16]; 
+    BLAHBLAH(1,printf("trying APOP\n"));
+    msgid = str_printf("%s%s", greeting, pass);
+    memset(md5,0,16);
+    md5_digest(msgid, md5);
+    apop_cmd = str_printf("APOP %s %s\r\n", user, md5txt(md5));
+    BLAHBLAH(1,printf("sending %s", apop_cmd));
+    telnet_send(&ts, apop_cmd);
+    if (pop3_wait_ok_line(&ts)) use_normal_auth = 0;
+    free(apop_cmd);
+    free(msgid);
+  }
+  if (use_normal_auth) {
+    BLAHBLAH(1,myprintf("sending USER %s\n", user));
+    telnet_send(&ts, "USER "); telnet_send(&ts, user); telnet_send(&ts, "\r\n");
+    if (!pop3_wait_ok_line(&ts)) goto err;
+    BLAHBLAH(1,myprintf("sending PASS ..\n", pass));
+    telnet_send(&ts, "PASS "); telnet_send(&ts, pass); telnet_send(&ts, "\r\n");
+    if (!pop3_wait_ok_line(&ts)) goto err;
+  }
+  telnet_send(&ts, "STAT\r\n");
+  telnet_get_line(&ts, line, 512);
+  if (ts.error || !pop3_ok(line)) goto err;
+  if (sscanf(line, "+OK %d %d", &nb_msg, &mailbox_size) != 2) goto err;
+  telnet_send(&ts, "UIDL\r\n");
+  if (!pop3_wait_ok_line(&ts)) goto err;
+  ALLOC_VEC(uidls, nb_msg, char *);
+  for (msgcnt = 0; msgcnt < nb_msg; ++msgcnt) {
+    char uidl[500];
+    int n;
+    telnet_get_line(&ts, line, 512);
+    if (ts.error) goto err;
+    if (sscanf(line, "%d %500s", &n, uidl) != 2 || n != msgcnt+1) goto err;
+    uidls[msgcnt] = strdup(uidl);
+    //printf("got uidl=%s\n", uidl);
+  }
+  telnet_get_line(&ts, line, 512);
+  if (!pop3_end_multiline(line)) goto err;
+  for (msgcnt = 0; msgcnt < nb_msg; ++msgcnt) {
+    if (pop3_check_message(board, &ts, msgcnt+1, uidls[msgcnt]) != 0) {
+      printf("error during d/l of %s ..\n", uidls[msgcnt]); goto err;
+    }
+  }
+
+  BLAHBLAH(1,myprintf("sending QUIT\n"));
+  telnet_send(&ts, "QUIT\r\n");
+  if (uidls) { int i; for (i = 0; i < nb_msg; ++i) FREE_STRING(uidls[i]); free(uidls); }
+  telnet_session_close(&ts);
+  prelog_commit(board);
+  return 0;
+ err:
+  telnet_session_close(&ts);
+  if (uidls) { int i; for (i = 0; i < nb_msg; ++i) FREE_STRING(uidls[i]); free(uidls); }
+  prelog_commit(board);
+  return 1;
+}
diff --git a/src/board_priv.h b/src/board_priv.h
new file mode 100644
index 0000000..98a5b07
--- /dev/null
+++ b/src/board_priv.h
@@ -0,0 +1,31 @@
+#include "global.h"
+#include <libintl.h>
+#define _(String) gettext (String)
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <limits.h>
+#include "coincoin.h"
+#include "http.h"
+#include "board_util.h"
+#include "xmlcoincoin.h"
+
+/* utilise tres localement, c'est la longueur DANS remote.xml, la longueur r�elle sera moindre
+   (remplacement de &eacute par '�' etc... ) */
+#define BOARD_UA_MAX_LEN 1000
+#define BOARD_MSG_MAX_LEN 15000 /* on peut y arriver avec un bon gros message plein de [][][][]... */
+#define BOARD_LOGIN_MAX_LEN 60
+
+void release_md5_array(Board *b);
+md5_and_time *find_md5_in_md5_array(md5_byte_t md5[16], md5_and_time *m);
+void board_decode_message(Board *board, char *dest, const char *src);
+board_msg_info *board_log_msg(Board *board, char *ua, char *login, 
+                              char *stimestamp, char *_message, int id, 
+                              const unsigned char *my_useragent);
+RSSBonusInfo *rss_register(Boards *boards, md5_byte_t mimd5[16], char *link, board_msg_info *mi);
+int rss_board_update(Board *board, char *path);
+int pop3_board_update(Board *board, char *path);
+void prelog_clear();
+void prelog_add(char *ua, char *login, time_t tstamp, char *message, char *link, md5_byte_t md5[16], int already_viewed);
+void prelog_commit(Board *board);
diff --git a/src/board_rss.c b/src/board_rss.c
new file mode 100644
index 0000000..da4243a
--- /dev/null
+++ b/src/board_rss.c
@@ -0,0 +1,446 @@
+#include "board_priv.h"
+
+/* pinaise j'en ai marre de faire ce genre de fonctions */
+char* rss_nettoie_la_soupe_de_tags(char *src) {
+  strbuf sb; strbuf_init(&sb, "");
+  char *p, *p2;
+  while (src[0]) {
+    int skip;
+    skip = 0;
+    if (*src == '\t') {
+      p = src+1;
+      if (*p == '<') {
+        p++;
+        while (*p && (isspace(*p) || *p == '/')) ++p;
+        p2 = p;
+        while (*p2 && !isspace(*p2) && *p2 != '/' && *p2 != '>') ++p2;
+        if (*p2) {
+          if ((strncasecmp(p, "br", 2)==0 && p2-p == 2) ||
+              (strncasecmp(p, "p", 1)==0 && p2-p == 1) ||
+              (strncasecmp(p, "div", 3)==0 && p2-p == 3) ||
+              (strncasecmp(p, "table", 5)==0 && p2-p == 5) ||
+              (strncasecmp(p, "tr", 2)==0 && p2-p == 2) ||
+              (strncasecmp(p, "td", 2)==0 && p2-p == 2)) {
+            skip = 1;
+          } else if (strncasecmp(p, "img", 3)==0 && p2 - p == 3) {            
+            char *ps, *pe;
+            //printf("img tag here : %.50s\n", p);
+            ps = str_case_str(p, "src=");
+            pe = strstr(p, "\t>");
+            if (ps && pe && ps < pe) {
+              ps += 4;
+              while (*ps && (isspace(*ps) || *ps == '"' || *ps == '\'')) ++ps;
+              if (*ps) {                
+                strbuf_cat(&sb, "\t<a href=\"./");
+                while (*ps && *ps != '"' && *ps != '\'' && *ps != '\t' && !isspace(*ps)) 
+                  strbuf_putc(&sb,*ps++);
+                strbuf_cat(&sb, "\"\t><img>\t</a\t>");
+                //printf("sbuff = %s\n", sb.str);
+              }
+            }
+            ++p; skip = 1;
+          }
+        }
+      }
+      if (skip) {
+        p = strchr(src+1,'\t'); 
+        if (p) { src = p+1; if (*src) src++; strbuf_putc(&sb, ' '); }
+        else { return sb.str; }
+      }
+    }
+    if (!skip) strbuf_putc(&sb, *src++);
+  }
+  return sb.str;
+  //*dest = 0;
+}
+
+
+RSSBonusInfo *rss_register(Boards *boards, md5_byte_t mimd5[16], char *link, board_msg_info *mi) {
+  RSSBonusInfo *ri;
+  int i;
+  ALLOC_OBJ(ri, RSSBonusInfo); 
+  ri->link = NULL;
+  ri->id = mi->id;
+
+  if (link && strlen(link)) {
+    ri->link = strdup(link);
+  } else { 
+    ri->link = strdup("(none)");
+  }
+  md5_digest(ri->link,ri->linkmd5);
+
+  //printf("reghister = '%s', md5 = %02x%02x..%02x\n", link, ri->linkmd5[0], ri->linkmd5[1], ri->linkmd5[15]);
+
+  memcpy(ri->md5,mimd5,16);
+  if (boards->nb_rss_e == boards->max_rss_e) {
+    boards->max_rss_e *= 2; 
+    boards->rss_e = realloc(boards->rss_e, sizeof(RSSBonusInfo*)*boards->max_rss_e); 
+    assert(boards->rss_e);
+  }
+  boards->rss_e[boards->nb_rss_e++] = ri;
+  for (i = boards->nb_rss_e - 1; i; --i) {
+    if (memcmp(boards->rss_e[i-1]->linkmd5, boards->rss_e[i]->linkmd5, 16) > 0) {
+      RSSBonusInfo *tmp = boards->rss_e[i];
+      boards->rss_e[i] = boards->rss_e[i-1]; 
+      boards->rss_e[i-1] = tmp;
+    } else break;
+  }
+  /*for (i=0; i < boards->nb_rss_e; ++i) {
+    printf(" rss %d/%d : %02x%02x..%02x\n", i, boards->nb_rss_e, boards->rss_e[i]->linkmd5[0], boards->rss_e[i]->linkmd5[1], boards->rss_e[i]->linkmd5[15]);
+    }*/
+  return ri;
+}
+
+RSSBonusInfo *
+rss_find_from_link(Boards *boards, char *link) {
+  int i0, i1;
+  md5_byte_t md5[16];
+  md5_digest(link,md5);
+  //printf("link = '%s', md5 = %02x%02x..%02x\n", link, md5[0], md5[1], md5[15]);
+  i0 = 0; i1 = boards->nb_rss_e-1;
+  while (i1>=i0) {
+    int i = (i0 + i1)/2;
+    //printf("i0=%d, i1=%d, compare with %02x%02x..%02x\n", i0, i1, boards->rss_e[i]->linkmd5[0], boards->rss_e[i]->linkmd5[1], boards->rss_e[i]->linkmd5[15]);
+    int cmp = memcmp(boards->rss_e[i]->linkmd5, md5, 16);
+    if (i1 <= i0 && cmp) return NULL;        
+    if (cmp < 0) {
+      i0 = i+1;
+    } else if (cmp > 0) {
+      i1 = i-1;
+    } else return boards->rss_e[i];
+  }
+  return NULL;
+}
+
+RSSBonusInfo *
+rss_find_from_id(Boards *boards, id_type id) {
+  int i;
+  for (i=0; i < boards->nb_rss_e; ++i) {
+    if (id_type_eq(boards->rss_e[i]->id, id)) return boards->rss_e[i];
+  }
+  return NULL;
+}
+
+/*
+  ce qui suit sert � stocker temporairement les nouveau messages et a les 
+  trier en fonction de la date (il ne sont jamais dans le bon ordre sinon, et en 
+  plus ils n'ont pas d'id)
+  quand ils sont tous connus, on peut leur filer un id et les logger pour de bon
+*/
+typedef struct prelog_msg {
+  char *ua, *login, *msg;
+  time_t tstamp;
+  char *link;
+  int viewed;
+  md5_byte_t md5[16];  
+  struct prelog_msg *next;
+} prelog_msg;
+
+static struct prelog_msg *prelog = NULL;
+
+void
+prelog_clear() {
+  prelog_msg *pl = prelog, *n;
+  while (pl) {
+    n = pl->next;
+    FREE_STRING(pl->ua); FREE_STRING(pl->login); FREE_STRING(pl->msg); FREE_STRING(pl->link);
+    free(pl); pl = n;
+  }
+  prelog = NULL;
+}
+
+void prelog_add(char *ua, char *login, time_t tstamp, char *message, char *link, md5_byte_t md5[16], int viewed) {
+  prelog_msg *pl, *p, *pp;
+  ALLOC_OBJ(pl, prelog_msg);
+  pl->ua = strdup(ua); pl->login = strdup(login); 
+  pl->msg = strdup(message); 
+  pl->link = link ? strdup(link) : NULL;
+  pl->tstamp = tstamp;
+  pl->viewed = viewed;
+  memcpy(pl->md5, md5, 16);
+
+  pp = NULL; p = prelog;
+  while (p && p->tstamp < tstamp) {
+    pp = p;
+    p = p->next;
+  }
+  if (pp) {
+    pl->next = pp->next;
+    pp->next = pl;
+  } else {  
+    pl->next = prelog;
+    prelog = pl;
+  }
+}
+
+void prelog_commit(Board *board) {
+  prelog_msg *pl = prelog;
+  board_msg_info *mi;
+  id_type id;
+  int count = board->last_post_id+1;
+  char stimestamp[15];
+  while (pl) {
+    id_type_set_lid(&id, count);
+    id_type_set_sid(&id, board->site->site_id);
+    assert(board_find_id(board,id_type_lid(id)) == NULL);
+    time_t_to_tstamp(pl->tstamp, stimestamp);
+    flag_updating_board++;
+    BLAHBLAH(4,printf("prelog_commit(%s) %p id=%d, ts=%s, login=%s\n", board->site->prefs->site_name, pl, count, stimestamp, pl->login));
+    mi = board_log_msg(board, pl->ua, pl->login, stimestamp, pl->msg, id_type_lid(id), NULL);
+    mi->ri = rss_register(board->boards, pl->md5, pl->link, mi);
+    flag_updating_board--;
+    if (pl->viewed) board_set_viewed(board,count); //->last_viewed_id = MAX(board->last_viewed_id, count);
+    pl = pl->next; ++count;
+  }
+  prelog_clear();
+}
+
+int
+rss_board_update(Board *board, char *path) {
+  HttpRequest r;
+  //int http_err_flag = 0;
+  //char *errmsg = NULL;
+  char *rsstxt = NULL, *p;
+  char *rss_title = NULL;
+  XMLBlock xmlb;
+  int pos, refresh_request = -1, cest_bon_je_connais_la_suite = 0;
+  time_t temps_debut = time(NULL), temps_last_modified;
+
+  prelog_clear();
+  clear_XMLBlock(&xmlb);
+  wmcc_init_http_request(&r, board->site->prefs, path);
+  /* Triton>    Tant qu'a faire de mettre un header "Accept:", autant le mettre partout
+                Hooo, c'est cool, y'en a un prevu pour les flux rss au lieu d'un bete
+                text/xml generique et banal [:freekill]
+     SeeSchlo�> ouais ouais sauf qu'il y a plein de serveurs de merde qui ne comprennent
+                pas ce type, alors non [:benou] */
+  //r.accept = strdup("application/rss+xml");
+  if (board->site->prefs->use_if_modified_since) { r.p_last_modified = &board->last_modified; }
+  http_request_send(&r);
+  if (!http_is_ok(&r)) { http_request_close(&r);return 1; }
+  wmcc_log_http_request(board->site, &r);
+  rsstxt = http_read_all(&r, path);
+  http_request_close(&r);
+  if (!http_is_ok(&r)) goto ratai;
+  if (!rsstxt || !http_is_ok(&r)) return 1; /* "not modified" */
+  
+  if (strlen(rsstxt)==0) goto RAS;
+
+  /* tentative de conversion vers utf8 */
+  if ((pos = get_XMLBlock(rsstxt, strlen(rsstxt), "?xml", &xmlb))>=0) {
+    XMLAttr *a;
+    int found = 0;
+    if (board->encoding) { free(board->encoding); board->encoding = NULL; }
+    for (a = xmlb.attr; a; a = a->next) {
+      if (str_case_startswith(a->name, "encoding")) {
+        board->encoding = str_ndup(a->value,a->value_len);
+        BLAHBLAH(1,printf("%s: found encoding: value = '%s'\n", board->site->prefs->site_name, board->encoding));
+        found = 1;
+        break;
+      }
+    }
+    if (!found) board->encoding = strdup("UTF-8"); /* defaut si pas d'encoding specifie */
+    convert_to_utf8(board->encoding, &rsstxt);
+  }
+
+  pos = get_XMLBlock(rsstxt, strlen(rsstxt), "title", &xmlb);
+  if (pos < 0 || xmlb.content_len == 0) goto ratai;
+  /*if (board->rss_title) free(board->rss_title);
+    board->rss_title = str_ndup(xmlb.content, xmlb.content_len);*/
+  rss_title = str_ndup(xmlb.content, xmlb.content_len);
+  BLAHBLAH(1, myprintf("got TITLE: '%<YEL %s>'\n", rss_title));
+
+  if (board->rss_title) {
+    free(board->rss_title);
+  }
+  board->rss_title = str_ndup(rss_title, 100);
+
+  if (get_XMLBlock(rsstxt, strlen(rsstxt), "ttl", &xmlb) >= 0) {
+    refresh_request = atoi(xmlb.content) * 60; /* en minutes */
+    //printf("ttl detected, %d\n", refresh_request);
+  } if (get_XMLBlock(rsstxt, strlen(rsstxt), "*:updatePeriod", &xmlb) >= 0) {
+    int period = 1;
+    if (str_case_startswith(xmlb.content, "hour")) period = 3600;
+    else if (str_case_startswith(xmlb.content, "min")) period = 60;
+    if (get_XMLBlock(rsstxt, strlen(rsstxt), "*:updateFrequency", &xmlb) >= 0) {
+      refresh_request = period * atoi(xmlb.content);
+    }
+  }
+  if (refresh_request != -1 && board->site->prefs->board_check_delay < refresh_request) {
+    BLAHBLAH(0, myprintf("Changing update frequency for %<grn %s> to %<MAG %d> sec.\n", rss_title, refresh_request));
+    board->site->prefs->board_check_delay = refresh_request;
+  }
+
+  p = rsstxt;
+
+  temps_last_modified = temps_debut;
+  if (board->last_modified) {
+    str_to_time_t(board->last_modified, &temps_last_modified);
+    //printf("last_modified='%s' -> time_t = %ld\n", board->last_modified, temps_last_modified);
+  }
+  do {
+    int pos_next_item;
+    pos_next_item = get_XMLBlock(p, strlen(p), "item", &xmlb);
+    if (pos_next_item >= 0) {
+      XMLBlock b2;
+      char *title, *link, *description, *msg, *author, *comments_url, *pubdate, *fake_ua;
+      char msgd[BOARD_MSG_MAX_LEN];
+      char stimestamp[15];
+      time_t timestamp = time(NULL);
+      title = link = description = msg = author = comments_url = pubdate = fake_ua = NULL;
+
+      //time_t_to_tstamp(temps_debut, stimestamp); 
+
+      //temps_debut--; /* pour eviter d'avoir un paquet de news avec le meme tstamp */
+      clear_XMLBlock(&b2);
+      if (get_XMLBlock(xmlb.content, xmlb.content_len, "title", &b2) &&  b2.content_len) {
+        title = str_ndup(b2.content, b2.content_len);
+        //printf("found title: '%s'\n", title);        
+      }
+      if (get_XMLBlock(xmlb.content, xmlb.content_len, "link", &b2) &&  b2.content_len) {
+        link = str_ndup(b2.content, b2.content_len);
+        //printf("found link: '%s'\n", link);
+      }
+      if (!board->site->prefs->rss_ignore_description &&
+          get_XMLBlock(xmlb.content, xmlb.content_len, "description", &b2) &&  b2.content_len) {
+        description = str_ndup(b2.content, b2.content_len);
+      }
+      if (get_XMLBlock(xmlb.content, xmlb.content_len, "author", &b2) &&  b2.content_len) {
+        author = str_ndup(b2.content, b2.content_len);
+        //printf("found author: '%s'\n", author);
+      }
+      if (get_XMLBlock(xmlb.content, xmlb.content_len, "comments", &b2) &&  b2.content_len) {
+        comments_url = str_ndup(b2.content, b2.content_len);
+      }
+      /* format date: http://www.w3.org/TR/NOTE-datetime */
+      if (get_XMLBlock(xmlb.content, xmlb.content_len, "pubDate", &b2) &&  b2.content_len) {
+        pubdate = str_ndup(b2.content, b2.content_len);
+      }
+      if (pubdate == NULL && get_XMLBlock(xmlb.content, xmlb.content_len, "*:date", &b2) &&  b2.content_len) {
+        pubdate = str_ndup(b2.content, b2.content_len);        
+      }
+
+      /* une petite remarque pour poser la problematique calmement:
+         Comment determiner raisonnablement la date de publication d'une news
+          - <pubDate>date_format_rfc_822</pubDate>
+
+          - <dc:date>date_iso_8601</dc:date>
+
+          - sinon :
+            . si la news �tait connue par wmcc lors de sa precedente execution,
+            on reprend la meme date sans paniquer.
+
+            . sinon, on prend l'heure courante.
+               * si  le serveur web a renvoye un last-modified, on prend cette valeur.
+
+         Pour un fun toujours plus extreme, il faut bien g�rer tous les
+         problemes de timezone:
+           PUTAIN DE BORDERL DE MARDE
+      */
+
+      /* c'est trop la merde avec les decalages horaires.. */
+      if (pubdate) {
+        if (str_to_time_t(pubdate, &timestamp)) {
+          time_t_to_tstamp(timestamp, stimestamp);
+          BLAHBLAH(3,myprintf("converted %<YEL %s> to %<YEL %s> !\n", pubdate, stimestamp));
+        } else BLAHBLAH(0, printf("could not convert '%s' to a valid date..\n", pubdate));
+      }
+
+      timestamp = MIN(timestamp, temps_debut);
+      timestamp = MIN(timestamp, temps_last_modified);
+      time_t_to_tstamp(timestamp, stimestamp);
+
+      destroy_XMLBlock(&b2);
+      
+      str_trunc_nice(description, 512);
+      if (link) {
+        char *p = strstr(link, "*http://"); // enleve une couche de merde dans les liens yahoo
+        if (p) { p++; memmove(link, p, strlen(p)+1); }
+      }
+
+      msg = NULL;
+      if (title && link) msg = str_cat_printf(msg, "{<a href="%s"><u><b>%s</b></u></a>}", link, title);
+      else if (title) msg = str_cat_printf(msg, "{<b>%s</b;&gt}", title);
+      else if (link) msg = str_cat_printf(msg, "{<a href="%s">[News]</a>}", link);
+      if (description) msg = str_cat_printf(msg, " %s", description);
+      if (comments_url) msg = str_cat_printf(msg, " <a href="%s">[comments]</a>", comments_url);
+      if (msg) {
+        md5_byte_t md5[16];
+        md5_state_t ms; md5_init(&ms);
+        int was_already_viewed = 0;
+        if (title) md5_append(&ms, title, strlen(title));
+        if (link) md5_append(&ms, link, strlen(link));
+        if (description) md5_append(&ms, description, strlen(description));
+        md5_finish(&ms,md5);
+
+        /* cherche le news dans le cache (au premier dl uniquement) */
+        if (board->oldmd5) {
+          md5_and_time *m = find_md5_in_md5_array(md5,board->oldmd5);
+          if (m && strlen(m->tstamp) == 14) {
+            was_already_viewed = m->viewed;
+            strcpy(stimestamp, m->tstamp); str_to_time_t(stimestamp, &timestamp);
+            BLAHBLAH(1, myprintf("the news '%<GRN %s>' was found in the cache!\n", title));
+          }
+        }
+
+        /* cherche dans la liste des news dej� lues (apr�s le premier dl) */
+        if (board_find_md5(board, md5)) {
+          BLAHBLAH(1,myprintf("the news %<MAG %s>/%<CYA %s> is already known\n", rss_title, md5txt(md5)));
+          //cest_bon_je_connais_la_suite = 1; // si on suppose que les rss se remplissent toujours par le haut..
+        } else {
+          /* nettoyage des codes < 32 dans le message */
+          {
+            int i; 
+            for (i=0; i < BOARD_MSG_MAX_LEN && msg[i]; ++i)
+              if ((unsigned char)msg[i] < ' ') msg[i] = ' ';
+          }          
+          fake_ua = str_printf("%s", rss_title ? rss_title : "?");
+          if (pubdate) { fake_ua = str_cat_printf(fake_ua, " pubDate: %s", pubdate); }
+
+          /* attention, les '<' deviennent '\t<' et les '&lt;' devienne '<' */
+          board_decode_message(board, msgd, msg);
+
+          {
+            char *soupe = rss_nettoie_la_soupe_de_tags(msgd);
+            strncpy(msgd, soupe, sizeof msgd); free(soupe); msgd[(sizeof msgd) - 1] = 0;
+          }
+          if (author && strlen(author)) {
+            author = str_cat_printf(author, "@%s", rss_title);
+          } else {
+            FREE_STRING(author); author = strdup(rss_title);
+          }
+          {
+            char author_tmp[1024];
+            convert_to_ascii(author_tmp, author, sizeof author_tmp);
+            FREE_STRING(author); author = strdup(author_tmp);
+          }
+          prelog_add(fake_ua, author, timestamp, msgd, link, md5, was_already_viewed);
+          board->nb_msg_at_last_check++;
+          if (!was_already_viewed) board->nb_msg_since_last_viewed++;
+        }
+      }
+      FREE_STRING(title); FREE_STRING(link); FREE_STRING(description); FREE_STRING(author); 
+      FREE_STRING(comments_url); FREE_STRING(msg); FREE_STRING(pubdate); FREE_STRING(fake_ua);
+    } else { 
+      BLAHBLAH(1,printf("fin de '%s'\n", rss_title));
+      break;
+    }
+    
+    p += pos_next_item;
+  } while (!cest_bon_je_connais_la_suite);
+
+ RAS:
+  if (board->oldmd5 && board->last_post_id > 0) release_md5_array(board);
+  destroy_XMLBlock(&xmlb);
+  FREE_STRING(rss_title);
+  FREE_STRING(rsstxt); 
+  prelog_commit(board);
+  return 0;
+ ratai:
+  if (board->oldmd5 && board->last_post_id > 0) release_md5_array(board);
+  destroy_XMLBlock(&xmlb);
+  FREE_STRING(rss_title);
+  FREE_STRING(rsstxt);
+  prelog_commit(board);
+  return 1;
+}
diff --git a/src/board_util.c b/src/board_util.c
new file mode 100644
index 0000000..45f248d
--- /dev/null
+++ b/src/board_util.c
@@ -0,0 +1,1053 @@
+/*
+    wmCoinCoin, the stupidest WindowMaker dock applet
+    Copyright (C) 2001  Julien Pommier
+
+    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., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+
+
+ */
+/*
+  fonctions diverses sur la tribune
+
+  rcsid=$Id: board_util.c,v 1.19 2004/04/18 15:37:28 pouaite Exp $
+  ChangeLog:
+  $Log: board_util.c,v $
+  Revision 1.19  2004/04/18 15:37:28  pouaite
+  un deux un deux
+
+  Revision 1.18  2004/03/03 23:00:39  pouaite
+  commit du soir
+
+  Revision 1.17  2004/02/29 15:01:19  pouaite
+  May the charles bronson spirit be with you
+
+  Revision 1.16  2003/08/26 21:50:48  pouaite
+  2.6.4b au mastic
+
+  Revision 1.15  2003/06/29 23:58:37  pouaite
+  suppression de l'overrideredirect du palmi et ajout de pinnipede_totoz.c et wmcoincoin-totoz-get etc
+
+  Revision 1.14  2003/06/09 16:42:29  pouaite
+  pan pan
+
+  Revision 1.13  2003/03/02 14:41:22  pouaite
+  ce commit est d�di� � la m�moire de jacques martin
+
+  Revision 1.12  2003/02/17 19:16:58  pouaite
+  fix urls relatives pour la tribune
+
+  Revision 1.11  2002/11/11 15:26:38  pouaite
+  fix soulignement et strike avec les span
+
+  Revision 1.10  2002/10/05 18:08:14  pouaite
+  ajout menu contextuel + fix de la coloration des boutons du wmccc
+
+  Revision 1.9  2002/09/25 22:02:15  pouaite
+  hungry boitakon
+
+  Revision 1.8  2002/09/07 16:21:15  pouaite
+  �a va releaser en douce
+
+  Revision 1.7  2002/09/01 23:54:56  pouaite
+  completurage du wmc3 et compatibilitation avec new.linuxfr
+
+  Revision 1.6  2002/08/31 21:26:46  pouaite
+  ajout du wmccc
+
+  Revision 1.5  2002/08/23 00:25:21  pouaite
+  ou�
+
+  Revision 1.4  2002/08/21 20:22:16  pouaite
+  fix compil
+
+  Revision 1.3  2002/08/18 19:00:28  pouaite
+  plop
+
+  Revision 1.2  2002/08/18 00:29:30  pouaite
+  en travaux .. pri�re de porter le casque
+
+  Revision 1.1  2002/08/17 18:33:38  pouaite
+  grosse commition
+
+  Revision 1.26  2002/06/23 14:01:36  pouaite
+  ouups, j'avais flingu� les modifs depuis la v2.3.8b
+
+  Revision 1.25  2002/06/23 10:44:05  pouaite
+  i18n-isation of the coincoin(kwakkwak), thanks to the incredible jjb !
+
+  Revision 1.23  2002/05/28 23:22:58  pouaite
+  ptit fix
+
+  Revision 1.22  2002/05/28 20:11:55  pouaite
+  modif pr un pinnipede + fluide qd il y a bcp de messages stock�s + tribune sur plusieurs jours
+
+  Revision 1.21  2002/04/26 04:45:51  pouaite
+  reconnaissance des horloges suivies de 3 pts de suspension
+
+  Revision 1.20  2002/04/24 19:44:00  pouaite
+  option pinnipede.use_AM_PM pour les horloges � l'anglaise comme sur http://woof.lu
+
+  Revision 1.19  2002/04/13 11:55:19  pouaite
+  fix kde3 + deux trois conneries
+
+  Revision 1.18  2002/04/11 23:16:54  pouaite
+  boitakon mega combo
+
+  Revision 1.17  2002/04/10 22:53:44  pouaite
+  un commit et au lit
+
+  Revision 1.16  2002/04/09 23:38:29  pouaite
+  boitakon et son cort�ge de bugfixes
+
+  Revision 1.15  2002/04/09 00:28:19  pouaite
+  quelques modifs faites dans un �tat d'h�b�tude avanc� /!\ travaux en cours /!\
+
+  Revision 1.14  2002/04/03 20:15:11  pouaite
+  plop
+
+  Revision 1.13  2002/04/01 22:56:03  pouaite
+  la pseudo-transparence du pinni, bugfixes divers, option tribune.backend_type
+
+  Revision 1.12  2002/03/27 20:45:06  pouaite
+  deuxi�me vague de bugfix
+
+  Revision 1.11  2002/03/09 00:25:12  pouaite
+  coin coin
+
+  Revision 1.10  2002/03/08 23:53:40  pouaite
+  derniers bugfixes pour la v2.3.6
+
+  Revision 1.9  2002/03/03 11:58:55  pouaite
+  bugfix du crash avec les posts autoreferants (gniiii)
+
+  Revision 1.8  2002/02/27 00:32:19  pouaite
+  modifs velues
+
+  Revision 1.7  2002/02/25 01:36:58  pouaite
+  bugfixes pour la compilation
+
+  Revision 1.6  2002/02/24 22:13:57  pouaite
+  modifs pour la v2.3.5 (selection, scrollcoin, plopification, bugfixes)
+
+  Revision 1.5  2002/01/31 23:45:00  pouaite
+  plop
+
+  Revision 1.4  2002/01/20 20:53:22  pouaite
+  bugfix configure.in && http_win.c pour cygwin + 2-3 petis trucs
+
+  Revision 1.3  2002/01/20 02:17:13  pouaite
+  modifs d'ordre esthetique (!) sans grand interet
+
+  Revision 1.2  2002/01/19 19:56:09  pouaite
+  petits crochets pour la mise en valeur de certains messages (cf changelog)
+
+  Revision 1.1  2002/01/18 19:45:58  pouaite
+  petit oubli d'un fichier..
+
+*/
+
+#include "board_util.h"
+
+#include <libintl.h>
+#define _(String) gettext (String)
+
+
+/* search an id in the tree : fast */
+board_msg_info *
+board_find_id(const Board *board, int id)
+{
+  board_msg_info *it;
+
+  it = board->mi_tree_root;
+
+  while (it && it->id.lid != id) {
+    if (id < it->id.lid)  it = it->left;
+    else it = it->right;
+  }
+  return it;
+}
+
+/* search an md5 in the tree : exhaustive.. */
+static board_msg_info *
+board_find_md5_rec(board_msg_info *it, md5_byte_t md5[16]) {
+  board_msg_info *it2;
+  if (it->ri && memcmp(md5, it->ri->md5, sizeof md5) == 0) return it;
+  else if (it->left && (it2=board_find_md5_rec(it->left, md5))) return it2;
+  else if (it->right && (it2=board_find_md5_rec(it->right, md5))) return it2;
+  return NULL;
+}
+board_msg_info *
+board_find_md5(const Board *board, md5_byte_t md5[16]) {
+  if (board->mi_tree_root) 
+    return board_find_md5_rec(board->mi_tree_root,md5);
+  return NULL;
+}
+
+board_msg_info *
+boards_find_id(const Boards *boards, id_type id)
+{
+  if (id_type_is_invalid(id)) {
+    return NULL;
+  } else {
+    Board *b;
+
+    assert((unsigned)id.sid < MAX_SITES);
+    b = boards->btab[id.sid];
+    assert(b);
+    return board_find_id(b, id.lid);
+  }
+}
+
+id_type
+boards_last_id(const Boards *b) {
+  if (b->last) return b->last->id;
+  return id_type_invalid_id();
+}
+
+board_msg_info*
+board_find_previous_from_id(const Board *board, int id)
+{
+  board_msg_info *mi;
+  board_msg_info *prev = NULL;
+
+  mi = board->mi_tree_root;
+
+  while (mi) {
+    if (mi->id.lid < id) {
+      prev = mi;
+      mi = mi->right;
+    } else {
+      mi = mi->left;
+    }
+  }
+  return prev;
+}
+
+
+board_msg_info *
+board_find_previous(const Board *board, board_msg_info *mi)
+{
+  board_msg_info *it;
+
+  it = board_find_previous_from_id(board, mi->id.lid);
+  return it;
+    /*
+      board->msg; 
+      while (it) {
+      if (it->next == mi) return it;
+      it = it->next;
+      }
+      return NULL;
+    */
+}
+
+
+/*----------------------- fonctions key_list ---------------- */
+
+
+/* supprime les keylist faisant ref � des messages detruits */
+KeyList *
+board_key_list_cleanup(Boards *boards, KeyList *first)
+{
+  KeyList *hk;
+  hk = first;
+  while (hk) {
+    if (hk->type == HK_ID || hk->type == HK_THREAD) {
+      id_type id = int_to_id_type(atoi(hk->key));
+      if (boards_find_id(boards, id) == NULL) {
+	first = key_list_remove(first, hk->key, hk->type);
+	hk = first;
+      }
+    }
+    if (hk) hk = hk->next;
+  }
+  return first;
+}
+
+
+/* fonction interne, appel�e par board_key_list_test_mi_hk */
+static int
+board_key_list_test_thread(Boards *boards, board_msg_info *mi, id_type thread_id, int *antibug)
+{
+  int i;
+  (*antibug)++;
+  if (*antibug > 10000) { printf(_("sniff? sniff ? soit vous vous amusez a faire de threads de folie, soit ca sent le BEUGGUE!\n")); return 0; }
+
+  if (mi == NULL) return 0;
+
+  mi->bidouille_qui_pue = 1;
+
+  /*  printf("test: mi->id=%d, %d\n", mi->id, thread_id); */
+
+  if (id_type_eq(mi->id,thread_id)) return 1;
+
+  for (i = 0; i < mi->nb_refs; i++) {
+    int j;
+    board_msg_info *tmi;
+
+    tmi = mi->refs[i].mi; j = 0;
+    while (j < mi->refs[i].nbmi && tmi) {
+      if (tmi->bidouille_qui_pue == 0 && board_key_list_test_thread(boards, tmi, thread_id, antibug)) return 1;
+      tmi = tmi->next; j++;
+    }
+  }
+  return 0;
+}
+
+static int
+board_key_list_test_mi_hk(Boards *boards, board_msg_info *mi, KeyList *hk)
+{
+  if (hk->type == HK_UA) {
+    if (strcmp(hk->key, mi->useragent) == 0) {
+      return 1;
+    }
+  } else if (hk->type == HK_UA_NOLOGIN) {
+    if (mi->login[0]==0 && strcmp(hk->key, mi->useragent) == 0) {
+      return 1;
+    }
+  }  else if (hk->type == HK_LOGIN) {
+    if (strcmp(hk->key, mi->login) == 0) {
+      return 1;
+    }
+  } else if (hk->type == HK_WORD) {
+    if (str_noaccent_casestr(mi->msg, hk->key)) {
+      /* printf("mot clef %s trouv� dans le msg id=%d\n", hk->key, mi->id); */
+      return 1;
+    } 
+  } else if (hk->type == HK_ID) {
+    char sid[10];
+    snprintf(sid,10, "%d", id_type_to_int(mi->id));
+    if (strcmp(sid, hk->key) == 0) {
+      return 1;
+    }
+  } else if (hk->type == HK_THREAD) {
+    board_msg_info *tmi;
+    id_type id;
+    int antibug = 0;
+ 
+    
+   
+    tmi = boards->first; while (tmi) { tmi->bidouille_qui_pue = 0; tmi = tmi->g_next; }	
+    id = int_to_id_type(atoi(hk->key));
+    
+    if (board_key_list_test_thread(boards, mi, id, &antibug)) { return 1; }
+  }
+  return 0;
+}
+
+KeyList *
+board_key_list_test_mi(Boards *boards, board_msg_info *mi, KeyList *klist)
+{
+  KeyList *hk;
+  char sid[10];
+
+  if (mi == NULL) return NULL;
+  snprintf(sid,10, "%d", id_type_to_int(mi->id));
+  
+  hk = klist;
+  while (hk) {
+    if (board_key_list_test_mi_hk(boards,mi,hk)) return hk;
+    hk = hk->next;
+  }
+  return NULL;
+}
+
+
+KeyList *
+board_key_list_test_mi_num(Boards *boards, board_msg_info *mi, KeyList *klist, int num)
+{
+  KeyList *hk;
+
+  if (mi == NULL) return NULL;
+  
+  hk = klist;
+  while (hk) {
+    if (hk->num >= num)
+      if (board_key_list_test_mi_hk(boards,mi,hk)) return hk;
+    hk = hk->next;
+  }
+  return NULL;
+}
+
+
+/* construit recursivement et vilainement la liste des mots plops qui ont provoqu�
+   une plopification recursive */
+static void
+board_key_list_get_recurs_plop_list(Boards *boards, board_msg_info *mi, KeyList **pin, KeyList **pout, int lvl)
+{
+  KeyList *hk;
+  int i;
+  if (mi->contagious_boitakon == 0 || mi->bidouille_qui_pue) return;
+  mi->bidouille_qui_pue = 1;
+  if (lvl > 50) return;
+  for (hk = *pin; hk; hk=hk->next) {
+    if (board_key_list_test_mi_hk(boards, mi, hk)) {
+      *pout = key_list_add(*pout, hk->key, hk->type, hk->num, 0);
+      *pin = key_list_remove(*pin, hk->key, hk->type);
+    }
+  }
+  if (*pin == NULL) return;
+  for (i=0; i < mi->nb_refs; i++) {
+    int j;
+    board_msg_info *mi2;
+    mi2 = mi->refs[i].mi;
+    for (j=0; mi2 && j < mi->refs[i].nbmi; j++) {
+      if (mi2->contagious_boitakon && mi2->bidouille_qui_pue == 0)
+	board_key_list_get_recurs_plop_list(boards, mi2, pin, pout, lvl+1);
+    }
+  }
+}
+
+
+/*
+  renvoie la liste des element de la keylist qui sont 'positifs' pour le 
+  message mi
+  le truc un peu lourdeau c'est pour la boitakon recursive (m� sa economise de la m�moire)
+*/
+KeyList *
+board_key_list_get_mi_positive_list(Boards *boards, board_msg_info *mi, KeyList *klist, int is_plop_list)
+{
+  KeyList *pl = NULL;
+  KeyList *hk;
+  /* liste de plopification normale */
+  for (hk = klist; hk; hk = hk->next) {
+    if (board_key_list_test_mi_hk(boards,mi,hk)) {
+      pl = key_list_add(pl, hk->key, hk->type, hk->num, 0);
+    }
+  }
+  /* l� c'est plus boulet */
+  if (is_plop_list && mi->contagious_boitakon) {
+    board_msg_info *mi2;
+    KeyList *hbak = NULL;
+
+    for (mi2 = boards->first; mi2; mi2 = mi2->g_next) mi2->bidouille_qui_pue = 0;
+
+    for (hk = klist; hk; hk = hk->next) {
+      if (hk->num == 3 && key_list_find(pl, hk->key, hk->type)==NULL) { /* hungry bak */
+	hbak = key_list_add(hbak, hk->key, hk->type, hk->num, 0);
+      }
+    }
+    board_key_list_get_recurs_plop_list(boards, mi, &hbak, &pl, 0);
+  }
+  return pl;
+}
+
+int is_utf8_superscript(const unsigned char *p, int *superscript) {
+  if (p[0] == 0xC2) {
+    if (p[1] == 0xB2) { 
+      if (superscript) *superscript = 2; 
+      return 2;
+    }
+    if (p[1] == 0xB3) { 
+      if (superscript) *superscript = 3; 
+      return 2;
+    }
+    if (p[1] == 0xB9) { 
+      if (superscript) *superscript = 1; 
+      return 2;
+    }
+  }
+  return 0;
+}
+
+
+/* si 'ww' contient une reference (du type '1630', '125421', '12:45:30') vers un message existant, on renvoie 
+   son msg_info, et on rempli 'commentaire' 
+
+
+   avertissement au lecteur t�m�raire:
+   cette fonction est un sac de noeuds et �a ne va pas en s'arrangeant
+   
+   (en gros c'est toute une serie de tests pour filtrer les refs invalides tout en
+   etant le plus g�n�ral possible ..)
+
+   site_name_hash contient 0 quand il n'est pas fait allusion � un site particulier (du genre 11:11:11 at linuxfr)
+*/
+static int
+check_for_horloge_ref_basic_helper(const unsigned char *ww, const char **site_name, int *ref_h, int *ref_m, int *ref_s, int *ref_num)
+{
+  int l, h, m, s, num;  /* num est utilise pour les posts multiples (qui on un m�me timestamp) */
+  const unsigned char *p;
+  int use_deuxpt;
+  unsigned char w[11];
+
+  *ref_h = -1; *ref_m = -1; *ref_s = -1; *ref_num = -1;
+  num = -1; h = -1; m = -1; s = -1;
+  l = strlen(ww);
+
+  if (l < 4) return 0; /* de qui se moque-t-on ? */
+
+  /* on tente d'abord d'intercepter le nom du site */
+  *site_name = NULL;
+  if (l > 6) {
+    int i;    
+    for (i = 5; i < 10 && ww[i]; i++) {
+      if (ww[i] == '@') {
+	l = i; /* ben oui faut pas affoler tout le monde */
+
+	if (isalnum(ww[i+1]) || ww[i+1] == '_')
+	  *site_name = ww+i+1;
+	
+/* 	printf("--> site_name = '%s'\n",*site_name);  */
+	break;
+      }
+    }
+  }
+
+  if (l < 4 || l > 10) return 0; /* on enlimine les cas les plus explicites */
+  strncpy(w, ww, l); w[l] = 0;
+
+  use_deuxpt = 0;
+  p = w; 
+  /* verifie que la chaine ne contient que des chiffres et des ':' ou des '.' (les ':' n'etant pas en premiere ou derniere position) */
+  while (*p) { 
+    int l = 1;
+    if ((*p == ':' || *p == '.' || 
+	 (use_deuxpt == 0 && *p == 'h') || (use_deuxpt == 1 && *p == 'm')) 
+	&& p != w && *(p+1)) {
+      use_deuxpt++;
+    } else if (*p < '0' || *p > '9') {
+      int ll = is_utf8_superscript(p, NULL);
+      if (ll == 0 || p[ll] != 0) break;
+      else l = ll;
+    }
+
+    p+=l;
+  }
+  if (*p) return 0;
+  
+  if (use_deuxpt == 0) {
+    if (l == 4) {
+      /* type '1630' */
+      h = (w[0]-'0')*10 + (w[1]-'0');
+      m = (w[2]-'0')*10 + (w[3]-'0');
+      s = -1;
+    } else if (l == 6) {
+      h = (w[0]-'0')*10 + (w[1]-'0');
+      m = (w[2]-'0')*10 + (w[3]-'0');
+      s = (w[4]-'0')*10 + (w[5]-'0');
+    } else if (l == 8) {
+      h = (w[0]-'0')*10 + (w[1]-'0');
+      m = (w[2]-'0')*10 + (w[3]-'0');
+      s = (w[4]-'0')*10 + (w[5]-'0');
+      if (is_utf8_superscript(w+6, &num) != 2) return 0;
+      else --num;
+    } else return 0;
+
+    /* ci-dessous minipatch pour Dae qui reference les posts multiples
+       sous la forme hh:mm:ss:num -> wmc2 ne les reconnaissait pas comme des 
+       refs, maintenant si */
+
+  } else if (use_deuxpt <= 3) {
+    /* il y a des separateurs entre les heure et les minutes [et les secondes] */
+    int nb_char_h, nb_char_m, nb_char_s;
+    p = w;
+    h = 0;
+    nb_char_h = nb_char_m = nb_char_s = 0;
+    while (*p != ':' && *p != '.' && *p != 'h') {
+      if (*p < '0' || *p > '9') return 0;
+      h = 10*h + (*p - '0'); p++;
+      nb_char_h++;
+    }
+    p++;
+    m = 0;
+    while (*p != ':' && *p != '.' && *p != 'm' && *p) {
+      if (*p < '0' || *p > '9') return 0;
+      m = 10*m + (*p - '0'); p++;
+      nb_char_m++;
+    }
+    if (*p == ':' || *p == '.' || *p == 'm') {
+      p++;
+      s = 0;
+      while (*p && *p != ':' && !is_utf8_superscript(p, NULL)) {
+	if (*p < '0' || *p > '9') return 0;
+	s = 10*s + (*p - '0'); p++;
+	nb_char_s++;
+      }
+      if (*p == (unsigned char)'�') num = 0;
+      if (*p == (unsigned char)'�') num = 1;
+      if (*p == (unsigned char)'�') num = 2;
+      int len = is_utf8_superscript(p, &num);
+      if (len) { p += len-1; --num; }
+      if (*p == ':') {
+        p++; if (*p >= '0' && *p <= '9') {
+          num = *p - '1';
+          /* Triton> Magnifique patch pour le cas ou 10 posts ou plus arriveraient a la meme seconde */
+          p++; if (*p >= '0' && *p <= '9') {
+            num = (10 * (num+1)) + *p - '1';
+          }
+        }
+      }
+    } else s = -1;
+
+    /* le test qui tue pour arr�ter de confondre la version du kernel avec une horloge .. */
+    /* �a ira jusqu'au kernel 2.10.10 */
+    if (nb_char_h > 2 || nb_char_m != 2 || nb_char_s == 1 || nb_char_s > 2) return 0;
+
+  } else return 0;
+
+  if (h > 23 || m > 59 || s > 59) return 0;
+
+  *ref_h = h; *ref_m = m; *ref_s = s; *ref_num = num;
+
+  return 1;
+}
+
+/* 
+   comme au-dessus, mais fait l'effort de recherche le numero du site 
+   attention aux valeurs de retour de site_id 
+*/
+static int
+check_for_horloge_ref_basic(Boards *boards, const unsigned char *ww, int *site_id, int *ref_h, int *ref_m, int *ref_s, int *ref_num)
+{
+  const char *site_name;
+  int ret;
+  
+  *site_id = -1;
+  ret = check_for_horloge_ref_basic_helper(ww, &site_name, ref_h, ref_m, ref_s, ref_num);
+  if (ret && site_name) { /* bon .. �a m�rite qu'on cherche le site */
+    int i, hash;
+
+    for (i=0; isalpha(site_name[i]); i++) ;
+
+    hash = str_hache_nocase(site_name, i);
+    for (i = 0; i < boards->nb_aliases; i++) {
+      if (boards->aliases[i].hash == hash) {
+	*site_id = boards->aliases[i].sid;
+	break;
+      }
+    }
+    if (*site_id == -1) *site_id = -2; /* pour savoir qu'un @site a �t� utilis�, mais qu'il est mauvais */
+  }
+  return ret;
+}
+
+/* ceci est un commentaire � la con pour forcer le commit (oui je suis un tocard mais g la flemme de chercher � comprendre */
+
+
+/* dans la famille des fonction pourries, je demande ... */
+char *
+board_get_tok(const unsigned char **p, const unsigned char **np, 
+	unsigned char *tok, int max_toklen, int *has_initial_space)
+     /* ... ou��� celle-l� est vraiment bien */
+{
+  const unsigned char *start, *end;
+
+  assert(p); 
+  assert(*p); 
+  assert(tok);
+
+  /* has_initial_space doit etre initialise dans la procedure appelante (sinon y'a des pbs avec les tag html)
+   *has_initial_space = 0; */ /* indique si le token commence par un (ou plusieurs) espace */
+
+  start = *p; *np = NULL;
+  /* saute les espaces */
+  while (*start <= ' ' && *start != '\t' && *start) { start++; *has_initial_space = 1; }
+  end = start;
+
+  /* if (*start == '\t') printf("allez ! '%.20s'\n", start); */
+
+  /* les bon vieux tags html (update les '<' et '>' des tags sont prefix�s par une tabulation) */
+  if (*start == '\t' && *(start+1) == '<') {
+    static const char *balise = "abusiABUSI";
+    int i;
+    /* c'est un peu chiant, on risque de mal reconnaitre les balise ou
+       d'en reconnaitre qui ont ete ajoutees a la main 
+       on teste d'abord les balises courantes
+    */
+    for (i=0; i < 10; i++) { 
+      if (start[2] == balise[i] && start[3] == '\t' && start[4] == '>') {
+	end = start+5;
+	break;
+      } else if (start[2] == '/' && start[3] == balise[i] && start[4] == '\t' && start[5] == '>') {
+	end = start+6;
+	break;
+      }
+    }
+    if (end == start) {
+      int is_href;
+      const unsigned char *s0 = "\t<a href=\"";
+      const unsigned char *s1 = "\t<a href=\"../";
+      const unsigned char *s2 = "\t<a href=\"./";
+      /* puis les <a href> (c'est un peu particulier */
+
+      /* c'est un peu facho, d'autant que c'est reverifi� au niveau de open_url, mais
+	 bon, apres la douche froide... */
+      is_href = (strncasecmp(start, s0, strlen(s0)) == 0 && is_url(start+10) != -1) ||
+        (strncasecmp(start, s1, strlen(s1)) == 0) ||
+        (strncasecmp(start, s2, strlen(s2)) == 0);
+      if (is_href) {
+	/* printf("get_tok: '"); */
+	end = start+1;
+	while (*end && *end != '\t') end++; /* { printf("%c", *end); end++; } */
+	if (*end == '\t' && *(end+1)=='>') end+=2;
+	/* printf("\n"); */
+/* 	if (*end) end++; */
+      } else if (strncasecmp(start+2, "tt\t>", 4) == 0) {
+	end = start+6;
+      } else if (strncasecmp(start+2, "/tt\t>", 5) == 0) {
+	end = start+7;
+      } else if (strncasecmp(start+2, "span style=\"text-decoration: underline\"\t>", 41)==0) {
+	end = start+43;
+      } else if (strncasecmp(start+2, "span style=\"text-decoration: line-through\"\t>", 44)==0) {
+	end = start+46;
+      } else if (strncasecmp(start+2, "/span\t>", 7) == 0) {
+	end = start+9;
+      } else {
+	const char *p;
+
+	/* sinon on ignore */
+	start++;
+	end=start+1;
+	p = start;
+        if (Prefs.verbosity >= Prefs.verbosity_underpants) {
+          printf(_("get_tok not recognized: (len=%d)'"), (int)strlen(p));
+          while (*p) { printf("%c", *p); p++;}
+          printf("\n");
+        }
+      }
+    }
+    /*
+    {
+      char c;
+      c = *end; *end = 0;
+      myprintf("tok='%<YEL %s>'\n", start);
+      *end = c;
+    }
+    */
+  } else if (*start == '\t') { /* �a pue .. le backend ou le coincoin est sans slip */
+    /* arf �a c'est de la traduction ! vive les slips et jjb */
+    if (Prefs.verbosity >= Prefs.verbosity_underpants) {
+      printf(_("Hmmm, looks like there's an underpants problem here: %s\n"), start);
+    }
+    start++;
+    if (*start) end = start+1;
+  } else {
+    /* pour aider la reconnaissance des timestamp */
+    if (*end >= '0' && *end <= '9') {
+      unsigned char last = *end;
+      int is_multi = 0;
+      while (*end && 
+	     ((*end >= '0' && *end <= '9') || strchr(":.hm", *end) || is_utf8_superscript(end, NULL))) {
+        int len = is_utf8_superscript(end,NULL); if (!len) len = 1;
+	end+=len;
+	if ((last < '0' || last > '9') && (*end < '0' || *end > '9'))
+	  break; /* deux caract�res non num�riques cons�cutifs, c'est la fin de l'horloge.. */
+	last = *end;
+      }
+      if (*end == '@') {
+	is_multi = 1;
+	do { 
+	  end++;
+	} while (isalnum(*end) || *end == '_');
+/* 		{ char c = *end; *end = 0; printf("TOK : %s\n", start); *end = c; } */
+      }
+      /* un petit coup de marche arriere si on n'a pas termine sur un chiffre */
+      if (end-start > 4 && is_multi == 0 && (*(end-1) == ':' || *(end-1) == '.' || *(end-1) == 'm')) end--;
+    } else {
+      int ok_totoz = 0;
+      if (end[0] == '[' && end[1] == ':') { /* totoz ? */
+        if (Prefs.board_enable_hfr_pictures) {
+          const unsigned char *s = end+2;
+          int i;
+          for (i=0; i < 100 && s[i]; ++i) {
+            if (s[i] == ']' && i >= 2) { end = s+i+1; ok_totoz = 1; break; }
+            if (!isalnum(s[i]) && s[i] != '_' && s[i] != ' ' && s[i] != '-' && s[i] != ':') break;
+          }
+        }
+        if (!ok_totoz) end++; /* pour relancer la machine */
+      }
+      if (!ok_totoz) {
+        /* un mot normal */
+        while (*end && *end != '\t' && *end > ' ' && (*end < '0' || *end > '9') && (!(end[0] == '[' && end[1] == ':'))) end++;
+      }
+      if (ok_totoz) {
+        char ss[512]; strncpy(ss, start, MIN(end-start, max_toklen-1));ss[MIN(end-start, max_toklen-1)] = 0;
+      }
+    }
+  }
+  if (end == start) return NULL;
+  else strncpy(tok, start, MIN(end-start, max_toklen-1));
+  tok[MIN(end-start, max_toklen-1)] = 0;
+  *p = start;
+  *np = end;
+  return tok;
+}
+
+
+/* oh le joli nom en anglais 
+
+  cette fonction n'est pas utilis�e ici mais dans board.c
+
+  c'est le bordel , �a �voluera surement
+
+  TODO: pb � l'initialisation, il faut l'appeler dans l'ordre des ID, sinon y'a pb
+
+  TODO: CETTE FONCTION EST NAZE MAIS JE SUIS TROP CREVE JE FAIS RIEN QUE DES CONNERIES CE SOIR
+
+  update: tiens, c'est quoi ce todo ? bon, je viens de refaire completement cette fonction
+  en utilisant les refs stock�es dans les messages, c nettement moins tordu.
+
+  re-update: apr�s un coup d'oeil rapide, je crois que le todo a d�j� �t� r�solu
+*/
+int
+board_msg_is_ref_to_me(Boards *boards, const board_msg_info *ref_mi) {
+  board_msg_info *mi;
+
+  mi = boards->first;
+
+  //  printf("board_msg_is_ref_to_me: test de %02d:%02d:%2d(%d)..[nb_refs=%d]\n", ref_mi->hmsf[0], ref_mi->hmsf[1], ref_mi->hmsf[2], ref_mi->hmsf[3], ref_mi->nb_refs);
+  while (mi && mi != ref_mi) {
+    //    const unsigned char *p, *np;
+
+    if (mi->is_my_message) {
+      int i;
+      for (i = 0; i < ref_mi->nb_refs; i++) {
+	int j;
+	board_msg_info *mi2;
+	mi2 = ref_mi->refs[i].mi;
+	for (j=0; mi2 && j < ref_mi->refs[i].nbmi; j++) {
+	  if (mi2 == mi) return 1;
+	  mi2 = mi2->next; /* et ___PAS___ g_next puisque les multi-refs ne peuvent etre cons�cutives
+			      que sur une m�me tribune, �a peut pas �tre cross-tribune
+			      (fo pas pousser grand mere) */
+	}
+      }
+    }
+    mi = mi->g_next;
+  }
+  return 0;
+}
+
+
+/*
+  recherche un message par hh:mm:ss^num 
+  /!\ la recherche est local � la board indiqu�e en parametre
+*/
+static board_msg_info *
+board_find_horloge_ref(Board *board, id_type caller_id, 
+		       int h, int m, int s, int num, unsigned char *commentaire, int comment_sz)
+{
+  board_msg_info *mi, *best_mi;
+  int best_mi_num;
+  int previous_mi_was_a_match = 0, match;
+
+  mi = board->msg;
+    
+  best_mi = NULL;
+  best_mi_num = 0;
+
+
+  while (mi) {
+    match = 0;
+    if (mi->id.lid > id_type_lid(caller_id) && best_mi ) break; /* on ne tente ipot que dans les cas desesperes ! */
+    if (s == -1) {
+      if ((mi->hmsf[0] == h || (board->site->prefs->use_AM_PM && 
+				(mi->hmsf[0] % 12 == h) && mi->hmsf[0] > 12))
+	   && mi->hmsf[1] == m) {
+	match = 1;
+      }
+    } else {
+      if ((mi->hmsf[0] == h  || (board->site->prefs->use_AM_PM && 
+				 (mi->hmsf[0] % 12 == h) && mi->hmsf[0] > 12))
+	  && mi->hmsf[1] == m && mi->hmsf[2] == s) {
+	if (num == -1 || num == best_mi_num) {
+	  match = 1; //break;
+	}
+	best_mi_num++;
+      } else {
+	best_mi_num = 0; /* la raison est tordue: si on conserve des messages
+			    sur plusieurs jours, le comportement naturel est de
+			    renvoyer la ref la + r�cente. C'est pour �a que le
+			    break juste au-dessus est maintenant
+			    comment�. Comme �a la boucle est �xecut�e jusqu'�
+			    ce qu'on atteigne caller_id, m�me quand on a trouv�
+			    un message qui matche parfaitement, juste pour �tre
+			    s�r qu'il n'y en a pas un plus r�cent qui fasse
+			    l'affaire. Mais il faut aussi penser � r�initialiser
+			    best_mi_num, cqfd ;-) */			    
+      }
+    }
+    
+    if (match && !previous_mi_was_a_match) best_mi = mi;
+    previous_mi_was_a_match = match;
+    mi = mi->next;
+  }
+  
+  if (commentaire) {
+    char s_ts[12];
+    board_msg_info *caller_mi;
+
+    commentaire[0] = 0;
+    caller_mi = boards_find_id(board->boards, caller_id);
+    if (caller_mi) {
+      commentaire[0] = 0;
+      if (s == -1) {    
+	snprintf(s_ts, 10, "%02d:%02d", h,m);
+      } else {
+	char snum[3];
+	snum[0] = snum[1] = snum[2] = 0;
+	switch (num) {
+	case -1: break;
+	case 0: snum[0] = '�'; break;
+	case 1: snum[0] = '�'; break;
+	case 2: snum[0] = '�'; break;
+	default: snum[0] = ':'; snum[1] = '1' + num;
+	}
+	snprintf(s_ts, 12, "%02d:%02d:%02d%s", h,m,s,snum);
+      }
+      if (best_mi == NULL) {
+	if (caller_mi->hmsf[0]*60+caller_mi->hmsf[1] < h*60+m) {
+	  snprintf(commentaire, comment_sz, _("IPOT(tm) detected"));
+	} else {
+	  snprintf(commentaire, comment_sz, _("but where is '%s' ?"), s_ts);
+	}
+      } else if (best_mi->id.lid > caller_mi->id.lid && 
+		 best_mi->id.sid == caller_mi->id.sid) {
+	snprintf(commentaire, comment_sz, _("[IPOT(tm)]"));
+      } else if (id_type_eq(best_mi->id,caller_mi->id)) {
+	snprintf(commentaire, comment_sz, _("Awww, we turn around and around and around and around..."));
+      } else if (best_mi->in_boitakon) {
+	KeyList *hk;
+	char *nom;
+
+	nom = (best_mi->login && best_mi->login[0]) ? best_mi->login : best_mi->useragent;
+	hk = board_key_list_test_mi(board->boards, best_mi, Prefs.plopify_key_list);
+	if (hk) {
+	  snprintf(commentaire, comment_sz, _("Hello from %.30s in the boitakon ! "
+		   "(because %s=%.20s)"), nom,
+		   key_list_type_name(hk->type), hk->key);
+	} else if (best_mi->contagious_boitakon) {
+	  snprintf(commentaire, comment_sz, _("Hello from %.30s who was eaten by the boitakon"), nom);
+	} else {
+	  snprintf(commentaire, comment_sz, _("Hello from %.30s in the boitakon, "
+		   "BUT YOU HAVE JUST FOUND A BUG IN THE BOITAKON :-("), nom);
+	}
+      }
+    }
+  }
+  return best_mi;
+}
+
+
+
+/* look for a reference on every board */
+board_msg_info *
+check_for_horloge_ref(Boards *boards, id_type caller_id, 
+		      const unsigned char *ww, unsigned char *commentaire, 
+		      int comment_sz, int *is_a_ref, int *ref_num)
+{
+  Board *board;
+  int site_id, h, m, s, num; /* num est utilise pour les posts multiples (qui on un m�me timestamp) */
+  
+  assert(!id_type_is_invalid(caller_id));
+  *is_a_ref = 0;
+  if (check_for_horloge_ref_basic(boards, ww, &site_id, &h, &m, &s, &num) == 0) return NULL;
+  *is_a_ref = 1;
+
+  if (ref_num) *ref_num = num;
+
+  if (site_id >= 0) {
+    board = boards->btab[site_id];
+  } else if (site_id == -1) { /* on prend le site par d�faut */
+    board = boards->btab[caller_id.sid];
+  } else {
+    snprintf(commentaire, comment_sz, _("I don't fucking know %s"), ww);
+    return NULL;
+  }
+  if (board) {
+    return board_find_horloge_ref(board, caller_id, 
+				  h, m, s, num, commentaire, comment_sz);
+  } else return NULL;
+}
+
+/* appel� discretement par board_check_my_messages dans board.c
+   (oui c pas logique) 
+
+*/
+void
+board_msg_find_refs(Board *board, board_msg_info *mi)
+{
+  //  Boards *boards = board->boards;
+  const unsigned char *p, *np;
+  int max_nb_refs;
+
+  p = mi->msg;
+  max_nb_refs = mi->nb_refs = 0;
+  mi->refs = NULL;
+
+  while (p) {
+     int has_initial_space = 0; /* inutilis� */
+     unsigned char tok[512];
+     
+     if (board_get_tok(&p,&np,tok,512, &has_initial_space) == NULL) { break; }
+     if (tok[0] >= '0' && tok[0] <= '9') {
+       int sid, h,m,s,num;
+       if (check_for_horloge_ref_basic(board->boards, tok, &sid, &h, &m, &s, &num)) {
+	 board_msg_info *ref_mi;
+
+	 Board *ref_board = board;
+	 if (sid >= 0) ref_board = board->boards->btab[sid];
+	 if (ref_board) { /* c'est peut etre une tribune desactiv� */
+	   
+	   if (mi->nb_refs+1 > max_nb_refs) {
+	     max_nb_refs += 10;
+	     mi->refs = realloc(mi->refs, max_nb_refs*sizeof(board_msg_ref));
+	   }
+	   
+	   mi->refs[mi->nb_refs].h = h;
+	   mi->refs[mi->nb_refs].m = m;
+	   mi->refs[mi->nb_refs].s = s;
+	   mi->refs[mi->nb_refs].num = num;
+	   mi->refs[mi->nb_refs].nbmi = 0;
+	   mi->refs[mi->nb_refs].mi = NULL;
+	   
+	   ref_mi = board_find_horloge_ref(ref_board, mi->id, 
+					   h, m, s, num, NULL, 0);
+	   
+	   if (ref_mi && ((ref_mi->id.lid <= mi->id.lid) || ref_board != board)) {
+	     mi->refs[mi->nb_refs].mi = ref_mi;
+	     mi->refs[mi->nb_refs].nbmi=1;
+	     if (num == -1) {
+	       /* gestion des post multiples */
+	       board_msg_info *ref_mi2;
+	       ref_mi2 = ref_mi->next;
+	       while (ref_mi2 && ref_mi2->timestamp == ref_mi->timestamp) {
+		 mi->refs[mi->nb_refs].nbmi++;
+		 ref_mi2 = ref_mi2->next;
+	       }
+	     }
+	   }
+	   mi->nb_refs++;
+	 }
+       }
+     }
+     p=np;
+  }
+  if (mi->refs) mi->refs = realloc(mi->refs, mi->nb_refs*sizeof(board_msg_ref));
+
+  if (Prefs.verbosity > 3) { 
+    int i;
+    myprintf("msg[%<YEL %04d>]: REFS=", mi->id);
+    for (i=0; i < mi->nb_refs; i++) {
+      myprintf("{%<CYA %02d>:%<CYA %02d>:%<CYA %02d>(%<cya %d>), %<YEL %04d>/%<GRN %d>} ", 
+	mi->refs[i].h, mi->refs[i].m, mi->refs[i].s, mi->refs[i].num, mi->refs[i].nbmi ? mi->refs[i].mi->id.lid : -1, mi->refs[i].nbmi);
+    }
+    myprintf("\n");
+  }
+}
+
+
+
diff --git a/src/board_util.h b/src/board_util.h
new file mode 100644
index 0000000..0c42164
--- /dev/null
+++ b/src/board_util.h
@@ -0,0 +1,26 @@
+#ifndef BOARD_UTIL_H
+#define BOARD_UTIL_H
+
+#include "coincoin.h"
+
+board_msg_info *board_find_id(const Board *board, int id);
+board_msg_info *board_find_md5(const Board *board, md5_byte_t md5[16]);
+board_msg_info *boards_find_id(const Boards *boards, id_type id);
+id_type boards_last_id(const Boards *b);
+board_msg_info* board_find_previous_from_id(const Board *board, int id);
+board_msg_info *board_find_previous(const Board *board, board_msg_info *mi);
+char *board_get_tok(const unsigned char **p, const unsigned char **np, 
+		    unsigned char *tok, int max_toklen, int *has_initial_space);
+int board_msg_is_ref_to_me(Boards *boards, const board_msg_info *ref_mi);
+board_msg_info *check_for_horloge_ref(Boards *boards, id_type caller_id, 
+		      const unsigned char *ww, unsigned char *commentaire, 
+		      int comment_sz, int *is_a_ref, int *ref_num);
+
+void board_msg_find_refs(Board *board, board_msg_info *mi);
+KeyList *board_key_list_cleanup(Boards *boards, KeyList *first);
+KeyList *board_key_list_test_mi(Boards *boards, board_msg_info *mi, KeyList *klist);
+KeyList *board_key_list_test_mi_num(Boards *boards, board_msg_info *mi, KeyList *klist, int num);
+KeyList *board_key_list_get_mi_positive_list(Boards *boards, board_msg_info *mi, 
+					     KeyList *klist, int is_plop_list);
+
+#endif
diff --git a/src/cc_queue.c b/src/cc_queue.c
new file mode 100644
index 0000000..5405d4e
--- /dev/null
+++ b/src/cc_queue.c
@@ -0,0 +1,286 @@
+#include <sys/types.h>
+#include <sys/wait.h>
+#include "coincoin.h"
+#include "site.h"
+#include <libintl.h>
+#define _(String) gettext (String)
+
+typedef struct _ccqueue {
+  ccqueue_elt *first;
+  int canceled;
+  int state; /* -1 ou ccqueue_elt_type */
+} ccqueue;
+
+ccqueue queue;
+
+void
+ccqueue_build() {
+  queue.first = NULL;
+  queue.canceled = 0;
+}
+
+const char*
+ccqueue_elt_type_2_str(ccqueue_elt_type t) {
+  switch (t) {
+  case Q_PREFS_UPDATE: return "PREFS_UPDATE"; break;
+  case Q_BOARD_POST: return "BOARD_POST"; break;
+  case Q_BOARD_UPDATE: return "BOARD_UPDATE"; break;
+  case Q_NEWSLST_UPDATE: return "NEWSLST_UPDATE"; break;
+  case Q_SMILEY_DL: return "SMILEY_DL"; break;
+  default: return "Oups BUG"; break;
+  }
+  return NULL;
+}
+
+static void
+ccqueue_push(ccqueue *q, ccqueue_elt_type what, int sid, char *ua, char *msg, int nid) {
+  ccqueue_elt *qe, *pqe, *iq;
+  int is_dup = 0;
+
+  BLAHBLAH(2, printf("push: %s (%s) (%s)\n", ccqueue_elt_type_2_str(what), ua, msg));
+
+  /* look for duplicates */
+  for (qe = q->first; qe && is_dup == 0; qe = qe->next ) {
+    if (qe->what == what) {
+      if (sid != qe->sid) continue;
+      if (nid != qe->nid) continue;
+      if (what == Q_BOARD_POST) {
+	assert(ua); assert(msg);
+	if (strcmp(ua, qe->ua)) continue;
+	if (strcmp(msg, qe->msg) && strcmp(msg, "pan ! pan !")) continue; /* on fait une exception pour le ball-trap, c'est tres tres moche */
+      }
+      if (what == Q_SMILEY_DL) {
+        if (strcmp(msg, qe->msg)) continue;
+      }
+      is_dup = 1;
+    }
+  }
+
+  if (is_dup) {
+    BLAHBLAH(0, myprintf("dupliquate request: %s %s%s\n", ccqueue_elt_type_2_str(what), sid >= 0 ? "for " : "", sid >= 0 ? Prefs.site[sid]->site_name : ""));
+    return;
+  }
+
+  ALLOC_OBJ(iq, ccqueue_elt);
+  iq->what = what; iq->sid = sid; 
+  iq->ua = ua ? strdup(ua) : NULL; 
+  iq->msg = msg ? strdup(msg) : NULL; 
+  iq->nid = nid;
+
+  for (qe = q->first, pqe = NULL; qe; pqe = qe, qe = qe->next ) {
+    if (qe->what > what) break;
+  }
+  iq->next = qe;
+  if (pqe) {
+    pqe->next = iq;
+  } else {
+    q->first = iq;
+  }
+}
+
+void ccqueue_push_prefs_update(int whatfile)
+{
+  ccqueue_push(&queue, Q_PREFS_UPDATE, -1, NULL, NULL, whatfile);
+}
+void ccqueue_push_board_post(int sid, char *ua, char *msg)
+{
+  ccqueue_push(&queue, Q_BOARD_POST, sid, strdup(ua), strdup(msg), -1);
+}
+void ccqueue_push_board_update(int sid)
+{
+  ccqueue_push(&queue, Q_BOARD_UPDATE, sid, NULL, NULL, -1);
+}
+void ccqueue_push_newslst_update(int sid)
+{
+  ccqueue_push(&queue, Q_NEWSLST_UPDATE, sid, NULL, NULL, -1);
+}
+void ccqueue_push_smiley_dl(char *imgname)
+{
+  ccqueue_push(&queue, Q_SMILEY_DL, -1, NULL, imgname, -1);
+}
+ccqueue_elt*
+ccqueue_find_next(ccqueue_elt_type what, int sid, ccqueue_elt *q) {
+  if (q == NULL) q = queue.first;
+  else q = q->next;
+  for (; q; q = q->next) {
+    if (q->what == what && (sid == -1 || q->sid == sid))
+      return q;
+  }
+  return NULL;
+}
+
+ccqueue_elt*
+ccqueue_find(ccqueue_elt_type what, int sid) {
+  return ccqueue_find_next(what, sid, NULL);
+}
+
+/* is there a board to update ? */
+/*
+int
+is_board_update_requested(SiteList *sl)
+{
+  Site *site;
+  for (site = sl->list; site; site = site->next) {
+    if (site->prefs->check_board && site->board->update_request == 1) {
+      return 1;
+    }
+  }
+  return 0;
+}
+*/
+
+static void ccqueue_pop(ccqueue_elt *q) {
+  ccqueue_elt *qq, *pq;
+  qq = queue.first; pq = NULL;
+  assert(q);
+  while (qq && qq != q) {
+    pq = qq;
+    qq = qq->next;
+  }
+  assert(qq);
+  if (pq == NULL) {
+    queue.first = q->next;
+  } else {
+    pq->next = q->next;
+  }
+  if (q->ua) free(q->ua);
+  if (q->msg) free(q->msg);
+  free(q);
+}
+ 
+int ccqueue_state() {
+  return queue.state;
+}
+
+void
+ccqueue_print() {
+  ccqueue_elt *q = queue.first;
+  myprintf("----- queue : \n");
+  for (; q; q = q->next) {
+    myprintf("%<MAG %15s> [%s] [%d] [%s] [%s]\n", ccqueue_elt_type_2_str(q->what),
+	     q->sid >= 0 ? Prefs.site[q->sid]->site_name : "??",
+	     q->nid, q->ua, q->msg);
+  }
+  myprintf("------\n");
+}
+
+const ccqueue_elt *
+ccqueue_doing_what()
+{
+  return (queue.state != -1 ? queue.first : NULL);
+}
+
+void ccqueue_loop(Dock *dock) {
+  int save_state_cnt = 0;
+  int nb_news_site = 0;
+  Site *s;
+  for (s = dock->sites->list; s; s = s->next) {
+    //    if (s->prefs->check_news) nb_news_site++;
+  }
+  if (nb_news_site)
+    strcpy(dock->newstitles, _("Transfer in progress..."));
+  else strcpy(dock->newstitles, "coin!");
+
+  while (1) {
+    while (queue.first) {
+      ccqueue_elt *q = queue.first;
+      BLAHBLAH(2, ccqueue_print());
+      queue.state = q->what;
+      flag_cancel_task = 0;
+      BLAHBLAH(2, printf("dealing with %s\n", ccqueue_elt_type_2_str(q->what)));
+      switch (q->what) {
+      case Q_PREFS_UPDATE: {
+	wmcc_prefs_relecture(dock, q->nid); 
+      } break;
+      case Q_BOARD_POST: {
+	Site *s;
+	exec_coin_coin(dock, q->sid, q->ua, q->msg); 
+	/*	dock->coin_coin_request = -50;*/ /* on va le repasser progressivement � zero (pour permettre � la led
+						    de s'�teindre progressivement) */
+	s = sl_find_site_id(dock->sites, q->sid);
+	if (s == NULL) printf("RROOOOOOARRRRR!\n");
+	if (s && s->board)
+	  ccqueue_push_board_update(q->sid); /* va falloir mettre la tribune � jour */
+      } break;
+      case Q_BOARD_UPDATE: {
+	Site *s = sl_find_site_id(dock->sites, q->sid);
+	if (s && s->board) {
+	  board_update(s->board);
+          /*
+          {
+            board_msg_info *mi = dock->sites->boards->first;
+            printf("SUMMARY OF GLOBAL BOARDS\n");
+            while (mi) {
+              printf("%20s id=%05d tstamp=%10ld corrected=%10ld\n", 
+                     sl_find_site_id(dock->sites, id_type_sid(mi->id))->prefs->site_name,
+                     id_type_lid(mi->id), mi->timestamp, mi->timestamp + dock->sites->boards->btab[mi->id.sid]->time_shift);
+              mi = mi->g_next;
+            }
+            char s[15];
+            time_t t0 = time(NULL);
+            time_t_to_tstamp(t0,s);
+            printf("t0 = %ld -> s=%s ->",t0,s);
+            str_to_time_t(s,&t0); printf("t1=%ld\n", t0);
+          }
+          */
+	}
+      } break;
+      case Q_NEWSLST_UPDATE: {
+	/*Site *s = sl_find_site_id(dock->sites, q->sid);
+	if (s) {
+	  site_news_dl_and_update(s);
+          }*/
+      } break;
+      case Q_SMILEY_DL: {
+        static char download_info[100];
+        /* L'url de l'image � t�l�charger devrait �tre dans q->msg */
+        if ( q->msg == NULL )
+          myfprintf(stderr, "mmm, il me semble que la fonction de r�cup�ration de smiley a ete programmee avec les pieds\n");
+        else {
+          snprintf(download_info, sizeof download_info, "downloading HFR smiley %s", q->msg);
+          pp_set_download_info(NULL, download_info);
+          pp_totoz_get_image(dock, q->msg);
+        }
+      } break;
+      }
+      if (flag_cancel_task) {
+	myprintf("you interrupted %<yel %s>\n", ccqueue_elt_type_2_str(q->what));
+      }
+      ccqueue_pop(q);
+      queue.state = -1;
+      pp_set_download_info(NULL,NULL); /* pour les cas o� �a a �t� mal remis � zero */
+    }
+
+    if (Prefs.ew_do_spell) ispell_run_background(Prefs.ew_spell_cmd, Prefs.ew_spell_dict);
+    
+    /* sauvegarde auto de la pos/dim du pinni & newswin */
+    if (save_state_cnt == ((1000/WMCC_TIMER_DELAY_MS)*60*10)) {
+      save_state_cnt = 0;
+      wmcc_save_or_restore_state(dock, 0); 
+    }
+    //    dock->wmcc_state_info = WMCC_IDLE;
+    ALLOW_X_LOOP;
+#if (defined(__CYGWIN__) || defined(NOSIGNALS))
+    usleep(10000); 
+#else
+    pause(); 
+#endif
+    /* ramasse zombie */
+    {
+      pid_t pid;
+      int status;
+      if ((pid = waitpid(0, &status, WNOHANG))) {
+	if (pid > 1 && WIFEXITED(status)) {
+	  BLAHBLAH(1,myfprintf(stderr, "fiston n� %u vient de mourir, son dernier mot a �t� %d\n", pid, WEXITSTATUS(status)));
+	}
+	if (pid == dock->wmccc_pid && dock->wmccc_pid > 1) {
+	  BLAHBLAH(1,myfprintf(stderr, "wmccc RIP\n"));
+	  dock->wmccc_pid = -1;
+	}
+      }
+    }
+    ALLOW_X_LOOP;
+    temps_depuis_dernier_event++;
+    save_state_cnt++;
+  }
+}
diff --git a/src/coin_util.c b/src/coin_util.c
new file mode 100644
index 0000000..efd4a9b
--- /dev/null
+++ b/src/coin_util.c
@@ -0,0 +1,1342 @@
+/*
+  rcsid=$Id: coin_util.c,v 1.43 2005/09/25 12:08:55 pouaite Exp $
+  ChangeLog:
+  $Log: coin_util.c,v $
+  Revision 1.43  2005/09/25 12:08:55  pouaite
+  ca marche encore ca ?
+
+  Revision 1.42  2004/04/28 22:19:00  pouaite
+  bugfixes dae + des trucs que j'ai oublie
+
+  Revision 1.41  2004/04/18 15:37:28  pouaite
+  un deux un deux
+
+  Revision 1.40  2004/03/07 13:51:12  pouaite
+  commit du dimanche
+
+  Revision 1.39  2004/03/03 23:00:39  pouaite
+  commit du soir
+
+  Revision 1.38  2004/02/29 15:01:19  pouaite
+  May the charles bronson spirit be with you
+
+  Revision 1.37  2003/08/26 21:50:48  pouaite
+  2.6.4b au mastic
+
+  Revision 1.36  2003/06/29 23:58:38  pouaite
+  suppression de l'overrideredirect du palmi et ajout de pinnipede_totoz.c et wmcoincoin-totoz-get etc
+
+  Revision 1.35  2003/06/09 16:42:29  pouaite
+  pan pan
+
+  Revision 1.34  2003/03/01 17:31:22  pouaite
+  compat ipv6 a tester
+
+  Revision 1.33  2003/02/26 00:03:19  pouaite
+  fix bug des urls relatives (pour la caverne)
+
+  Revision 1.32  2002/10/16 20:41:45  pouaite
+  killall toto
+
+  Revision 1.31  2002/08/21 20:22:16  pouaite
+  fix compil
+
+  Revision 1.30  2002/08/18 19:00:28  pouaite
+  plop
+
+  Revision 1.29  2002/08/18 00:29:30  pouaite
+  en travaux .. pri�re de porter le casque
+
+  Revision 1.28  2002/06/23 22:26:01  pouaite
+  bugfixes+support � deux francs des visuals pseudocolor
+
+  Revision 1.27  2002/06/23 14:01:36  pouaite
+  ouups, j'avais flingu� les modifs depuis la v2.3.8b
+
+  Revision 1.26  2002/06/23 10:44:05  pouaite
+  i18n-isation of the coincoin(kwakkwak), thanks to the incredible jjb !
+
+  Revision 1.24  2002/06/01 17:54:04  pouaite
+  nettoyage
+
+  Revision 1.23  2002/05/12 22:06:27  pouaite
+  grosses modifs dans http.c
+
+  Revision 1.22  2002/04/13 11:55:19  pouaite
+  fix kde3 + deux trois conneries
+
+  Revision 1.21  2002/04/10 18:13:33  pouaite
+  bugfix ppc
+
+  Revision 1.20  2002/04/01 22:56:03  pouaite
+  la pseudo-transparence du pinni, bugfixes divers, option tribune.backend_type
+
+  Revision 1.19  2002/04/01 01:39:38  pouaite
+  grosse grosse commition (cf changelog)
+
+  Revision 1.18  2002/03/27 23:27:10  pouaite
+  tjs des bugfixes (pour gerer des posts qui peuvent atteindre 10ko !), en parallele de la v2.3.6-5
+
+  Revision 1.17  2002/03/27 21:22:29  pouaite
+  microbugfix
+
+  Revision 1.16  2002/03/27 20:45:06  pouaite
+  deuxi�me vague de bugfix
+
+  Revision 1.15  2002/03/27 19:02:04  pouaite
+  bugfix pour le nouveau format du backend
+
+  Revision 1.14  2002/03/21 22:53:07  pouaite
+  ajout d'une icone pour la fenetre du pinnipede et des news
+
+  Revision 1.13  2002/03/03 10:10:04  pouaite
+  bugfixes divers et vari�s
+
+  Revision 1.12  2002/03/01 00:27:40  pouaite
+  trois fois rien
+
+  Revision 1.11  2002/02/27 00:32:19  pouaite
+  modifs velues
+
+  Revision 1.10  2002/02/24 22:13:56  pouaite
+  modifs pour la v2.3.5 (selection, scrollcoin, plopification, bugfixes)
+
+  Revision 1.9  2002/01/16 21:27:35  pouaite
+  gros coup de balai dans wmcoincoin.c qui s'est du coup splitt� en trois: wmcoincoin.c, dock.c et useragents_file.c
+
+  Revision 1.8  2002/01/16 00:35:26  pouaite
+  debut de detection des reponse � nos message avec des couleurs hideuses et certainement plein de bugs moisis
+
+  Revision 1.7  2002/01/14 23:54:06  pouaite
+  reconnaissance des posts effectu� par l'utilisateur du canard (� suivre...)
+
+  Revision 1.6  2002/01/13 20:02:51  pouaite
+  j'ai honte
+
+  Revision 1.5  2002/01/13 15:19:00  pouaite
+  double patch: shift -> tribune.post_cmd et lordOric -> tribune.archive
+
+  Revision 1.4  2002/01/12 17:29:08  pouaite
+  support de l'iso8859-15 (euro..)
+
+  Revision 1.3  2001/12/21 12:21:23  pouaite
+  pico bugfix
+
+  Revision 1.2  2001/12/02 18:29:46  pouaite
+  � la demande des d�cideurs de tous poils, gestion (toute naze...) de l'EURO !
+
+*/
+#include "config.h"
+#include <string.h>
+#include <ctype.h>
+#include <stdarg.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <time.h>
+#include <iconv.h>
+#include <errno.h>
+#ifdef HAVE_BACKTRACE
+# include <execinfo.h>
+#endif
+#include "coin_util.h"
+
+#include <libintl.h>
+#define _(String) gettext(String)
+#include "myprintf.h"
+
+/* construit un 'nom' � partir des premiers mots du useragent */
+
+void
+make_short_name_from_ua(const unsigned char *ua, unsigned char *name, int name_sz)
+{
+  if (ua == NULL || strlen(ua) == 0) {
+    strncpy(name, _("[empty]"), name_sz); name[name_sz-1] = 0;
+    return;
+  }
+  strncpy(name, ua, name_sz); name[name_sz-1] = 0;
+  if ((int)strlen(name) >= name_sz-1) {
+    int i;
+
+    // essaye de ramener l'useragent � une longueur correcte sans tronquer de mot 
+    i = name_sz-2;
+    
+    // cas facile: des espaces 
+    if (name[i] == ' ') {
+      while (name[i] == ' ' && i) i--;
+      name[i+1] = 0;
+    } else {
+      while (i && isalnum((unsigned char)name[i])) {
+	i--; 
+      }
+      while (i>1 && !isalnum((unsigned char)name[i-1])) {
+	i--;
+      }
+      if (i > 5) {
+	name[i] = 0;
+      }
+    }
+  }
+}
+
+
+/*
+  with_bug_amp : le remote.rdf a �t� deux fois interprete par une moulinette,
+   resultat , les '�' soit devenus des 'é' puis des '&eacute;'
+
+   remarque: on peut avoir dest == src, on utilise alors une chaine temporaire
+
+   renvoie la longueur de la chaine apres conversion
+
+   cette fonction est utilisee par picohtml.c et coincoin_tribune.c
+*/
+int
+convert_to_ascii(char *dest, const char *_src, int dest_sz)
+{
+  int id, is;
+
+  const char *src;
+  static const struct {
+    char *sign;
+    char *c;
+    int num;
+  } tab[] = {{"amp;", "&", 0},
+	     {"quot;", "\"", 8220},
+             {"quot;", "\"", 8221},
+             {"apos;","'",8217},
+	     {"gt;", ">", 0},
+	     {"lt;", "<", 0},
+	     {"acute;", "\'", 0},
+	     {"nbsp;"  , " ", 0},  // 0xa0 /* ouais bon, du coup il va etre breakable l'espace.. */
+	     {"iexcl;" , "�", 0},
+	     {"cent;"  , "�", 0},
+             {"pound;" , "�", 0},
+             {"curren;", "�", 0},  // 0xa4
+	     {"yen;"   , "�", 0},
+	     {"brvbar;", "�", 0},
+	     {"sect;"  , "�", 0},
+             {"uml;"   , "�", 0},
+	     {"copy;"  , "�", 0},
+	     {"ordf;"  , "�", 0},
+	     {"laquo;" , "�", 0},
+	     {"not;"   , "�", 0},
+	     {"shy;"   , "�", 0},
+	     {"reg;"   , "�", 0},
+	     {"macr;"  , "�", 0},
+	     {"deg;"   , "�", 0}, // 0xb0
+	     {"plusmn;", "�", 0},
+	     {"sup2;"  , "�", 0},
+	     {"sup3;"  , "�", 0},
+	     {"acute;" , "�", 0},
+	     {"micro;" , "�", 0},
+	     {"para;"  , "�", 0},
+	     {"middot;", "�", 0},
+             {"cedil;" , "�", 0},
+	     {"sup1;"  , "�", 0},
+	     {"ordm;"  , "�", 0},
+	     {"raquo;", "�", 0},
+
+	     {"frac14;", "�", 0},
+	     {"frac12;", "�", 0},
+	     {"frac34;", "�", 0},
+	     {"iquest;", "�", 0},
+
+	     {"Agrave;", "�", 0}, // 0xc0
+	     {"Aacute;", "�", 0},
+	     {"Acirc;" , "�", 0},
+	     {"Atilde;", "�", 0},
+	     {"Auml;"  , "�", 0},
+	     {"Aring;" , "�", 0},
+	     {"AElig;" , "�", 0},
+	     {"Ccedil;", "�", 0},
+	     {"Egrave;", "�", 0},
+	     {"Eacute;", "�", 0},
+	     {"Ecirc;" , "�", 0},
+	     {"Euml;"  , "�", 0}, 
+	     {"Igrave;", "�", 0},
+	     {"Iacute;", "�", 0},
+	     {"Icirc;" , "�", 0},
+	     {"Iuml;"  , "�", 0},
+	     {"ETH;"   , "�", 0}, // 0xd0
+	     {"Ntilde;", "�", 0},
+	     {"Ograve;", "�", 0},
+	     {"Oacute;", "�", 0},
+	     {"Ocirc;" , "�", 0},
+	     {"Otilde;", "�", 0},
+	     {"Ouml;"  , "�", 0},
+	     {"times;" , "�", 0},
+	     {"Oslash;", "�", 0},
+	     {"Ugrave;", "�", 0},
+	     {"Uacute;", "�", 0},
+	     {"Ucirc;" , "�", 0},
+	     {"Uuml;"  , "�", 0},
+	     {"Yacute;", "�", 0},
+	     {"THORN;" , "�", 0},
+	     {"szlig;" , "�", 0},
+	     {"agrave;", "�", 0}, // 0xe0
+	     {"aacute;", "�", 0},
+	     {"acirc;" , "�", 0},
+	     {"atilde;", "�", 0},
+	     {"auml;"  , "�", 0},
+	     {"aring;" , "�", 0},
+	     {"aelig;" , "�", 0},
+	     {"ccedil;", "�", 0},
+	     {"egrave;", "�", 0},
+	     {"eacute;", "�", 0},
+	     {"ecirc;" , "�", 0},
+	     {"euml;"  , "�", 0},
+	     {"igrave;", "�", 0},
+	     {"iacute;", "�", 0},
+	     {"icirc;" , "�", 0},
+	     {"iuml;"  , "�", 0},
+	     {"eth;"   , "�", 0}, // 0xf0
+	     {"ntilde;", "�", 0},
+	     {"ograve;", "�", 0},
+	     {"oacute;", "�", 0},
+	     {"ocirc;" , "�", 0},
+	     {"otilde;", "�", 0},
+	     {"ouml;"  , "�", 0},
+	     {"divide;", "�", 0},
+	     {"oslash;", "�", 0},
+	     {"uacute;", "�", 0},
+	     {"ugrave;", "�", 0},
+	     {"ucirc;" , "�", 0},
+	     {"uuml;"  , "�", 0}, 
+	     {"yacute;", "�", 0}, // 0xfd
+	     {"thorn;" , "�", 0}, // 0xfe
+	     {"yuml;"  , "�", 0}, // 0xff
+             // les horreurs ms
+	     //   {"Scaron;",{352,0}},
+	     //	     {"scaron;",{353,0}},
+	     {"trade;", "(tm)", 153}, // non iso8859-1
+	     {"euro;", "�", 8364},   // il faut iso8859-15 pour que �a fasse le bon char
+	     {"OElig;" , "OE", 140},
+	     {"oelig;" , "oe", 156},
+             {"ldots", "...", 133},
+             {"hellip", "...", 133},
+             {"bull", "*", 149},
+             {"ndash", "--", 150},
+             {"endash", "--", 150},
+             {"mdash", "--", 151},
+             {"emdash", "--", 151},
+	     {NULL, "*", 0}};
+
+
+  /* detection du cas ou les chaines se supperposent */
+  if (_src == dest ) {
+    src = strdup(_src); assert(src);
+  } else {
+    src = _src;
+  }
+
+  id = 0; is = 0;
+  while (id < dest_sz-1 && src[is]) {
+    if (src[is] == '&') {
+      int i, found;
+      i = 0; found = -1;
+      if (src[is+1] == '#' && src[is+2] >= '0' && src[is+2] <= '9') {
+        long n; char *end;
+        n = strtol(src+is+2, &end, 10);
+        if (n >= 32) {
+          while (tab[i].sign) {
+            if (tab[i].num && tab[i].num == n) {
+              is += strlen(tab[i].sign)+1;
+              found = i;
+              break;
+            }
+            i++;
+          }
+          if (found == -1 && n < 256) {
+            dest[id++] = (unsigned char)n; 
+            is += (end - (src+is)); 
+            if (src[is] == ';') ++is;
+            found = 1;
+          } else {
+            int j;
+            j = 0;
+            while (id < dest_sz-1 && tab[i].c[j]) {
+              dest[id++] = tab[i].c[j++];
+            }
+            is += (end - (src+is));if (src[is] == ';') ++is;
+          }
+        }
+      }
+      if (found == -1) {
+        while (tab[i].sign) {
+          if (strncmp(tab[i].sign, src+is+1, strlen(tab[i].sign))==0) {
+            is += strlen(tab[i].sign)+1;
+            found = i;
+            break;
+          }
+          i++;
+        }
+        if (found == -1) {
+          dest[id++] = '&'; is++;
+        } else {
+          int j;
+          j = 0;
+          while (id < dest_sz-1 && tab[i].c[j]) {
+            dest[id++] = tab[i].c[j++];
+          }
+        }
+      }
+    } else if ((unsigned char)src[is] == 0x80 && id < dest_sz-2) { // cas particulier pour l'odieux EURO (encodage windows) 
+      dest[id++] = '�';
+      is++;
+    } else {
+      dest[id] = src[is];
+      id++; is++;
+    }
+  }
+  dest[id] = 0;
+
+  if (_src == dest) {
+    free((char*)src);
+  }
+  return id;
+}
+
+int
+mark_html_tags(char *s, int sz) {
+  char *s2 = strdup(s);
+  int i,j;
+
+  for (i=0,j=0; i < sz && s2[i]; i++) {
+    if ((s2[i] == '<' || s2[i] == '>') && j < sz-2) {
+      s[j++] = '\t';
+      s[j++] = s2[i];
+    } else if (j < sz-1) {
+      s[j++] = s2[i];
+    }
+  }
+  assert(j < sz); assert(i <= sz);
+  s[j] = 0;
+  free(s2);
+  return j;
+}
+
+
+/*
+  verifie si la chaine est vide (cad si elle ne contient que des caract�res non imprimables 
+*/
+int
+str_is_empty(const char *s) {
+  int i;
+  if (s == NULL) return 1;
+  else if (strlen(s) == 0) return 1;
+  else {
+    i = 0;
+    while (s[i] && s[i] <= ' ') i++;
+    return (i == (int)strlen(s));
+  }
+}
+
+int xstrcmp(const char *a, const char *b) {
+  if (str_is_empty(a) && str_is_empty(b)) return 0;
+  else if (str_is_empty(a)) return -1;
+  else if (str_is_empty(b)) return +1;
+  else return strcmp(a,b);
+}
+
+/* recherche la premi�re occurence d'une des chaines 'keys' dans 'src' et renvoie un pointeur vers
+   cette occurence, ainsi que le num�ro de la 'keys' trouv�e
+
+   bien s�r c'est pas optimal du tout, mais ON S'EN FOUT(tm)
+
+   et oui, effectivement, 'str_multi_str' est un nom � la con
+*/
+char *
+str_multi_str(const char *src, const char **keys, int nb_keys, int *key_idx)
+{
+  int i;
+  const char *res;
+
+  assert(key_idx);
+  *key_idx = 0;
+  res = NULL;
+  for (i=0; i < nb_keys; i++) {
+    const char *p;
+    p = strstr(src, keys[i]);
+    if (p && (res==NULL || p < res)) { res = p; *key_idx = i; }
+  }
+  return (char*)res;
+}
+
+/* renvoie une chaine (allou�e correctement) contenant la substitution de toutes les occurences de
+   'key' dans 'src' par 'substitution' (key et substition sont des tableaux de chaines de
+   caract�res, car pour faire plusieurs substitutions, mieux vaut les effectuer simultanement que
+   les enchainer pour eviter les effets de bords
+*/
+char *
+str_multi_substitute(const char *src, const char **keys, const char **substitutions, int nkeys)
+{
+  const char *p, *p_key;
+  char *dest, *p_dest;
+  int dest_sz, p_len,j;
+
+  if (src == NULL) return NULL;
+
+  /* calcul de la longueur de la destination.. */
+  p = src;
+  dest_sz = strlen(src)+1;
+
+  while ((p_key=str_multi_str(p, keys, nkeys, &j))) {
+    dest_sz += (strlen(substitutions[j]) - strlen(keys[j]));
+    p = p_key+strlen(keys[j]);
+  }
+
+  dest = malloc(dest_sz);
+
+  /* et l� PAF ! */
+  p = src;
+  p_dest = dest;
+  while ((p_key=str_multi_str(p, keys, nkeys, &j))) {
+    memcpy(p_dest, p, p_key-p);
+    p_dest += p_key-p;
+    memcpy(p_dest, substitutions[j], strlen(substitutions[j]));
+    p_dest += strlen(substitutions[j]);
+    p = p_key + strlen(keys[j]);
+  }
+  p_len = strlen(p);
+  if (p_len) {
+    memcpy(p_dest, p, p_len); p_dest += p_len;
+  }
+  *p_dest = 0;
+  assert(p_dest - dest == dest_sz-1); /* capote � bugs */
+  return dest;
+}
+
+char *
+str_substitute(const char *src, const char *key, const char *substitution) {
+  return str_multi_substitute(src, &key, &substitution, 1);
+}
+
+/* quotage pour les commandes externes.. � priori c'est comme pour open_url
+   mais bon.. je me refuse � donner la moindre garantie sur la s�curit� 
+
+   be aware
+*/
+char *
+shell_quote(const char *src)
+{
+  char *quote = "&;`'\\\"|*?~<>^()[]{}$";
+  int i,dest_sz;
+  const unsigned char *p;
+  char *dest;
+
+  if (src == NULL || strlen(src) == 0) return strdup("");
+
+  dest_sz = strlen(src)+1;
+  for (p=src; *p; p++) {
+    if (strchr(quote, *p) || *p <= ' ') dest_sz+=1;
+  }
+  dest = malloc(dest_sz);
+
+  for (p=src, i=0; *p; p++) {
+    if (strchr(quote, *p) || *p <= ' ') {
+      dest[i++] = '\\';
+    }
+    if (*p <= ' ') {
+      dest[i++] = ' ';
+    } else {
+      dest[i++] = *p;
+    }
+  }
+  dest[i] = 0;
+  assert(i == dest_sz-1); /* kapeaute � beugue */
+  return dest;
+}
+
+/* 
+   fonction de hachage � la con (vraiment!) 
+*/
+
+int
+str_hache(const unsigned char *s, int max_len)
+{
+  unsigned char v[4];
+  const unsigned char *p;
+  int i, j;
+
+  assert(s);
+  if (max_len == -1) max_len = strlen(s);
+  v[0] = 0xAB; v[1] = 0x13; v[2] = 0x9A; v[3] = 0x12;
+  p = s;
+  for (i=0, j=0; i < max_len && s[i]; i++) {
+    unsigned char c;
+    c = ((p[i])<<j) + ((p[i]) >> (8-j));
+    v[j] ^= c;
+    j++; if (j == 4) j = 0;
+  }
+  return CVINT(v[0],v[1],v[2],v[3]);
+}
+
+int
+str_hache_nocase(const unsigned char *s, int max_len)
+{
+  unsigned char v[4];
+  const unsigned char *p;
+  int i, j;
+
+  assert(s);
+  v[0] = 0xAB; v[1] = 0x13; v[2] = 0x9A; v[3] = 0x12;
+  p = s;
+  for (i=0, j=0; i < max_len && s[i]; i++) {
+    unsigned char c,d;
+    d = tolower(p[i]);
+    c = ((d)<<j) + ((d) >> (8-j));
+    v[j] ^= c;
+    j++; if (j == 4) j = 0;
+  }
+  return CVINT(v[0],v[1],v[2],v[3]);
+}
+
+void
+md5_digest(const char *s, md5_byte_t md5[16]) {
+  md5_state_t ms;
+  md5_init(&ms); md5_append(&ms,s,strlen(s)); md5_finish(&ms,md5);
+}
+
+/* en minuscule ou on pete le APOP */
+const char *
+md5txt(md5_byte_t md5[16]) {         
+  static char md5txt[32];
+  int i;
+  for (i = 0; i < 16; ++i) {
+    md5txt[2*i  ] = "0123456789abcdef"[md5[i]/16];
+    md5txt[2*i+1] = "0123456789abcdef"[md5[i]%16];
+  }
+  return md5txt;
+}
+
+
+unsigned char char_trans[256];
+static int char_trans_init = 0;
+
+static void 
+init_char_trans()
+{
+  unsigned char *trans_accents  = "���������������������������������������";
+  unsigned char *trans_accents2 = "eeeeeeeeaaaaaaaauuuucciiiiiiiioooooooon";
+  int i;
+
+  for (i=0; i < 256; i++) {
+    unsigned char *p;
+    if ((p=strchr(trans_accents, i))) {
+      char_trans[i] = trans_accents2[(p - trans_accents)];
+      } else if (i < (unsigned char)'A' || i > (unsigned char)'Z') {
+	char_trans[i] = i;
+      } else {
+	char_trans[i] = i + 'a' - 'A';
+      }
+  }
+  char_trans_init = 1;
+}
+
+unsigned char
+chr_noaccent_tolower(unsigned char c)
+{
+  if (char_trans_init == 0) init_char_trans();
+  return char_trans[c];
+}
+
+void
+str_noaccent_tolower(unsigned char *s)
+{
+  int i;
+  if (s == NULL) return;
+  if (char_trans_init == 0) init_char_trans();
+  i = 0; while(s[i]) {
+    s[i] = char_trans[s[i]]; i++;
+  }
+}
+
+unsigned char *
+str_noaccent_casestr(const unsigned char *meule, const unsigned char *aiguille)
+{
+  unsigned char *res;
+  unsigned char *m = strdup(meule);
+  unsigned char *a = strdup(aiguille);
+  int pos = -1;
+  str_noaccent_tolower(m);
+  str_noaccent_tolower(a);
+  res = strstr(m, a); if (res) pos = res-m;
+  free(a); free(m);
+  return ((pos >= 0) ? (unsigned char*)meule+pos : NULL);
+}
+
+unsigned char *
+str_case_str(const unsigned char *meule, const unsigned char *aiguille) {
+  unsigned char c0 = tolower(aiguille[0]);
+  assert(meule); assert(aiguille);
+  if (aiguille[0] == 0) return (unsigned char*)meule;
+  do {
+    while (*meule && tolower(*meule) != c0) ++meule;
+    if (*meule) {
+      int i=1;
+      for (i = 1; aiguille[i] && meule[i]; ++i) {
+        if (tolower(aiguille[i]) != tolower(meule[i])) break;
+      }
+      if (aiguille[i] == 0) return (unsigned char*)meule;
+      else ++meule;
+    }
+  } while (*meule);
+  return NULL;
+}
+
+int str_ncasecmp(const unsigned char *a, const unsigned char *b, unsigned n) {
+  assert(a); assert(b); assert(n < 10000000);
+  while (n && *a && *b) {
+    if (tolower(*a) < tolower(*b)) return -1;
+    else if (tolower(*a) > tolower(*b)) return +1;
+    --n; ++a; ++b;
+  }
+  if (*a == 0 && *b) return -1;
+  else if (*b && *a == 0) return +1;
+  else return 0;
+}
+
+int str_case_startswith(const unsigned char *a, const unsigned char *b) {
+  return (str_ncasecmp(a,b,strlen(b)) == 0 && strlen(a) >= strlen(b));
+}
+
+int str_startswith(const unsigned char *a, const unsigned char *b) {
+  return (strncmp(a,b,strlen(b)) == 0 && strlen(a) >= strlen(b));
+}
+
+void
+str_tolower(unsigned char *s)
+{
+  if (s == NULL) return;
+  for (; *s; s++) if (*s >= 'A' && *s <= 'Z') *s = *s - 'A' + 'a';
+}
+
+/* un printf pas tr�s fin, mais avec allocation dynamique..
+   c'est pratique ces ptites choses */
+char *
+str_printf(const char *fmt, ...)
+{
+  va_list ap;
+  char *s;
+  int s_sz;
+
+  s_sz = 100;
+  s = malloc(s_sz); assert(s);
+  while (1) {
+    int ret;
+    va_start(ap, fmt);
+    ret = vsnprintf(s, s_sz, fmt, ap);
+    va_end(ap);
+    if (ret == -1 || ret >= s_sz-1) {
+      s_sz *= 2;
+      assert(s_sz < 100000);
+      s = realloc(s, s_sz); assert(s);
+    } else 
+      break;
+  }
+  s = realloc(s, strlen(s)+1); assert(s);
+  return s;
+}
+
+char *
+str_cat_printf(char *in_s, const char *fmt, ...)
+{
+  va_list ap;
+  char *s, *out_s;
+  int s_sz;
+
+  s_sz = 100;
+  s = malloc(s_sz); assert(s);
+  while (1) {
+    int ret;
+    va_start(ap, fmt);
+    ret = vsnprintf(s, s_sz, fmt, ap);
+    va_end(ap);
+    if (ret == -1 || ret >= s_sz-1) {
+      s_sz *= 2;
+      assert(s_sz < 100000);
+      s = realloc(s, s_sz); assert(s);
+    } else 
+      break;
+  }
+  
+  out_s = malloc( (in_s ? strlen(in_s) : 0) + strlen(s) + 1); 
+  assert(out_s); out_s[0] = 0;
+  if (in_s) { strcpy(out_s, in_s); free(in_s); }
+  strcat(out_s, s);
+  free(s);
+  return out_s;
+}
+
+
+/* lecture d'une ligne d'un fichier, avec allocation dynamique */
+char *
+str_fget_line(FILE *f)
+{
+  int i,c;
+  char *s;
+  int s_sz;
+
+  s_sz = 100; s = malloc(s_sz); assert(s);
+  i = 0;
+  while ((c = fgetc(f)) > 0) {
+    if (c >= ' ' || c == '\t') {
+      s[i++] = c;
+      if (i == s_sz) { 
+	s_sz *= 2; assert(s_sz < 100000);
+	s = realloc(s, s_sz); assert(s);
+      }
+    }
+    if (c == '\n') break;
+  }
+  s[i] = 0; assert(i < s_sz);
+  s = realloc(s, strlen(s)+1); assert(s);
+  return s;
+}
+
+/* enleve les espaces au d�but et � la fin */
+void
+str_trim(unsigned char *s) {
+  int i,j;
+
+  if (s == NULL) return;
+  j = strlen(s)-1;
+  while (j>=0 && s[j] <= ' ') s[j--] = 0;
+
+  i = 0; 
+  while (s[i] && s[i] <= ' ') i++;
+  if (i<=j) {
+    memmove(s, s+i, j+2-i);
+  }
+}
+
+void
+str_rtrim_lf(unsigned char *s) {
+  int j;
+  if (s == NULL) return;
+  j = strlen(s)-1;
+  while (j>=0 && s[j] < ' ') s[j--] = 0;
+}
+
+char *
+str_preencode_for_http(const char *in)
+{
+  const char *keys[] = {" ", "+"  , ":"  ,"@"  };
+  const char *subs[] = {"+", "%2B", "%3A","%40"};
+  char *s;
+  
+  if (in == NULL) return NULL;
+  s = str_multi_substitute(in, keys, subs, 2);
+  return s;
+}
+
+char *
+str_ndup(const char *in, int n)
+{
+  int l;
+  char *s; 
+  assert(in); assert(n>=0);
+  l = MIN(strlen(in), (unsigned)n);
+  s = malloc(l+1); assert(s);
+  strncpy(s, in, l);
+  s[l] = 0;
+  return s;
+}
+
+char *str_dup_unquoted(const char *s) {
+  int len;
+  if (s == NULL) return NULL;
+  len = strlen(s);
+  if (len < 2 || (s[0] != '"' && s[0] != '\'')) return strdup(s);
+  if (s[0] == '"' && s[len-1] == '"') return str_ndup(s+1,len-2);
+  if (s[0] == '\'' && s[len-1] == '\'') return str_ndup(s+1,len-2);
+  return strdup(s);
+}
+
+char*
+str_cat(char *s1, const char *s2)
+{
+  int l1;
+  int l2;
+  char *s; 
+  if (s2 == NULL) return s1;
+  if (s1 == NULL) return strdup(s2);
+    
+  l1 = strlen(s1);
+  l2 = strlen(s2);
+  s = malloc(l1+l2+1); assert(s);
+  strcpy(s, s1);
+  strcpy(s+l1,s2);
+  free(s1);
+  return s;
+}
+
+char*
+str_ncat(char *s1, const char *s2, int n)
+{
+  int l1;
+  int l2;
+  char *s;
+  if (s2 == NULL) return s1;
+  if (s1 == NULL) return str_ndup(s2,n);
+  assert(n>=0);
+  l1 = strlen(s1);
+  l2 = MIN((int)strlen(s2),n);
+  s = malloc(l1+l2+1); assert(s);
+  strcpy(s, s1);
+  strncpy(s+l1,s2,l2); s[l1+l2]=0;
+  free(s1);
+  return s;
+}
+
+void
+str_trunc_nice(char *s, int approx_max_len) {
+  if (s && (int)strlen(s) > approx_max_len - 20) {
+    int i=approx_max_len - 20; 
+    while (s[i] && !isspace(s[i]) && i < approx_max_len+30) ++i;
+    if (s[i] && i < (int)(strlen(s) - 10)) { s[i] = 0; strcat(s, "(...)"); }
+  }
+}
+
+/* la feinte: extern timezone n'est:
+     - pas portable sur bsd
+     - ne prend pas en compte le daylight saving, i.e. en �t� en france, �a chie
+   -> pour chopper le vrai decalage par rapport au gmt, il faut utiliser localtime, 
+   mettre tm_isdst � zero et reappeller mktime
+*/ 
+time_t get_timezone() {
+  static int isinit = 0;
+  static time_t t;
+  if (!isinit) {
+    isinit = 1;
+    time_t t0 = time(NULL);
+    struct tm *tt;
+    tt = gmtime(&t0); tt->tm_isdst = 0;
+    t = mktime(tt);
+    tt = localtime(&t0); tt->tm_isdst = 0;
+    t -= mktime(tt);
+  }
+  return t;
+}
+
+/* une fonction qui n'en veut */
+int
+str_to_time_t(const char *s, time_t *tt) {
+  char sday[10], smon[10], stz[20], *stzdg = NULL;
+  float fracsec = 0;
+  int apply_tzshift = 1;
+  int tzshift_h = 0, tzshift_m = 0, tz_sgn = +1;
+  int confidence = 0; /* pour les dates qui ne contiennent pas les hh:mm:ss, on ajoute systematiquement 24 h */
+  struct tm t;
+  int ok = 0;
+
+  sday[0] = smon[0] = stz[0] = 0;
+  memset(&t, 0, sizeof(t));
+  
+  if (sscanf(s, "%4d%2d%2d%2d%2d%2d", &t.tm_year,&t.tm_mon,&t.tm_mday,&t.tm_hour,&t.tm_min,&t.tm_sec) == 6) {
+    ok = 1; apply_tzshift = 0;
+  }
+  /* test format RFC-822 */
+  if (!ok && (sscanf(s,"%10s %d %10s %d %d:%d:%d %s", 
+                     sday, &t.tm_mday, smon, &t.tm_year, &t.tm_hour, &t.tm_min, &t.tm_sec, stz) >= 7 ||
+              sscanf(s,"%10s %d %10s %d %d:%d %s", 
+                     sday, &t.tm_mday, smon, &t.tm_year, &t.tm_hour, &t.tm_min, stz) >= 6 ||
+              sscanf(s,"%d %10s %d %d:%d:%d %s", /* format trouv� dans certains mails */
+                     &t.tm_mday, smon, &t.tm_year, &t.tm_hour, &t.tm_min, &t.tm_sec, stz) >= 6)) {
+    /*
+      date-time   =  [ day "," ] date time        ; dd mm yy
+                                                 ;  hh:mm:ss zzz
+
+     day         =  "Mon"  / "Tue" /  "Wed"  / "Thu"
+                 /  "Fri"  / "Sat" /  "Sun"
+
+     date        =  1*2DIGIT month 2DIGIT        ; day month year
+                                                 ;  e.g. 20 Jun 82
+
+     month       =  "Jan"  /  "Feb" /  "Mar"  /  "Apr"
+                 /  "May"  /  "Jun" /  "Jul"  /  "Aug"
+                 /  "Sep"  /  "Oct" /  "Nov"  /  "Dec"
+
+     time        =  hour zone                    ; ANSI and Military
+
+     hour        =  2DIGIT ":" 2DIGIT [":" 2DIGIT]
+                                                 ; 00:00:00 - 23:59:59
+
+     zone        =  "UT"  / "GMT"                ; Universal Time
+                                                 ; North American : UT
+                 /  "EST" / "EDT"                ;  Eastern:  - 5/ - 4
+                 /  "CST" / "CDT"                ;  Central:  - 6/ - 5
+                 /  "MST" / "MDT"                ;  Mountain: - 7/ - 6
+                 /  "PST" / "PDT"                ;  Pacific:  - 8/ - 7
+                 /  1ALPHA                       ; Military: Z = UT;
+                                                 ;  A:-1; (J not used)
+                                                 ;  M:-12; N:+1; Y:+12
+                 / ( ("+" / "-") 4DIGIT )        ; Local differential
+                                                 ;  hours+min. (HHMM)
+    */
+    static char *monthnames[12] = {"Jan",  "Feb",  "Mar",  "Apr",  "May", "Jun", 
+                                   "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
+    if (strlen(smon) && smon[strlen(smon)-1] == ',') smon[strlen(smon)-1] = 0;
+    int i; for (i = 0; i < 12; ++i) 
+      if (str_ncasecmp(smon, monthnames[i], 3)==0) {
+        t.tm_mon = i+1;
+        ok = 1; break;
+      }
+    
+    str_trim(stz); stzdg = stz; tz_sgn = +1;
+    if (stz[0] == '+') { stzdg++; }
+    else if (stz[0] == '-') { stzdg++; tz_sgn = -1; }    
+    if (sscanf(stzdg, "%2d%2d", &tzshift_h, &tzshift_m) == 2) { /* plop */ 
+      //printf("stz = '%s', tzshift_h=%d, tzshift_m=%d\n", stz, tzshift_h, tzshift_m);
+    } 
+    else if (strcasecmp(stz, "EST")==0) { tzshift_h = -5; }
+    else if (strcasecmp(stz, "EDT")==0) { tzshift_h = -4; }
+    else if (strcasecmp(stz, "CST")==0) { tzshift_h = -6; }
+    else if (strcasecmp(stz, "CDT")==0) { tzshift_h = -5; }
+    else if (strcasecmp(stz, "MST")==0) { tzshift_h = -7; }
+    else if (strcasecmp(stz, "MDT")==0) { tzshift_h = -6; }
+    else if (strcasecmp(stz, "PST")==0) { tzshift_h = -8; }
+    else if (strcasecmp(stz, "PDT")==0) { tzshift_h = -7; }
+  } 
+  /* test format ISO 8601 http://www.w3.org/TR/NOTE-datetime -- 6 possiblit�s
+      YYYY (eg 1997)
+      YYYY-MM (eg 1997-07)
+      YYYY-MM-DD (eg 1997-07-16)
+      YYYY-MM-DDThh:mmTZD (eg 1997-07-16T19:20+01:00)
+      YYYY-MM-DDThh:mm:ssTZD (eg 1997-07-16T19:20:30+01:00)
+      YYYY-MM-DDThh:mm:ss.sTZD (eg 1997-07-16T19:20:30.45+01:00)
+   */
+  if (!ok && sscanf(s, "%4d-%2d-%2dT%2d:%2d:%f%d:%d", &t.tm_year, &t.tm_mon, &t.tm_mday, 
+                    &t.tm_hour, &t.tm_min, &fracsec, &tzshift_h, &tzshift_m) == 8) {
+    t.tm_sec = (int)fracsec;
+    ok = 1;
+  }
+  if (!ok && sscanf(s, "%4d-%2d-%2dT%2d:%2d%d:%d", &t.tm_year, &t.tm_mon, &t.tm_mday, 
+                    &t.tm_hour, &t.tm_min, &tzshift_h, &tzshift_m) == 7) {
+    t.tm_sec = (int)fracsec;
+    ok = 1;
+  }
+  if (!ok && sscanf(s, "%4d-%2d-%2dT%2d%d:%d", &t.tm_year, &t.tm_mon, &t.tm_mday, 
+                    &t.tm_hour, &tzshift_h, &tzshift_m) == 6) {
+    t.tm_sec = (int)fracsec;
+    ok = 1;
+  }
+  if (!ok && sscanf(s, "%4d-%2d-%2d", &t.tm_year, &t.tm_mon, &t.tm_mday) == 3) {
+    confidence = 24*60*60; t.tm_hour = t.tm_min = t.tm_sec = 0;
+    ok = 1;
+    apply_tzshift = 0;
+  }
+  if (ok && t.tm_year >= 0 && t.tm_year < 3000 && t.tm_mon > 0 && t.tm_mon <= 12 && t.tm_mday > 0 && t.tm_mday < 32 && 
+      t.tm_hour >= 0 && t.tm_hour < 24 && t.tm_min >= 0 && t.tm_min < 60 && t.tm_sec >= 0 && t.tm_sec < 60) {
+    if (t.tm_year < 50) t.tm_year += 100; else if (t.tm_year > 1900) t.tm_year -= 1900;
+    t.tm_mon--; 
+    t.tm_isdst = -1;
+    /*printf("str_to_time_t(%s): %04d %02d %02d %02d:%02d:%02d%+02d:%02d\n", s, 
+      t.tm_year, t.tm_mon, t.tm_mday, t.tm_hour, t.tm_min, t.tm_sec, tzshift_h,tzshift_m);*/
+    *tt = mktime(&t);
+    if (apply_tzshift) {
+      if (tzshift_h < 0) { tzshift_h = -tzshift_h; tz_sgn = -tz_sgn; }
+      *tt -= (tzshift_h*60+tzshift_m)*60*tz_sgn; 
+#if 0
+      /* A CORRIGER 
+       update: maintenant �a doit etre ok, je le garde sous le coude a tout hasard*/
+#ifdef FREEBSD
+      int timezone_h = -(tm_now->tm_gmtoff/3600);
+      int timezone_m = abs(tm_now->tm_gmtoff/60)%60;
+#else
+      int timezone_h = -(timezone/3600);
+      int timezone_m = abs(timezone/60)%60;
+#endif
+#endif
+      *tt -= get_timezone(); //(timezone_h*60+timezone_m)*60;
+    }
+    *tt += confidence;
+    /*if (confidence) {
+      printf("s=%s time = %ld %s\n", s, *tt, asctime(localtime(tt)));
+      }*/
+  }
+  return ok;
+}
+
+void time_t_to_tstamp(time_t tim, char tstamp[15]) {
+  struct tm *t = localtime(&tim);
+  snprintf(tstamp, 15, "%04d%02d%02d%02d%02d%02d", t->tm_year+1900, t->tm_mon+1, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec);
+}
+
+FILE*
+open_wfile(const char *fname) {
+  int fd;
+  FILE *f;
+  fd = open (fname, O_CREAT | O_TRUNC | O_RDWR, 0600);
+  if (fd != -1) f = fdopen(fd, "w"); else return NULL;
+  return f;
+}
+
+int
+is_url(const char *s) {
+  int i=0;
+  while (s[i] && isalpha(s[i])) ++i;
+  if (i && s[i] == ':' && s[i+1] == '/' && s[i+2] == '/') return i+3;
+  else return -1;
+}
+
+/* rend une url pr�sentable, et lui degage la nuque si n�cessaire */
+void url_au_coiffeur(unsigned char *url, int coupe) {
+  int i=0,j, j_path=0;
+  enum {IN_HOST,IN_PORT,IN_PATH} where = IN_HOST;
+  //printf("ENTREE url_au_coiffeur(%s,%d)\n", url, coupe);
+  i = is_url(url);
+  if (i == -1) {
+    fprintf(stderr,"url_au_coiffeur(%s): vous avez des pous\n", url);
+    url[0] = 0; return;
+  }
+  j = i;
+  while (url[i]) {
+    if (where==IN_HOST && url[i] == ':') where=IN_PORT;    
+    if (url[i] == '/') { where=IN_PATH; if (j_path ==0) j_path = j; }
+
+    if (where == IN_PORT && strncmp(url+i, ":80",3)==0) {
+      i+= 3;
+    } else if (url[i] >= ' ' && (url[i] != '/' || url[i-1] != '/')) {
+      url[j++] = url[i++];
+    } else ++i;
+  }
+  assert(j);
+  j--;
+  if (url[j] == '/') url[j--] = 0;
+  while (coupe && j > j_path) {
+    while (j > j_path) { if (url[j--] == '/') { coupe--; break; } };
+  }
+  url[j+1] = 0;
+  //printf("SORTIE url_au_coiffeur(%s,%d)\n", url, coupe);
+}
+
+void dump_backtrace() {
+#ifdef HAVE_BACKTRACE
+  static int cnt = 0;
+  int i,n;
+  void* trace[256];
+  char** strings;
+  if (cnt++ == 0) {
+    n = backtrace(trace, 256);
+    strings = backtrace_symbols (trace, n);
+    if (strings == NULL) {
+      myfprintf(stderr, "backtrace unavailable ... no more memory ?\n"); return;
+    }
+    myfprintf(stderr,"Backtrace dump follows:\n");
+    for (i = 0; i < n; ++i)
+      myfprintf(stderr,"%<grn %2d> : %<GRN %s>\n",
+                i, strings[i]);
+    free (strings);
+    cnt--;
+  } else { /* on n'est jamais trop prudent */
+    fprintf(stderr, "yaisse, a recursive bug in backtrace\n"); 
+  }
+#endif
+}
+
+void assertion_failed(const char *fun, const char *ass) {
+  myfprintf(stderr,"assertion failed in function %<MAG %s>: %<YEL %s>\n", fun, ass); 
+  dump_backtrace(); 
+  abort();
+}
+
+static char*
+wmcc_iconv(const char *src_encoding, const char *dest_encoding, char *src) {
+  size_t inbytesleft, outbytesleft, outsz = 16384;
+  size_t cnt, len;
+  char       *srce;
+  char *out, *oute;
+  /* pour eviter d'ouvrir/fermer un million d'iconv.. */
+  static iconv_t cv;
+  static char *old_src_encoding = 0, *old_dest_encoding = 0, *dest_encoding_trans = 0;
+  if (src_encoding == NULL || dest_encoding == NULL) return NULL;
+  assert(src_encoding); assert(dest_encoding);
+  if (!src || strlen(src) == 0 || src_encoding == NULL) return NULL;
+
+  if (old_src_encoding == NULL || old_dest_encoding == NULL || 
+      strcmp(old_src_encoding,src_encoding) ||
+      strcmp(old_dest_encoding,dest_encoding)) {
+    if (old_src_encoding) {
+      /* Bouh! La m�moire est pas lib�r�e a la fin du programme !! */
+      free(old_src_encoding); free(old_dest_encoding); free(dest_encoding_trans); iconv_close(cv); 
+    }
+    old_src_encoding = strdup(src_encoding);
+    old_dest_encoding = strdup(dest_encoding);
+    dest_encoding_trans = malloc(strlen(old_dest_encoding) + 11); /* //TRANSLIT = 10; \0 = 1 */
+    strcpy(dest_encoding_trans, old_dest_encoding);
+    strcat(dest_encoding_trans, "//TRANSLIT");
+    cv = iconv_open(dest_encoding_trans, old_src_encoding);
+    if (cv == (iconv_t)(-1)) {
+      fprintf(stderr, "iconv_open(%s,%s) failed : %s\n", dest_encoding, src_encoding, strerror(errno));
+      return NULL;
+    }
+  } else iconv(cv, NULL, NULL, NULL, NULL); /* reinitialisation au cas o� */
+  out = malloc(outsz); assert(out);
+  do {
+    errno = 0;
+    inbytesleft = strlen(src);
+    outbytesleft = outsz;
+    srce = src; oute = out;
+    cnt = iconv(cv, &srce, &inbytesleft, &oute, &outbytesleft);
+    if (cnt == (size_t)(-1)) {
+      if (errno == E2BIG) {
+        outsz *= 2; out = realloc(out, outsz); assert(out);
+      } else {
+        int i;
+        myprintf("wmcc_iconv('%<YEL %s>' -> '%<YEL %s>'): invalid %s sequence here: %<RED %.30s> [", 
+                 src_encoding, dest_encoding, src_encoding, srce);
+        for (i=0; i < 16 && srce[i]; ++i) printf("%02x ", srce[i]); printf("]\n");
+        iconv(cv, NULL, NULL, NULL, NULL);
+        free(out); return NULL;
+      }
+    }
+  } while (cnt == (size_t)(-1));
+  len = oute - out;
+  out = realloc(out, len + 1); assert(out);
+  out[len] = 0;
+  return out;
+}
+
+void
+convert_to_iso8859(const char *src_encoding, char **psrc) {
+  char *out = wmcc_iconv(src_encoding, "ISO8859-15", *psrc);
+  if (out) { free(*psrc); *psrc = out; }
+}
+
+void
+convert_from_iso8859(const char *dest_encoding, char **psrc) {
+  char *out = wmcc_iconv("ISO8859-15", dest_encoding, *psrc);
+  if (out) { free(*psrc); *psrc = out; }
+}
+
+void
+convert_to_utf8(const char *src_encoding, char **psrc) {
+  char *out = wmcc_iconv(src_encoding, "UTF-8", *psrc);
+  if (out) { free(*psrc); *psrc = out; }
+}
+
+void
+convert_from_utf8(const char *dest_encoding, char **psrc) {
+  char *out = wmcc_iconv("UTF-8", dest_encoding, *psrc);
+  if (out) { free(*psrc); *psrc = out; }
+}
+
+void
+strbuf_init(strbuf *sb, const char *s) {
+  sb->str = NULL;
+  sb->max_sz = 0;
+  if (s == NULL) s = "";
+  strbuf_reserve_len(sb, strlen(s)); 
+  strcpy(sb->str, s);
+  sb->len = strlen(s);
+}
+
+void
+strbuf_reserve_len(strbuf *sb, size_t len) {
+  assert(len < 1000000); /* sinon y'a un truc qui chie dans la colle � 99.9% */
+  if (len+1 > sb->max_sz) {
+    if (sb->max_sz == 0) sb->max_sz = 1;
+    while (len+1 > sb->max_sz) sb->max_sz *= 2;
+    sb->str = realloc(sb->str, sb->max_sz); assert(sb->str);
+  }
+}
+
+void
+strbuf_putc(strbuf *sb, char c) {
+  strbuf_reserve_len(sb, sb->len+1);
+  sb->str[sb->len++] = c; 
+  sb->str[sb->len] = 0;
+}
+
+void strbuf_cat(strbuf *sb, const char *s) {
+  if (s == NULL) return;
+  strbuf_reserve_len(sb, sb->len+strlen(s));
+  strcpy(sb->str+sb->len, s);
+  sb->len += strlen(s);
+  sb->str[sb->len] = 0;
+}
+
+void strbuf_ncat(strbuf *sb, const char *s, size_t n) {
+  if (s == NULL) return;
+  n = MIN(n, strlen(s));
+  strbuf_reserve_len(sb, sb->len+n);
+  strncpy(sb->str+sb->len, s, n);
+  sb->len += strlen(s);
+  sb->str[sb->len] = 0;
+}
+
+void strbuf_free(strbuf *sb) {
+  if (sb->str) free(sb->str); sb->str = NULL;
+  sb->len = sb->max_sz = 0;
+}
+
+/* ben voila.. fionalement je l'ai faite, du coup faudrait updater url au coiffeur */
+int split_url(const char *url, SplittedURL *d) {
+  char *p, *p2, *start, *end;
+  strncpy(d->data, url, 1000); d->data[999] = 0;
+  str_trim(d->data);
+  p = d->data;
+  if (strlen(d->data) == 0) return -1;
+  if (p[0] == '"' && p[strlen(d->data)-1] == '"') { p++; d->data[strlen(d->data)-1] = 0; }
+  start = p;
+  end = d->data + strlen(d->data);
+  p = strstr(p, "://"); if (!p) return -1;
+  *p = 0;
+  if (strcasecmp(start, "http") == 0) {
+    d->type = HTTP_URL; d->port = 80;
+  } else if (strcasecmp(start, "https") == 0) {
+    d->type = HTTPS_URL; d->port = 80;
+  } else if (strcasecmp(start, "pop") == 0 || strcasecmp(d->data, "pop3") == 0) {
+    d->type = POP3_URL; d->port = 110;
+  } else if (strcasecmp(start, "apop") == 0 || strcasecmp(d->data, "apop3") == 0) {
+    d->type = APOP_URL; d->port = 110;
+  } else if (strcasecmp(start, "file") == 0) {
+    d->type = FILE_URL; d->port = -1;
+  } else return -1;
+  p+=3;
+  
+  /* fait pointer d->host sur le debut */
+  d->host = p;
+  if (p[0] == '[' && (p2 = strchr(p, ']')) && p2 > p+1) { /* ipv6 */
+    d->host = p+1;
+    *p2 = 0;
+    p = p2+1;
+  } else {
+    while (*p && *p != ':' && *p != '/') ++p;
+  }
+  if (*p == ':') {
+    *p++ = 0; 
+    d->port = atoi(p);
+    while (*p && isdigit(*p)) ++p;
+  }
+  if (*p && *p != '/') return -1;
+  d->path_len = 0;
+  {int i; for (i=0; i < 50; ++i) d->path[i] = NULL; }
+  if (*p == '/') {
+    *p++ = 0; /* fin du host */
+    while (*p) {
+      while (*p == '/') ++p;
+      if (*p) {
+        d->path[d->path_len] = p;
+      }
+      while (*p && *p != '/') ++p;
+      if (p != d->path[d->path_len]) d->path_len++;
+      if (*p) { *p++ = 0; }
+      if (d->path_len == 100) return 0;
+    }
+  }
+  return 0;
+}
+
+char *shorten_path(const char *s_) {
+  char *home = getenv("HOME");
+  char *s = strdup(s_);
+  if (home && strlen(home) > 1) {
+    if (str_startswith(s, home)) {
+      s[0] = '~';
+      strcpy(s+1, s_ + strlen(home));
+    }
+  }
+  return s;
+}
diff --git a/src/coin_util.h b/src/coin_util.h
new file mode 100644
index 0000000..da84a10
--- /dev/null
+++ b/src/coin_util.h
@@ -0,0 +1,117 @@
+#ifndef COINCOIN_UTIL
+#define COINCOIN_UTIL
+#include "global.h"
+#include <stdlib.h>
+#include <stdio.h>
+#include "md5.h"
+//#include "raster.h"
+
+#ifndef MAX
+# define MAX(x,y) ((x)>(y)?(x):(y))
+#endif
+#ifndef MIN
+# define MIN(x,y) ((x)<(y)?(x):(y))
+#endif
+#ifndef SQR
+#  define SQR(a) ((a)*(a))
+#endif
+#ifndef ABS
+#  define ABS(a) ((a)>0?(a):-(a))
+#endif
+#define ALLOC_OBJ(p, t) { p = (t*) calloc(1, sizeof(t)); assert(p);}
+#define FREE_OBJ(p) free(p);
+#define ALLOC_VEC(p, n, t) { p = (t*) calloc(n, sizeof(t)); assert(p); }
+#define SET_VEC(p, v, i0, i1) { int _i; \
+                  for (_i = (i0); _i <= (i1); _i++) p[_i] = v; }
+#define FREE_VEC(p) free(p);
+
+/* alloc de tableau, p[0] est le pointeur de base, p[ni] est NULL */
+#define ALLOC_ARR(p, ni, nj, t) { int _i; \
+               p = (t**) calloc(ni+1, sizeof(t*)); assert(p); \
+               p[0] = (t*) calloc((ni)*(nj), sizeof(t)); assert(p[0]); \
+               for (_i = 1; _i < ni; _i++) { p[_i] = p[0]+((nj)*_i); } p[ni] = (t*)NULL;}
+#define FREE_ARR(p) { free(p[0]); free(p); }
+#define BASE_ARR(p) (p[0])
+
+#ifndef NO_BLAHBLAH
+# define BLAHBLAH(n,x) if (Prefs.verbosity >= n) { x; fflush(stdout); }
+#else
+# define BLAHBLAH(n,x)
+#endif
+
+#define MARK myprintf("%<YEL ******************************************>\n");
+
+
+
+
+/* macro pour troll_data.h et str_hache */
+#define CVINT(a,b,c,d) (a + (b<<8) + (c<<16) + (d<<24))
+
+#define IS_INSIDE(x, y, xmin, ymin, xmax, ymax) ((x) >= (xmin) && (x) <= (xmax) && (y) >= (ymin) && (y) <= (ymax))
+
+
+/* construit un 'nom' � partir des premiers mots du useragent */
+void make_short_name_from_ua(const unsigned char *ua, unsigned char *name, int name_sz);
+int mark_html_tags(char *s, int sz);
+int convert_to_ascii(char *dest, const char *src, int dest_sz);
+int str_is_empty(const char *s);
+int xstrcmp(const char *a, const char *b);
+char *str_multi_str(const char *src, const char **keys, int nb_keys, int *key_idx);
+char *str_multi_substitute(const char *src, const char **keys, const char **substitutions, int nkeys);
+char *str_substitute(const char *src, const char *key, const char *substitution);
+char *shell_quote(const char *src);
+int str_hache(const unsigned char *s, int max_len);
+int str_hache_nocase(const unsigned char *s, int max_len);
+void md5_digest(const char *s, md5_byte_t md5[16]);
+const char * md5txt(md5_byte_t md5[16]);
+unsigned char chr_noaccent_tolower(unsigned char c);
+void str_noaccent_tolower(unsigned char *s);
+void str_tolower(unsigned char *s);
+unsigned char *str_noaccent_casestr(const unsigned char *meule, const unsigned char *aiguille);
+char *str_printf(const char *fmt, ...) __attribute__ ((format (printf, 1, 2)));
+#define STR_REPRINTF(_s, _xx); { char *__old = _s; _s = str_printf _xx; if (__old) free(__old); }
+char *str_cat_printf(char *s, const char *fmt, ...) __attribute__ ((format (printf, 2, 3)));
+unsigned char *str_case_str(const unsigned char *meule, const unsigned char *aiguille);
+int str_ncasecmp(const unsigned char *a, const unsigned char *b, unsigned n);
+int str_startswith(const unsigned char *a, const unsigned char *b);
+int str_case_startswith(const unsigned char *a, const unsigned char *b);
+char *str_ndup(const char *in, int n);
+char *str_dup_unquoted(const char *s);
+char* str_cat(char *s1, const char *s2);
+char* str_ncat(char *s1, const char *s2, int n);
+void str_trunc_nice(char *s, int approx_max_len);
+time_t get_timezone();
+int str_to_time_t(const char *s, time_t *tt);
+void time_t_to_tstamp(time_t tim, char tstamp[15]);
+char *str_fget_line(FILE *f);
+void str_trim(unsigned char *s);
+void str_rtrim_lf(unsigned char *s);
+char *str_preencode_for_http(const char *in);
+FILE *open_wfile(const char *fname);
+int is_url(const char *s);
+void url_au_coiffeur(unsigned char *url, int coupe);
+void dump_backtrace();
+void convert_to_iso8859(const char *src_encoding, char **psrc);
+void convert_from_iso8859(const char *dest_encoding, char **psrc);
+typedef struct strbuf_ {
+  char *str;
+  size_t len, max_sz;
+} strbuf;
+void strbuf_init(strbuf *sb, const char *s);
+void strbuf_reserve_len(strbuf *sb, size_t len);
+void strbuf_putc(strbuf *sb, char c);
+void strbuf_cat(strbuf *sb, const char *s);
+void strbuf_free(strbuf *sb);
+void strbuf_ncat(strbuf *sb, const char *s, size_t n);
+void strbuf_free(strbuf *sb);
+typedef struct SplittedURL {
+  char data[1000];
+  enum { HTTP_URL, HTTPS_URL, POP3_URL, APOP_URL, FILE_URL } type;
+  char *host;
+  int port;
+  int path_len;
+  char *path[100];
+} SplittedURL;
+int split_url(const char *url, SplittedURL *d);
+char *shorten_path(const char *s_);
+#endif
diff --git a/src/coin_xutil.c b/src/coin_xutil.c
new file mode 100644
index 0000000..ccecb1d
--- /dev/null
+++ b/src/coin_xutil.c
@@ -0,0 +1,697 @@
+/*
+  coin_xutil : diverses fonctions compl�mentaires � raster.c pour la manip des images
+
+  rcsid=$Id: coin_xutil.c,v 1.13 2005/09/26 21:40:24 pouaite Exp $
+
+  ChangeLog:
+  $Log: coin_xutil.c,v $
+  Revision 1.13  2005/09/26 21:40:24  pouaite
+  v 2.5.1b
+
+  Revision 1.12  2004/02/29 15:01:19  pouaite
+  May the charles bronson spirit be with you
+
+  Revision 1.11  2003/08/26 21:50:48  pouaite
+  2.6.4b au mastic
+
+  Revision 1.10  2003/07/20 22:22:28  pouaite
+  ce commit est dedie a Pierre Tramo
+
+  Revision 1.9  2003/06/29 23:58:39  pouaite
+  suppression de l'overrideredirect du palmi et ajout de pinnipede_totoz.c et wmcoincoin-totoz-get etc
+
+  Revision 1.8  2002/10/05 18:08:14  pouaite
+  ajout menu contextuel + fix de la coloration des boutons du wmccc
+
+  Revision 1.7  2002/09/07 16:21:15  pouaite
+  �a va releaser en douce
+
+  Revision 1.6  2002/06/23 10:44:05  pouaite
+  i18n-isation of the coincoin(kwakkwak), thanks to the incredible jjb !
+
+  Revision 1.5  2002/04/09 23:38:29  pouaite
+  boitakon et son cort�ge de bugfixes
+
+  Revision 1.4  2002/04/02 22:29:28  pouaite
+  bugfixes transparence
+
+  Revision 1.3  2002/04/01 23:04:11  pouaite
+  fix compilation avec gcc 2.9x
+
+  Revision 1.2  2002/04/01 22:56:03  pouaite
+  la pseudo-transparence du pinni, bugfixes divers, option tribune.backend_type
+
+  Revision 1.1  2002/04/01 01:39:38  pouaite
+  grosse grosse commition (cf changelog)
+
+*/
+
+#include <libintl.h>
+#define _(String) gettext (String)
+
+#include <X11/Xatom.h>
+#include <X11/Xmd.h>
+#include <string.h>
+#include "coin_xutil.h"
+
+
+RGBAImage *
+rimage_create_from_raw(int w, int h, int bpp, const unsigned char *data)
+{
+  RGBAImage *rimg;
+  int x,y;
+
+  rimg = RGBACreateImage(w,h);
+  for (y=0; y < h; y++) {
+    for (x=0; x < w; x++) {
+      int pos;
+      pos = (y*w+x)*bpp;
+      rimg->data[y][x].rgba[0] = data[pos];
+      rimg->data[y][x].rgba[1] = data[pos+1];
+      rimg->data[y][x].rgba[2] = data[pos+2];
+      if (bpp == 4) {
+	rimg->data[y][x].rgba[3] = data[pos+3];
+      } else {
+	rimg->data[y][x].rgba[3] = 0;
+      }
+    }
+  }
+  return rimg;
+}
+
+Pixmap
+pixmap_create_from_raw(RGBAContext *rc, int w, int h, int bpp, const unsigned char *data)
+{
+  RGBAImage *rimg;
+  Pixmap p;
+
+  rimg = rimage_create_from_raw(w,h,bpp,data);
+  p = RGBAImage2Pixmap(rc, rimg);
+  RGBADestroyImage(rimg);
+  return p;
+}
+
+RGBAImage *
+rimage_create_from_raw_with_tint(int w, int h, int bpp, const unsigned char *data, int rgb)
+{
+  RGBAImage *rimg;
+  int r,g,b;
+  int i;
+
+  r = (rgb >> 16) & 0xff; g = (rgb >> 8) & 0xff; b = rgb & 0xff;
+  //  printf("rimage_create_from_raw_with_tint: rgb=%06x r=%d g=%d b=%d\n", rgb, r, g, b);
+  rimg = RGBACreateImage(w,h);
+  
+  for (i=0; i < w*h; i++) {
+    float v;
+    v =  (data[i*bpp] + data[i*bpp+1] + data[i*bpp+2])/(3.*128);
+    if (v < 1)
+      v = 1. + (v-1.)/4; // les couleurs de la porte sont un peu trop contrastees a mon gout
+    else 
+      v = 1. + (v-1.)/12; // les couleurs de la porte sont un peu trop contrastees a mon gout
+    rimg->data[0][i].rgba[0] = (unsigned char)MIN(v*r, 255);
+    rimg->data[0][i].rgba[1] = (unsigned char)MIN(v*g, 255);
+    rimg->data[0][i].rgba[2] = (unsigned char)MIN(v*b, 255);
+    rimg->data[0][i].rgba[3] = 0;
+  }
+
+  /* c'est equivalent � */
+  /*
+  for (y=0; y < h; y++) {
+    for (x=0; x < w; x++) {
+      int pos;
+      float v;
+      pos = (y*w+x)*bpp;
+      v =  (data[pos] + data[pos+1] + data[pos+2])/(3.*128);
+      v = 1. + (v-1.)/2.5; // les couleurs de la porte sont un peu trop contrastees a mon gout
+      rimg->data[y][x].rgba[0] = (unsigned char)MIN(v*r, 255);
+      rimg->data[y][x].rgba[1] = (unsigned char)MIN(v*g, 255);
+      rimg->data[y][x].rgba[2] = (unsigned char)MIN(v*b, 255);
+      if (bpp == 4) {
+	rimg->data[y][x].rgba[3] = data[pos+3];
+      } else {
+	rimg->data[y][x].rgba[3] = 0;
+      }
+    }
+    }*/
+  return rimg;
+}
+
+Pixmap
+pixmap_create_from_raw_with_tint(RGBAContext *rc, int w, int h, int bpp, const unsigned char *data, int rgb)
+{
+  RGBAImage *rimg;
+  Pixmap p;
+  rimg = rimage_create_from_raw_with_tint(w,h,bpp,data,rgb);
+  //rimg = rimage_create_from_raw(w,h,bpp,data);
+  p = RGBAImage2Pixmap(rc, rimg);
+  RGBADestroyImage(rimg);
+  return p;
+}
+
+/* conversion du channel alpha d'une image RGBA (32bits) en un masque binaire
+   utilise pour separer les deux morceaux de la porte
+
+   TRES TRES largement inspire de createXBMfromXPM dans wmgeneral (sauf que moi
+   je mets des commentaires ;-)
+*/
+void
+alpha2mask(int w, int h, unsigned char *bitmap, const unsigned char *rgba, unsigned char mask_val)
+{
+  int i,j;
+  unsigned char bits;
+  unsigned int nbits;
+
+  for (i=0; i < h; i++) {
+    nbits = 0; bits = 0;
+    for (j=0; j < w; j++) {
+      bits >>= 1;
+      if (rgba[i*w*4 + j*4 + 3] == mask_val) {
+	bits |= 0x80;
+      }
+      //printf("%1d", rgba[i*w*4 + j*4 + 3] == mask_val);
+      nbits++;
+      if (nbits == 8) {
+	*bitmap = bits;
+	bitmap++; nbits = 0; bits = 0;
+      }
+    }
+    //    printf("\n");
+  }
+}
+
+Pixmap
+alpha2pixmap_mask(Display *dpy, Window win, int w, int h, const unsigned char *rgba, unsigned char mask_val)
+{
+  unsigned char *bitmap;
+  Pixmap p;
+
+  ALLOC_VEC(bitmap, h*((w+7)/8), unsigned char);
+  alpha2mask(w, h, bitmap, rgba, mask_val);
+  p = XCreateBitmapFromData(dpy, win, bitmap, w, h);
+  FREE_VEC(bitmap);
+  return p;
+}
+
+/* sert � colorier le pixmap des lettres -> le noir devient la color 'tint' 
+
+a virer: c'est nul, ca alloue de la memoire et c'est trop lourd de changer la couleur du texte defilant dans le dock
+*/
+void
+colorize_black_pixmap(char **pixtxt, int tint)
+{
+  int w,h,ncolor;
+  int i;
+
+  assert(sscanf(pixtxt[0], "%d %d %d", &w, &h, &ncolor) == 3);
+  for (i=1; i <= ncolor; i++) {
+    int l,r,g,b;
+    if (strstr(pixtxt[i], "None") == NULL) {
+      char *s;
+      s = strdup(pixtxt[i]);
+
+      l = strlen(s); assert(l > 8);
+      assert(sscanf(s+l-6, "%2x%2x%2x", &r, &g, &b));
+      s[l-6] = '0';
+      r = ((0xff-r)*((tint >> 16) & 0xff)) / 0xff;
+      g = ((0xff-g)*((tint >>  8) & 0xff)) / 0xff;
+      b = ((0xff-b)*((tint      ) & 0xff)) / 0xff;
+      snprintf(s+l-6, 7, "%02x%02x%02x", r, g, b);
+      
+      pixtxt[i] = s;
+    }
+  }
+}
+
+ 
+void 
+get_window_pos_with_decor(Display *display, Window base_win, int *screen_x, int *screen_y)
+{
+  Window child_win;
+  Window parent_win;
+  Window root_win;
+  Window* child_windows;
+  int num_child_windows;
+  XWindowAttributes win_attr;
+  Window win;
+  
+  *screen_x = -1; *screen_y = -1;
+  win = base_win;
+  
+  while (XQueryTree(display, win,
+		    &root_win,
+		    &parent_win,
+		    &child_windows, &num_child_windows)) {
+    if (child_windows) XFree(child_windows);
+    if (parent_win == root_win) break;
+    win = parent_win;
+  }
+  
+  //  printf("win = %lx, parent=%lx, root=%lx\n", win, parent_win, root_win);
+  if (parent_win) {
+    XGetWindowAttributes(display, win, &win_attr);
+    XTranslateCoordinates(display, win, root_win,
+			  -win_attr.border_width, -win_attr.border_width, screen_x, screen_y,
+			  &child_win);
+  }
+}
+
+void 
+get_window_pos_without_decor(Display *display, Window root_win, Window win, int *screen_x, int *screen_y)
+{
+  Window child_win = None;
+  XWindowAttributes win_attr;
+
+  XGetWindowAttributes(display, win, &win_attr);
+  XTranslateCoordinates(display, win, root_win,
+			win_attr.x, win_attr.y, screen_x, screen_y,
+			&child_win);
+}
+
+void get_window_dimensions(Display *display, Window win, int *pw, int *ph) {
+  Window root;
+  int x,y;
+  unsigned depth, border;
+  XGetGeometry(display, win, &root, &x, &y, pw, ph, 
+               &border, &depth);
+}
+
+/* vol�e dans les sources de aterm :) 
+   maintenant, faut voir dans quelles conditions cette fonction marche 
+   (avec wmaker/wmsetbg �a marche en tout cas)
+
+   race condition possible si le rootpixmap est chang� entre le moment o� cette fonction
+   est appel�e et le moment o� on utilise le pixmap...
+*/
+Pixmap
+get_rootwin_pixmap(const RGBAContext *rc)
+{
+  Atom id;
+  Pixmap currentRootPixmap = None;
+  id = XInternAtom (rc->dpy, "_XROOTPMAP_ID", True);
+
+  if (id != None) {
+    Atom act_type;
+    int act_format;
+    unsigned long nitems, bytes_after;
+    unsigned char *prop = NULL;
+    
+    /*fprintf(stderr, "\n aterm GetRootPixmap(): root pixmap is set");    		    */
+    if (XGetWindowProperty (rc->dpy, rc->drawable, id, 0, 1, False, XA_PIXMAP,
+			    &act_type, &act_format, &nitems, &bytes_after,
+			    &prop) == Success)
+      {
+	if (prop)
+	  {
+	    currentRootPixmap = *((Pixmap *) prop);
+	    XFree (prop);
+	  }
+      }
+  }
+  return currentRootPixmap ;
+}
+
+/* une de mes macros les plus laides :) */
+#define SELECT_SHADE_OR_TINT(_c1,_c2) { if (ti->type == SHADING) { _c1; \
+          r = (r*shade_coef)/256 + shade_inc; \
+          g = (g*shade_coef)/256 + shade_inc; \
+          b = (b*shade_coef)/256 + shade_inc; \
+          _c2; } else { int l; _c1; \
+          l = (r*76)/256 + (g*150)/256 + (b*30)/256; \
+          r = (l*wr + (256-l)*br)/256; \
+	  g = (l*wg + (256-l)*bg)/256; \
+	  b = (l*wb + (256-l)*bb)/256; _c2; } }
+
+//#define TRANSFO(x,m,d) ((d) > 0 ? (((x)&(m))>>(unsigned)(d)) : (((x)&(m))<<(unsigned)(-(d))))
+
+void
+shade_XImage(const RGBAContext *rc, XImage *ximg, TransparencyInfo *ti)
+{
+  int wr=0,wg=0,wb=0,br=0,bg=0,bb=0; 
+  int x, y;
+  int shade_coef=0, shade_inc=0;
+
+  if (ti->type == TINTING) {
+    wr = (ti->tint.white & 0xff0000)>>16; 
+    wg = (ti->tint.white & 0x00ff00)>>8; 
+    wb = (ti->tint.white & 0x0000ff);
+    br = (ti->tint.black & 0xff0000)>>16; 
+    bg = (ti->tint.black & 0x00ff00)>>8; 
+    bb = (ti->tint.black & 0x0000ff);
+  } else if (ti->type == SHADING) {
+  //  int l_tint = (tr*76)/256 + (tg*150)/256 + (tb*30)/256;
+    shade_inc = ((ti->shade.luminosite)*256)/100;
+    shade_coef = ((ti->shade.assombrissement-ti->shade.luminosite)*256)/100;
+  }
+  if (ximg->bits_per_pixel == 16 || ximg->bits_per_pixel == 15) {
+    CARD16 *p = (CARD16*)ximg->data;
+    SELECT_SHADE_OR_TINT(
+			 for (y=0; y < ximg->height; y++) {
+			   for (x=0; x < ximg->width; x++) {
+			     int r = PIXEL2R(rc,p[x]);
+			     int g = PIXEL2G(rc,p[x]);
+			     int b = PIXEL2B(rc,p[x]);
+				,;
+				p[x] = rc->rtable[r] + rc->gtable[g] + rc->btable[b];
+			   }
+			   p += ximg->bytes_per_line/2;
+			 }
+			 );
+  } else if (ximg->bits_per_pixel == 24) {
+    unsigned char *p = (unsigned char*) ximg->data;
+    SELECT_SHADE_OR_TINT(
+			 for (y=0; y < ximg->height; y++) {
+			   for (x=0; x < ximg->width; x++) {
+			     int r = p[x*3];
+			     int g = p[x*3+1];
+			     int b = p[x*3+2];
+			     ,;
+			     p[x*3] = r; p[x*3+1] = g; p[x*3+2] = b;
+			   }
+			   p += ximg->bytes_per_line;
+			 }
+			 );
+    
+  } else if (ximg->bits_per_pixel == 32) {
+    CARD32 *p = (CARD32*) ximg->data;
+    SELECT_SHADE_OR_TINT(
+			 for (y=0; y < ximg->height; y++) {
+			   for (x=0; x < ximg->width; x++) {
+			     int r = (p[x] & 0xff0000)>>16;
+			     int g = (p[x] & 0x00ff00)>>8;
+			     int b = (p[x] & 0x0000ff);;
+			     ,;
+			     p[x] = (p[x] & 0xff000000) + (r << 16) + (g << 8) + b;
+			   }
+			   p += ximg->bytes_per_line/4;
+			 }
+			 );
+  } else {
+    printf(_("shade_ximage unsupported (bitsperpix=%d) !! Strange...\n"),ximg->bits_per_pixel);
+  }
+}
+
+static int x11_error_occured = 0;
+
+int x_error_handler_bidon(Display *dpy, XErrorEvent *err)
+{
+  char errmsg[80]; 
+  XGetErrorText(dpy, err->error_code, errmsg, 80);
+  fprintf(stderr, _("X11 error detected in a hazardous area:\n  %s\n"), errmsg);
+  fprintf(stderr, _("  Protocol request: %d\n"), err->request_code);
+  fprintf(stderr, _("  Resource ID:      0x%lx\n"), err->resourceid);
+  fprintf(stderr, _(" --> THE SHOW MUST GO ON!\n"));
+  x11_error_occured = 1;
+  return 0;
+}
+
+/* oblig� de g�rer les erreurs de mani�re un peu cavali�re, car le root pixmap peut �tre d�truit
+   � tout bout de champ etc.. */
+int
+extract_root_pixmap_and_shade(const RGBAContext *rc, int x, int y, int w, int h, 
+			      TransparencyInfo *ti, int use_fake_real_transparency, Pixmap shade_pix, int spdx, int spdy)
+{
+  Pixmap root_pix;
+  XImage *ximg;
+  int rw,rh,rx,ry,dx,dy,sw,sh;
+  
+
+  if (rc->depth < 15) return None; /* pas de pseudotransp sur les visual non truecolor */
+
+  root_pix = get_rootwin_pixmap(rc);
+  if (root_pix == None) return None;
+
+
+  dx = 0; dy = 0;
+  rw = w; rh = h; rx = x; ry = y;
+  sw = WidthOfScreen(XScreenOfDisplay(rc->dpy, rc->screen_number));
+  sh = HeightOfScreen(XScreenOfDisplay(rc->dpy, rc->screen_number));
+  if (rx < 0) {
+    rw += rx; dx -= rx; rx = 0;
+  }
+  if (ry < 0) {
+    rh += ry; dy -= ry; ry = 0;
+  }
+  if (rx+rw > sw) {
+    rw = sw-rx;
+  }
+  if (ry+rh > sh) {
+    rh = sh-ry;
+  }
+  if (rw < 0 || rh < 0) return None;
+
+  dx += spdx; dy += spdy;
+
+  x11_error_occured = 0;
+
+  /* transparence pure, �a va vite */
+  if (ti->type == FULL_TRANSPARENCY) {
+    assert(shade_pix != None);
+    int (*old_handler)(Display *, XErrorEvent *);
+    old_handler = XSetErrorHandler(x_error_handler_bidon);
+
+    if (use_fake_real_transparency) {
+      ximg = XGetImage(rc->dpy, RootWindow(rc->dpy, rc->screen_number), rx, ry, rw, rh, 
+		       AllPlanes, ZPixmap); assert(ximg);
+      XPutImage(rc->dpy, shade_pix, rc->copy_gc, ximg, 0, 0, dx, dy, rw, rh);
+      XDestroyImage(ximg);
+    } else {
+      XCopyArea(rc->dpy, root_pix, shade_pix, rc->copy_gc, 
+		rx, ry, rw, rh, dx, dy);
+    }
+    XSync(rc->dpy,0);
+    XSetErrorHandler(old_handler); 
+    if (x11_error_occured) { return -1; }
+    else return 0;
+  }
+
+  /* shade/tinte, il faut retravailler l'image */
+
+  x11_error_occured = 0; XSetErrorHandler(x_error_handler_bidon);
+  if (use_fake_real_transparency) {
+    ximg = XGetImage(rc->dpy, RootWindow(rc->dpy, rc->screen_number), rx, ry, rw, rh, 
+		     AllPlanes, ZPixmap);
+  } else {
+    ximg = XGetImage(rc->dpy, root_pix, rx, ry, rw, rh, 
+		     AllPlanes, ZPixmap); 
+  }
+  XSetErrorHandler(NULL); if (x11_error_occured || ximg == NULL) return -1;
+
+  shade_XImage(rc, ximg, ti);
+  assert(shade_pix != None);
+  XPutImage(rc->dpy, shade_pix, rc->copy_gc, ximg, 0, 0, dx, dy, rw, rh);
+  XDestroyImage(ximg);
+  return 0;
+}
+
+int
+lighten_color(int icol, float v)
+{
+  int r = (icol & 0xff0000)>>16;
+  int g = (icol & 0xff00)>>8;
+  int b = (icol & 0xff);
+  r = (int)((r+.5)*v);
+  g = (int)((g+.5)*v);
+  b = (int)((b+.5)*v);
+  r = MIN(r,255);
+  g = MIN(g,255);
+  b = MIN(b,255);
+  return (r<<16) + (g<<8) + b;
+}
+
+/* motif window manager styles 
+ */ 
+#define MwmHintsDecorations (1L << 1)
+#define MwmDecorAll         (1L << 0)
+#define MwmDecorBorder      (1L << 1)
+#define MwmDecorHandle      (1L << 2)
+#define MwmDecorTitle       (1L << 3)
+#define MwmDecorMenu        (1L << 4)
+#define MwmDecorMinimize    (1L << 5)
+#define MwmDecorMaximize    (1L << 6)
+ 
+#define PropMotifWmHintsElements 3
+ 
+typedef struct {
+  int flags;
+  int functions;
+  int decorations;
+  int inputMode;
+  int unknown;
+} MwmHints;
+ 
+/* gnome hints */
+#define WIN_HINTS_SKIP_WINLIST		(1<<1) /* not in win list */
+#define WIN_HINTS_SKIP_TASKBAR		(1<<2) /* not on taskbar */
+
+/* aaaah */
+int
+set_borderless_window_hints(Display *display, Window win) {
+  enum { MOTIF_WM_HINTS=0, KWM_WIN_DECORATION, WIN_HINTS, 
+         NET_WM_STATE, NET_WM_STATE_SKIP_TASKBAR, NET_WM_WINDOW_TYPE, NET_WM_WINDOW_TYPE_DOCK, NET_WM_STATE_STAYS_ON_TOP, NB_ATOMS };
+
+  Atom atom[NB_ATOMS];
+  char *atom_names[NB_ATOMS] = { "_MOTIF_WM_HINTS", 
+                                 "KWM_WIN_DECORATION", 
+                                 "_WIN_HINTS", 
+                                 "_NET_WM_STATE",
+                                 "_NET_WM_STATE_SKIP_TASKBAR", 
+                                 "_NET_WM_WINDOW_TYPE",
+                                 "_NET_WM_WINDOW_TYPE_DOCK",
+                                 "_NET_WM_STATE_STAYS_ON_TOP" };
+  int ok = 0;
+  XInternAtoms(display, atom_names, NB_ATOMS, True, atom);
+  /*  dock->atom_NET_WM_WINDOW_TYPE = XInternAtom(dock->display, "_NET_WM_WINDOW_TYPE", True);
+  dock->atom_NET_WM_WINDOW_TYPE_DESKTOP = XInternAtom(dock->display, "_NET_WM_WINDOW_TYPE_DESKTOP", True);
+  dock->atom_NET_WM_WINDOW_TYPE_DOCK = XInternAtom(dock->display, "_NET_WM_WINDOW_TYPE_DOCK", True);
+  dock->atom_NET_WM_WINDOW_TYPE_TOOLBAR = XInternAtom(dock->display, "_NET_WM_WINDOW_TYPE_TOOLBAR", True);
+  dock->atom_NET_WM_WINDOW_TYPE_MENU = XInternAtom(dock->display, "_NET_WM_WINDOW_TYPE_MENU", True);
+  dock->atom_NET_WM_WINDOW_TYPE_DIALOG = XInternAtom(dock->display, "_NET_WM_WINDOW_TYPE_DIALOG", True);
+  dock->atom_NET_WM_WINDOW_TYPE_NORMAL = XInternAtom(dock->display, "_NET_WM_WINDOW_TYPE_NORMAL", True);
+  dock->atom_NET_WM_WINDOW_TYPE_SPLASH = XInternAtom(dock->display, "_NET_WM_WINDOW_TYPE_SPLASH", True);
+  dock->atom_NET_WM_WINDOW_TYPE_UTILITY = XInternAtom(dock->display, "_NET_WM_WINDOW_TYPE_UTILITY", True);
+  dock->atom_NET_WM_STATE = XInternAtom(dock->display, "_NET_WM_STATE", True);
+  dock->atom_NET_WM_STATE_MODAL = XInternAtom(dock->display, "_NET_WM_STATE_MODAL", True);
+  dock->atom_NET_WM_STATE_STICKY = XInternAtom(dock->display, "_NET_WM_STATE_STICKY", True);
+  dock->atom_NET_WM_STATE_MAXIMIZED_VERT = XInternAtom(dock->display, "_NET_WM_STATE_MAXIMIZED_VERT", True);
+  dock->atom_NET_WM_STATE_SHADED = XInternAtom(dock->display, "_NET_WM_STATE_SHADED", True);
+  dock->atom_NET_WM_STATE_SKIP_PAGER = XInternAtom(dock->display, "_NET_WM_STATE_SKIP_PAGER", True);
+  dock->atom_NET_WM_STATE_HIDDEN = XInternAtom(dock->display, "_NET_WM_STATE_HIDDEN", True);
+  dock->atom_NET_WM_STATE_FULLSCREEN = XInternAtom(dock->display, "_NET_WM_STATE_FULLSCREEN", True);
+  dock->atom_NET_WM_DESKTOP = XInternAtom(dock->display, "_NET_WM_DESKTOP", True);
+  */
+  if (atom[MOTIF_WM_HINTS] != None) {
+    MwmHints hints;
+    hints.flags = MwmHintsDecorations;
+    hints.decorations = 0;
+    XChangeProperty(display, win,
+                    atom[MOTIF_WM_HINTS], atom[MOTIF_WM_HINTS], 32,
+                    PropModeReplace, (unsigned char *) &hints, sizeof(MwmHints)/4);
+    ok = 1;
+  }
+  if (atom[KWM_WIN_DECORATION] != None) {
+    long KWMHints = 0;
+    XChangeProperty(display, win, atom[KWM_WIN_DECORATION], XA_CARDINAL, 32,
+                    PropModeReplace, (unsigned char *)&KWMHints,
+                    sizeof(KWMHints)/4);
+    ok = 1;
+  }
+  if (atom[WIN_HINTS] != None) {
+    long GNOMEHints = WIN_HINTS_SKIP_WINLIST | WIN_HINTS_SKIP_TASKBAR;
+    XChangeProperty(display, win, atom[WIN_HINTS], XA_CARDINAL, 32,
+                    PropModeReplace, (unsigned char *)&GNOMEHints,
+                    sizeof(GNOMEHints)/4);
+    ok = 1;
+  }
+    if (atom[NET_WM_STATE] != None) {
+    Atom p[2]; 
+    p[0] = atom[NET_WM_STATE_SKIP_TASKBAR]; 
+    p[1] = atom[NET_WM_STATE_STAYS_ON_TOP];
+    XChangeProperty(display, win, atom[NET_WM_STATE], XA_ATOM, 32,
+                    PropModeReplace, (unsigned char *)p, 2);
+  }
+  if (atom[NET_WM_WINDOW_TYPE] != None) {
+    XChangeProperty(display, win, atom[NET_WM_WINDOW_TYPE], XA_ATOM, 32,
+                    PropModeReplace, (unsigned char*)&atom[NET_WM_WINDOW_TYPE_DOCK], 1);
+  }
+  return ok; /* pour savoir si il faut la passer en overrideredirect */
+}
+
+void
+set_window_title(Display *display, Window win, char *window_title, char *icon_title) {
+  int rc;
+  XTextProperty window_title_property;
+  /* nom de la fenetre */
+  rc = XStringListToTextProperty(&window_title,1, &window_title_property); assert(rc);
+  XSetWMName(display, win, &window_title_property);
+  XFree(window_title_property.value);
+  
+  /* nom de la fenetre iconifi�e */
+  rc = XStringListToTextProperty(&icon_title,1, &window_title_property); assert(rc);
+  XSetWMIconName(display, win, &window_title_property);
+  XFree(window_title_property.value);
+}
+
+/*
+void
+set_window_pos_hints(Display *display, Window win, int x, int y) {
+  long user_hints;
+  XSizeHints* win_size_hints;
+  win_size_hints= XAllocSizeHints(); assert(win_size_hints);
+  if (!XGetWMNormalHints(display, win, win_size_hints, &user_hints))
+    win_size_hints->flags = 0;
+  win_size_hints->x = x; 
+  win_size_hints->y = y;
+  win_size_hints->flags |= USPosition;
+  XSetWMNormalHints(display, win, win_size_hints);
+  XFree(win_size_hints);
+}
+*/
+
+/* -1 pour les quantit� non utilis�es */
+void
+set_window_sizepos_hints(Display *display, Window win,
+                         int x, int y,
+                         int minw, int basew, int maxw,
+                         int minh, int baseh, int maxh) {
+  //  long user_hints;
+  XSizeHints* win_size_hints;
+  win_size_hints= XAllocSizeHints(); assert(win_size_hints);
+  /*  if (!XGetWMNormalHints(display, win, win_size_hints, &user_hints))
+      win_size_hints->flags = 0;*/
+  win_size_hints->x = x; 
+  win_size_hints->y = y;
+  win_size_hints->min_width = minw;
+  win_size_hints->min_height = minh;
+  win_size_hints->base_width = basew;
+  win_size_hints->base_height = baseh;
+  win_size_hints->max_width = maxw;
+  win_size_hints->max_height = maxh;
+  win_size_hints->flags = 0;
+  if (x != -10000 && y != -10000) win_size_hints->flags |= USPosition;
+  if (minw >= 0 && minh >= 0) win_size_hints->flags |= PMinSize;
+  if (basew >= 0 && baseh >= 0) win_size_hints->flags |= PSize;
+  if (maxw >= 0 && maxh >= 0) win_size_hints->flags |= PMaxSize;
+  XSetWMNormalHints(display, win, win_size_hints);
+  XFree(win_size_hints);
+}
+
+void
+set_window_class_hint(Display *display, Window win, char *res_class, char *res_name) {
+  XClassHint *class_hint;
+  class_hint = XAllocClassHint();
+  class_hint->res_name = res_name;
+  class_hint->res_class = res_class;
+  XSetClassHint(display, win, class_hint);
+  XFree(class_hint);
+}
+
+void
+show_gc(Display *display, GC gc) {
+  XGCValues v;
+  XGetGCValues(display, gc, (unsigned long)(-1L), &v);
+  printf("GCValues:\n");
+  printf(" int function             = %d\n", v.function);
+  printf(" unsigned long plane_mask = %08lx\n",v.plane_mask);
+  printf(" unsigned long foreground = %08lx\n",v.foreground);
+  printf(" unsigned long background = %08lx\n",v.background);
+  printf(" int line_width           = %d\n",v.line_width);
+  printf(" int line_style           = %d\n",v.line_style);
+  printf(" int cap_style            = %d\n",v.cap_style);
+  printf(" int join_style           = %d\n",v.join_style);
+  printf(" int fill_style           = %d\n",v.fill_style);
+  printf(" int fill_rule            = %d\n",v.fill_rule);
+  printf(" int arc_mode             = %d\n",v.arc_mode);
+  printf(" Pixmap tile              = %08lx\n",v.tile);
+  printf(" Pixmap stipple           = %08lx\n",v.stipple);
+  printf(" int ts_x_origin          = %d\n",v.ts_x_origin);
+  printf(" int ts_y_origin          = %d\n",v.ts_y_origin);
+  printf(" Font font                = %08lx\n",v.font);
+  printf(" int subwindow_mode       = %d\n",v.subwindow_mode);
+  printf(" Bool graphics_exposures  = %d\n",v.graphics_exposures);
+  printf(" int clip_x_origin        = %d\n",v.clip_x_origin);
+  printf(" int clip_y_origin        = %d\n",v.clip_y_origin);
+  printf(" Pixmap clip_mask         = %08lx\n",v.clip_mask);
+  printf(" int dash_offset          = %d\n",v.dash_offset);
+  printf(" char dashes              = %c\n",v.dashes);
+}
diff --git a/src/coin_xutil.h b/src/coin_xutil.h
new file mode 100644
index 0000000..8912799
--- /dev/null
+++ b/src/coin_xutil.h
@@ -0,0 +1,42 @@
+#ifndef COIN_XUTIL_H
+#define COIN_XUTIL_H
+
+#include "raster.h"
+#include "coin_util.h"
+#include "prefs.h"
+
+
+/* deux macros fort pratiques !! */
+#define RGB2PIXEL(r,g,b) _RGB2PIXEL(dock->rgba_context,r,g,b)
+#define IRGB2PIXEL(rgb) _IRGB2PIXEL(dock->rgba_context,rgb)
+
+#define PIXEL2R(rc, pixel) (((pixel>>rc->r_shift_left)<<rc->r_shift_right)&0xff)
+#define PIXEL2G(rc, pixel) (((pixel>>rc->g_shift_left)<<rc->g_shift_right)&0xff)
+#define PIXEL2B(rc, pixel) (((pixel>>rc->b_shift_left)<<rc->b_shift_right)&0xff)
+
+RGBAImage * rimage_create_from_raw(int w, int h, int bpp, const unsigned char *data);
+Pixmap pixmap_create_from_raw(RGBAContext *rc, int w, int h, int bpp, const unsigned char *data);
+RGBAImage * rimage_create_from_raw_with_tint(int w, int h, int bpp, const unsigned char *data, int rgb);
+Pixmap pixmap_create_from_raw_with_tint(RGBAContext *rc, int w, int h, int bpp, const unsigned char *data, int rgb);
+void alpha2mask(int w, int h, unsigned char *bitmap, const unsigned char *rgba, unsigned char mask_val);
+Pixmap alpha2pixmap_mask(Display *dpy, Window win, int w, int h, const unsigned char *rgba, unsigned char mask_val);
+void colorize_black_pixmap(char **pixtxt, int tint);
+void get_window_pos_with_decor(Display *display, Window win, int *screen_x, int *screen_y);
+void get_window_pos_without_decor(Display *display, Window root_win, Window win, int *screen_x, int *screen_y);
+void get_window_dimensions(Display *display, Window win, int *pw, int *ph);
+Pixmap get_rootwin_pixmap(const RGBAContext *rc);
+void shade_XImage(const RGBAContext *rc, XImage *ximg, TransparencyInfo *tr);
+int extract_root_pixmap_and_shade(const RGBAContext *rc, int x, int y, int w, int h, TransparencyInfo *tr, 
+                                     int use_fake_real_transparency, Pixmap shade_pix, int spdx, int spdy);
+int lighten_color(int icol, float light);
+int set_borderless_window_hints(Display *display, Window win);
+void set_window_title(Display *display, Window win, char *window_title, char *icon_title);
+void set_window_pos_hints(Display *display, Window win, int x, int y);
+void set_window_sizepos_hints(Display *display, Window win, 
+                              int x, int y,
+                              int minw, int basew, int maxw,
+                              int minh, int baseh, int maxh);
+void set_window_class_hint(Display *display, Window win, char *res_class, char *res_name);
+void show_gc(Display *, GC);
+
+#endif
diff --git a/src/coincoin.h b/src/coincoin.h
new file mode 100644
index 0000000..47bf79d
--- /dev/null
+++ b/src/coincoin.h
@@ -0,0 +1,718 @@
+#ifndef COINCOIN_H
+#define COINCOIN_H
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+#include <errno.h>
+#include <time.h>
+#include <regex.h>
+#include <ctype.h>
+#include "http.h"
+#include "global.h"
+#include "raster.h"
+#include "coin_util.h"
+#include "myprintf.h"
+#include "fontcoincoin.h"
+#ifndef WMCCDATADIR
+#define WMCCDATADIR "."
+#endif
+
+/* tentative de compilation avec _XOPEN_SOURCE, y'a plein de warnings */
+#ifdef _XOPEN_SOURCE
+#ifndef _GNU_SOURCE
+int strcasecmp(const char *s1, const char *s2);
+int strncasecmp(const char *s1, const char *s2, size_t n);
+char *strdup(const char *s);
+int snprintf(char *str, size_t size, const char *format, ...);
+void usleep(unsigned long usec);
+#endif
+#endif
+
+#define APPNAME "wmcoincoin"
+
+typedef struct _PicoHtmlItem PicoHtmlItem;
+typedef struct _PicoHtml PicoHtml;
+
+typedef long long int64;
+typedef unsigned long long uint64;
+
+typedef struct Board_ Board;
+typedef struct Boards_ Boards;
+typedef struct Site_ Site;
+typedef struct SiteList_ SiteList;
+
+#define trollo_log_extent 5 /* minutes */
+
+/* #define TRIBUNE_MAX_MSG 400 */ /* nb max de messages gard�s en m�moire */
+
+/* la tribune load affiche les messages sur les 15 dernieres minutes */
+#define TROLLOSCOPE_NB_MINUTES 11
+/* sur une minute, elle peut stocker 5 messages simultanes */
+#define TROLLOSCOPE_MAX_SIMUL 5
+
+#define TROLLOSCOPE_WIDTH TROLLOSCOPE_NB_MINUTES*5
+/* le -2 c fait expres -> quand il y a + de 5 msg dans
+   la meme minute, on voit le 5eme sans pouvoir l'identifier vraiment
+   c mieux que de prendre une hauteur de exactement 4 formes */
+#define TROLLOSCOPE_HEIGHT TROLLOSCOPE_MAX_SIMUL*5-4
+#define TROLLOSCOPE_X 4
+#define TROLLOSCOPE_Y 25
+
+
+#define MINIUA_SZ 20
+typedef struct _MiniUA {
+  unsigned char R,G,B;
+  unsigned char symb; /* numero du symbole */
+  char name[MINIUA_SZ];
+} MiniUA;
+
+typedef struct _board_msg_info board_msg_info;
+
+typedef struct _board_msg_ref {
+  unsigned int h:5;
+  unsigned int m:8;
+  int s:9;    /* si positif, les secondes sont indiqu�es dans la ref */
+  int num:5;  /* si positif, le sous-num�ro (pour les post multiples dans une m�me seconde) est indiqu� dans la ref */
+  unsigned int nbmi:6; /* nb de messages consecutifs point�s (g�n�ralement 1 sauf si la ref d�signe plusieurs messages, forcement consecutifs)
+			  0 => ref non determinee (ipot, mauvaise reference, le message n'existe plus..)
+			  
+			  _ATTENTION_: quand on boucle sur cette serie de message, il faut
+			  utiliser le pointeur 'intra-site' mi->next et pas 
+			  le pointeur 'cross-sites' mi->g_next
+		       */
+  board_msg_info *mi; /* non malloc�, forc�ment, et mis � jour lors de la destruction des messages trop vieux 
+			  peut �tre NULL (ipot, message effac�..)
+
+			  remarque: les refs DOIVENT �tre vers des messages du passe (ipot interdit)
+			  c'est necessaire au bon fonctionnement de la construction des threads du pinnipede
+			*/
+} board_msg_ref;
+
+/* liste de message ID qui peuvent etre identifi�s par une url
+   (en gros les messages provenant de rss) 
+   ne jamais deplacer les instances de cette structure, les board_msg_info pointent dessus
+*/
+typedef struct RSSBonusInfo_ {
+  md5_byte_t linkmd5[16]; /* c'est la mode du md5 j'en met partout */
+  char *link; /* l'url en question */
+  id_type id;
+  md5_byte_t md5[16]; /* pour une "regular board", le md5 est calcul� sur la concatenation de
+                           stimestamp + useragent + login + msg
+                         pour un feed rss, il est la concat de
+                           title + link + description
+                      */  
+} RSSBonusInfo;
+
+
+/* ne pas d�placer ce genre de structure apr�s son allocation
+   --> pas de realloc la dessus !
+   (� cause des board_msg_ref qui les relient entre elles)
+*/
+struct _board_msg_info {
+  id_type id;
+  time_t timestamp;
+  signed char sub_timestamp; /* sous numerotation quand plusieurs posts ont le m�me timestamp 
+			 (-1 -> pas (encore) d'autre post avec le meme tstamp)
+		       */
+  RSSBonusInfo *ri; /* non-nul si le message provient d'un rss */
+  /* (year-2000)|month|day|h|m|s */
+  signed char hmsf[4]; /* heure, minute, seconde + flag d'affichage des secondes (1 == secondes necessaires)  */
+  char *useragent; /* pointe dans la zone m�moire allou�e pour board_msg_info -> ne pas faire de free(useragent) !!! */
+  char *msg; /* pointe dans la zone m�moire allou�e pour board_msg_info -> ne pas faire de free(msg) !!! */
+  char *login; /* non malloc�, comme useragent, msg etc..*/
+  struct _board_msg_info *next;
+
+  /* on a aussi une structure d'arbre qui se colle l� dessus
+     (la structure de liste tri�e reste pour des raisons historiques ..) */
+  struct _board_msg_info *left;
+  struct _board_msg_info *right;
+
+  /*
+    describes how the message will appear in the trolloscope 
+     also contains a hopefully useful short name describing the useragent
+  */
+  MiniUA miniua;
+
+  /* le niveau de trollitude du post (cf troll_detector.c) */
+  int troll_score BITFIELD(13); 
+  int is_my_message BITFIELD(1);
+  int is_answer_to_me BITFIELD(1);
+
+  /* utilis� par board_key_list_test_thread et board_key_list_get_hungry_bak_list pour �viter de r�curser comme un ouf */
+  int bidouille_qui_pue BITFIELD(1); 
+  int in_boitakon BITFIELD(1); /* le niveau ultime de la plopification */
+  int contagious_boitakon BITFIELD(1); /* repondre � la boitakon rend kon */
+  short nb_refs BITFIELD(14);
+  board_msg_ref *refs; /* pointeur malloc�, indique la liste des messages point�s par celui ci */
+
+  /* pointeurs inter-sites: le point de depart est dans la structure boards,
+     et ils permettent de parcourir les messages de tous les sites, dans l'ordre */
+  struct _board_msg_info *g_next, *g_prev;
+};
+
+typedef struct md5_and_time_ {
+  char tstamp[15];
+  md5_byte_t md5[16];
+  int viewed;
+  struct md5_and_time_ *next;
+} md5_and_time;
+
+struct Board_ {
+  unsigned char last_post_time[5];
+
+  int last_post_timestamp; /* en secondes */
+  int last_post_id;
+  int last_post_id_prev;
+
+  /* log des 'last_post_id' au cours des 'nb_trollo_log' derniers check de la board,
+     utilise pour calculer le nb moyen de messages postes / seconde */
+  board_msg_info *msg;
+
+  /* valeur du wmcc_tic_cnt lors du dernier check positif */
+  int wmcc_tic_cnt_last_check;
+
+  /* nombre de secondes ecoulees depuis que le dernier message a ete recu */
+  int nbsec_since_last_msg;
+
+  int nb_msg_at_last_check; /* ne compte pas les posts boitakonn�s */
+
+  /* le dernier id qui a ete affiche sur la tribune, 
+     le nb de messages (non vus, donc) qui ont ete recus depuis */
+  int last_viewed_id, nb_msg_since_last_viewed;
+
+  /* date a laquelle le dernier check a ete fait
+     (c'est pas redondant, je part du principe que l'horloge locale
+     et celle de linuxfr ne sont pas synchronisees */
+  time_t local_time_last_check, local_time_last_check_old, local_time_last_check_end;
+
+  /* fourchette d'�cart de temps */
+  time_t time_shift_min, time_shift_max;
+
+  time_t time_shift; /* time at localhost - time at remotehost */
+
+  /* regles de reconnaissance des useragent (par regex)
+     ce qui permet de leur assigner des couleurs/formes differentes */
+  //  board_load_rule *rules;
+
+  int just_posted_anonymous; /* positionn� si on vient juste d'envoyer un message en anonyme
+				(pour aider la reconnaissance de nos messages) */
+  
+  board_msg_info *mi_tree_root; /* rooh un arbre binaire ..
+				     c'est utilis� par board_find_id */
+  char *last_modified; /* pour les requetes http */
+  struct Site_ *site;
+  Boards *boards; /* pointeur vers la structure multi-site 
+		     il est juste l� par commodit�
+		   */
+  int flag_answer_to_me;
+
+  /* stocke le useragent (potentiellement modifi�) */
+  unsigned char coin_coin_useragent[USERAGENT_MAXMAX_LEN+1];
+
+  /* compteurs mis � jour dans Net_loop (25 fois/sec) */
+  int board_refresh_decnt, board_refresh_delay;
+
+  volatile int auto_refresh; /* refreshs auto activ� desactiv� par la ptite croix en bas � droite du tab */
+
+  md5_and_time *oldmd5; /* utilise de maniere transitoire par les feeds rss */
+
+  char *rss_title; /* nul sur les boards non rss */
+
+  char *encoding; /* encoding utilis� pour les POST. D�duit de l'encoding du backend */
+
+  int last_posted_id; /* id du dernier post qu'on a post�, r�cup�r� du header X-Post-Id */
+};
+
+typedef struct SiteNameHash_ {
+  int hash;
+  int sid;
+} SiteNameHash;
+
+struct Boards_ {
+  board_msg_info *first;
+  board_msg_info *last;
+  Board *btab[MAX_SITES];
+  int nb_rss_e, max_rss_e;
+  RSSBonusInfo **rss_e;
+  int nb_aliases;
+  SiteNameHash *aliases;
+};
+
+
+struct Site_ {
+  Board *board;
+  SitePrefs *prefs;
+  struct Site_ *next;
+
+  int site_id; /*
+		 un num�ro unique au site,
+		  susceptible de changer a chaque rechargement des prefs
+		  (ajout ou suppression de sites)
+		  (ce numero est compris entre 0 et MAX_SITES-1, et represente l'indice
+		  du pointeur 'prefs' dans la structure globale Prefs.site[] )
+	       */
+  int http_error_cnt;    /* increment quand il y a eu une erreur http sur le site */
+  int http_success_cnt;  /* et inversement */
+  int http_recent_error_cnt; /* increment� � chaque erreur, et remis � zero � chaque
+				succes */
+
+  /* bien s�r c'est pas des vrai pings, c'est le temps pour faire un connect
+     envoyer une requete http et recevoir l'entente de la reponse */
+#define NB_HTTP_PING_STAT (42/2)
+  /* c'est un buffer tournant je sais pas comment on dit */
+  float http_ping_stat_buf[NB_HTTP_PING_STAT];
+  int http_ping_stat_i;
+  float http_ping_stat; /* moyenne judicieusement pond�r�e */
+  char *relative_urls_base;
+};
+
+struct SiteList_ {
+  Site *list; /* liste de sites, reordonnees lors de la relecture des prefs */
+  Boards *boards;
+};
+
+/* le docker qui est dans le pinni qui sert � docker le dock, tout simplement 
+   inspir� par le concept des autofuck que j'avais vu � la tel� dans ma jeunesse
+ */
+typedef struct SwallowedApp {
+  Window win;
+  int winx, winy;
+  int winw, winh;
+  int framex, framey;
+  int framew, frameh;
+  char *name;
+  struct SwallowedApp *next;
+} SwallowedApp;
+
+typedef struct SwallowCoincoin {
+  Window hostwin;
+  int x0, x1, y0, y1; /* position de la zone d'avalage dans hostwin */
+  int nb_swallowed;
+  int layout_dirty;
+  SwallowedApp *self;
+  SwallowedApp *apps;
+} SwallowCoincoin;
+
+typedef struct TotozBookmarkItem_ {
+  char *name;
+  int popularity;
+  struct TotozBookmarkItem_ *next;
+} TotozBookmarkItem;
+
+typedef struct TotozBookmark_ {
+  time_t last_modif;
+  TotozBookmarkItem *first;
+} TotozBookmark;
+
+typedef enum {OFF=0, BLUE=1, GREENLIGHT=2, YELLOW=3, VIOLET=4, CYAN=5, RED=6, GREEN=7,BIGREDLIGHT=7, BIGRED=8} LedColor;
+
+typedef struct Led_ {
+  LedColor coul[3];
+  int delay[3];
+  
+  int xpos, ypos;
+
+  int cnt, colcnt;
+  
+} Led;
+
+typedef struct Leds {
+  Led led[5];
+  Pixmap pixmap, mask;
+} Leds;
+
+
+
+#define DOCK_WIN(d) ((Prefs.use_iconwin && !Prefs.auto_swallow ? (d)->iconwin : (d)->win))
+
+
+typedef struct TL_item_ {
+  id_type id;
+  unsigned char R,G,B,symb;
+} TL_item;
+
+typedef struct _Balloon Balloon;
+typedef struct _EditW EditW;
+typedef struct _MsgBox MsgBox;
+typedef struct _Pinnipede Pinnipede;
+typedef struct _Plopup Plopup; 
+typedef void(*plopup_callback_t)(int);
+
+#define DOCK_FIXED_FONT "-*-fixed-*--10-*"
+#define DOCK_FIXED_FONT_W 6
+
+
+#define MAX_NEWSTITLES_LEN 512 /* taille de dock->newstitles */
+#define MAX_MSGINFO_LEN 300 /* taille de dock->msginfo */
+
+/* periode du clignotement (25-> 1 par sec) */
+#define FLAMOMETRE_COMMENT_CLIGN_SPEED 32
+#define FLAMOMETRE_XP_CLIGN_SPEED      32
+#define FLAMOMETRE_TRIB_CLIGN_SPEED    16
+/* duree de clignotement (en secondes) */
+#define FLAMOMETRE_COMMENT_DUREE 3600000  /* c'est long, tr�s long */
+#define FLAMOMETRE_XP_DUREE      900      /* 1/4 d'heure */
+#define FLAMOMETRE_TRIB_DUREE    15
+
+typedef struct _Duck Duck;
+
+typedef struct Dock_ {
+  Pixmap pix_porte, mask_porte_haut, mask_porte_bas;
+  Leds leds;
+  /* le pixmap du load de la board (il n'est regenere que
+     quand la tribune a ete modifie, c'est quand meme plus cool
+     que le faire a chaque refresh_dock */
+  Pixmap pix_trolloscope;
+
+  XFontStruct *fixed_font;
+  
+  SiteList *sites; /* toutes les donn�es !! */
+
+  /*
+    le message defilant en haut 
+  */
+  int nb_newstitles;
+  unsigned char *newstitles;
+  int newstitles_pos, newstitles_char_dec;
+
+  /* ouverture,fermeture,enfoncage de bouton..*/
+  enum {OPENING, CLOSING, OPENED, CLOSED} door_state;
+  int door_state_step;
+
+  /* press_flag : 0: pas presse, 
+     +1 en cours d'enfoncements, -1 en cours de desenfoncement
+     press_state: niveau d'enfoncement (max=5)
+  */
+  int red_button_press_flag, red_button_press_state;
+  int red_button_send_cnt;
+  int post_anonyme;
+
+  /* le message a caractere informatif en bas */
+  unsigned char *msginfo;
+
+  /* pointe vers la structure tl_item si la souris
+     est au dessus d'un message dans la zone de trolloscope
+     (NULL sinon)
+  */
+  TL_item *tl_item_survol;
+  int tl_item_clicked;
+
+  /* �a c'est le tableau du trolloscope */
+  TL_item **trolloscope;
+  /* trolloscope_resolution: 5(faible) ou 2(moyenne) ou 1(hires!)*/
+  int trolloscope_resolution; /* de retour, � la demande de monsieur 'The Original Palmip�de' */
+  
+  struct {
+    int xp_change_decnt;
+    int comment_change_decnt;
+    int board_answer_decnt;
+  } flamometre;
+
+  /* si non nul, c'est le compteur de defilement*/
+  int msginfo_defil;
+
+  int flag_survol_trollo; /* qd la souris est audessus du trollometre on affiche sa valeur */
+  int flag_survol_led1; /* qd la souris est audessus de la led1, on affiche la vitesse de defilement du trolloscope */
+
+  /* position du pointeur & comptage du nombre de millisecondes depuis le dernier mvt */
+  int mouse_x, mouse_y, mouse_cnt;
+  Window mouse_win;
+
+  /* InputMethod -> pour gerer les carac. acceptues sur 
+     clavier qwerty, par exemple.. */
+  XIM input_method;
+
+  int fuck_utf8; /* non nul si la locale est utf */
+
+  Atom atom_WM_DELETE_WINDOW; /* oh les bon gros atomes  */
+  Atom atom_WM_SAVE_YOURSELF;
+  Atom atom_WM_TAKE_FOCUS;
+  Atom atom_WM_PROTOCOLS;
+  /* plein d'autres atome dans coin_xutil.c */
+
+
+  /* si non nul, on voit l'id du msg designe par tl_item_clicked, 
+     --> active par un click sur un symbole dans trolloscope 
+    (contient l'id, ce n'est pas un flag 0/1) */
+  id_type view_id_in_newstitles;
+  int view_id_timer_cnt;
+
+  unsigned char coin_coin_message[MESSAGE_MAXMAX_LEN+1];
+  int coin_coin_site_id;
+  int coin_coin_sent_decnt;
+
+  Cursor trib_load_cursor;
+  int flag_trib_load_cursor;
+
+  GC NormalGC, or_GC, and_GC;
+  Display *display;
+
+  Window rootwin;
+
+  Window iconwin,win;
+
+  Window msgwin;
+
+  Window pp_win; /* == pinnipede->win quand le pinnipede est mappe */
+  Pixmap pix_msgwin;
+  int msgwin_visible;
+  GC msgwin_GC;
+
+  /* les trois couleurs de base du dock */
+  unsigned long bg_pixel,light_pixel,dark_pixel;
+  CCColorId bg_color, light_color, dark_color;
+  CCColorId white_color, black_color, green_color, blue_color, red_color, gray_colors[16];
+  int screennum;
+  Pixmap coinpix, coin_pixmask;
+  Pixmap clockpix, clock_pixmask;
+  Pixmap led, month, date, weekday;
+
+  RGBAContext *rgba_context;
+
+  Balloon *balloon;
+
+  EditW *editw;
+
+  Pinnipede *pinnipede;
+
+  MsgBox *msgbox;
+
+  Plopup *plopup;
+
+  int trolloscope_speed; /* vitesse de defilement du trolloscope (1,2,4 ou 8), defaut:2 */
+
+  struct {
+    int palmipede_used;
+    int pinnipede_used;
+
+    int last_sig_is_usr1;
+  } discretion_saved_state;
+
+  int horloge_mode;
+
+  float trib_trollo_rate, trib_trollo_score;
+
+  Pixmap wm_icon_pix, wm_icon_mask; /* icone utilis�e par le windowmanager (pour le pinnipede) */
+  pid_t wmccc_pid;
+
+  /* multi-head support */
+  struct {
+    int   screen_number;
+    short x_org;
+    short y_org;
+    short width;
+    short height;
+  } *xiscreen;
+  int nb_xiscreen;
+
+  SwallowCoincoin *swallow;
+
+  TotozBookmark *totoz_bm;
+  int nb_duck;
+  Duck *duck_lst;
+} Dock;
+
+/* c'est class� par ordre de priorit� d�croissante */
+typedef enum { Q_PREFS_UPDATE, Q_BOARD_POST, Q_BOARD_UPDATE, 
+	       Q_NEWSLST_UPDATE, Q_SMILEY_DL } ccqueue_elt_type;
+
+typedef struct _ccqueue_elt {
+  ccqueue_elt_type what;
+  int  sid;
+
+  char *ua;
+  char *msg;
+  int  nid;
+  struct _ccqueue_elt *next;
+} ccqueue_elt;
+
+
+/* wmcoincoin.c */
+#define URL_YES_I_KNOW_WHAT_I_DO 16384
+void open_url(const unsigned char *url, int balloon_x, int balloon_y, int browser_num);
+void wmcc_init_http_request(HttpRequest *r, SitePrefs *sp, char *url_path);
+void wmcc_init_http_request_with_cookie(HttpRequest *r, SitePrefs *sp, char *url_path);
+void wmcc_log_http_request(Site *s, HttpRequest *r);
+void block_sigalrm(int bloque);
+int launch_wmccc(Dock *dock,...);
+void exec_coin_coin(Dock *dock, int sid, const char *ua, const char *msg);
+void wmcc_save_or_restore_state(Dock *dock, int do_restore);
+Dock *get_dock();
+
+/* picohtml.c */
+void picohtml_set_url_path(PicoHtml *ph, const char *s);
+void picohtml_unset_url_path(PicoHtml *ph);
+void picohtml_parse(PicoHtml *ph, const char *buff, int width);
+void picohtml_gettxtextent(PicoHtml *ph, int *width, int *height);
+void picohtml_render(PicoHtml *ph, Drawable d, int x, int y);
+void picohtml_freetxt(PicoHtml *ph);
+int  picohtml_isempty(PicoHtml *ph);
+void picohtml_set_parag_indent(PicoHtml *ph, int parag_indent);
+void picohtml_set_parag_skip(PicoHtml *ph, float parag_skip);
+void picohtml_set_line_skip(PicoHtml *ph, float line_skip);
+void picohtml_set_tabul_skip(PicoHtml *ph, int tabul_skip);
+CCFontId picohtml_get_fn_base(PicoHtml *ph);
+CCFontId picohtml_get_fn_bold(PicoHtml *ph);
+PicoHtml *picohtml_create(Dock *dock, char *base_family, int base_size, int white_txt);
+void picohtml_destroy(PicoHtml *ph);
+void picohtml_set_default_pixel_color(PicoHtml *ph, unsigned long pix);
+
+/* cc_queue.c */
+void ccqueue_build();
+void ccqueue_push_prefs_update(int whatfile);
+void ccqueue_push_board_post(int sid, char *ua, char *msg);
+void ccqueue_push_board_update(int sid);
+void ccqueue_push_comments_update(int sid);
+void ccqueue_push_messages_update(int sid);
+void ccqueue_push_newslst_update(int sid);
+void ccqueue_push_smiley_dl(char *imgname);
+int ccqueue_state();
+void ccqueue_print();
+const ccqueue_elt *ccqueue_doing_what();
+ccqueue_elt* ccqueue_find_next(ccqueue_elt_type what, int sid, ccqueue_elt *q);
+ccqueue_elt* ccqueue_find(ccqueue_elt_type what, int sid);
+void ccqueue_loop(Dock *dock);
+
+/* palmipede.c  */
+void editw_show(Dock *dock, SitePrefs *sp, int useragent_mode);
+void editw_hide(Dock *dock, EditW *ew); /* rentrer le palmipede */
+void editw_unmap(Dock *dock, EditW *ew); /* cacher immediatement le palmipede */
+void editw_reload_colors(Dock *dock, EditW *ew);
+void editw_build(Dock *dock);
+void editw_rebuild(Dock *dock);
+void editw_set_kbfocus(Dock *dock, EditW *ew, int get_it);
+int editw_handle_keypress(Dock *dock, EditW *ew, XEvent *event);
+void editw_handle_keyrelease(Dock *dock, EditW *ew, XEvent *event);
+void editw_dispatch_event(Dock *dock, EditW *ew, XEvent *event);
+Window editw_get_win(EditW *ew);
+int editw_get_site_id(Dock *dock);
+void editw_change_current_site(Dock *dock, int sid);
+void editw_action(Dock *dock, EditW *ew);
+int editw_ismapped(EditW *ew);
+void editw_balloon_test(Dock *dock, EditW *ew, int x, int y);
+void editw_refresh(Dock *dock, EditW *ew);
+void editw_erase(EditW *ew);
+int editw_insert_string(EditW *ew, const unsigned char *s); /* utilise par le pinnipede */
+void editw_move_end_of_line(EditW *ew, int shift_move); /* utilise par le pinnipede */
+int editw_check_corse(Dock *dock, unsigned keycode); /* utilise par le pinnipede */
+void editw_check_bloub(Dock *dock);
+
+/* deux fonction d'utilite generale, en depis de leur nom */
+void editw_cb_copy(Dock *dock, Window win, const char *text, int len);
+void editw_cb_handle_selectionrequest(Dock *dock, XSelectionRequestEvent *rq);
+
+
+
+/* balloon.c */
+void balloon_build(Dock *dock);
+void balloon_destroy(Dock *dock);
+void balloon_hide(Dock *dock);
+void balloon_show(Dock *dock, int x, int y, int h, int w, const char *text, int bwidth);
+void balloon_show_with_image(Dock *dock, int x, int y, int h, int w, const char *text, int bwidth, Pixmap image, int img_w, int img_h);
+int balloon_ismapped(Dock *dock);
+void balloon_check_event(Dock *dock, XEvent *event);
+void balloon_disable_key(Dock *dock, unsigned keycode);
+int balloon_test_nomsg(Dock *dock, int x, int y, int bcnt, int bx, int by, int bw, int bh);
+int balloon_test(Dock *dock, int x, int y, int win_xpos, int win_ypos, int bcnt, int bx, int by, int bw, int bh, const char *btxt);
+int balloon_test_with_image(Dock *dock, int x, int y, int winx, int winy, int bcnt, int bx, int by, int bw, int bh, const char *btxt, Pixmap image, int img_w, int img_h);
+
+/* msgbox.c */
+void msgbox_dispatch_event(Dock *dock, XEvent *event);
+Window msgbox_get_win(Dock *dock);
+int msgbox_ismapped(Dock *dock);
+void msgbox_hide(Dock *dock);
+void msgbox_show(Dock *dock, char *text);
+void msgbox_show_modal(Dock *dock, char *text);
+void msgbox_build(Dock *dock);
+
+/* plopup.c */
+void plopup_build(Dock *dock);
+void plopup_set_description(Dock *dock, char *txt);
+void plopup_pushentry(Dock *dock, char *txt, int id);
+void plopup_pushsepar(Dock *dock);
+void plopup_show(Dock *dock, int x, int y, plopup_callback_t cback);
+int  plopup_show_modal(Dock *dock, int x, int y);
+int  plopup_ismapped(Dock *dock);
+void plopup_unmap(Dock *dock);
+void plopup_dispatch_event(Dock *dock, XEvent *event);
+
+/* pinnipede.c */
+void pp_build(Dock *dock);
+void pp_rebuild(Dock *dock, int destroy_tabs);
+void pp_destroy(Dock *dock);
+void pp_show(Dock *dock);
+void pp_unmap(Dock *dock);
+int pp_ismapped(Dock *dock);
+int pp_handle_keypress(Dock *dock, XEvent *event);
+int pp_handle_keyrelease(Dock *dock, XEvent *event);
+int pp_dispatch_event(Dock *dock, XEvent *event);
+void pp_minib_dispatch_event(Dock *dock, Board *trib, XEvent *event);
+Window pp_get_win(Dock *dock);
+void pp_check_board_updated(Dock *dock);
+void pp_animate(Dock *dock);
+void pp_set_board_updated(Dock *dock);
+void pp_check_balloons(Dock *dock, int x, int y);
+void pp_change_filter_mode(Dock *dock, int zero_or_one);
+int pp_get_filter_mode();
+void pp_set_ua_filter(Dock *dock, char *ua);
+void pp_set_word_filter(Dock *dock, char *word);
+void pp_show_message_from_id(Dock *dock, id_type id);
+void pp_save_state(Dock *dock, FILE *f);
+void pp_restore_state(Dock *dock, FILE *f);
+Site *pp_tabs_get_main_site(Dock *dock);
+int pp_tabs_is_site_visible(Dock *dock, Site *s);
+void pp_tabs_set_flag_answer_to_me(Dock *dock, Site *s);
+void pp_set_download_info(char *site, char *what);
+void pp_unset_kbnav(Dock *dock);
+void pp_totoz_check_updates(Dock *dock);
+char *pp_totoz_realfname(unsigned char *name, int with_path);
+void pp_totoz_get_image(Dock *dock, unsigned char *imgname);
+/* prefs_gestion.c */
+char *check_install_data_file(char *data_file_name, char *dot_wmcc_file_name);
+void wmcc_prefs_initialize(int argc, char **argv, GeneralPrefs *p);
+void wmcc_prefs_relecture(Dock *dock, int whichfile);
+char *get_wmcc_options_filename();
+char *get_wmcc_tmp_options_filename();
+
+/* troll_detector.c */
+void troll_detector(board_msg_info *mi);
+
+
+/* board.c */
+int logged_urls_find_url(unsigned char *url, id_type *pid);
+Board *board_create(Site *site, Boards *boards);
+void board_tatouage(Board *trib, board_msg_info *it);
+/* renvoie l'age du message, en secondes */
+time_t board_get_msg_age(const Board *trib, const board_msg_info *it);
+void board_frequentation(const Board *trib, int nb_minutes, int *ua_cnt, int *msg_cnt, int *my_msg_cnt);
+void board_get_trollo_rate(const Board *trib, float *trate, float *tscore);
+void boards_update_boitakon(Boards *boards);
+void board_update(Board* board);
+void board_destroy(Board *board);
+void board_save_state(FILE *f, Board *board);
+void board_restore_state(FILE *f, Board *board);
+void board_set_viewed(Board *board, int id);
+int board_is_rss_feed(Board *b);
+int board_is_regular_board(Board *b);
+int board_is_pop3(Board *b);
+int board_can_post_messages(Board *b);
+RSSBonusInfo *rss_find_from_link(Boards *boards, char *link);
+RSSBonusInfo *rss_find_from_id(Boards *boards, id_type id); /* slow */
+
+/* coincoinswallow.c */
+void swallower_init(Dock *dock);
+int swallower_is_autoswallowed(Dock *dock);
+void sw_layout_dockapps(Dock *dock, int x0, int y0, int x1, int y1);
+void sw_redraw(Dock *dock);
+void swallower_autoswallow(Dock *dock);
+/* totoz_bookmark.c */
+const char *totoz_bookmark_filename();
+const char *totoz_bookmark_url_html();
+TotozBookmarkItem* totoz_bookmark_search(Dock *dock, const char *name);
+TotozBookmarkItem* totoz_bookmark_insert(Dock *dock, const char *name);
+void totoz_bookmark_load(Dock *dock);
+void totoz_bookmark_save(Dock *dock, int merge_first);
+void totoz_bookmark_save_html(Dock *dock);
+#endif
diff --git a/src/dock.c b/src/dock.c
new file mode 100644
index 0000000..2b54ddb
--- /dev/null
+++ b/src/dock.c
@@ -0,0 +1,1572 @@
+/*
+    wmCoinCoin, the stupidest WindowMaker dock applet
+    Copyright (C) 2001  Julien Pommier
+
+    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., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+
+
+ */
+/*
+  contient les fonction g�rant l'affichage de l'applet
+  ainsi que les �venements
+
+  rcsid=$Id: dock.c,v 1.46 2005/09/25 12:08:55 pouaite Exp $
+  ChangeLog:
+  $Log: dock.c,v $
+  Revision 1.46  2005/09/25 12:08:55  pouaite
+  ca marche encore ca ?
+
+  Revision 1.45  2004/05/16 12:54:29  pouaite
+  250c
+
+  Revision 1.44  2004/04/28 22:19:00  pouaite
+  bugfixes dae + des trucs que j'ai oublie
+
+  Revision 1.43  2004/04/26 20:32:31  pouaite
+  roger demande le commit
+
+  Revision 1.42  2004/04/18 15:37:28  pouaite
+  un deux un deux
+
+  Revision 1.41  2004/03/07 13:51:12  pouaite
+  commit du dimanche
+
+  Revision 1.40  2004/03/03 23:00:39  pouaite
+  commit du soir
+
+  Revision 1.39  2004/02/29 19:01:27  pouaite
+  et hop
+
+  Revision 1.38  2004/02/29 15:01:19  pouaite
+  May the charles bronson spirit be with you
+
+  Revision 1.37  2003/08/26 21:50:48  pouaite
+  2.6.4b au mastic
+
+  Revision 1.36  2003/07/20 22:22:28  pouaite
+  ce commit est dedie a Pierre Tramo
+
+  Revision 1.35  2003/06/25 20:18:21  pouaite
+  support xinerama qui marche
+
+  Revision 1.34  2003/06/24 22:27:57  pouaite
+  speciale dedicace a nos amis de l'ile de beaute
+
+  Revision 1.33  2003/02/25 23:04:31  pouaite
+  cosmetique stats
+
+  Revision 1.32  2003/01/12 18:42:17  pouaite
+  et une baguette bien cuite pour le monsieur avec l'ornythorinque
+
+  Revision 1.31  2003/01/11 23:28:13  pouaite
+  meilleur calcul de la qualitai
+
+  Revision 1.30  2003/01/11 17:44:10  pouaite
+  ajout de stats/coinping sur les sites
+
+  Revision 1.29  2003/01/11 14:10:07  pouaite
+  fix du palmi pour xf 4.3
+
+  Revision 1.28  2002/09/08 14:28:45  pouaite
+  bugfixes salutaires
+
+  Revision 1.27  2002/09/07 16:21:15  pouaite
+  �a va releaser en douce
+
+  Revision 1.26  2002/09/05 23:11:57  pouaite
+  <blog>ce soir g mang� une omelette</blog>
+
+  Revision 1.25  2002/09/03 22:42:17  pouaite
+  coin
+
+  Revision 1.24  2002/09/02 23:24:41  pouaite
+  bugfixes de la soiree
+
+  Revision 1.23  2002/09/01 23:54:56  pouaite
+  completurage du wmc3 et compatibilitation avec new.linuxfr
+
+  Revision 1.22  2002/08/31 21:26:46  pouaite
+  ajout du wmccc
+
+  Revision 1.21  2002/08/26 00:52:22  pouaite
+  coin coin coin
+
+  Revision 1.20  2002/08/21 01:11:49  pouaite
+  commit du soir, espoir
+
+  Revision 1.19  2002/08/18 19:00:28  pouaite
+  plop
+
+  Revision 1.18  2002/08/17 18:33:39  pouaite
+  grosse commition
+
+  Revision 1.17  2002/06/23 10:44:05  pouaite
+  i18n-isation of the coincoin(kwakkwak), thanks to the incredible jjb !
+
+  Revision 1.16  2002/06/02 13:31:37  pouaite
+  bon, _maintenant_ c'est parti pour la 2.3.8b
+
+  Revision 1.15  2002/06/01 17:54:04  pouaite
+  nettoyage
+
+  Revision 1.14  2002/05/27 18:39:14  pouaite
+  trucs du week-end + patch de binny
+
+  Revision 1.13  2002/05/19 01:14:58  pouaite
+  bugfix du dernier bugfix.. ou pas.. chuis un peu trop fatigu� pour faire des bugfix
+
+  Revision 1.12  2002/04/26 08:55:27  pouaite
+  fix pour le mode horloge avec l'option '-w'/dock.iconwin (merci gle!)
+
+  Revision 1.11  2002/04/13 11:55:19  pouaite
+  fix kde3 + deux trois conneries
+
+  Revision 1.10  2002/04/09 00:28:19  pouaite
+  quelques modifs faites dans un �tat d'h�b�tude avanc� /!\ travaux en cours /!\
+
+  Revision 1.9  2002/04/04 20:42:51  pouaite
+  replop
+
+  Revision 1.8  2002/04/01 22:56:03  pouaite
+  la pseudo-transparence du pinni, bugfixes divers, option tribune.backend_type
+
+  Revision 1.7  2002/04/01 01:39:38  pouaite
+  grosse grosse commition (cf changelog)
+
+  Revision 1.6  2002/03/19 09:55:58  pouaite
+  bugfixes compilation
+
+  Revision 1.5  2002/03/09 19:45:52  pouaite
+  microbugfix du plopifieur et ajout d'une macro PATCH_LEVEL
+
+  Revision 1.4  2002/02/24 22:13:56  pouaite
+  modifs pour la v2.3.5 (selection, scrollcoin, plopification, bugfixes)
+
+  Revision 1.3  2002/02/02 23:49:17  pouaite
+  plop
+
+  Revision 1.2  2002/01/31 23:45:00  pouaite
+  plop
+
+  Revision 1.1  2002/01/16 21:27:35  pouaite
+  gros coup de balai dans wmcoincoin.c qui s'est du coup splitt� en trois: wmcoincoin.c, dock.c et useragents_file.c
+
+*/
+
+#include <libintl.h>
+#define _(String) gettext (String)
+
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+#include <X11/keysym.h>
+#include <X11/cursorfont.h>
+#include <X11/extensions/shape.h>
+#include <time.h>
+#include <sys/time.h>
+#include <math.h>
+#include "coin_xutil.h"
+#include "http.h"
+#include "site.h"
+#include "dock.h"
+#include "board_util.h"
+#include "balltrap.h"
+
+/* image */
+#include "../xpms/leds.h"
+#include "../xpms/porte.h"
+
+/* au max un defilement toutes les 15 secondes */
+#define TROLLO_MAX_SPEED 15
+
+void
+dock_update_pix_trolloscope(Dock *dock)
+{
+  Boards *boards = dock->sites->boards;
+  board_msg_info *it;
+  int tnow_minutes;
+  int i,j;
+  RGBAImage *img;
+  int trolloscope_bgr, trolloscope_bgg, trolloscope_bgb;
+
+  /* nombre de secondes regroupees dans une meme colonne du graphique */
+  int col_nb_sec = 0;
+  int trib_nrow, trib_ncol;
+
+  if (flag_updating_board) return;
+
+  /* couleur de fond du trolloscope */
+  trolloscope_bgr = (280*(dock->flamometre.comment_change_decnt % FLAMOMETRE_COMMENT_CLIGN_SPEED))/(FLAMOMETRE_COMMENT_CLIGN_SPEED-1);
+  trolloscope_bgg = (280*(dock->flamometre.xp_change_decnt % FLAMOMETRE_XP_CLIGN_SPEED))/(FLAMOMETRE_XP_CLIGN_SPEED-1);
+  trolloscope_bgb = (280*(dock->flamometre.board_answer_decnt % FLAMOMETRE_TRIB_CLIGN_SPEED))/(FLAMOMETRE_TRIB_CLIGN_SPEED-1);
+  if (trolloscope_bgr>255) { trolloscope_bgr = ((280-trolloscope_bgr)*255)/(280-255); }
+  if (trolloscope_bgg>255) { trolloscope_bgg = ((280-trolloscope_bgg)*255)/(280-255); }
+  if (trolloscope_bgb>255) { trolloscope_bgb = ((280-trolloscope_bgb)*255)/(280-255); }
+
+  if (dock->trolloscope_resolution == 5) {
+    col_nb_sec = 1*dock->trolloscope_speed*TROLLO_MAX_SPEED;
+  } else if (dock->trolloscope_resolution == 2) {
+    col_nb_sec = 2*dock->trolloscope_speed*TROLLO_MAX_SPEED;
+  } else if (dock->trolloscope_resolution == 1) {
+    col_nb_sec = 4*dock->trolloscope_speed*TROLLO_MAX_SPEED;
+  } else assert(0);
+
+  trib_nrow = (TROLLOSCOPE_HEIGHT + dock->trolloscope_resolution - 1) / dock->trolloscope_resolution;
+  trib_ncol = (TROLLOSCOPE_WIDTH  + dock->trolloscope_resolution - 1) / dock->trolloscope_resolution;
+
+  for (i=0; i < trib_nrow; i++) {
+    for (j=0; j < trib_ncol; j++) {
+      dock->trolloscope[i][j].id      = id_type_invalid_id();
+      dock->trolloscope[i][j].R       = 0; 
+      dock->trolloscope[i][j].G       = 0; 
+      dock->trolloscope[i][j].B       = 0; 
+      dock->trolloscope[i][j].symb    = 0; 
+    }
+  }
+  
+  tnow_minutes = (time(NULL) + col_nb_sec - 1)/col_nb_sec;
+  for (it = boards->first; it; it = it->g_next) {
+    Site *site;
+    int age;
+
+    site = sl_find_site_id(dock->sites, it->id.sid);
+    assert(site);
+    assert(site->prefs->check_board);
+    assert(site->board);
+
+    /* age = board_get_msg_age(trib, it) / 60 / col_nb_min; */
+    //printf("time_shift = %ld, timestamp=%ld, col_nb_sec=%d ", site->board->time_shift, it->timestamp, col_nb_sec);
+    age = (long)(tnow_minutes - (it->timestamp + site->board->time_shift + col_nb_sec - 1)/col_nb_sec);
+    
+    // + ((24*60*60)/col_nb_sec))%((24*60*60)/col_nb_sec);
+    BLAHBLAH(4, myprintf("sid=%15s/id=%<YEL %5d>, age=%<RED %5d> ts=%02d:%02d:%02d, col_nb_sec=%4d, tnow_minutes=%8d\n", Prefs.site[id_type_sid(it->id)]->site_name, id_type_lid(it->id), age,(it->timestamp/3600)%24, (it->timestamp/60)%60, it->timestamp%60,col_nb_sec,tnow_minutes));
+    if (age < 0) age = 0; /* avec les fluctuations du time_shift .. */
+    if (age < trib_ncol) {
+      /* on empile les message sur la pile d'age 'age' (je suis clair?)*/
+      i = 0;
+      while (!id_type_is_invalid(dock->trolloscope[i][age].id)) {
+	i++; if (i == trib_nrow) break;
+      }
+      if (i < trib_nrow) {
+	dock->trolloscope[i][age].id = it->id;
+	dock->trolloscope[i][age].R = it->miniua.R;
+	dock->trolloscope[i][age].G = it->miniua.G;
+	dock->trolloscope[i][age].B = it->miniua.B;
+	dock->trolloscope[i][age].symb = it->miniua.symb;
+      }
+    }
+  }
+
+  img = RGBACreateImage(TROLLOSCOPE_WIDTH, TROLLOSCOPE_HEIGHT); assert(img);
+  /*
+  for (i=0; i < TROLLOSCOPE_HEIGHT; i++) {
+    for (j=0; j < TROLLOSCOPE_WIDTH; j++) {
+      img->data[(i*TROLLOSCOPE_WIDTH  + j)*3 + 0] = trolloscope_bgr; 
+      img->data[(i*TROLLOSCOPE_WIDTH  + j)*3 + 1] = trolloscope_bgg; 
+      img->data[(i*TROLLOSCOPE_WIDTH  + j)*3 + 2] = trolloscope_bgg; 
+    }
+    }*/
+  for (i=0; i < trib_nrow; i++) {
+    for (j=0; j < trib_ncol; j++) {
+      int r,g,b,symb;
+
+      if (!id_type_is_invalid(dock->trolloscope[i][j].id)) {
+	r = dock->trolloscope[i][j].R;
+	g = dock->trolloscope[i][j].G;
+	b = dock->trolloscope[i][j].B;
+	symb = dock->trolloscope[i][j].symb;
+	//	printf("troll[%3d:%3d] = #%02x%02x%02x / %d\n", i, j, r, g, b, symb);
+      } else { 
+	r = trolloscope_bgr; g = trolloscope_bgg; b = trolloscope_bgb; symb = 0;
+      }
+      BLAHBLAH(5, myprintf("[%<YEL %1d>%<RED %02x>] ", symb, (r+g+b)%256));
+      if (dock->trolloscope_resolution == 5) {
+	int ii,jj;
+	for (ii=0; ii < 5; ii++) {
+	  for (jj=0; jj < 5; jj++) {
+	    if (i*5+ii < TROLLOSCOPE_HEIGHT &&  TROLLOSCOPE_WIDTH-1-(j*5+jj) >= 0) {
+	      RGBAPixel *pixel;
+	      pixel = &img->data[ TROLLOSCOPE_HEIGHT-1-(i*5+ii) ][ TROLLOSCOPE_WIDTH-1-(j*5+jj) ];
+	      switch (symboles[symb].s[ii][jj]) {
+	      case ' ': 
+		pixel->rgba[0] = trolloscope_bgr; 
+		pixel->rgba[1] = trolloscope_bgg; 
+		pixel->rgba[2] = trolloscope_bgb; 
+		break;
+	      case '.': 
+		pixel->rgba[0] = (r/2); 
+		pixel->rgba[1] = (g/2); 
+		pixel->rgba[2]=(b/2); break;
+	      case ':': pixel->rgba[0] = ((r*2)/3); pixel->rgba[1] = ((g*2)/3); pixel->rgba[2]=((b*2)/3); break;
+	      case 'x': pixel->rgba[0] = ((r*3)/4); pixel->rgba[1] = ((g*3)/4); pixel->rgba[2]=((b*3)/4); break;
+	      case 'X': pixel->rgba[0] = r; pixel->rgba[1] = g; pixel->rgba[2]=b; break;
+	      case '#': pixel->rgba[0] = MIN((r*5)/4,255); pixel->rgba[1] = MIN((g*5)/4,255); pixel->rgba[2]=MIN((b*5)/4,255); break;
+	      default: assert(1==0); /* autant dire que j'ai pas envie que ca arrive */
+	      }
+	    }
+	  }
+	}
+      } else if(dock->trolloscope_resolution == 2) {
+	int ii,jj;
+	for (ii=0; ii < 2; ii++) {
+	  for (jj=0; jj < 2; jj++) {
+	    if (i*2+ii < TROLLOSCOPE_HEIGHT && TROLLOSCOPE_WIDTH-1-(j*2+jj) >= 0) {
+	      RGBAPixel *pixel;
+	      pixel = &img->data[ TROLLOSCOPE_HEIGHT-1-(i*2+ii) ][ TROLLOSCOPE_WIDTH-1-(j*2+jj) ];
+	      pixel->rgba[0] = r; pixel->rgba[1] = g; pixel->rgba[2] = b;
+	    }
+	  }
+	}           
+      } else if (dock->trolloscope_resolution == 1) {
+	RGBAPixel *pixel;
+	pixel = &img->data[ TROLLOSCOPE_HEIGHT-1-i ][ trib_ncol-1-j ];
+	pixel->rgba[0] = r; pixel->rgba[1] = g; pixel->rgba[2] = b;
+      }
+    }
+    BLAHBLAH(5,myprintf("\n"));
+  }
+
+  if (dock->tl_item_survol) { 
+    /* ce fut un bug idiot */
+    if (id_type_is_invalid(dock->tl_item_survol->id)) {
+      dock->tl_item_survol = NULL;
+      dock->tl_item_clicked = 0;
+    }
+  }
+
+  /* et voila ! y'a plus qu'a fabriquer le pixmap */
+  XFreePixmap(dock->display, dock->pix_trolloscope);
+  dock->pix_trolloscope = RGBAImage2Pixmap(dock->rgba_context, img);
+  assert(dock->pix_trolloscope != None);
+  RGBADestroyImage(img);
+}
+
+static void
+refresh_docktxt_bottom(Dock *dock, int x, int y, int w)
+{
+  int cx;
+  XRectangle xr;
+  
+  xr.x = x; xr.y = y; xr.width = w; xr.height = 11;
+  XSetForeground(dock->display, dock->NormalGC, IRGB2PIXEL(Prefs.dock_fgcolor));
+  XSetFont(dock->display, dock->NormalGC, dock->fixed_font->fid);
+  XSetClipRectangles(dock->display, dock->NormalGC, 0, 0, &xr, 1, Unsorted); /* faut pas que �a bave sur les bord :) */
+  if (dock->flag_survol_trollo) {
+    unsigned char minimsg[10];
+    int tscore = (int)(dock->trib_trollo_score*3);
+    if (tscore < 1000) {
+      snprintf(minimsg, 10, "troll:%3d", tscore);
+    } else {
+      snprintf(minimsg, 10, "trl:%5d", tscore);
+    }
+    cx = x + (56-strlen(minimsg)*DOCK_FIXED_FONT_W)/2; /* super centrage..*/
+    XDrawString(dock->display, dock->coinpix, dock->NormalGC, cx, y+dock->fixed_font->ascent+1, minimsg, strlen(minimsg));
+
+  } 
+  else if (id_type_is_invalid(dock->view_id_in_newstitles)) {
+    time_t t=time(NULL);
+    struct tm *tm = localtime(&t);
+    char s[20];
+    snprintf(s,20, "%02d:%02d:%02d", tm->tm_hour, tm->tm_min, tm->tm_sec);
+    XDrawString(dock->display, dock->coinpix, dock->NormalGC, x + (56-strlen(s)*DOCK_FIXED_FONT_W)/2, 
+                y+dock->fixed_font->ascent+1, s, strlen(s));
+#if 0
+    int  cnt, dec;
+    dec = dock->newstitles_char_dec;
+    cx = x - dec;
+    cnt = dock->newstitles_pos;
+    /* if (msg[cnt] == 0) return; */
+    do {
+      XDrawString(dock->display, dock->coinpix, dock->NormalGC, cx, y+dock->fixed_font->ascent+1, &msg[cnt], 1);
+      cx += 6;
+      cnt++; if (msg[cnt] == 0) cnt = 0;
+      dec = 0;
+    } while (cx < x+w);
+#endif
+  } 
+  else {
+    unsigned char minimsg[10];
+    minimsg[0] = 0;
+    if (dock->view_id_timer_cnt % 40 > 15) {
+      snprintf(minimsg, 10, "id=%d", dock->view_id_in_newstitles.lid); 
+    } else if (dock->tl_item_survol) {
+      board_msg_info *mi;
+      mi = boards_find_id(dock->sites->boards, dock->tl_item_survol->id);
+      if (mi) {
+	struct tm *t;
+
+	/* remarque c'est plus rentrant (depuis la v2.3.5) mais on s'en bat les ouilles
+	   puisque coincoin n'est pas multithread� */
+	t = localtime(&mi->timestamp);
+	/* snprintf(minimsg, 10, "%02d:%02d", (int)((mi->timestamp/3600)%24), (int)((mi->timestamp/60)%60)); */
+	snprintf(minimsg, 10, "%02d:%02d:%02d", t->tm_hour, t->tm_min, t->tm_sec);
+      } else {
+	strcpy(minimsg, "??:?? BUG");
+      }
+    }
+    if (strlen(minimsg)) {
+      cx = x + (56-strlen(minimsg)*DOCK_FIXED_FONT_W)/2; /* super centrage..*/
+      
+      XDrawString(dock->display, dock->coinpix, dock->NormalGC, cx, y+dock->fixed_font->ascent+1, minimsg, strlen(minimsg));
+    }
+  }
+  XSetClipMask(dock->display, dock->NormalGC, None);
+}
+
+static void
+textout_msginfo(Dock *dock, int x, int y)
+{
+  int cx, cnt;
+  char c;
+  XRectangle xr;
+
+  if (strlen(dock->msginfo)==0) return;
+
+  xr.x = x; xr.y = y; xr.width = 56; xr.height = 11;
+  XSetFont(dock->display, dock->NormalGC, dock->fixed_font->fid);
+  XSetForeground(dock->display, dock->NormalGC, IRGB2PIXEL(Prefs.dock_fgcolor));
+  XSetClipRectangles(dock->display, dock->NormalGC, 0, 0, &xr, 1, Unsorted); /* faut pas que �a bave sur les bord :) */
+
+  if (dock->msginfo_defil) {
+    int dec;
+    dec = (dock->msginfo_defil - 1) % 6;
+    cx = x - dec;
+    cnt = (dock->msginfo_defil - 1) / 6;
+    do {
+      cnt = cnt % (strlen(dock->msginfo) + 3);
+      
+      if (cnt < (int)strlen(dock->msginfo)) c = dock->msginfo[cnt]; else c = '.';
+
+      XDrawString(dock->display, dock->coinpix, dock->NormalGC, cx, y+dock->fixed_font->ascent+1, &c, 1);
+
+      /*       XCopyArea(dock->display, pixmap_letters, dock->coinpix, dock->and_GC, char2bitmap[c]+dec,0,MIN(cx+6, x+56)-MAX(cx,x),12,MAX(cx,x),y); */
+      cx += DOCK_FIXED_FONT_W;
+      cnt++;
+      dec = 0;
+    } while (cx < x+56);
+  } else {
+    cx = x + MAX((56 - (int)strlen(dock->msginfo)*6)/2, 0);
+    assert(cx < 200);
+    cnt = 0;
+    do {
+      if (cnt < (int)strlen(dock->msginfo)) c = dock->msginfo[cnt]; else c = ' ';
+
+      XDrawString(dock->display, dock->coinpix, dock->NormalGC, cx, y+dock->fixed_font->ascent+1, &c, 1);
+    
+      /* XCopyArea(dock->display, pixmap_letters, dock->coinpix, dock->and_GC, char2bitmap[c],0,MIN(cx+6, x+56)-MAX(cx,x),12,MAX(cx,x),y); */
+      cx += DOCK_FIXED_FONT_W;
+      cnt++;
+    } while (cx < x+56);
+  }
+  XSetClipMask(dock->display, dock->NormalGC, None);
+}
+
+
+/* mise � jour du titre d�filant de l'applet selon l'arrivage de news */
+#if 0
+void
+dock_checkout_newstitles(Dock *dock)
+{
+  SiteList *sites = dock->sites;
+  if (flag_updating_news == 0) {
+    int news_updated = 0;
+    Site *s;
+    /* recherche les sites qui ont maj leurs news */
+    for (s = sites->list; s; s = s->next) {
+      if (s->prefs->check_news && s->news_updated) {
+	s->news_updated = 0; news_updated = 1;
+      }
+    }
+
+    if (news_updated) {
+      News *n;
+      int pos, pos0;
+
+      if ((n=sl_get_nth_unreaded_news(sites, 1))==NULL) {
+	int i;
+	sprintf(dock->newstitles, _("..NO NEWS"));
+	for (i=0; i < MAX_NEWSTITLES_LEN; i++) {
+	  dock->newstitles_id[i]= id_type_invalid_id();
+	}
+	dock->newstitles_pos = 0; 
+	dock->newstitles_char_dec = 4;
+      } else {
+	int cnt = 2;
+	pos = 0; 
+	dock->newstitles[0] = 0;      
+	while (n) {
+	  int i;
+	  static char *separ = " ... ";
+	  pos0 = pos;
+	  for (i=0; i < (int)strlen(n->titre); i++) {
+	    if (pos >= MAX_NEWSTITLES_LEN-1) break;
+	    dock->newstitles[pos] = n->titre[i];
+	    pos++;
+	  }
+	  for (i=0; i < (int)strlen(separ); i++) {
+	    if (pos >= MAX_NEWSTITLES_LEN-1) break;
+	    dock->newstitles[pos] = separ[i];
+	    pos++;
+	  }
+	  dock->newstitles[pos] = 0;
+	  
+	  for (i=pos0; i <= pos; i++) {
+	    dock->newstitles_id[i] = n->id;
+	  }
+	  n = sl_get_nth_unreaded_news(sites, cnt); cnt++;
+	}
+	dock->newstitles_pos = 0; 
+	dock->newstitles_char_dec = 0;
+      }
+    }
+  }
+}
+#endif
+static void
+led_create(Led *l, int x, int y)
+{
+  assert(l);
+  l->xpos = x;
+  l->ypos = y;
+  l->coul[0] = OFF; l->coul[1] = OFF; l->coul[2] = OFF;
+  l->delay[0] = 12; l->delay[1] = 1; l->delay[2] = 10;
+  l->cnt = 0;
+  l->colcnt = 0;
+}
+
+static void
+led_update(Led *l)
+{
+  l->cnt++;
+  if (l->cnt <= l->delay[0]) {
+    l->colcnt = 0;
+  } else if (l->cnt <= l->delay[0]+l->delay[1]) {
+    l->colcnt = 1;
+  } else if (l->cnt <= l->delay[0]+l->delay[1]+l->delay[2]) {
+    l->colcnt = 2;
+  } else if (l->cnt <= l->delay[0]+l->delay[1]*2+l->delay[2]) {
+    l->colcnt = 1;
+  } else {
+    l->cnt = l->cnt % ( l->delay[0]+l->delay[1]+l->delay[2]);
+    l->colcnt = 0;
+  }
+}
+
+
+static void 
+led_color(Led *l, LedColor c1, LedColor c2, LedColor c3)
+{
+  l->coul[0] = c1; l->coul[1] = c2; l->coul[2] = c3;
+}
+
+void
+dock_leds_create(Dock *dock, Leds *leds)
+{
+  assert(leds);
+
+  leds->pixmap = pixmap_create_from_raw(dock->rgba_context, leds_image.width, leds_image.height, leds_image.bytes_per_pixel, leds_image.pixel_data);
+  leds->mask = alpha2pixmap_mask(dock->display, dock->coinpix, leds_image.width, leds_image.height, leds_image.pixel_data, 255);
+  led_create(&leds->led[0], 2, 16);  leds->led[0].cnt = 5;  leds->led[0].delay[0] = 12;
+  led_create(&leds->led[1], 13, 16); leds->led[1].cnt = 10; leds->led[1].delay[0] =  4; leds->led[1].delay[1] =  2; leds->led[1].delay[2] =  2;
+  led_create(&leds->led[2], 24, 16); leds->led[2].cnt = 15; leds->led[2].delay[0] = 15;
+  led_create(&leds->led[3], 35, 16); leds->led[3].cnt = 20; leds->led[3].delay[0] =  5;
+  led_create(&leds->led[4], 50, 18); leds->led[4].cnt = 0;  leds->led[4].delay[0] = 20;
+  leds->led[4].coul[0] = OFF   ;
+  leds->led[4].coul[1] = BIGREDLIGHT;
+  leds->led[4].coul[2] = BIGRED;
+}
+
+/* decremente les compteurs de clignotement */
+void 
+dock_leds_update(Leds *l)
+{
+  int i;
+  for (i=0; i < 5; i++)
+    led_update(&l->led[i]);
+}
+
+static void
+dock_leds_draw(Dock *dock, Leds *l, int state_step)
+{
+  int i,x;
+  assert(l);
+  for (i=0; i < 4; i++) {
+    if (l->led[i].coul[l->led[i].colcnt] != OFF)
+      XCopyArea(dock->display, l->pixmap, dock->coinpix, dock->NormalGC, 
+		(l->led[i].coul[l->led[i].colcnt]-1)*9, 0, 9, 4, 
+		l->led[i].xpos, l->led[i].ypos - MIN(state_step,13));
+  }
+
+  i = 4;
+  if (l->led[i].coul[l->led[i].colcnt] == OFF) x = 63;
+  else if (l->led[i].coul[l->led[i].colcnt] == BIGREDLIGHT) x = 74;
+  else x = 85;
+
+  if (x == 85) {
+    XCopyArea(dock->display, l->pixmap, dock->coinpix, dock->NormalGC, 
+	      x, 2, 11, 3, l->led[i].xpos, l->led[i].ypos + MIN(state_step,38)+2);
+    XCopyArea(dock->display, l->pixmap, dock->coinpix, dock->NormalGC, 
+	      x+1, 1, 10, 1, l->led[i].xpos+1, l->led[i].ypos + MIN(state_step,38)+1);
+    XCopyArea(dock->display, l->pixmap, dock->coinpix, dock->NormalGC, 
+	      x+2, 0, 9, 1, l->led[i].xpos+2, l->led[i].ypos + MIN(state_step,38));
+  } else {
+    XCopyArea(dock->display, l->pixmap, dock->coinpix, dock->NormalGC, 
+	      x+2, 1, 8, 1, l->led[i].xpos+2, 1+l->led[i].ypos + MIN(state_step,38));
+    XCopyArea(dock->display, l->pixmap, dock->coinpix, dock->NormalGC, 
+	      x+1, 2, 9, 2, l->led[i].xpos+1, 2+l->led[i].ypos + MIN(state_step,38));
+  }
+}
+
+/* 
+   �a c'est de la bonne vieille fonction qui date un peu
+   j'avais meme pas pris la peine de lui donner un nom un peu significatif 
+   
+   c'est elle qui init les donn�es pour le message defilant en bas du coincoin,
+   ou bien l'affiche de l'heure du dernier message
+*/
+static void
+refresh_msginfo(Dock *dock)
+{
+  if (dock->tl_item_survol) {
+    if (dock->tl_item_clicked) {
+      board_msg_info *mi;
+
+      if (flag_updating_board == 0) {
+      
+	Site *site = sl_find_site_id(dock->sites, dock->tl_item_survol->id.sid);
+	strcpy(dock->msginfo, "bug?");
+	if (site) {
+	  assert(site->board);
+	  mi = board_find_id(site->board, dock->tl_item_survol->id.lid);
+	  if (mi) {
+	    snprintf(dock->msginfo, MAX_MSGINFO_LEN, "   [%s] %s",
+		     site->prefs->site_name, mi->useragent);
+	    dock->msginfo[MAX_MSGINFO_LEN-1]=0;
+	  }
+	}
+      } else strcpy(dock->msginfo, "plz wait");
+    } else {
+      if (flag_updating_board == 0) {
+	board_msg_info *mi = boards_find_id(dock->sites->boards, dock->tl_item_survol->id);
+	if (mi) {
+	  strncpy(dock->msginfo, mi->miniua.name, MAX_MSGINFO_LEN);
+	  dock->msginfo[MAX_MSGINFO_LEN-1]=0;
+	}
+      } else strcpy(dock->msginfo, "plz wait");
+    }
+  } else {
+    if (dock->flag_survol_trollo) {
+      sprintf(dock->msginfo, "level:%3d", (int)(dock->trib_trollo_rate*3));
+    } else if (dock->flag_survol_led1) {
+      sprintf(dock->msginfo, "vit.def:%d",dock->trolloscope_speed);
+    } else if (flag_updating_board == 0) {
+      int nbsec_since_last_msg = 1000000;
+      board_msg_info *mi = dock->sites->boards->last;
+      if (mi) {
+	SitePrefs *sp = Prefs.site[id_type_sid(mi->id)];
+	Board *b = dock->sites->boards->btab[id_type_sid(mi->id)];
+	assert(sp);
+	assert(b);
+	nbsec_since_last_msg = time(NULL) - (mi->timestamp + b->time_shift);
+	if (nbsec_since_last_msg < 600) {
+          if (nbsec_since_last_msg < 100) {
+            sprintf(dock->msginfo, "%.6s+%02d%s", sp->site_name,
+                    nbsec_since_last_msg, strlen(sp->site_name) <= 5 ? "s" : "");
+          } else {
+            sprintf(dock->msginfo, "%.6s+%02d%s", sp->site_name,
+                    nbsec_since_last_msg, strlen(sp->site_name) <= 4 ? "s" : "");
+          }
+	} else {
+	  if ((nbsec_since_last_msg % 42) == 0) {
+	    sprintf(dock->msginfo, "GNU/HOLE!!");
+	  } else {
+            if (nbsec_since_last_msg/60 < 100) {
+              sprintf(dock->msginfo, "%.6s+%dm", sp->site_name,
+                      nbsec_since_last_msg/60);
+            } else
+              sprintf(dock->msginfo, "%.5s+%dm", sp->site_name,
+                      nbsec_since_last_msg/60);
+	  }
+	}
+      } else sprintf(dock->msginfo, "  ...  ");
+    }  else {
+      /* strcpy(dock->msginfo, "updating"); */
+    }
+  }
+}
+
+/* redessine l'applet (en mode normal, cad pas en mode horloge) */
+void
+dock_refresh_normal(Dock *dock)
+{
+  if ((Prefs.debug & 4) && ((wmcc_tic_cnt % 25) != 0 )) return;
+
+  refresh_msginfo(dock);
+  switch (dock->door_state) {
+  case OPENED:
+  case CLOSING:
+  case OPENING:
+    {
+      /* l'image de fond */
+      XCopyArea(dock->display, dock->coinpix, dock->coinpix, dock->NormalGC, 64, 0, 64, 64, 0, 0);
+      /* le bouton */
+      XCopyArea(dock->display, dock->coinpix, dock->coinpix, dock->or_GC, 
+		128+(dock->red_button_press_state%3)*32, (dock->red_button_press_state/3)*31, 31, 30, 16, 16);
+
+
+      XSetClipMask(dock->display, dock->NormalGC, dock->mask_porte_haut);
+      XSetClipOrigin(dock->display, dock->NormalGC, 0, -MIN(dock->door_state_step,13));
+      XCopyArea(dock->display, dock->pix_porte, dock->coinpix, dock->NormalGC, 
+		0, MIN(dock->door_state_step,13), 64, 64, 0, 0);
+
+
+      XSetClipMask(dock->display, dock->NormalGC, None);
+      refresh_docktxt_bottom(dock, 3, 3-dock->door_state_step, 57);
+
+
+
+      XSetClipMask(dock->display, dock->NormalGC, dock->mask_porte_bas);
+      XSetClipOrigin(dock->display, dock->NormalGC, 0, dock->door_state_step);
+      XCopyArea(dock->display, dock->pix_porte, dock->coinpix, dock->NormalGC, 
+		0, 0, 64, 64-dock->door_state_step, 0, dock->door_state_step);
+      XSetClipMask(dock->display, dock->NormalGC, None);
+
+      if (dock->door_state_step < TROLLOSCOPE_HEIGHT) {
+	XCopyArea(dock->display, dock->pix_trolloscope, dock->coinpix, dock->NormalGC, 
+		  0, 0, TROLLOSCOPE_WIDTH, TROLLOSCOPE_HEIGHT-dock->door_state_step, TROLLOSCOPE_X, TROLLOSCOPE_Y+dock->door_state_step);
+      }
+
+      XCopyArea(dock->display, dock->pix_porte, dock->coinpix, dock->NormalGC, 
+		0, 47, 64, 64-47+1, 0, 47+MAX(0,dock->door_state_step - TROLLOSCOPE_HEIGHT + 5));
+
+      textout_msginfo(dock, 4, 49+MAX(0,dock->door_state_step - TROLLOSCOPE_HEIGHT + 5));
+      
+      dock_leds_draw(dock, &dock->leds, dock->door_state_step);
+
+    } break;
+  case CLOSED:
+    {
+      XCopyArea(dock->display, dock->pix_porte, dock->coinpix, dock->NormalGC, 0, 0, 64, 64, 0, 0);
+      refresh_docktxt_bottom(dock, 3, 3, 57);
+
+      textout_msginfo(dock, 4, 49+MAX(0,dock->door_state_step - TROLLOSCOPE_HEIGHT + 5));
+
+      XCopyArea(dock->display, dock->pix_trolloscope, dock->coinpix, dock->NormalGC, 0, 0, 
+		TROLLOSCOPE_WIDTH, TROLLOSCOPE_HEIGHT, TROLLOSCOPE_X, TROLLOSCOPE_Y);
+
+      dock_leds_draw(dock, &dock->leds, dock->door_state_step);
+
+
+
+    } break;
+  default:
+    {
+      fprintf(stderr, _("coin ?.... COIN ?? couic !\n")); assert(0);
+    }
+  }
+}
+
+/* redessine l'applet en mode horloge */
+void
+dock_refresh_horloge_mode(Dock *dock)
+{
+  struct tm *tm;
+  time_t tnow;
+
+  XCopyArea(dock->display, dock->clockpix, dock->coinpix, dock->NormalGC,
+	    0,0, 64, 64, 0,0);
+
+  tnow = time(NULL);
+  /*
+  if (dock->dlfp->tribune.last_post_id > 0) {
+    time_t decal, ttribune;
+
+    decal = difftime(tnow, dock->dlfp->tribune.local_time_last_check);
+    ttribune = dock->dlfp->tribune.last_post_timestamp + decal + dock->dlfp->tribune.nbsec_since_last_msg;
+    tm = localtime(&ttribune);
+    } else {*/
+  tm = localtime(&tnow);
+    /*}*/
+  
+  XCopyArea(dock->display, dock->led, dock->coinpix, dock->NormalGC, 9 * (tm->tm_hour / 10), 0, 9, 11, 9, 6); 
+  XCopyArea(dock->display, dock->led, dock->coinpix, dock->NormalGC, 9 * (tm->tm_hour % 10), 0, 9, 11, 18, 6); 
+  if (tm->tm_sec % 2) {
+    XCopyArea(dock->display, dock->led, dock->coinpix, dock->NormalGC, 90, 0, 5, 11, 27, 6); 
+  }
+  XCopyArea(dock->display, dock->led, dock->coinpix, dock->NormalGC, 9 * (tm->tm_min / 10), 0, 9, 11, 32, 6); 
+  XCopyArea(dock->display, dock->led, dock->coinpix, dock->NormalGC, 9 * (tm->tm_min % 10), 0, 9, 11, 41, 6); 
+  XCopyArea(dock->display, dock->month, dock->coinpix, dock->NormalGC, 0, 6 * tm->tm_mon, 22, 6, 18, 48);
+  XCopyArea(dock->display, dock->weekday, dock->coinpix, dock->NormalGC, 0, 6 * ((tm->tm_wday +6) % 7), 20, 6, 21, 24);
+  if (tm->tm_mday > 9) {
+    XCopyArea(dock->display, dock->date, dock->coinpix, dock->NormalGC, 9 * (tm->tm_mday / 10), 0, 9, 13, 22, 33);
+    XCopyArea(dock->display, dock->date, dock->coinpix, dock->NormalGC, 9 * (tm->tm_mday % 10), 0, 9, 13, 31, 33);
+  } else {
+    XCopyArea(dock->display, dock->date, dock->coinpix, dock->NormalGC, 9 * tm->tm_mday, 0, 9, 13, 26, 33);
+  }
+}
+
+void
+dock_refresh_other_win(Dock *dock)
+{
+  Window win;
+  win =  (DOCK_WIN(dock) == dock->iconwin) ? dock->win : dock->iconwin;
+  if (win == None) return;
+  if (((unsigned)wmcc_tic_cnt % 30)<15) {
+    XSetForeground(dock->display, dock->NormalGC, WhitePixel(dock->display, dock->screennum));
+    XFillRectangle(dock->display, win, dock->NormalGC, 0, 0, 64, 64);
+  } else {
+    char *s = (win == dock->iconwin) ? "disable" : "enable";
+    XSetForeground(dock->display, dock->NormalGC, BlackPixel(dock->display, dock->screennum));
+    XDrawString(dock->display, win, dock->NormalGC, 5, 10, s, strlen(s));
+    s = "iconwin";
+    XDrawString(dock->display, win, dock->NormalGC, 5, 25, s, strlen(s));
+    s = "option";
+    XDrawString(dock->display, win, dock->NormalGC, 9, 40, s, strlen(s));
+  }
+}
+
+/* active/desactive le clignotement (et la couleur) des leds */
+void
+dock_leds_set_state(Dock *dock)
+{
+  int trollo_hrate;
+
+  if (flag_gethostbyname) {
+    led_color(&dock->leds.led[0], GREEN,GREEN,GREEN);
+  } else if (flag_troll_braining) {
+    led_color(&dock->leds.led[0], VIOLET, VIOLET, VIOLET);
+  } else if (flag_http_transfert) {
+    led_color(&dock->leds.led[0], BLUE, BLUE, BLUE);
+  } else if (flag_http_error) {
+    led_color(&dock->leds.led[0], OFF, OFF, RED);
+  } else if (ccqueue_state() == Q_NEWSLST_UPDATE || 
+	     ccqueue_state() == Q_BOARD_UPDATE) {
+    led_color(&dock->leds.led[0], CYAN, CYAN, CYAN);
+  } else {
+    led_color(&dock->leds.led[0], OFF, OFF, OFF);
+  }
+
+  if (ccqueue_state() == Q_BOARD_POST) {
+    led_color(&dock->leds.led[1], YELLOW, YELLOW, YELLOW);
+  } else if (ccqueue_find(Q_BOARD_POST,-1)) {
+    led_color(&dock->leds.led[1], OFF, YELLOW, YELLOW);    
+  } else if (dock->coin_coin_sent_decnt > 0) {
+    led_color(&dock->leds.led[1], GREEN, GREEN, GREEN);
+  } else {
+    led_color(&dock->leds.led[1], OFF, OFF, OFF);
+  }
+
+  /*if (sl_get_nth_unreaded_news(dock->sites, 1)) {
+    led_color(&dock->leds.led[2], OFF, GREENLIGHT, GREEN);
+    } else*/
+  led_color(&dock->leds.led[2], OFF, OFF, OFF);
+
+  led_color(&dock->leds.led[3], OFF, OFF, OFF);
+
+  /* rapidite du clignotement du trollometre */
+  trollo_hrate = ((int)(dock->trib_trollo_rate*60));
+  if (trollo_hrate < 10) {
+    /* moins de 10 message / heure -> trollo OFF */
+    if (dock->leds.led[4].delay[2] != 0) {
+      BLAHBLAH(1, myprintf(_("%<YEL Troll-o-meter -> going to level> %<GRN 0.00> (max=1.) !!!\n")));
+      BLAHBLAH(1, myprintf("%<YEL> trollo_hrate = %d\n", trollo_hrate));
+    }
+    dock->leds.led[4].delay[1] = 0;
+    dock->leds.led[4].delay[2] = 0;
+  } else {
+    /* moins de 3msg/5min */
+    if (trollo_hrate < 36) {
+      dock->leds.led[4].delay[0] = 65;
+      dock->leds.led[4].delay[1] = 1;
+      dock->leds.led[4].delay[2] = 1;
+      /*1 msg/min */
+    } else if (trollo_hrate < 60) {
+      dock->leds.led[4].delay[0] = 30;
+      dock->leds.led[4].delay[1] = 1;
+      dock->leds.led[4].delay[2] = 1;
+      /*2 msg/min */
+    } else if (trollo_hrate < 120) {
+      dock->leds.led[4].delay[0] = 16;
+      dock->leds.led[4].delay[1] = 2;
+      dock->leds.led[4].delay[2] = 2;
+      /*3 msg/min */
+    } else if (trollo_hrate < 180) {
+      dock->leds.led[4].delay[0] = 8;
+      dock->leds.led[4].delay[1] = 2;
+      dock->leds.led[4].delay[2] = 2;
+      /*+ de 3 msg/min */
+    } else if (trollo_hrate < 60) {
+      dock->leds.led[4].delay[0] = 2;
+      dock->leds.led[4].delay[1] = 2;
+      dock->leds.led[4].delay[2] = 2;
+    }
+  }
+}
+
+
+/* met le curseur en forme de croix que il survole le trolloscope */
+static void
+check_cursor_shape(Dock *dock, int x, int y)
+{
+  if (x >= TROLLOSCOPE_X && x < TROLLOSCOPE_X+TROLLOSCOPE_WIDTH &&
+      y >= TROLLOSCOPE_Y && y < TROLLOSCOPE_Y+TROLLOSCOPE_HEIGHT) {
+    if (dock->flag_trib_load_cursor == 0) {
+      XDefineCursor(dock->display, DOCK_WIN(dock), dock->trib_load_cursor);
+      XSync(dock->display, False);
+      dock->flag_trib_load_cursor = 1;
+    }
+  } else if (dock->flag_trib_load_cursor == 1) {
+    XUndefineCursor(dock->display, DOCK_WIN(dock));
+    XSync(dock->display, False);
+    dock->flag_trib_load_cursor = 0;
+  }
+}
+
+static void
+dock_handle_motion_notify(Dock *dock, int x, int y)
+{
+  id_type oldid;
+
+  if (dock->tl_item_survol) {
+    oldid = dock->tl_item_survol->id;
+  } else oldid = id_type_invalid_id();
+  
+  dock->tl_item_survol = NULL;
+  check_cursor_shape(dock, x,y);
+  if (dock->door_state == CLOSED) {
+    /* 
+       survol de la trolloscope ? 
+    */
+    if (x >= TROLLOSCOPE_X && x < TROLLOSCOPE_X+TROLLOSCOPE_WIDTH &&
+	y >= TROLLOSCOPE_Y && y < TROLLOSCOPE_Y+TROLLOSCOPE_HEIGHT) {
+      int i,j;
+      
+      
+      j = (TROLLOSCOPE_WIDTH + TROLLOSCOPE_X - 1 - x) / dock->trolloscope_resolution;
+      i = (TROLLOSCOPE_HEIGHT + TROLLOSCOPE_Y - 1 - y) / dock->trolloscope_resolution;
+      
+      if (!id_type_is_invalid(dock->trolloscope[i][j].id)) {
+	dock->tl_item_survol = &dock->trolloscope[i][j];
+	if (!id_type_eq(dock->trolloscope[i][j].id,oldid)) {
+	  dock->tl_item_clicked = 0;
+	  dock->msginfo_defil = 0;
+	}
+	dock->view_id_in_newstitles = dock->tl_item_survol->id;
+	dock->view_id_timer_cnt = 0;
+	/* myprintf("i = %d, j=%d, id = %d, nom = %s\n", i,j, dock->trolloscope[i][j].id,dock->trolloscope[i][j].miniua.name); */
+      } else {
+	dock->tl_item_clicked = 0;
+	dock->msginfo_defil = 0;
+	dock->view_id_in_newstitles = id_type_invalid_id();
+      }
+    } else {
+      dock->tl_item_clicked = 0;
+      dock->msginfo_defil = 0;
+      dock->view_id_in_newstitles = id_type_invalid_id();
+    }
+    if (IS_INSIDE(x,y,50,18,60,22)) {
+      /* survol du trollometre */
+      dock->flag_survol_trollo = 1;
+    } else {
+      dock->flag_survol_trollo = 0;
+    }
+    if (IS_INSIDE(x,y,dock->leds.led[1].xpos,dock->leds.led[1].ypos - MIN(dock->door_state_step,13),
+		  dock->leds.led[1].xpos+8, dock->leds.led[1].ypos +3 - MIN(dock->door_state_step,13))) {
+      /* survol de la led 1 */
+      dock->flag_survol_led1 = 1;
+    } else {
+      dock->flag_survol_led1 = 0;
+    }
+  }
+}
+
+/* renvoie 1 si le bouton rouge a ete suffisament enfonce */
+int
+dock_red_button_check(Dock *dock) {
+  int kikoo = 0;
+  if (dock->red_button_press_flag) {
+    /* si on a appuye assez fort ... */
+    if (dock->red_button_press_state == 5) {
+      Site *s;
+      BLAHBLAH(1,printf(_("Coin !\n")));
+
+      if (dock->coin_coin_site_id == -1) {
+	msgbox_show(dock, _("<b>Please</b> fill your options file with a valid site equiped with a board..."));
+      } else {
+	s = sl_find_site_id(dock->sites, dock->coin_coin_site_id);
+	if (s && s->board) {
+          if (board_can_post_messages(s->board)) {
+            ccqueue_push_board_post(s->site_id,  
+                                    s->board->coin_coin_useragent, 
+                                    dock->coin_coin_message);
+          } else msgbox_show(dock, _("This board is read-only"));
+        } else {
+	  myprintf("arg, you tried to send a message to a destroyed site (yes, this is a bug)\n");
+	}
+        pp_unset_kbnav(dock);
+        //	  ccqueue_print();
+        kikoo = 1;
+        dock->red_button_send_cnt = 0;
+      }
+    }
+    
+    dock->red_button_press_flag = -1;
+  }
+  return kikoo;
+}
+
+/* statistique � la noix */
+
+void
+dock_show_tribune_frequentation(Dock *dock)
+{
+  /*
+  char s[2048], s_xp[512], sv_xp[10], sv_xp_old[50];
+  int ua_cnt1, ua_cnt2, ua_cnt3, ua_cnt4;
+  int msg_cnt1, msg_cnt2, msg_cnt3, msg_cnt4;
+  int my_msg_cnt1, my_msg_cnt2, my_msg_cnt3, my_msg_cnt4;
+  
+  tribune_frequentation(&dock->dlfp->tribune, 10, &ua_cnt1, &msg_cnt1, &my_msg_cnt1);
+  tribune_frequentation(&dock->dlfp->tribune, 30, &ua_cnt2, &msg_cnt2, &my_msg_cnt2);
+  tribune_frequentation(&dock->dlfp->tribune, 120, &ua_cnt3, &msg_cnt3, &my_msg_cnt3);
+  tribune_frequentation(&dock->dlfp->tribune, 8*60, &ua_cnt4, &msg_cnt4, &my_msg_cnt4);
+
+  if (Prefs.user_cookie) {
+    if (dock->dlfp->xp > -1000) {
+      snprintf(sv_xp,10,"%d", dock->dlfp->xp);
+    } else snprintf(sv_xp, 10, "???");
+    if (dock->dlfp->xp_old > -1000) {
+      snprintf(sv_xp_old,50,_("(previous value: %d)"),dock->dlfp->xp_old);
+    } else sv_xp_old[0] = 0;
+
+    snprintf(s_xp, 512, _("You have <b><font color=blue>%s</font></b>"
+	     " XP %s  [votes:%d/%d]<br><br>"), 
+	     sv_xp, sv_xp_old, dock->dlfp->votes_cur, dock->dlfp->votes_max);
+  } else {
+    s_xp[0] = 0;
+  }
+  
+  snprintf(s, 2048, 
+	   _("You are using wmc� v.<font color=blue>%s</font> [ built on %s ]<p>"
+	   "%s"
+	   "<p align=center><b>People on the board</b><br>"
+	   "<i>(estimation based on the useragents and logins)</i></p><br>"
+	   "since:<br>"
+	   ".<tab><i>10 minutes</i>: <tab><font color=blue>%d</font><tab> people have posted <tab><font color=blue>%d</font> messages (you:%d)<br>"
+	   ".<tab><i>30 minutes</i>: <tab><font color=blue>%d</font><tab> people have posted <tab><font color=blue>%d</font> messages (you:%d)<br>"
+	   ".<tab><i> 2 hours </i>: <tab><tab><font color=blue>%d</font><tab> people have posted <tab><font color=blue>%d</font> messages (you:%d)<br>"
+	   ".<tab><i> 8 hours </i>: <tab><tab><font color=blue>%d</font><tab> people have posted <tab><font color=blue>%d</font> messages (you:%d)<br>"), VERSION, __DATE__,
+	   s_xp, ua_cnt1, msg_cnt1, my_msg_cnt1, 
+	   ua_cnt2, msg_cnt2, my_msg_cnt2, 
+	   ua_cnt3, msg_cnt3, my_msg_cnt3,
+	   ua_cnt4, msg_cnt4, my_msg_cnt4);
+
+  */
+  msgbox_show(dock, "desactive");
+}
+
+float http_stats_site_quality(Site *site) {
+  float q = 0.0;
+  int total = site->http_success_cnt + site->http_error_cnt+ site->http_recent_error_cnt*4;;
+  if (site->http_success_cnt) {
+    q = 1.-(site->http_error_cnt + site->http_recent_error_cnt*4)/(float)total;
+    q = q * (site->http_ping_stat<=0. ? 1. :
+             exp(-MAX(site->http_ping_stat/3,0.02))/exp(-0.02));
+  }
+  return q;
+}
+
+void
+show_http_stats(Dock *dock) {
+  char *err_msg;
+  Site *site;
+  err_msg = http_complete_error_info();
+  err_msg = str_cat_printf(err_msg, "<br><br><b>statistiques g�n�rales sur les d/l:</b><br> (qualit�, erreurs, err. r�centes, succ�s, temps de r�ponse)");
+  for (site = dock->sites->list; site; site = site->next) {
+    float q = http_stats_site_quality(site);
+    if (site->http_success_cnt + site->http_error_cnt) {
+      err_msg = str_cat_printf(err_msg, "<br><tab>%s<font color=%s>%.10s</font>%s <tab6><b>%.2f</b><tab3> %d<tab3> %d<tab3> %d<tab3> %4.0fms.",
+			       q < .2 ? "<b>" : "",
+			       q > .5 ? "#000080" : "#e00000",
+			       site->prefs->site_name, 
+			       q < .2 ? "</b>" : "",
+			       q*10, site->http_error_cnt,
+			       site->http_recent_error_cnt, 
+			       site->http_success_cnt,
+			       site->http_ping_stat*1000);
+    } else  err_msg = str_cat_printf(err_msg, "<br><tab>%.10s :<tab7>aucun d/l", site->prefs->site_name);
+  }
+  msgbox_show(dock, err_msg);
+  free(err_msg);
+}
+
+/* (c)(tm)(r) kadreg qui n'aime pas le jaune (pourtant moi j'aime bien le jaune) */
+char *
+dock_build_pixmap_porte(Dock *dock)
+{
+  Pixmap bg_pixmap;
+  char *err = NULL;
+  /* debut modif kadreg */
+  /* chargement de pix_porte suivant si pixmap de fond */
+
+  dock->pix_porte = None;
+  
+  /* pour eviter d'avoir un look trop bizarre */
+  if (Prefs.auto_swallow) { 
+    Prefs.dock_bgcolor = Prefs.pp_buttonbar_bgcolor.opaque;
+    if (Prefs.dock_bgpixmap) { free(Prefs.dock_bgpixmap); Prefs.dock_bgpixmap = NULL; }
+  }
+
+  if (Prefs.dock_bgpixmap) {
+    int w, h;
+    bg_pixmap = RGBACreatePixmapFromXpmFile(dock->rgba_context, Prefs.dock_bgpixmap, &w, &h);
+    if ((bg_pixmap == None) || (w != 64) || (h != 64)) {
+      err= str_printf(_("Error while loading file : '%s' [64x64 pixels XPM, please]"), Prefs.dock_bgpixmap);
+      free(Prefs.dock_bgpixmap); Prefs.dock_bgpixmap = NULL;
+    } else {
+      RGBAImage *rgba_porte;
+      XImage *XiPixPixmap;
+      int i, j;
+
+      rgba_porte = rimage_create_from_raw(porte_image.width, porte_image.height,
+					  porte_image.bytes_per_pixel,porte_image.pixel_data);
+
+      XiPixPixmap= XGetImage (dock->display, 
+			      bg_pixmap, 
+			      0, 0, 64, 64, AllPlanes, ZPixmap);
+      XFreePixmap(dock->display, bg_pixmap);
+
+      
+      for (i=0; i< (int)rgba_porte->w; i++) {
+	for (j=0; j< (int)rgba_porte->h; j++) {
+	  unsigned char r, g, b;
+	  unsigned long pixel;
+	  int shade;
+
+	  pixel = XGetPixel (XiPixPixmap, i, j);
+	  
+	  /* on ramene les composantes de 16bits � 8bits */
+	  r = PIXEL2R(dock->rgba_context, pixel);
+	  g = PIXEL2G(dock->rgba_context, pixel);
+	  b = PIXEL2B(dock->rgba_context, pixel);
+
+	  /* selon le niveau de gris de rgba_porte */
+	  shade = rgba_porte->data[j][i].rgba[0] - 0x7F; /* shade = 0 pour les couleurs non modifiees, ~92 pour les 
+							   bords clairs et  ~ -60 pour les bords sombres, voir xpms/porte.xcf */
+	  if (shade > 0) {
+	    r = MIN(r*1.3, 255.0);
+	    g = MIN(g*1.3, 255.0);
+	    b = MIN(b*1.3, 255.0);
+	  } else if (shade == -127) {
+	    r = g = b = 0;
+	  } else if (shade < 0) {
+	    r = MAX(r/1.3, 0.0); /* le MAX ne sert a rien, je sais */
+	    g = MAX(g/1.3, 0.0);
+	    b = MAX(b/1.3, 0.0);
+	  }
+	  rgba_porte->data[j][i].rgba[0] = r;
+	  rgba_porte->data[j][i].rgba[1] = g;
+	  rgba_porte->data[j][i].rgba[2] = b;
+	}
+      }
+
+      dock->pix_porte = RGBAImage2Pixmap(dock->rgba_context, rgba_porte);
+      RGBADestroyImage(rgba_porte);
+      XDestroyImage (XiPixPixmap);
+    }
+  }
+  /* pouille dans le cottage ? */
+  if (dock->pix_porte == None) {
+      /* et hop, on sauve les meubles */
+    dock->pix_porte = pixmap_create_from_raw_with_tint(dock->rgba_context, 
+						       porte_image.width, 
+						       porte_image.height, 
+						       porte_image.bytes_per_pixel, 
+						       porte_image.pixel_data, 
+						       Prefs.dock_bgcolor);
+    
+  }
+  /* bouh comme c vilain */
+  if (dock->mask_porte_haut == None) {
+    dock->mask_porte_haut = alpha2pixmap_mask(dock->display, dock->coinpix, 64, 64, porte_image.pixel_data, 255);
+    dock->mask_porte_bas = alpha2pixmap_mask(dock->display, dock->coinpix, 64, 64, porte_image.pixel_data, 230);
+  }
+  /* fin modif kadreg */
+
+  /* les trois couleurs du dock */
+  {
+    int r,g,b;
+    r = (Prefs.dock_bgcolor>>16)&0xff; g = (Prefs.dock_bgcolor>>8)&0xff; b = Prefs.dock_bgcolor &0xff;
+
+    /* ces valeurs ne sont pas utilisees pour le dock lui-meme, qui passe par l'intermediaire
+       de l'horrible rcreate_image_from_raw_with_tint et compagnie
+       mais pour l'editwin qui est nettement mieux ecrite ainsi que pour msgbox... */
+    dock->bg_pixel   = RGB2PIXEL(r,g,b);
+    dock->light_pixel = RGB2PIXEL(MIN(255, (r*170)/128), MIN(255,(g*170)/128), MIN(255,(b*170)/128));
+    dock->dark_pixel = RGB2PIXEL(MIN(255, (r*97)/128), MIN(255,(g*97)/128), MIN(255,(b*97)/128));
+    dock->bg_color = cccolor_get(Prefs.dock_bgcolor);
+    dock->light_color = cccolor_get_rgb((r*170)/128, (g*170)/128, (b*170)/128);
+    dock->dark_color = cccolor_get_rgb((r*97)/128, (g*97)/128, (b*97)/128);
+  }
+  dock->white_color = cccolor_get(0xffffff);
+  dock->black_color = cccolor_get(0x000000);
+  dock->red_color = cccolor_get(0xff0000);
+  dock->green_color = cccolor_get(0x00ff00);
+  dock->blue_color = cccolor_get(0x0000ff);
+  {
+    int i;
+    for (i = 0; i < 16; ++i) {
+      dock->gray_colors[i] = cccolor_get_rgb(i*16,i*16,i*16);
+    }
+  }
+  return err;
+}
+
+
+void
+dock_set_horloge_mode(Dock *dock) {
+  if (Prefs.draw_border == 0) {
+    XShapeCombineMask(dock->display, DOCK_WIN(dock), ShapeBounding, 
+		      0, 0, dock->clock_pixmask, ShapeSet);
+  }
+  dock->horloge_mode = 1;
+}
+
+void
+dock_unset_horloge_mode(Dock *dock) {
+  if (Prefs.draw_border == 0) {
+    XShapeCombineMask(dock->display, DOCK_WIN(dock), ShapeBounding, 
+	  	      0, 0, dock->coin_pixmask, ShapeSet);
+  }
+  dock->horloge_mode = 0;  
+}
+
+/*
+  bouse
+*/
+static void
+dock_handle_button_press(Dock *dock, XButtonEvent *xbevent)
+{
+  int x,y;
+  x = xbevent->x; y = xbevent->y;
+
+
+  /* gestion d'un bug curieux de KDE/swallow:
+	 un LeaveNotify est genere quand on clique sur le dock...
+	 du coup ca reinitialise plein de choses.. */
+  dock_handle_motion_notify(dock, x, y);
+
+  /* Ctrl-Clic1 -> passage en mode horloge */
+  if (xbevent->button == Button1 && (xbevent->state & ControlMask)) {
+    balltrap_armageddon(dock);
+    dock_set_horloge_mode(dock);
+  } else if (xbevent->button == Button1) {
+    if (IS_INSIDE(x,y,20,20,40,40) && 
+	(dock->door_state == OPENED || (dock->door_state_step>12))) {
+      dock->red_button_press_flag = 1;
+    } else if (IS_INSIDE(x,y,50,18,60,22) && 
+	       (dock->door_state == CLOSED)) {
+      /* clic sur le trollometre */
+      dock->door_state = OPENING;
+
+    } else if (IS_INSIDE(x,y,2,2,59,13) && 
+	       (dock->door_state == CLOSED)) {
+#if 0
+      id_type id;
+      /* clic gauche sur la zone des news d�filantes -> on affiche la news et on 'raise' la fenetre */
+      if (strlen(dock->newstitles)) {
+	int pos;
+	pos = (dock->newstitles_pos + ((xbevent->x - 7)+3)/6) % strlen(dock->newstitles);
+	id = dock->newstitles_id[pos];
+      } else { id = id_type_invalid_id(); }
+      //newswin_show(dock, id); XRaiseWindow(dock->display, newswin_get_window(dock));
+#endif
+      balltrap_add(dock, id_type_invalid_id());
+    } else if (IS_INSIDE(x,y,dock->leds.led[0].xpos,dock->leds.led[0].ypos - MIN(dock->door_state_step,13),
+			 dock->leds.led[0].xpos+8, dock->leds.led[0].ypos +3 - MIN(dock->door_state_step,13))) {
+      /*
+	clic bouton 1 sur la 1ere led ->
+	voir la derniere erreur http
+      */
+      show_http_stats(dock);
+    }else if (IS_INSIDE(x,y,dock->leds.led[1].xpos,dock->leds.led[1].ypos - MIN(dock->door_state_step,13),
+			dock->leds.led[1].xpos+8, dock->leds.led[1].ypos +3 - MIN(dock->door_state_step,13))) {
+      /*
+	clic bouton 1 sur la 2eme led ->
+	accelere le trolloscope
+      */
+      dock->trolloscope_speed /= 2;
+      if (dock->trolloscope_speed <= 0) dock->trolloscope_speed = 1;
+      dock_update_pix_trolloscope(dock);
+    } else if (IS_INSIDE(x,y,dock->leds.led[2].xpos,dock->leds.led[2].ypos - MIN(dock->door_state_step,13),
+			 dock->leds.led[2].xpos+8, dock->leds.led[2].ypos +3 - MIN(dock->door_state_step,13))) {
+      /*
+	click bouton 1 sur la 3eme led -> 
+	voir les news non lues
+      */
+#if 0
+      News *n;
+      n = sl_get_nth_unreaded_news(dock->sites, 1);
+      if (n) {
+	newswin_show(dock, n->id);
+      }
+#endif
+    } else if (IS_INSIDE(x,y,dock->leds.led[3].xpos,dock->leds.led[3].ypos - MIN(dock->door_state_step,13),
+			 dock->leds.led[3].xpos+8, dock->leds.led[3].ypos +3 - MIN(dock->door_state_step,13))
+               ) {
+      /* clic gauche sur la 4eme led -> voir les nouveaux messages (avec le browser 1)*/
+#if 0
+      Message *m;
+      m = sl_find_unreaded_msg(dock->sites);
+      if (m) {
+	char url[2048];
+	snprintf(url, 2048, "http://%s:%d/%s%smessages/view.php3?id=%d", 
+		 m->site->prefs->site_root, m->site->prefs->site_port, m->site->prefs->site_path, 
+		 strlen(m->site->prefs->site_path) ? "/" : "",
+		 m->mid);
+	open_url(url, x, y, 1);
+	m->unreaded = 0;
+      } else {
+	msgbox_show(dock, _("No new messages."));
+      }
+#endif
+    } else if (IS_INSIDE(x,y,TROLLOSCOPE_X, TROLLOSCOPE_Y,
+			 TROLLOSCOPE_X+TROLLOSCOPE_WIDTH-1,TROLLOSCOPE_Y+TROLLOSCOPE_HEIGHT-1) &&
+	       dock->door_state == CLOSED) {
+      /* 
+	 click bouton 1 sur un element de trolloscope valide 
+	 on va faire defiler son useragent en bas, et faire
+	 clignoter en alternance son id et l'heure dans la zone
+	 de texte du haut
+
+	 SI trolloscope clignote (detection de nouveau commentaire), on l'efface
+      */
+
+
+      if (dock->flamometre.board_answer_decnt) {
+        dock->flamometre.board_answer_decnt = 1;
+      }
+
+      if (dock->tl_item_survol) {
+	dock->tl_item_clicked = 1;
+	dock->msginfo_defil = 1;
+      }
+    } else if (IS_INSIDE(x,y,3,49,3+57,49+12) && 
+	       (dock->door_state_step <= TROLLOSCOPE_HEIGHT)) {
+      if (!editw_ismapped(dock->editw)) {
+	//Site *s = pp_tabs_get_main_site(dock);
+	//editw_show(dock, s ? s->prefs : NULL, 0);
+	/* on ne change plus le site du palmi, c'�tait vraiment de la perversit�
+	   anti-productive */
+	editw_show(dock, NULL, 0);
+      } else {
+	editw_hide(dock, dock->editw);
+      }
+    }
+
+    /********************************************* BOUTON DROIT ****************************/
+  } else if (xbevent->button == Button3) {
+    if (IS_INSIDE(x,y,2,2,59,13) && 
+	(dock->door_state == CLOSED)) {
+      balltrap_airstrike(dock);
+    } else if (IS_INSIDE(x,y,TROLLOSCOPE_X, TROLLOSCOPE_Y,
+			 TROLLOSCOPE_X+TROLLOSCOPE_WIDTH-1,TROLLOSCOPE_Y+TROLLOSCOPE_HEIGHT-1) &&
+	       dock->door_state == CLOSED) {
+      /* 
+	 SI trolloscope clignote (detection de nouveau commentaire), on l'efface
+      */
+    } else if (IS_INSIDE(x,y,dock->leds.led[1].xpos,dock->leds.led[1].ypos - MIN(dock->door_state_step,13),
+			 dock->leds.led[1].xpos+8, dock->leds.led[1].ypos +3 - MIN(dock->door_state_step,13))) {
+      /*
+	    click bouton droite sur la 2eme led -> 
+	    ralentir le trolloscope
+	  */
+      dock->trolloscope_speed *= 2;
+      if (dock->trolloscope_speed <= 0 || dock->trolloscope_speed > 128) dock->trolloscope_speed = 128;
+      dock_update_pix_trolloscope(dock);
+	  
+    }  else if (IS_INSIDE(x,y,dock->leds.led[2].xpos,dock->leds.led[2].ypos - MIN(dock->door_state_step,13),
+			  dock->leds.led[2].xpos+8, dock->leds.led[2].ypos +3 - MIN(dock->door_state_step,13))) {
+      /*
+        click bouton droite sur la 3eme led -> 
+        eteindre la diode
+      */
+#if 0
+      if (flag_updating_news == 0) {
+	Site *s;
+	for (s = dock->sites->list; s; s=s->next) 
+	  site_news_unset_unreaded(s);
+	if (newswin_is_used(dock)) { newswin_update_content(dock, 0); newswin_draw(dock); }
+      }
+#endif
+    } else if (IS_INSIDE(x,y,dock->leds.led[3].xpos,dock->leds.led[3].ypos - MIN(dock->door_state_step,13),
+			 dock->leds.led[3].xpos+8, dock->leds.led[3].ypos +3 - MIN(dock->door_state_step,13))
+	       ) {
+      /* clic droite sur la 4eme led -> annuler les nouveaux messages */
+#if 0
+      Message *m;
+      while ((m = sl_find_unreaded_msg(dock->sites))) m->unreaded = 0;
+#endif
+    } else  if (IS_INSIDE(x,y,50,18,60,22) && 
+		(dock->door_state == CLOSED)) {
+      /* bouton 3 sur le trollometre:
+	     on montre la frequentation de la tribune */
+      //dock_show_tribune_frequentation(dock);
+      show_http_stats(dock);
+    } else if (IS_INSIDE(x,y,3,49,3+57,49+12) && 
+	       (dock->door_state_step <= TROLLOSCOPE_HEIGHT) && 
+               !Prefs.auto_swallow) {
+      /* montre le pinnipede teletype */
+      if (!pp_ismapped(dock)) {
+	if (flag_updating_board == 0) {
+	  pp_show(dock);
+	}
+      } else {
+	pp_unmap(dock);
+      }
+    }
+
+    /************************** BOUTON MILIEU ****************************************************/
+  } else if (xbevent->button == Button2) {
+    if (IS_INSIDE(x,y,2,2,59,13) && 
+	(dock->door_state == CLOSED)) {
+
+      /* rafraichissement des news */
+      /*Site *site;
+      for (site = dock->sites->list; site; site = site->next) {
+	if (site->prefs->check_news) 
+	  ccqueue_push_newslst_update(site->site_id);
+	if (site->prefs->check_comments)
+	  ccqueue_push_comments_update(site->site_id);
+	if (site->prefs->check_messages)
+	  ccqueue_push_messages_update(site->site_id);
+	site->news_refresh_cnt = 0;
+      }
+      */
+    } else if (IS_INSIDE(x,y,TROLLOSCOPE_X, TROLLOSCOPE_Y,
+			 TROLLOSCOPE_X+TROLLOSCOPE_WIDTH-1,TROLLOSCOPE_Y+TROLLOSCOPE_HEIGHT-1) &&
+	       dock->door_state == CLOSED) {
+      /*
+	demande de rafraichissement de la tribune ?
+	(bouton milieu dans la trolloscope)
+      */
+      Site *site;
+      for (site = dock->sites->list; site; site = site->next) {
+	if (site->prefs->check_board) {
+	  ccqueue_push_board_update(site->site_id);
+	  site->board->board_refresh_decnt = site->board->board_refresh_delay;
+	}
+      }
+
+    } else if (IS_INSIDE(x,y,dock->leds.led[1].xpos,dock->leds.led[1].ypos - MIN(dock->door_state_step,13),
+			 dock->leds.led[1].xpos+8, dock->leds.led[1].ypos +3 - MIN(dock->door_state_step,13))) {
+      /* clic milieu sur la deuxieme led -> changement de la resolution du trolloscope */
+      switch (dock->trolloscope_resolution) {
+      case 5: dock->trolloscope_resolution = 2; break;
+      case 2: dock->trolloscope_resolution = 1; break;
+      case 1: dock->trolloscope_resolution = 5; break;
+      default: assert(0); break;	  
+      }	  
+      dock->tl_item_clicked = 0;
+      dock->msginfo_defil = 0;
+      dock_update_pix_trolloscope(dock);
+    } else if (IS_INSIDE(x,y,dock->leds.led[3].xpos,dock->leds.led[3].ypos - MIN(dock->door_state_step,13),
+			 dock->leds.led[3].xpos+8, dock->leds.led[3].ypos +3 - MIN(dock->door_state_step,13))
+	       ) {
+      /* clic milieu sur la 4eme led -> voir les nouveaux messages (avec le browser 2)*/
+#if 0
+      Message *m;
+      m = sl_find_unreaded_msg(dock->sites);
+      if (m) {
+	char url[2048];
+	snprintf(url, 2048, "http://%s:%d/%s%smessages/view.php3?id=%d", 
+		 m->site->prefs->site_root, m->site->prefs->site_port, m->site->prefs->site_path, 
+		 strlen(m->site->prefs->site_path) ? "/" : "",
+		 m->mid);
+	open_url(url, x, y, 2);
+	m->unreaded = 0;
+      } else {
+	msgbox_show(dock, _("No new messages."));
+      }
+#endif
+    } else if (IS_INSIDE(x,y,50,18,60,22) && 
+	       (dock->door_state == CLOSED)) {
+      if ((xbevent->state & ShiftMask) == 0) {
+	/* 
+	   bouton du milieu sur le trollometre:
+	   relire le fichier d'options
+	 */
+	flag_update_prefs_request = 1;
+      }
+    }
+  }
+}
+
+static void
+dock_handle_button_press_horloge_mode(Dock *dock, XButtonEvent *xbevent)
+{
+  int x,y;
+  x = xbevent->x; y = xbevent->y;
+  
+  if (xbevent->button == Button1 && (xbevent->state & ControlMask)) {
+    dock_unset_horloge_mode(dock);
+  }
+}
+
+void
+dock_dispatch_event(Dock *dock, XEvent *event)
+{
+  switch (event->type) {
+  case DestroyNotify: /* OH MON DIEU ! ils ont tu� coincoin ! */
+    {
+      XCloseDisplay(dock->display);
+    
+      exit(0);
+    } break;
+  case ButtonPress:
+    {
+      if (dock->horloge_mode == 0) {
+	dock_handle_button_press(dock, &event->xbutton);
+      } else {
+	dock_handle_button_press_horloge_mode(dock, &event->xbutton);
+      }
+    } break;
+  case ButtonRelease:
+    {
+      if (dock->horloge_mode == 0) dock_red_button_check(dock);
+    } break;
+  case MotionNotify:
+    {
+      if (dock->horloge_mode == 0) dock_handle_motion_notify(dock, event->xmotion.x, event->xmotion.y);
+    } break;
+  case EnterNotify:
+    {
+      int x,y;
+      x = event->xcrossing.x;
+      y = event->xcrossing.y;
+      if (dock->horloge_mode == 0) check_cursor_shape(dock, x, y);
+    } break;
+  case LeaveNotify:
+    {
+      check_cursor_shape(dock, -1,-1);
+      dock->tl_item_survol = NULL;
+      dock->tl_item_clicked = 0;
+      dock->view_id_in_newstitles = id_type_invalid_id();
+      dock->flag_survol_trollo = 0;
+      dock->flag_survol_led1 = 0;
+
+      if (dock->door_state == OPENED || dock->door_state == OPENING) dock->door_state = CLOSING;
+    } break;
+  }
+}
diff --git a/src/dock.h b/src/dock.h
new file mode 100644
index 0000000..d6cbf53
--- /dev/null
+++ b/src/dock.h
@@ -0,0 +1,22 @@
+#ifndef _DOCK_H
+#define _DOCK_H
+
+#include "coincoin.h"
+
+void dock_update_pix_trolloscope(Dock *dock);
+int dock_red_button_check(Dock *dock); /* renvoie 1 si le bouton rouge a ete suffisament enfonce */
+int dock_find_xiscreen_num(Dock *dock, int x, int y);
+int dock_get_icon_pos(Dock *dock, int *iconx, int *icony);
+void dock_dispatch_event(Dock *dock, XEvent *event);
+void dock_refresh_normal(Dock *dock); /* redessine l'applet (en mode normal, cad pas en mode horloge) */
+void dock_refresh_horloge_mode(Dock *dock); /* redessine l'applet en mode horloge */
+void dock_refresh_other_win(Dock *dock);
+void dock_leds_set_state(Dock *dock); /* active/desactive le clignotement (et la couleur) des leds */
+void dock_leds_update(Leds *l); /* decremente les compteurs de clignotement */
+void dock_leds_create(Dock *dock, Leds *leds);
+void dock_checkout_newstitles(Dock *dock); /* mise � jour du titre d�filant de l'applet selon l'arrivage de news */
+void dock_set_horloge_mode(Dock *dock);
+void dock_unset_horloge_mode(Dock *dock);
+char *dock_build_pixmap_porte(Dock *dock);
+float http_stats_site_quality(Site *site);
+#endif
diff --git a/src/fake-getaddrinfo.c b/src/fake-getaddrinfo.c
new file mode 100644
index 0000000..5f54935
--- /dev/null
+++ b/src/fake-getaddrinfo.c
@@ -0,0 +1,119 @@
+/* This file was stolen from openssh-3.5p1
+   (original name openssh-3.5p1/openbsd-compat/fake-getaddrinfo.c) */
+
+/*
+ * fake library for ssh
+ *
+ * This file includes getaddrinfo(), freeaddrinfo() and gai_strerror().
+ * These funtions are defined in rfc2133.
+ *
+ * But these functions are not implemented correctly. The minimum subset
+ * is implemented for ssh use only. For exapmle, this routine assumes
+ * that ai_family is AF_INET. Don't use it for another purpose.
+ */
+
+#ifndef HAVE_GAI_STRERROR
+char *gai_strerror(int ecode)
+{
+	switch (ecode) {
+		case EAI_NODATA:
+			return "no address associated with hostname.";
+		case EAI_MEMORY:
+			return "memory allocation failure.";
+		default:
+			return "unknown error.";
+	}
+}    
+#endif /* !HAVE_GAI_STRERROR */
+
+#ifndef HAVE_FREEADDRINFO
+void freeaddrinfo(struct addrinfo *ai)
+{
+	struct addrinfo *next;
+
+	do {
+		next = ai->ai_next;
+		free(ai);
+	} while (NULL != (ai = next));
+}
+#endif /* !HAVE_FREEADDRINFO */
+
+#ifndef HAVE_GETADDRINFO
+static struct addrinfo *malloc_ai(int port, u_long addr)
+{
+	struct addrinfo *ai;
+
+	ai = malloc(sizeof(struct addrinfo) + sizeof(struct sockaddr_in));
+	if (ai == NULL)
+		return(NULL);
+	
+	memset(ai, 0, sizeof(struct addrinfo) + sizeof(struct sockaddr_in));
+	
+	ai->ai_addr = (struct sockaddr *)(ai + 1);
+	/* XXX -- ssh doesn't use sa_len */
+	ai->ai_addrlen = sizeof(struct sockaddr_in);
+	ai->ai_addr->sa_family = ai->ai_family = AF_INET;
+
+	((struct sockaddr_in *)(ai)->ai_addr)->sin_port = port;
+	((struct sockaddr_in *)(ai)->ai_addr)->sin_addr.s_addr = addr;
+	
+	return(ai);
+}
+
+int getaddrinfo(const char *hostname, const char *servname, 
+                const struct addrinfo *hints, struct addrinfo **res)
+{
+	struct addrinfo *cur, *prev = NULL;
+	struct hostent *hp;
+	struct in_addr in;
+	int i, port;
+
+	if (servname)
+		port = htons(atoi(servname));
+	else
+		port = 0;
+
+	if (hints && hints->ai_flags & AI_PASSIVE) {
+		if (NULL != (*res = malloc_ai(port, htonl(0x00000000))))
+			return 0;
+		else
+			return EAI_MEMORY;
+	}
+		
+	if (!hostname) {
+		if (NULL != (*res = malloc_ai(port, htonl(0x7f000001))))
+			return 0;
+		else
+			return EAI_MEMORY;
+	}
+	
+	if (inet_aton(hostname, &in)) {
+		if (NULL != (*res = malloc_ai(port, in.s_addr)))
+			return 0;
+		else
+			return EAI_MEMORY;
+	}
+	
+	hp = gethostbyname(hostname);
+	if (hp && hp->h_name && hp->h_name[0] && hp->h_addr_list[0]) {
+		for (i = 0; hp->h_addr_list[i]; i++) {
+			cur = malloc_ai(port, ((struct in_addr *)hp->h_addr_list[i])->s_addr);
+			if (cur == NULL) {
+				if (*res)
+					freeaddrinfo(*res);
+				return EAI_MEMORY;
+			}
+			
+			if (prev)
+				prev->ai_next = cur;
+			else
+				*res = cur;
+
+			prev = cur;
+		}
+		return 0;
+	}
+	
+	return EAI_NODATA;
+}
+#endif /* !HAVE_GETADDRINFO */
diff --git a/src/fake-getaddrinfo.h b/src/fake-getaddrinfo.h
new file mode 100644
index 0000000..55fcd4d
--- /dev/null
+++ b/src/fake-getaddrinfo.h
@@ -0,0 +1,75 @@
+/* This file was stolen from openssh-3.5p1
+   (original name openssh-3.5p1/openbsd-compat/fake-getaddrinfo.h
+   merged with openssh-3.5p1/openbsd-compat/fake-gai-errnos.h
+   ) */
+
+/* Id: fake-getaddrinfo.h,v 1.2 2001/02/09 01:55:36 djm Exp $ */
+
+#ifndef _FAKE_GETADDRINFO_H
+#define _FAKE_GETADDRINFO_H
+
+#include "config.h"
+
+/* for old netdb.h */
+#ifndef EAI_NODATA
+#define EAI_NODATA	1
+#define EAI_MEMORY	2
+#endif
+
+#ifndef AI_PASSIVE
+# define AI_PASSIVE        1
+# define AI_CANONNAME      2
+#endif
+
+#ifndef NI_NUMERICHOST
+# define NI_NUMERICHOST    2
+# define NI_NAMEREQD       4
+# define NI_NUMERICSERV    8
+#endif
+
+#ifndef AF_INET6            // vilain solaris 7
+  #define AF_INET6 666      // satan l'habite
+#endif
+#ifndef AI_NUMERICHOST 
+  #define AI_NUMERICHOST 4  // n'importe quelle valeur fait l'affaire
+#endif
+
+/* stolen from openssh.. */
+#ifndef HAVE_STRUCT_SOCKADDR_STORAGE
+# define        _SS_MAXSIZE     128     /* Implementation specific max size */
+# define       _SS_PADSIZE     (_SS_MAXSIZE - sizeof (struct sockaddr))
+
+struct sockaddr_storage {
+        struct  sockaddr ss_sa;
+        char            __ss_pad2[_SS_PADSIZE];
+};
+# define ss_family ss_sa.sa_family
+#endif /* !HAVE_STRUCT_SOCKADDR_STORAGE */
+
+#ifndef HAVE_STRUCT_ADDRINFO
+struct addrinfo {
+	int	ai_flags;	/* AI_PASSIVE, AI_CANONNAME */
+	int	ai_family;	/* PF_xxx */
+	int	ai_socktype;	/* SOCK_xxx */
+	int	ai_protocol;	/* 0 or IPPROTO_xxx for IPv4 and IPv6 */
+	size_t	ai_addrlen;	/* length of ai_addr */
+	char	*ai_canonname;	/* canonical name for hostname */
+	struct sockaddr *ai_addr;	/* binary address */
+	struct addrinfo *ai_next;	/* next structure in linked list */
+};
+#endif /* !HAVE_STRUCT_ADDRINFO */
+
+#ifndef HAVE_GETADDRINFO
+int getaddrinfo(const char *hostname, const char *servname, 
+                const struct addrinfo *hints, struct addrinfo **res);
+#endif /* !HAVE_GETADDRINFO */
+
+#ifndef HAVE_GAI_STRERROR
+char *gai_strerror(int ecode);
+#endif /* !HAVE_GAI_STRERROR */
+
+#ifndef HAVE_FREEADDRINFO
+void freeaddrinfo(struct addrinfo *ai);
+#endif /* !HAVE_FREEADDRINFO */
+
+#endif /* _FAKE_GETADDRINFO_H */
diff --git a/src/fake-getnameinfo.c b/src/fake-getnameinfo.c
new file mode 100644
index 0000000..bb5de07
--- /dev/null
+++ b/src/fake-getnameinfo.c
@@ -0,0 +1,53 @@
+/* This file was stolen from openssh-3.5p1
+    (original name openssh-3.5p1/openbsd-compat/fake-getnameinfo.c) */
+/*
+ * fake library for ssh
+ *
+ * This file includes getnameinfo().
+ * These funtions are defined in rfc2133.
+ *
+ * But these functions are not implemented correctly. The minimum subset
+ * is implemented for ssh use only. For exapmle, this routine assumes
+ * that ai_family is AF_INET. Don't use it for another purpose.
+ */
+
+
+#ifndef HAVE_GETNAMEINFO
+int getnameinfo(const struct sockaddr *sa, size_t salen, char *host, 
+                size_t hostlen, char *serv, size_t servlen, int flags)
+{
+	struct sockaddr_in *sin = (struct sockaddr_in *)sa;
+	struct hostent *hp;
+	char tmpserv[16];
+
+	if (serv) {
+		snprintf(tmpserv, sizeof(tmpserv), "%d", ntohs(sin->sin_port));
+		if (strlen(tmpserv) >= servlen)
+			return EAI_MEMORY;
+		else
+			strcpy(serv, tmpserv);
+	}
+
+	if (host) {
+		if (flags & NI_NUMERICHOST) {
+			if (strlen(inet_ntoa(sin->sin_addr)) >= hostlen)
+				return EAI_MEMORY;
+
+			strcpy(host, inet_ntoa(sin->sin_addr));
+			return 0;
+		} else {
+			hp = gethostbyaddr((char *)&sin->sin_addr, 
+				sizeof(struct in_addr), AF_INET);
+			if (hp == NULL)
+				return EAI_NODATA;
+			
+			if (strlen(hp->h_name) >= hostlen)
+				return EAI_MEMORY;
+
+			strcpy(host, hp->h_name);
+			return 0;
+		}
+	}
+	return 0;
+}
+#endif /* !HAVE_GETNAMEINFO */
diff --git a/src/fake-getnameinfo.h b/src/fake-getnameinfo.h
new file mode 100644
index 0000000..c4b8c78
--- /dev/null
+++ b/src/fake-getnameinfo.h
@@ -0,0 +1,21 @@
+/* This file was stolen from openssh-3.5p1
+   (original name openssh-3.5p1/openbsd-compat/fake-getnameinfo.h) */
+
+#ifndef _FAKE_GETNAMEINFO_H
+#define _FAKE_GETNAMEINFO_H
+
+#include "config.h"
+
+#ifndef HAVE_GETNAMEINFO
+int getnameinfo(const struct sockaddr *sa, size_t salen, char *host, 
+                size_t hostlen, char *serv, size_t servlen, int flags);
+#endif /* !HAVE_GETNAMEINFO */
+
+#ifndef NI_MAXSERV
+# define NI_MAXSERV 32
+#endif /* !NI_MAXSERV */
+#ifndef NI_MAXHOST
+# define NI_MAXHOST 1025
+#endif /* !NI_MAXHOST */
+
+#endif /* _FAKE_GETNAMEINFO_H */
diff --git a/src/fontcoincoin.c b/src/fontcoincoin.c
new file mode 100644
index 0000000..c73ba7a
--- /dev/null
+++ b/src/fontcoincoin.c
@@ -0,0 +1,279 @@
+#define NB_MAX_CC_FONTS 100
+#define NB_MAX_CC_COLORS 300
+#include <assert.h>
+#include <stdlib.h>
+#include <X11/Xft/Xft.h>
+#include "coin_util.h"
+
+#include <ft2build.h>
+#include FT_FREETYPE_H
+
+FT_Library ft_library;
+
+typedef int CCFontId;
+typedef int CCColorId;
+
+typedef struct CCFont {
+  char *fontname;
+  XftFont *xfn;
+  int refcnt;
+  FT_Face face;
+} CCFont;
+
+
+typedef struct CCColor {
+  unsigned argb;
+  XRenderColor xrc;
+  XftColor xfc;
+  int refcnt;
+} CCColor;
+
+CCFont  *ccfonts[NB_MAX_CC_FONTS] = {NULL,};
+CCColor *cccolors[NB_MAX_CC_COLORS] = {NULL,};
+
+XftDraw *xd = 0;
+Display *display = 0;
+unsigned screen;
+Colormap colormap;
+Visual *visual = 0;
+Window root = None;
+
+void ccfont_initialize(Display *display_, int screen_, Visual *visual_, Colormap colormap_, Drawable d) {
+  display = display_;
+  screen = screen_;
+  visual = visual_;
+  colormap = colormap_;
+  root = RootWindow(display, screen);
+  xd = XftDrawCreate(display, d, visual, colormap);
+
+  FT_Init_FreeType(&ft_library);
+}
+
+void
+ccfont_release(CCFontId *pid) {
+  CCFontId id = *pid;
+  if (id == -1) return;
+  assert(ccfonts[id]);
+  assert(ccfonts[id]->refcnt > 0);
+  if (--(ccfonts[id]->refcnt) == 0) {
+    if (ccfonts[id]->xfn) { XftFontClose(display, ccfonts[id]->xfn); ccfonts[id]->xfn = NULL; }
+    if (ccfonts[id]->fontname) { free(ccfonts[id]->fontname); ccfonts[id]->fontname = NULL; }
+    free(ccfonts[id]); ccfonts[id] = NULL;
+  }
+  *pid = -1;
+}
+
+CCFontId
+ccfont_get(char *fontdesc_) {
+  int i, ifn = -1;
+  char *fontdesc;
+  if (Prefs.disable_xft_antialiasing) /* xft roxor ! */
+    fontdesc = str_printf("%s:antialias=no",fontdesc_);
+  else fontdesc = fontdesc_;
+  for (i = 0; i < NB_MAX_CC_FONTS; ++i) {
+    if (ccfonts[i] == NULL && ifn == -1) ifn = i;
+    else if (ccfonts[i] && strcmp(fontdesc, ccfonts[i]->fontname) == 0) {
+      ccfonts[i]->refcnt++;
+      if (fontdesc_ != fontdesc) free(fontdesc);
+      return i;
+    }
+  }
+  if (ifn >= 0) {
+    CCFont *cf = ccfonts[ifn] = malloc(sizeof(CCFont)); assert(cf);
+    cf->refcnt = 1;
+    cf->fontname = strdup(fontdesc);
+    cf->xfn = XftFontOpenName(display, screen, fontdesc);
+    if (!cf->xfn) { 
+      fprintf(stderr, "fontcoincoin could not find any font matching '%s'\n", fontdesc); 
+      ccfont_release(&ifn); 
+    }
+  } else { 
+    fprintf(stderr, "max fonts exhausted... leak ?\n");
+    assert(0);
+  }
+  if (fontdesc_ != fontdesc) free(fontdesc);
+  return ifn;
+}
+
+CCFontId ccfont_incref(CCFontId id) {
+  assert(ccfonts[id]);
+  assert(ccfonts[id]->refcnt >= 0);
+  ccfonts[id]->refcnt++;
+  return id;
+}
+
+CCColorId
+cccolor_get(unsigned argb) {
+  int i, ic = -1;
+  for (i = 0; i < NB_MAX_CC_COLORS; ++i) {
+    if (cccolors[i] == NULL && ic == -1) ic = i;
+    else if (cccolors[i] && argb == cccolors[i]->argb) {
+      cccolors[i]->refcnt++;
+      return i;
+    }
+  }
+  if (ic >= 0) {
+    CCColor *cc = cccolors[ic] = malloc(sizeof(CCColor)); assert(cc);
+    cc->refcnt = 1;
+    cc->argb = argb; 
+    cc->xrc.red = MIN(((argb >> 16) & 0xFF) * 256, 65535);
+    cc->xrc.green = MIN(((argb >> 8) & 0xFF) * 256, 65535);
+    cc->xrc.blue = MIN(((argb >> 0) & 0xFF) * 256, 65535);
+    cc->xrc.alpha = 65535 - MIN(((argb >> 24) & 0xFF) * 256, 65535);
+    XftColorAllocValue(display, visual, colormap, &cc->xrc,&cc->xfc);
+  } else { 
+    fprintf(stderr, "max colors exhausted... leak ?\n");
+    assert(0);
+  }
+  return ic;
+}
+
+CCColorId 
+cccolor_get_rgb(int r255, int g255, int b255) {
+  r255 = MAX(0,MIN(255,r255));
+  g255 = MAX(0,MIN(255,g255));
+  b255 = MAX(0,MIN(255,b255));
+  return cccolor_get(r255*65536 + g255*256 + b255);
+}
+
+CCColorId
+cccolor_from_name(const char *name) {
+  XColor xc;
+  if (XParseColor(display, colormap, name, &xc)) {
+    int rgb = 
+      ((((int)xc.red  )/256) << 16) + 
+      ((((int)xc.green)/256) << 8) + 
+      ((((int)xc.blue )/256));
+    return cccolor_get(rgb);
+  } else return -1;
+}
+
+CCColorId cccolor_incref(CCColorId id) {
+  assert(cccolors[id]);
+  assert(cccolors[id]->refcnt >= 0);
+  cccolors[id]->refcnt++;
+  return id;
+}
+
+void 
+cccolor_release(CCColorId *pid) {
+  CCColorId id = *pid;
+  if (id == -1) return;
+  assert(cccolors[id]);
+  assert(cccolors[id]->refcnt > 0);
+  if (--(cccolors[id]->refcnt) == 0) {
+    XftColorFree(display, visual, colormap, &cccolors[id]->xfc);
+    free(cccolors[id]); cccolors[id] = NULL;
+  }
+  *pid = -1;
+}
+
+void 
+cccolor_reset(CCColorId *pid, unsigned argb) {
+  cccolor_release(pid);
+  *pid = cccolor_get(argb);
+}
+
+unsigned long cccolor_pixel(CCColorId cid) {
+  return cccolors[cid]->xfc.pixel;
+}
+
+void
+ccfont_draw_string8(CCFontId fid, CCColorId cid, Drawable d, int x, int y, char *str, int len) {
+  assert(str);
+  assert(ccfonts[fid] && ccfonts[fid]->xfn); 
+  assert(cccolors[cid]);
+  if (len == -1) len = strlen(str);
+  XftDrawChange(xd, d);
+  XftDrawString8(xd, &cccolors[cid]->xfc, ccfonts[fid]->xfn, x, y, str, len);
+  XftDrawChange(xd, root);
+}
+
+void
+ccfont_draw_string_utf8(CCFontId fid, CCColorId cid, Drawable d, int x, int y, char *str, int len) {
+  assert(str);
+  assert(ccfonts[fid] && ccfonts[fid]->xfn); 
+  assert(cccolors[cid]);
+  if (len == -1) len = strlen(str);
+  XftDrawChange(xd, d);
+  XftDrawStringUtf8(xd, &cccolors[cid]->xfc, ccfonts[fid]->xfn, x, y, str, len);
+  XftDrawChange(xd, root);
+}
+
+/* extrait de: http://www.keithp.com/~keithp/render/Xft.tutorial
+
+ (..) to compute the rectangle covered by a single glyph rendered at
+x,y:
+
+	top = y - glyphInfo.y;
+	left = x - glyphInfo.x;
+	bottom = top + glyphInfo.height;
+	right = left + glyphInfo.width;
+
+And to compute the normal location for the next glyph:
+
+	x = x + glyphInfo.xOff;
+	y = y + glyphInfo.yOff;
+
+*/
+int
+ccfont_text_xbox(CCFontId fid, char *str, int len, short *pxstart, short *pxoff) {
+  XGlyphInfo ext;
+  if (len == -1) len = strlen(str);
+  XftTextExtents8(display, ccfonts[fid]->xfn, str, len, &ext);
+  if (pxstart) *pxstart = ext.x;
+  if (pxoff) *pxoff = ext.xOff;
+  return ext.width;
+}
+
+int
+ccfont_text_xbox_utf8(CCFontId fid, char *str, int len, short *pxstart, short *pxoff) {
+  XGlyphInfo ext;
+  if (len == -1) len = strlen(str);
+  XftTextExtentsUtf8(display, ccfonts[fid]->xfn, str, len, &ext);
+  if (pxstart) *pxstart = ext.x;
+  if (pxoff) *pxoff = ext.xOff;
+  return ext.width;
+}
+
+int ccfont_text_width8(CCFontId fid, char *str, int len) {
+  return ccfont_text_xbox(fid,str,len,NULL,NULL);
+}
+
+int ccfont_text_width_utf8(CCFontId fid, char *str, int len) {
+  XGlyphInfo ext;
+  if (len == -1) len = strlen(str);
+  XftTextExtents8(display, ccfonts[fid]->xfn, str, len, &ext);
+  int plop = ext.width;
+  XftTextExtentsUtf8(display, ccfonts[fid]->xfn, str, len, &ext);
+  return ext.width;
+}
+
+int ccfont_text_within_width8(CCFontId fid, char *str, int len, int width, int *final_width) {
+  XGlyphInfo ext;
+  int w = 0, i = 0;
+  if (width > 0) {
+    while (str[i] && (i < len || len == -1)) {
+      XftTextExtents8(display, ccfonts[fid]->xfn, str+i, 1, &ext);
+      //printf("i=%d str[i]='%c', w ?= %d+%d : %d\n",i,str[i], w, ext.width, width); 
+      if (w + ext.width <= width)
+        w += ext.xOff - ext.x - 1;//width; /* le calcul est pas clair clair .. */
+      else break;
+      ++i;
+    }
+  }
+  if (final_width) *final_width = w;
+  return i;
+}
+
+int ccfont_ascent(CCFontId fid) {
+  return ccfonts[fid]->xfn->ascent;
+}
+
+int ccfont_descent(CCFontId fid) {
+  return ccfonts[fid]->xfn->descent;
+}
+
+int ccfont_height(CCFontId fid) {
+  return ccfonts[fid]->xfn->height;
+}
diff --git a/src/fontcoincoin.h b/src/fontcoincoin.h
new file mode 100644
index 0000000..c2b52a1
--- /dev/null
+++ b/src/fontcoincoin.h
@@ -0,0 +1,27 @@
+#ifndef FONTCOINCOIN_H
+#define FONTCOINCOIN_H
+
+/* petite couche entre le coincoin et Xft/Xrender */
+
+typedef int CCFontId;
+typedef int CCColorId;
+
+void ccfont_initialize(Display *display_, int screen_, Visual *visual_, Colormap colormap_, Drawable d);
+CCFontId ccfont_get(char *fontdesc);
+CCFontId ccfont_incref(CCFontId id);
+void ccfont_release(CCFontId *id);
+CCColorId cccolor_get(unsigned argb);
+CCColorId cccolor_get_rgb(int r255, int g255, int b255);
+CCColorId cccolor_from_name(const char *name);
+CCColorId cccolor_incref(CCColorId id);
+void cccolor_release(CCColorId *id);
+void cccolor_reset(CCColorId *pid, unsigned argb);
+unsigned long cccolor_pixel(CCColorId cid);
+void ccfont_draw_string8(CCFontId fid, CCColorId cid, Drawable d, int x, int y, char *str, int len);
+int ccfont_text_xbox(CCFontId fid, const char *str, int len, short *pxstart, short *pxoff);
+int ccfont_text_width8(CCFontId fid, const char *str, int len);
+int ccfont_text_within_width8(CCFontId fid, const char *str, int len, int width, int *final_width);
+int ccfont_ascent(CCFontId fid);
+int ccfont_descent(CCFontId fid);
+int ccfont_height(CCFontId fid);
+#endif
diff --git a/src/general.h b/src/general.h
new file mode 100644
index 0000000..7a97560
--- /dev/null
+++ b/src/general.h
@@ -0,0 +1,265 @@
+/*
+    wmCoinCoin, the stupidest WindowMaker dock applet
+    Copyright (C) 2001  Julien Pommier
+
+    Utilities comming form GNU GLib
+
+    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., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+
+*/
+
+#ifndef COINCOIN_GENERAL_H
+#define COINCOIN_GENERAL_H
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#ifndef	NULL
+#define	NULL	((void*) 0)
+#endif
+
+#ifndef	FALSE
+#define	FALSE	(0)
+#endif
+
+#ifndef	TRUE
+#define	TRUE	(!FALSE)
+#endif
+
+#undef	MAX
+#define MAX(a, b)  (((a) > (b)) ? (a) : (b))
+
+#undef	MIN
+#define MIN(a, b)  (((a) < (b)) ? (a) : (b))
+
+#undef	ABS
+#define ABS(a)	   (((a) < 0) ? -(a) : (a))
+
+#undef	CLAMP
+#define CLAMP(x, low, high)  (((x) > (high)) ? (high) : (((x) < (low)) ? (low) : (x)))
+
+
+/* Define G_VA_COPY() to do the right thing for copying va_list variables.
+ * glibconfig.h may have already defined G_VA_COPY as va_copy or __va_copy.
+ */
+#if !defined (G_VA_COPY)
+#  if defined (__GNUC__) && defined (__PPC__) && (defined (_CALL_SYSV) || defined (_WIN32))
+#  define G_VA_COPY(ap1, ap2)	  (*(ap1) = *(ap2))
+#  elif defined (G_VA_COPY_AS_ARRAY)
+#  define G_VA_COPY(ap1, ap2)	  g_memmove ((ap1), (ap2), sizeof (va_list))
+#  else /* va_list is a pointer */
+#  define G_VA_COPY(ap1, ap2)	  ((ap1) = (ap2))
+#  endif /* va_list is a pointer */
+#endif /* !G_VA_COPY */
+
+/* Wrap the gcc __PRETTY_FUNCTION__ and __FUNCTION__ variables with
+ * macros, so we can refer to them as strings unconditionally.
+ */
+#ifdef	__GNUC__
+#define	G_GNUC_FUNCTION		__FUNCTION__
+#define	G_GNUC_PRETTY_FUNCTION	__PRETTY_FUNCTION__
+#else	/* !__GNUC__ */
+#define	G_GNUC_FUNCTION		""
+#define	G_GNUC_PRETTY_FUNCTION	""
+#endif	/* !__GNUC__ */
+
+/* Provide simple macro statement wrappers (adapted from Perl):
+ *  G_STMT_START { statements; } G_STMT_END;
+ *  can be used as a single statement, as in
+ *  if (x) G_STMT_START { ... } G_STMT_END; else ...
+ *
+ *  For gcc we will wrap the statements within `({' and `})' braces.
+ *  For SunOS they will be wrapped within `if (1)' and `else (void) 0',
+ *  and otherwise within `do' and `while (0)'.
+ */
+#if !(defined (G_STMT_START) && defined (G_STMT_END))
+#  if defined (__GNUC__) && !defined (__STRICT_ANSI__) && !defined (__cplusplus)
+#    define G_STMT_START	(void)(
+#    define G_STMT_END		)
+#  else
+#    if (defined (sun) || defined (__sun__))
+#      define G_STMT_START	if (1)
+#      define G_STMT_END	else (void)0
+#    else
+#      define G_STMT_START	do
+#      define G_STMT_END	while (0)
+#    endif
+#  endif
+#endif
+
+
+/* Provide macros for error handling. The "assert" macros will
+ *  exit on failure. The "return" macros will exit the current
+ *  function. Two different definitions are given for the macros
+ *  if G_DISABLE_ASSERT is not defined, in order to support gcc's
+ *  __PRETTY_FUNCTION__ capability.
+ */
+
+#ifdef G_DISABLE_ASSERT
+
+#define g_assert(expr)
+#define g_assert_not_reached()
+
+#else /* !G_DISABLE_ASSERT */
+
+#ifdef __GNUC__
+
+#define g_assert(expr)			G_STMT_START{		\
+     if (!(expr))						\
+        fprintf(stderr,						\
+ 	      "file %s: line %d (%s): assertion failed: (%s)",	\
+	      __FILE__,						\
+	      __LINE__,						\
+	      __PRETTY_FUNCTION__,				\
+	      #expr);			}G_STMT_END
+
+#define g_assert_not_reached()		G_STMT_START{		\
+        fprintf(stderr,						\
+	    "file %s: line %d (%s): should not be reached",	\
+	    __FILE__,						\
+	    __LINE__,						\
+	    __PRETTY_FUNCTION__);	}G_STMT_END
+
+#else /* !__GNUC__ */
+
+#define g_assert(expr)			G_STMT_START{		\
+     if (!(expr))						\
+        fprintf(stderr,						\
+              "file %s: line %d: assertion failed: (%s)",	\
+	      __FILE__,						\
+	      __LINE__,						\
+	      #expr);			}G_STMT_END
+
+#define g_assert_not_reached()		G_STMT_START{	\
+        fprintf(stderr,						\
+	    "file %s: line %d: should not be reached",	\
+	    __FILE__,					\
+	    __LINE__);		}G_STMT_END
+
+#endif /* __GNUC__ */
+
+#endif /* !G_DISABLE_ASSERT */
+
+
+#ifdef G_DISABLE_CHECKS
+
+#define g_return_if_fail(expr)
+#define g_return_val_if_fail(expr,val)
+
+#else /* !G_DISABLE_CHECKS */
+
+#ifdef __GNUC__
+
+#define g_return_if_fail(expr)		G_STMT_START{			\
+     if (!(expr))							\
+       {								\
+        fprintf(stderr,						\
+		"file %s: line %d (%s): assertion `%s' failed.",	\
+		__FILE__,						\
+		__LINE__,						\
+		__PRETTY_FUNCTION__,					\
+		#expr);							\
+	 return;							\
+       };				}G_STMT_END
+
+#define g_return_val_if_fail(expr,val)	G_STMT_START{			\
+     if (!(expr))							\
+       {								\
+        fprintf(stderr,						\
+		"file %s: line %d (%s): assertion `%s' failed.",	\
+		__FILE__,						\
+		__LINE__,						\
+		__PRETTY_FUNCTION__,					\
+		#expr);							\
+	 return val;							\
+       };				}G_STMT_END
+
+#else /* !__GNUC__ */
+
+#define g_return_if_fail(expr)		G_STMT_START{		\
+     if (!(expr))						\
+       {							\
+        fprintf(stderr,						\
+		"file %s: line %d: assertion `%s' failed.",	\
+		__FILE__,					\
+		__LINE__,					\
+		#expr);						\
+	 return;						\
+       };				}G_STMT_END
+
+#define g_return_val_if_fail(expr, val)	G_STMT_START{		\
+     if (!(expr))						\
+       {							\
+        fprintf(stderr,						\
+		"file %s: line %d: assertion `%s' failed.",	\
+		__FILE__,					\
+		__LINE__,					\
+		#expr);						\
+	 return val;						\
+       };				}G_STMT_END
+
+#endif /* !__GNUC__ */
+
+#endif /* !G_DISABLE_CHECKS */
+
+
+#ifdef G_DISABLE_CHECKS
+
+#define g_return_if_reached()
+#define g_return_val_if_reached(val)
+
+#else   /* !G_DISABLE_CHECKS */
+
+#ifdef __GNUC__
+
+#define g_return_if_reached()          G_STMT_START{		\
+        fprintf(stderr,						\
+           "file %s: line %d (%s): should not be reached",	\
+           __FILE__,						\
+           __LINE__,						\
+	   __PRETTY_FUNCTION__);				\
+    return;			         }G_STMT_END
+
+#define g_return_val_if_reached(val)      G_STMT_START{		\
+        fprintf(stderr,						\
+           "file %s: line %d (%s): should not be reached",	\
+           __FILE__,						\
+           __LINE__,						\
+	   __PRETTY_FUNCTION__);				\
+    return (val);			    }G_STMT_END
+
+#else  /* !__GNUC__ */
+
+#define g_return_if_reached()          G_STMT_START{		\
+        fprintf(stderr,						\
+           "file %s: line %d: should not be reached",		\
+           __FILE__,						\
+           __LINE__);						\
+    return;			         }G_STMT_END
+
+#define g_return_val_if_reached(val)      G_STMT_START{		\
+        fprintf(stderr,						\
+           "file %s: line %d: should not be reached",		\
+           __FILE__,						\
+           __LINE__);						\
+    return (val);			    }G_STMT_END
+
+#endif /* __GNUC__ */
+
+#endif  /* G_DISABLE_CHECKS */
+
+
+
+#endif
diff --git a/src/global.h b/src/global.h
new file mode 100644
index 0000000..afc6787
--- /dev/null
+++ b/src/global.h
@@ -0,0 +1,295 @@
+
+/*
+  rcsid=$Id: global.h,v 1.31 2004/02/29 15:01:19 pouaite Exp $
+  ChangeLog:
+  $Log: global.h,v $
+  Revision 1.31  2004/02/29 15:01:19  pouaite
+  May the charles bronson spirit be with you
+
+  Revision 1.30  2003/08/26 21:50:48  pouaite
+  2.6.4b au mastic
+
+  Revision 1.29  2002/12/20 17:40:55  pouaite
+  ornythorinque en gel�e
+
+  Revision 1.28  2002/11/11 15:26:39  pouaite
+  fix soulignement et strike avec les span
+
+  Revision 1.27  2002/10/16 20:41:45  pouaite
+  killall toto
+
+  Revision 1.26  2002/10/15 23:17:28  pouaite
+  rustinage � la truelle
+
+  Revision 1.25  2002/09/05 23:11:57  pouaite
+  <blog>ce soir g mang� une omelette</blog>
+
+  Revision 1.24  2002/08/28 00:42:32  pouaite
+  wmccc aware
+
+  Revision 1.23  2002/08/21 01:11:49  pouaite
+  commit du soir, espoir
+
+  Revision 1.22  2002/08/17 18:33:39  pouaite
+  grosse commition
+
+  Revision 1.21  2002/06/02 13:31:37  pouaite
+  bon, _maintenant_ c'est parti pour la 2.3.8b
+
+  Revision 1.20  2002/04/09 00:28:19  pouaite
+  quelques modifs faites dans un �tat d'h�b�tude avanc� /!\ travaux en cours /!\
+
+  Revision 1.19  2002/04/01 01:39:38  pouaite
+  grosse grosse commition (cf changelog)
+
+  Revision 1.18  2002/03/18 22:46:49  pouaite
+  1 ou 2 bugfix mineurs, et surtout suppression de la dependance avec la libXpm .. un premier pas vers wmc� en 8bits
+
+  Revision 1.17  2002/03/07 18:54:34  pouaite
+  raaa .. fix login_color (jjb) patch plop_words (estian) et bidouille pour le chunk encoding (a tester)
+
+  Revision 1.16  2002/03/03 10:10:04  pouaite
+  bugfixes divers et vari�s
+
+  Revision 1.15  2002/02/26 22:02:07  pouaite
+  bugfix gruikissime pour les pbs de lag sous cygwin
+
+  Revision 1.14  2002/02/26 09:18:23  pouaite
+  bugfixes divers
+
+  Revision 1.13  2002/02/24 22:13:57  pouaite
+  modifs pour la v2.3.5 (selection, scrollcoin, plopification, bugfixes)
+
+  Revision 1.12  2002/02/02 23:49:17  pouaite
+  plop
+
+  Revision 1.11  2002/01/20 02:17:13  pouaite
+  modifs d'ordre esthetique (!) sans grand interet
+
+  Revision 1.10  2002/01/19 19:56:09  pouaite
+  petits crochets pour la mise en valeur de certains messages (cf changelog)
+
+  Revision 1.9  2002/01/16 00:35:26  pouaite
+  debut de detection des reponse � nos message avec des couleurs hideuses et certainement plein de bugs moisis
+
+  Revision 1.8  2002/01/14 23:54:06  pouaite
+  reconnaissance des posts effectu� par l'utilisateur du canard (� suivre...)
+
+  Revision 1.7  2002/01/13 15:19:00  pouaite
+  double patch: shift -> tribune.post_cmd et lordOric -> tribune.archive
+
+  Revision 1.6  2002/01/12 17:29:08  pouaite
+  support de l'iso8859-15 (euro..)
+
+  Revision 1.5  2002/01/10 09:18:23  pouaite
+  patch de jjb (ralentissement progressif des updates de la tribune en cas d'inactivit� du coincoin)
+
+  Revision 1.4  2001/12/18 12:43:37  pouaite
+  ajout de l'option de la fonte des ballons d'aide (pour mr. imr !) + bugfix d'une connerie assez naze dans la gestion du nom du fichier d'options (merci glandium de me l'avoir signal�)
+
+  Revision 1.3  2001/12/16 01:43:33  pouaite
+  filtrage des posts, meilleure gestion des posts multiples
+
+  Revision 1.2  2001/12/02 18:34:54  pouaite
+  ajout de tags cvs Id et Log un peu partout...
+
+*/
+
+#ifndef GLOBAL_H
+#define GLOBAL_H
+
+#ifndef _XOPEN_SOURCE
+#define _XOPEN_SOURCE
+#endif
+#ifndef _XOPEN_SOURCE_EXTENDED
+#define _XOPEN_SOURCE_EXTENDED /* pour getdate */
+#endif
+#ifndef _GNU_SOURCE
+#define _GNU_SOURCE
+#endif
+
+
+#include "config.h"
+#include "prefs.h"
+#ifndef HAVE_BACKTRACE
+# include <assert.h>
+#else 
+void assertion_failed();
+# undef assert
+# define assert(x) if (!(x)) assertion_failed(__PRETTY_FUNCTION__, #x);
+#endif
+#define USERNAME_MAX_LEN 60 // lg max du username affich� dans la tribune, pour les personnes logg�es
+
+#ifndef __APPLE_CC__
+# ifdef __GNUC__
+#  define UNUSED __attribute((unused))
+# else
+#  define UNUSED
+# endif
+#else
+# define UNUSED
+#endif
+
+#ifdef GLOBALS_HERE
+# define DECL_GLOB(x) x;
+# define DECL_GLOB_INIT(x,y) x = y
+#else
+# define DECL_GLOB(x) extern x
+# define DECL_GLOB_INIT(x,y) extern x
+#endif
+
+#ifndef NO_BLAHBLAH
+# define BLAHBLAH(n,x) if (Prefs.verbosity >= n) { x; fflush(stdout); }
+#else
+# define BLAHBLAH(n,x)
+#endif
+
+#ifndef NO_BITFIELDS
+#  define BITFIELD(n) :n
+#else
+#  define BITFIELD(n) 
+#endif 
+
+#define WMCC_TIMER_DELAY_MS 40 /* un bip toutes les 40 millisecondes */
+
+#ifndef IN_WMCCC
+/* variables communes ici: */
+
+#ifdef USE_VALGRIND
+# define NOSIGNALS
+# include <sys/times.h>
+  DECL_GLOB_INIT(volatile clock_t last_call_X_loop, 0);
+# define VALGRINDCHK { struct tms buf; clock_t t = times(&buf); if (t-last_call_X_loop > 3) { last_call_X_loop = t; X_loop_request++; wmcc_tic_cnt++; }}
+#else
+# define VALGRINDCHK
+#endif
+
+/*
+  il faut des protections pour les appels syst�mes non reentrant :-( (malloc...)
+  (la cause des bugs bizarres du "mur vert" ?)
+*/
+void X_loop();
+void ispell_run_background(const char* spellCmd, const char* spellDict);
+#define ALLOW_ISPELL if (Prefs.ew_do_spell) {ispell_run_background(Prefs.ew_spell_cmd, Prefs.ew_spell_dict);}
+#define ALLOW_X_LOOP VALGRINDCHK; if (X_loop_request) { if (X_loop_request > 1 && Prefs.verbosity) { printf("%s, ligne %d : X_loop_request=%d!\n", __FILE__, __LINE__, X_loop_request); }X_loop(); }
+#define ALLOW_X_LOOP_MSG(m) VALGRINDCHK; if (X_loop_request) { if (X_loop_request > 1 && Prefs.verbosity) { printf(m " : X_loop_request=%d!\n", X_loop_request); }  X_loop(); }
+
+/* tr�s tr�s laid, voir wmcoincoin.c/Timer_Thread */
+#ifdef __CYGWIN__
+# define CYGWIN_ENABLE_THREAD_X_LOOP flag_cygwin_x_loop_in_thread = 1;
+# define CYGWIN_DISABLE_THREAD_X_LOOP flag_cygwin_x_loop_in_thread = 0;
+DECL_GLOB_INIT(volatile int flag_cygwin_x_loop_in_thread,0);
+#else
+# define CYGWIN_ENABLE_THREAD_X_LOOP 
+# define CYGWIN_DISABLE_THREAD_X_LOOP 
+#endif
+
+
+DECL_GLOB(GeneralPrefs Prefs);
+DECL_GLOB_INIT(volatile int X_loop_request, 0);
+
+/* +1 = demande au coincoin de fermer ses fenetres,
+   -1 = demande au coincoin de se rouvrir
+   0  = �a roule
+*/
+DECL_GLOB_INIT(volatile int flag_discretion_request, 0);
+/*
+  non nul quand on met a jours les donnees:
+   -> updates des news, update tribune
+*/
+DECL_GLOB_INIT(volatile int flag_news_updated, 0);
+DECL_GLOB_INIT(volatile int flag_updating_board, 0);
+DECL_GLOB_INIT(volatile int flag_troll_braining,0); /* pour indiquer sur la led si on est dans 'troll_detector' */
+DECL_GLOB_INIT(volatile int flag_gethostbyname,0); /* pour savoir si le coincoin est en plein gethostbyname */
+DECL_GLOB_INIT(volatile int flag_board_updated, 0);
+DECL_GLOB_INIT(volatile int flag_http_transfert, 0);
+DECL_GLOB_INIT(volatile int flag_http_error, 0);
+DECL_GLOB_INIT(volatile int flag_spell_request, 0); /* pour le palmipede (�a commence � puer le vilain hack... mais bon, je veux pas de threads alors j'assume) */
+DECL_GLOB_INIT(volatile int flag_spell_finished, 0);
+DECL_GLOB_INIT(int temps_depuis_dernier_event, 0); /* incr�ment� 25 fois / sec */
+
+DECL_GLOB_INIT(volatile int flag_cancel_task, 0); /* positionn� qd l'utilisateur demande l'annulation du d/l en cours */
+
+/*
+  1 == relire le fichier d'options normal
+  2 == relire le fichier d'options temporaire �crit par wmccc
+  ne pas utiliser directement, passer par ccqueue_find
+*/
+DECL_GLOB_INIT(volatile int flag_update_prefs_request, 0);
+
+DECL_GLOB_INIT(volatile int wmcc_tic_cnt,0);
+
+DECL_GLOB_INIT(unsigned global_http_upload_cnt,0);
+DECL_GLOB_INIT(unsigned global_http_download_cnt,0);
+DECL_GLOB_INIT(char *options_file_name, NULL); /* le nom du fichier d'options (par defaut: 'options') */
+
+DECL_GLOB_INIT(char *app_useragent, NULL);
+
+
+typedef struct id_type {
+  int lid BITFIELD(25); /* attention c pas portable, on ne peut pas pr�sumer que le bitfield sera
+			   effectivement sign� :-/ (ex. compiler avec gcc -ftraditionnal) */
+  int sid  BITFIELD(7);
+} id_type;
+
+inline static int
+id_type_is_invalid(id_type id) {
+  if (id.lid == -1) {
+    assert(id.sid==-1); return 1;
+  } else {
+    assert(id.lid>=0);
+    assert(id.sid>=0); return 0;
+  }
+}
+
+inline static id_type
+id_type_invalid_id() {
+  id_type id;
+  id.lid = -1; id.sid = -1;
+  return id;
+}
+
+inline static int
+id_type_to_int(id_type id) {
+  int i;
+  if (id_type_is_invalid(id)) return -1;
+  i = id.sid + id.lid * MAX_SITES;
+  return i;
+}
+
+inline static id_type
+int_to_id_type(int i) {
+  id_type id;
+  if (i == -1) return id_type_invalid_id();
+  id.sid = i % MAX_SITES;
+  id.lid = i / MAX_SITES;
+  return id;
+}
+
+inline static int
+id_type_eq(id_type a, id_type b) {
+  return (a.lid == b.lid && a.sid == b.sid);
+}
+
+inline static int 
+id_type_sid(id_type a) {
+  return a.sid;
+}
+
+inline static int 
+id_type_lid(id_type a) {
+  return a.lid;
+}
+
+inline static void id_type_set_lid(id_type *id, int lid) {
+  id->lid = lid;
+}
+
+inline static void id_type_set_sid(id_type *id, int sid) {
+  id->sid = sid;
+}
+
+
+#endif /* IN_WMCCC */
+#endif
+
diff --git a/src/http.c b/src/http.c
new file mode 100644
index 0000000..39728df
--- /dev/null
+++ b/src/http.c
@@ -0,0 +1,1326 @@
+#ifdef __CYGWIN__
+#  define __USE_W32_SOCKETS
+#  include "windows.h"
+#  include "winsock.h"
+#  include <unistd.h>
+#  define AI_NUMERICHOST 4
+#  define __INSIDE_HTTP
+#  include "global.h"
+#  include "http.h"
+#  include <stdio.h>
+#  include <stdlib.h>
+#  include <string.h>
+#  include <signal.h>
+#  include <time.h>
+#  include "myprintf.h"
+#  include "coin_util.h"
+
+#else
+
+#include "../config.h"
+#  include <unistd.h>
+#  include <fcntl.h>
+#  include <sys/types.h>
+#  include <sys/socket.h>
+#  include <sys/time.h>
+#  include <sys/stat.h>
+
+#  include <netinet/in.h>
+#  include <arpa/inet.h>
+#  include <netdb.h>
+#  include <stdarg.h>
+#  include <stdlib.h>
+#  include <stdio.h>
+#  include <string.h>
+#  include <errno.h>
+
+/* pour le waitpid */
+#include <sys/types.h>
+#include <sys/wait.h>
+
+#  include "myprintf.h"
+#  include "coincoin.h"
+#  include "http.h"
+
+#endif /* ifdef __CYGWIN */
+
+#ifdef __CYGWIN__
+#  define LASTERR_EINTR (WSAGetLastError() == WSAEINTR)
+#  define LASTERR_EAGAIN (WSAGetLastError() == WSAEINPROGRESS)
+#  define SETERR_TIMEOUT WSASetLastError(WSAETIMEDOUT)
+#  define STR_LAST_ERROR (flag_cancel_task ? "donwload canceled" : strerror(WSAGetLastError()))
+#  define GAI_STRERROR(x) strerror(WSAGetLastError())
+#  define LASTERR_ESUCCESS (WSAGetLastError() == 0) /* � tester ... */
+#else
+#  define LASTERR_EINTR (errno==EINTR)
+#  define SETERR_TIMEOUT errno=ETIMEDOUT
+#  define STR_LAST_ERROR (flag_cancel_task ? "donwload canceled" : strerror(errno))
+#  define GAI_STRERROR(x) gai_strerror(x)
+#  define LASTERR_EAGAIN (errno==EAGAIN)
+#  define LASTERR_ESUCCESS (errno==0)
+#endif
+
+#include <libintl.h>
+#define _(String) gettext (String)
+
+#define HTTP_ERR_MSG_SZ 512
+#define HTTP_LAST_ERR_URL_SZ 128
+
+static char http_last_err_msg[HTTP_ERR_MSG_SZ] = "";
+static char http_last_err_url[HTTP_LAST_ERR_URL_SZ] = "";
+time_t http_err_time = 0;
+static char http_last_url[HTTP_LAST_ERR_URL_SZ] = "";
+static char http_used_ip[100] = "xxx.xxx.xxx.xxx";
+
+static char base64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
+
+
+typedef struct _HostEntry {
+  char *host_name;
+  char *numeric_host; /* resolved host name, if more than one answer, the entries are separated by a '|' */
+  int port;
+  struct _HostEntry *next;
+} HostEntry;
+
+
+HostEntry *dns_cache = NULL;
+
+int http_close(SOCKET fd);
+
+/* pas de fioritures */
+#include <ctype.h>
+#include "inet_aton.h"
+#include "fake-getaddrinfo.h"
+#include "fake-getnameinfo.h"
+#include "inet_aton.c"
+#include "fake-getaddrinfo.c"
+#include "fake-getnameinfo.c"
+
+static void 
+dns_cache_destroy(HostEntry *h) {
+  assert(h);
+  free(h->host_name); 
+  free(h->numeric_host);
+  h->next = NULL;
+  free(h);
+}
+
+static void 
+dns_cache_remove_host(HostEntry *h) {
+  if (h == NULL) return;
+  if (h == dns_cache) {
+    dns_cache = h->next;
+  } else {
+    HostEntry *hh = dns_cache;
+    while (hh->next != h) hh = hh->next;
+    assert(hh->next == h);
+    hh->next = h->next;
+  }
+  dns_cache_destroy(h);
+}
+
+static HostEntry *
+dns_cache_find_host_by_name(const char *host_name, int port) {
+  HostEntry *h = NULL;
+  h = dns_cache;
+  while (h) {
+    if (strcasecmp(host_name, h->host_name) == 0 && port == h->port) {
+      break;
+    }
+    h = h->next;
+  }
+  return h;
+}
+
+static void
+dns_cache_remove_host_by_name(const char *host_name, int port) {
+  HostEntry *h = dns_cache_find_host_by_name(host_name,port);
+  if (h) dns_cache_remove_host(h);
+}
+
+/* 
+   renvoie une chaine mallocee contenant l'urlencodage de string 
+   encore un fonction piquee dans curl
+ */
+char *
+http_url_encode(const char *string, int use_plus)
+{
+   int alloc=strlen(string)+1;
+   char *ns = malloc(alloc);
+   unsigned char in;
+   int newlen = alloc;
+   int index=0;
+
+   while(*string) {
+      in = *string;
+      if(' ' == in && use_plus)
+	 ns[index++] = '+';
+      else if(!(in >= 'a' && in <= 'z') &&
+	      !(in >= 'A' && in <= 'Z') &&
+	      !(in >= '0' && in <= '9')) {
+	 /* encode it */
+	 newlen += 2; /* the size grows with two, since this'll become a %XX */
+	 if(newlen > alloc) {
+	    alloc *= 2;
+	    ns = realloc(ns, alloc);
+	    if(!ns)
+	       return NULL;
+	 }
+	 sprintf(&ns[index], "%%%02X", in);
+	 index+=3;
+      }
+      else {
+	 /* just copy this */
+	 ns[index++]=in;
+      }
+      string++;
+   }
+   ns[index]=0; /* terminate it */
+   return ns;
+}
+
+
+static SOCKET net_connect(const char *host_name, int port, int* tic_cnt);
+
+char*
+http_complete_error_info()
+{
+  char s[2048];
+  char s_err[1024];
+  char s_heure[80];
+
+  if (flag_http_transfert == 0) {
+    if (http_err_time == 0) {
+      snprintf(s_heure, 80, _("<i>There hasn't been any http error yet</i>"));
+    } else {
+      struct tm *t;
+      t = localtime(&http_err_time);
+      
+      snprintf(s_heure, 80, _("Last error occured at: <b>%02d:%02d:%02d</b>"),
+	       t->tm_hour, t->tm_min, t->tm_sec);
+    }
+
+    if (flag_http_error) {
+      snprintf(s_err, 1024, _("Error: <b><font color=#800000>%s</font></b><br>"), http_last_err_msg);
+    } else {
+      if (http_err_time) {
+	snprintf(s_err, 1024, _("<br>The last error was: %s<br>for the URL:<tt>%s</tt><br>"),
+		 http_last_err_msg, http_last_err_url);
+      } else {
+	s_err[0] = 0;
+      }
+    }
+    snprintf(s, 2048, _("%s<br>%s<br>%s: <tt>%s</tt><br>Host IP: <font color=#0000ff>%s</font><br>%s"),
+	     flag_http_error ? _("<b>There has just been an error !!</b>") : _("The last transfer went fine."),
+	     s_heure, flag_http_error ? _("faulty URL") : _("We have just downloaded"), http_last_url, http_used_ip, s_err);
+  } else {
+    if (flag_gethostbyname == 0) {
+      snprintf(s, 2048, _("Download going on...<br>URL: <tt>%s</tt><br>IP: <font color=#0000ff>%s</font><br>"), http_last_url, http_used_ip);
+    } else {
+      snprintf(s, 2048, _("Resolving name '%s'...<br>"), http_last_url);
+    }
+  }
+  return strdup(s);
+}
+
+static void
+set_http_err()
+{
+  strcpy(http_last_err_url, http_last_url);
+  time(&http_err_time);
+}
+
+int http_is_ok(HttpRequest *r) { return r->telnet.error == 0; }
+
+int base64_encode(const void *data, int size, char **str)
+{
+  char *s, *p;
+  int i;
+  int c;
+  const unsigned char *q;
+
+  p = s = (char*)malloc(size*4/3+4);
+  if (p == NULL)
+      return -1;
+  q = (const unsigned char*)data;
+  i=0;
+  for(i = 0; i < size;){
+    c=q[i++];
+    c*=256;
+    if(i < size)
+      c+=q[i];
+    i++;
+    c*=256;
+    if(i < size)
+      c+=q[i];
+    i++;
+    p[0]=base64[(c&0x00fc0000) >> 18];
+    p[1]=base64[(c&0x0003f000) >> 12];
+    p[2]=base64[(c&0x00000fc0) >> 6];
+    p[3]=base64[(c&0x0000003f) >> 0];
+    if(i > size)
+      p[3]='=';
+    if(i > size+1)
+      p[2]='=';
+    p+=4;
+  }
+  *p=0;
+  *str = s;
+  return strlen(s);
+}
+
+/* 
+   et hop ! les 3 fonctions suivantes ont ete piquees dans wget 1.6 
+   (dont le code source est fort joli, soit dit en passant :)
+
+   gpl roulaize :)
+*/
+
+/* Wait for file descriptor FD to be readable, MAXTIME being the
+   timeout in seconds.  If WRITEP is non-zero, checks for FD being
+   writable instead.
+
+   Returns 1 if FD is accessible, 0 for timeout and -1 for error in
+   select().  */
+static int
+http_select_fd (SOCKET fd, int maxtime_sec, int maxtime_usec, int writep)
+{
+  fd_set fds, exceptfds;
+  struct timeval timeout;
+  int retval;
+
+  FD_ZERO (&fds);
+  FD_SET (fd, &fds);
+  FD_ZERO (&exceptfds);
+  FD_SET (fd, &exceptfds);
+  timeout.tv_sec = maxtime_sec;
+  timeout.tv_usec = maxtime_usec;
+  ALLOW_X_LOOP_MSG("http_select_fd.1"); ALLOW_ISPELL;  
+  /* HPUX reportedly warns here.  What is the correct incantation?  */
+  CYGWIN_ENABLE_THREAD_X_LOOP;
+  retval = select (fd + 1, writep ? NULL : &fds, writep ? &fds : NULL,
+		 &exceptfds, &timeout);
+  CYGWIN_DISABLE_THREAD_X_LOOP;
+  ALLOW_X_LOOP_MSG("http_select_fd.2"); ALLOW_ISPELL;
+  return retval;
+}
+
+
+/* Read at most LEN bytes from FD, storing them to BUF.  This is
+   virtually the same as read(), but takes care of EINTR braindamage
+   and uses select() to timeout the stale connections (a connection is
+   stale if more than OPT.TIMEOUT time is spent in select() or
+   read()).  */
+static int
+net_iread (SOCKET fd, char *buf, int len)
+{
+  int res;
+
+  flag_http_transfert++;
+
+
+  do
+    {
+      if (flag_cancel_task) goto error;
+      //#ifdef HAVE_SELECT
+      if (Prefs.http_timeout)
+	{
+	  int tic0;
+	  tic0 = wmcc_tic_cnt;
+	  do
+	    {
+	      res = http_select_fd (fd, Prefs.http_timeout, 0, 0);	
+	      ALLOW_X_LOOP; ALLOW_ISPELL; 
+	      if ((wmcc_tic_cnt - tic0) > Prefs.http_timeout*(1000/WMCC_TIMER_DELAY_MS)) {
+		SETERR_TIMEOUT;
+		printf(_("timeout (t=%d milliseconds)..\n"), (wmcc_tic_cnt - tic0)*WMCC_TIMER_DELAY_MS);
+	      }
+	      if (flag_cancel_task) goto error;
+	    }
+	  while (res == SOCKET_ERROR && LASTERR_EINTR);
+#ifndef __CYGWIN__
+	  if (res <= 0) {
+	    /* Set errno to ETIMEDOUT on timeout.  */
+	    if (res == 0)
+	      /* #### Potentially evil!  */
+	      SETERR_TIMEOUT;
+	    goto error;
+	  }
+#else
+	  if (res == SOCKET_ERROR) {
+	    printf(_("net_iread: socket error, res=%d (%s)\n"), res, STR_LAST_ERROR);
+            goto error;
+	  }
+	  if (res == 0) {
+	    printf (_("net_iread: Timeout...\n"));
+	    goto error;
+	  }
+#endif
+	}
+      //#endif
+
+#ifdef __CYGWIN__      	  
+      res = recv (fd, buf, len, 0);
+#else
+      res = read(fd, buf, len); 
+#endif
+      if (res != SOCKET_ERROR) global_http_download_cnt += res;
+      ALLOW_X_LOOP; ALLOW_ISPELL; 
+    }
+  while (res == SOCKET_ERROR && LASTERR_EINTR);
+
+  flag_http_error = 0;
+  flag_http_transfert--;
+
+  ALLOW_X_LOOP; ALLOW_ISPELL;
+  return res;
+
+ error:
+  flag_http_error = 1;
+  flag_http_transfert--;
+  ALLOW_X_LOOP; ALLOW_ISPELL;
+  return SOCKET_ERROR;
+}
+
+/* Write LEN bytes from BUF to FD.  This is similar to iread(), but
+   doesn't bother with select().  Unlike iread(), it makes sure that
+   all of BUF is actually written to FD, so callers needn't bother
+   with checking that the return value equals to LEN.  Instead, you
+   should simply check for -1.  */
+static int
+net_iwrite (SOCKET fd, char *buf, int len)
+{
+  int res = 0;
+
+  flag_http_transfert++;
+
+  /* `write' may write less than LEN bytes, thus the outward loop
+     keeps trying it until all was written, or an error occurred.  The
+     inner loop is reserved for the usual WSAEINTR f*kage, and the
+     innermost loop deals with the same during select().  */
+  while (len > 0) {
+    do {
+      if (flag_cancel_task) goto error;
+      //#ifdef HAVE_SELECT
+      if (Prefs.http_timeout) {
+	do {
+	  res = http_select_fd (fd, Prefs.http_timeout, 0, 1);
+	  ALLOW_X_LOOP; ALLOW_ISPELL;
+	  if (flag_cancel_task) goto error;
+	} while (res == SOCKET_ERROR && LASTERR_EINTR);
+#ifndef __CYGWIN__
+	if (res <= 0) {
+	  /* Set errno to ETIMEDOUT on timeout.  */
+	  if (res == 0)
+	    /* #### Potentially evil!  */
+	    SETERR_TIMEOUT;
+	  goto error;
+	}
+#else
+	if (res == SOCKET_ERROR)
+	  goto error;
+	if (res == 0) {
+	  printf (_("net_iwrite: Timeout...\n"));
+	  goto error;
+	}
+#endif /* ifndef __CYGWIN__ */
+      }
+      //#endif
+
+#ifdef __CYGWIN__
+      res = send (fd, buf, len, 0);
+#else
+      res = write(fd, buf, len);
+#endif
+      if (res != SOCKET_ERROR) global_http_upload_cnt += res;
+    } while (res == SOCKET_ERROR && LASTERR_EINTR);
+    if (res == SOCKET_ERROR)
+      break;
+
+
+    buf += res;
+    len -= res;
+  }
+  flag_http_error = 0;
+  flag_http_transfert--;
+  return res;
+
+ error:
+  flag_http_error = 1;
+  flag_http_transfert--;
+  return SOCKET_ERROR;
+}
+
+/* c'est fini pour les fonctions de wget */
+
+char *
+http_error() {
+  return http_last_err_msg;
+}
+
+/* stolen from woof patch and from wget debian sources (vanilla wget does not have ipv6) */
+static char * 
+get_host_ip_str(const char *hostname, int port) {
+  int error;
+  struct addrinfo hints, *res=0;
+  char service_name[256];
+  char *s = NULL;
+
+  snprintf(service_name, 256, "%d", port);
+
+  if (flag_cancel_task) return NULL;
+  memset(&hints, 0, sizeof(hints));
+  if (Prefs.http_inet_ip_version == 4) {
+    hints.ai_family = AF_INET;
+  } else if (Prefs.http_inet_ip_version == 6) {
+    hints.ai_family = AF_INET6;
+  } else {
+    hints.ai_family = AF_UNSPEC;
+  }
+  hints.ai_socktype = SOCK_STREAM;
+  error = getaddrinfo(hostname, service_name, &hints, &res);
+  if (!error) {
+    char hbuf[NI_MAXHOST], sbuf[NI_MAXSERV];
+    struct addrinfo *r;
+    for (r = res; r; r = r->ai_next) {
+      if (getnameinfo(r->ai_addr, r->ai_addrlen, hbuf, sizeof(hbuf), sbuf,
+                      sizeof(sbuf), NI_NUMERICHOST | NI_NUMERICSERV) == 0) {
+        s = str_cat_printf(s, "%s%s", (s == NULL ? "" : "|"), hbuf);
+      }
+    }
+    freeaddrinfo(res);
+  } else {
+    myfprintf(stderr, "error from getaddrinfo: %s", GAI_STRERROR(error));
+    if (res) freeaddrinfo(res);
+  }
+  return s;
+}
+
+char *
+get_host_ip_str_bloq(const char *hostname, int port) {
+  char *s = NULL;
+  BLAHBLAH(Prefs.verbosity_http, printf(_("get_host_ip_str_bloq('%s') -> if the network lags, the coincoin can be blocked here\n"), hostname));
+  ALLOW_X_LOOP; usleep(30000); /* juste pour laisser le temps � l'affichage de mettre � jour la led indiquant 'gethostbyname' */
+  ALLOW_X_LOOP_MSG("get_host_ip_str_bloq(1)"); ALLOW_ISPELL;
+  s = get_host_ip_str(hostname, port);
+  ALLOW_X_LOOP_MSG("get_host_ip_str_bloq(2)"); ALLOW_ISPELL;  
+  return s;
+}
+
+/* inclusion du code specifique */
+#ifdef __CYGWIN__
+#include "http_win.c"
+#else
+#include "http_unix.c"
+#endif
+
+
+/* resolution d'un nom (en ipv4 ou ipv6) avec gestion d'un cache trisomique */
+static HostEntry *
+http_resolv_name(const char *host_name, int port, int force_dns_query)
+{
+  HostEntry *h = NULL;
+  int h_found = 0;
+  int do_dns_query = force_dns_query;
+
+  /* recherche de l'host_name dans la liste des noms d�j� connus */
+  h = dns_cache_find_host_by_name(host_name, port);
+
+  if (h == NULL) {
+    h = (HostEntry*) calloc(1, sizeof(HostEntry)); assert(h);
+    h->host_name = strdup(host_name);
+    h->numeric_host = NULL;
+    h->port = port;
+    h->next = dns_cache;
+    do_dns_query = 1;
+  } else h_found = 1;
+
+  if (do_dns_query) {
+    flag_gethostbyname = 1;
+    if (h->numeric_host) { free(h->numeric_host); h->numeric_host = NULL; }
+    if ((Prefs.debug & 8) == 0) {
+      h->numeric_host = get_host_ip_str_nonbloq(host_name, port);
+    } else {
+      h->numeric_host = get_host_ip_str_bloq(host_name, port);
+    }
+    flag_gethostbyname = 0;
+    if (h_found == 0) {
+      if (h->numeric_host) {
+	dns_cache = h;
+      } else {
+        dns_cache_destroy(h);
+	h = NULL;
+      }
+    }
+  }
+
+  if (Prefs.http_inet_ip_version != 6)
+    snprintf(http_used_ip, 20, "???.???.???.???");
+  else 
+    snprintf(http_used_ip, 20, "?:?:?:?:?:?:?:?");
+
+  if (h && h->numeric_host) {
+    snprintf(http_used_ip, 100, "%s", h->numeric_host);
+    BLAHBLAH(Prefs.verbosity_http, myprintf("--> host='%<YEL %s>', ip=%<MAG %s>\n", host_name, http_used_ip));
+    return h;
+  } else return NULL;
+}
+
+static SOCKET
+http_try_connect_to_resolved_host(HostEntry *h) {
+  SOCKET sockfd = INVALID_SOCKET;
+  char *hostnumstr;
+
+  hostnumstr = h->numeric_host; assert(hostnumstr);
+  /* boucle sur toutes les ips */
+  do {
+    /* convert the the string containing numeric ip into the adequate structure */
+    struct sockaddr_storage sock_name;
+    struct addrinfo hints, *res;
+    char portstr[NI_MAXSERV];
+    int err;
+    char *end;
+    char *currenthost;
+    int salen;
+
+    /* remplissage de sock_name */
+
+    memset(&hints, 0, sizeof(hints));
+    hints.ai_family = PF_UNSPEC;
+    hints.ai_socktype = SOCK_STREAM;
+    hints.ai_flags = AI_NUMERICHOST;
+    snprintf(portstr, sizeof(portstr), "%d", h->port);
+    end = strchr(hostnumstr, '|'); 
+    if (end) { currenthost = str_ndup(hostnumstr, end-hostnumstr); ++end; }
+    else currenthost = strdup(hostnumstr);
+    err = getaddrinfo(currenthost, portstr, &hints, &res);
+    if (err) {
+      printf("erreur dans getaddrinfo(%s) : %s\n", currenthost, GAI_STRERROR (err));
+      printf("comme a priori �a ne devrait pas arriver, ==> moment suicide <==\n");
+      printf("si vous pensez que cette d�cision n'est pas justifi�e, "
+             "addressez-vous aux autorit�s comp�tetentes\n");
+      assert(0);
+    }
+    memset (&sock_name, 0, sizeof (sock_name));
+    memcpy (&sock_name, res->ai_addr, res->ai_addrlen);
+    salen = res->ai_addrlen;
+    freeaddrinfo (res);
+
+    /* creation du sockect */
+
+    sockfd = socket (((struct sockaddr *)&sock_name)->sa_family, SOCK_STREAM, 0);
+    ALLOW_X_LOOP; ALLOW_ISPELL;
+    if (sockfd == INVALID_SOCKET) {
+      if (end) {
+        BLAHBLAH(Prefs.verbosity_http,myfprintf(stderr, "avertissement sans frais: la chaussette sur '%<YEL %s>' "
+                                       "a renvoy� '%<MAG %s>'\n",
+                                       currenthost, STR_LAST_ERROR));
+      } else {
+        set_http_err();
+        snprintf(http_last_err_msg, HTTP_ERR_MSG_SZ, _("Unable to create a socket ! (%s) [ip=%s]"), STR_LAST_ERROR, h->numeric_host);
+      }
+    } else {
+      /* y'a le probleme des timeout de connect ...
+         d'ailleurs je n'ai toujours pas compris pourquoi tous les
+         sigalrm balance par l'itimer de wmcoincoin n'interferent
+         pas avec le connect...
+      */
+      BLAHBLAH(Prefs.verbosity_http, printf(_("connecting on port %d...\n"), h->port));
+#ifdef CONNECT_WITHOUT_TIMEOUT // a definir pour les os chiants
+      err = net_tcp_connect(sockfd, (struct sockaddr *)&sock_name, salen);
+#else
+      err = net_tcp_connect_with_timeout(sockfd, (struct sockaddr *)&sock_name, 
+                                         salen, Prefs.http_timeout);
+#endif
+      if (err) {
+        net_close(sockfd); sockfd = INVALID_SOCKET;
+        if ( end == NULL) {
+          set_http_err();
+          snprintf(http_last_err_msg, HTTP_ERR_MSG_SZ, "connect(): %s", STR_LAST_ERROR);
+          ALLOW_X_LOOP; ALLOW_ISPELL;
+          BLAHBLAH(Prefs.verbosity_http, printf(_("connection failed: %s..\n"), http_last_err_msg));
+          dns_cache_remove_host(h); /* pour relancer un gethostbyname au prochain coup */
+        } else {
+          BLAHBLAH(Prefs.verbosity_http,printf("avertissement sans frais: le connect vers '%s' vient d'echouer (%s), on tente l'ip suivante\n", currenthost, STR_LAST_ERROR));
+        }
+      } else { /* ou���� */
+        /* ruse de sioux: comme cette ip a l'air de bien marcher, on la fait passer en premier */
+        if (hostnumstr != h->numeric_host) {
+          end = h->numeric_host+strlen(h->numeric_host); assert(*end == 0);
+          memmove(h->numeric_host+strlen(currenthost)+1, 
+                  h->numeric_host, hostnumstr-h->numeric_host);
+          *end = 0; /* on l'a �cras� si hostnumstr �tait le dernier */
+          strcpy(h->numeric_host, currenthost);
+          h->numeric_host[strlen(currenthost)] = '|';
+          BLAHBLAH(Prefs.verbosity_http,myprintf("version rearrang�e de la liste d'ips: '%<YEL %s>'\n", h->numeric_host));
+        }
+      }
+    }
+    free(currenthost); currenthost=NULL;
+    hostnumstr = end;
+  } while (sockfd == INVALID_SOCKET && hostnumstr);
+  
+  return sockfd;
+}
+
+/* -1 => erreur */
+static SOCKET
+net_connect(const char *host_name, int port, int *connect_tic_cnt)
+{
+  SOCKET sockfd = INVALID_SOCKET;
+
+  int num_try;
+
+  HostEntry *h;
+
+   /* 
+     un peu tordu : 
+     on ne fait qu'un gethostbyname au debut et on sauve son addresse (economie de 0.25s en moyenne)
+     ensuite, on rappelle la structure sauvee. en cas de probleme de connect, on retente un gethostbyname
+     (des fois que l'ip aurait change...)
+
+     BIEN SUR CA NE MARCHE QUE SI L'ON S'ADDRESSE TOUJOURS AU MEME SITE !
+  */
+
+  for (num_try = 0; num_try < 2; num_try++) {
+
+    /* fait un gethostbyname */
+    h = http_resolv_name(host_name, port, (num_try == 1));
+    
+    if (h == NULL) {
+      if (num_try == 0) continue; /* on a droit a un deuxi�me essai */
+      else {
+        set_http_err();
+        snprintf(http_last_err_msg, HTTP_ERR_MSG_SZ, _("Unable to resolve '%s'"), host_name);
+        return INVALID_SOCKET;
+      }
+    }
+    if (connect_tic_cnt && *connect_tic_cnt == -1)
+      *connect_tic_cnt = wmcc_tic_cnt;
+    
+    if ((sockfd = http_try_connect_to_resolved_host(h)) != INVALID_SOCKET) break;
+  }
+  return sockfd;
+}
+
+
+
+void
+http_print_request(HttpRequest *r)
+{
+  assert(r);
+  printf("------------HttpRequest-----------\n");
+  myprintf("type = %s\n", r->type == HTTP_GET ? "GET" : "POST");
+  myprintf("host  = '%<YEL %s>'\n", r->telnet.host);
+  myprintf("port  = '%<YEL %d>'\n", r->telnet.port);
+  myprintf("path  = '%<YEL %s>'\n", r->host_path);
+  myprintf("proxy = '%<YEL %s>'\n", r->proxy_name);
+  myprintf("proxy_user_pass = '%<YEL censored>'\n");
+  myprintf("proxy_port = '%<YEL %d>'\n", r->proxy_port);
+  myprintf("pragma_nocache = '%<YEL %d>'\n", r->pragma_nocache);
+
+  myprintf("useragent = '%<YEL %s>'\n", r->user_agent);
+  myprintf("cookie = '%<YEL %s>'\n", r->cookie);
+  myprintf("accept = '%<YEL %s>'\n", r->accept); /* Triton> Accept: header/http */
+  myprintf("last_modified = '%<YEL %s>'\n", r->p_last_modified ? *r->p_last_modified : "unused");
+  myprintf("is_chunk_encoded = '%<YEL %d>'\n", r->is_chunk_encoded);
+  myprintf("chunk_num = '%<YEL %d>'\n", r->chunk_num);
+  myprintf("chunk_size = '%<YEL %d>'\n", r->chunk_size);
+  myprintf("chunk_pos = '%<YEL %d>'\n", r->chunk_pos);
+  myprintf("fd = '%<YEL %d>'\n", (int)r->telnet.fd);
+  myprintf("error = '%<YEL %d>'\n", r->telnet.error);
+}
+
+
+/*
+  analyse tres rapidement la reponse du serveur
+
+  si il renvoie un vrai header, avec un 200 OK ou 302 Found, �a roule
+  Triton> s'il (Tu devrais apprendre le francais mon cher pouaite<) renvoie 201 Created, c'est bon aussi
+          c'est a cause de zorel< qui fait rien qu'a donner des comportements bizarres a sa future Tribune Web 4.2
+  si il renvoie autre chose (404 etc..) on renvoie r->error=1
+  si il y a une connexion timeout, on renvoie r->error=2
+*/
+void
+http_skip_header(HttpRequest *r)
+{
+  char buff[512];
+  int i, got, lnum;
+  char last;
+  int ok = 0;
+
+  lnum = 0;
+  i = 0;
+  //  printf("http_skip header\n");
+  buff[511] = 0;
+  last = 0;
+
+  r->is_chunk_encoded = 0;
+  do {
+    while((got = net_iread(r->telnet.fd, buff+i, 1)) > 0) {
+      buff[i+1] = 0;
+      BLAHBLAH(Prefs.verbosity_http, myprintf("%<GRN %c>", buff[i]););
+      if(buff[i] == '\n' && (last == '\n')) {
+	ok = 1; /* on vient de lire le header tranquillement */
+	break;
+      }
+      if(buff[i] == '\r')
+	continue;
+      last = buff[i];
+      if (buff[i] == '\n') {
+	if (lnum == 0) {
+	  int j;
+	  j = 0;
+	  while (buff[j] != ' ' && buff[j]) j++;
+	  if (buff[j] == ' ') {
+	    r->response = atoi(buff+j+1);
+            if (r->response == 304) {
+              //if (strcasecmp("304 Not Modified\n", buff+j+1) == 0) {
+	      r->content_length = 0; /* �a sert � rien d'essayer de lire un truc vide 
+					c'est pas super joli de faire �a ici mais �a ira pour cette fois
+				      */
+	    } else if ((r->response != 200) && (r->response != 201) && (r->response != 302)) {
+              /* Triton> maintenant, le 201 Created renvoy� par la tribune de test de zorel n'indique plus d'erreur */
+              /*if (strcasecmp("200 OK\n", buff+j+1) != 0 && 
+		strcasecmp("302 Found\n", buff+j+1) != 0 &&
+		strcasecmp("302 Moved Temporarily\n", buff+j+1) != 0) {*/
+	      set_http_err();
+	      snprintf(http_last_err_msg, HTTP_ERR_MSG_SZ, "%s",buff+j+1); 
+	      myprintf(_("[%<MAG %s>]: %<yel %s>"), http_last_url, buff+j+1);
+	      r->telnet.error = 1;
+              dns_cache_remove_host_by_name(r->telnet.host,r->telnet.port);
+	    }
+	  }
+	} else {
+	  if (r->p_last_modified) {
+	    if (strncmp(buff,"Last-Modified: ",15) == 0) {
+	      if (*r->p_last_modified) { free(*r->p_last_modified); *r->p_last_modified = NULL; }
+	      *r->p_last_modified = strdup(buff+15);
+	    }
+	  }
+	  if (strncmp(buff, "Transfer-Encoding: chunked", 26) == 0) {
+	    r->is_chunk_encoded = 1;
+	    r->chunk_num = -1;
+	  }
+	  if (strncmp(buff, "Content-Length:", 15) == 0) {
+	    r->content_length = atoi(buff+15);
+	    BLAHBLAH(Prefs.verbosity_http,printf("content length: %d\n", r->content_length));
+	  }
+	  if (strncmp(buff, "X-Post-Id:", 10) == 0) {
+	    r->post_id = atoi(buff+10);
+	    BLAHBLAH(Prefs.verbosity_http,printf("post id: %d\n", r->post_id));
+	  }
+	  if (strncmp(buff, "Set-Cookie:", 11) == 0) {
+	    /* Format: Set-Cookie: <name>=<value>[; <name>=<value>]...
+	                           [; expires=<date>][; domain=<domain_name>]
+	                           [; path=<some_path>][; secure][; httponly] */
+	    char *garbage;
+		if (garbage = strstr(buff+11, "expires=")) {
+			r->new_cookie = strndup(buff+11, garbage - buff - 11);
+		} else if (garbage = strstr(buff+11, "domain=")) {
+			r->new_cookie = strndup(buff+11, garbage - buff - 11);
+		} else if (garbage = strstr(buff+11, "path")) {
+			r->new_cookie = strndup(buff+11, garbage - buff - 11);
+		} else if (garbage = strstr(buff+11, "secure")) {
+			r->new_cookie = strndup(buff+11, garbage - buff - 11);
+		} else if (garbage = strstr(buff+11, "httponly")) {
+			r->new_cookie = strndup(buff+11, garbage - buff - 11);
+		} else {
+			r->new_cookie = strdup(buff+11);
+		}
+
+	    BLAHBLAH(Prefs.verbosity_http,printf("new cookie: %s\n", r->new_cookie));
+	  }
+	}
+	lnum++;
+	i=0;
+      } else {
+	i++; if (i >= 511) i = 510;
+      }
+    }
+  } while (got==SOCKET_ERROR && LASTERR_EAGAIN); 
+  if (got == SOCKET_ERROR || ok == 0) {
+    set_http_err();
+    snprintf(http_last_err_msg, HTTP_ERR_MSG_SZ, _("http_skip_header has a socket issue ! (%s)"), STR_LAST_ERROR);
+    r->telnet.error = 2;
+    return;
+  }
+  //  r->telnet.error = 0;
+  return;
+}
+
+
+/* lecture de la REPONSE du serveur 
+   (apr�s analyse de l'ent�te)
+
+   
+*/
+int
+http_read(HttpRequest *r, char *buff, int len)
+{
+  int got;
+  assert(r->telnet.error == 0);
+
+  if (len>1) {
+    BLAHBLAH(Prefs.verbosity_http+1, printf(_("http_read: request of length %d, pos = %ld, chunk=%d (size %ld)\n"), len, r->chunk_pos, r->chunk_num, r->chunk_size));
+  }
+
+  if (r->is_chunk_encoded == 1) {
+    if (r->chunk_pos > r->chunk_size) {
+      printf(_("Damned, the chunk_encoding has gone down the tubes on the following request:\n"));
+      http_print_request(r);
+    }
+    if (r->chunk_num == -1 || (r->chunk_pos == r->chunk_size && r->chunk_size != 0)) {
+      char s_chunk_size[512];
+      int i;
+      int lcnt;
+
+      r->chunk_num++; r->chunk_pos = 0;
+      i = 0; lcnt = 0;
+      while(i < 511 && (got = net_iread(r->telnet.fd, s_chunk_size+i, 1)) > 0) {
+	if (s_chunk_size[i] == '\n') {
+	  lcnt++;
+	  if (lcnt == 2 || (lcnt == 1 && r->chunk_num == 0)) 
+	    break;
+	  else { i = 0; continue; }
+	}
+	if (s_chunk_size[i] == '\r') s_chunk_size[i] = ' ';
+	i++;
+      }
+      s_chunk_size[i] = 0;
+      if (sscanf(s_chunk_size, "%lx", &r->chunk_size) != 1) {
+	r->telnet.error = 1; 
+	printf(_("error in chunk '%s'\n"), s_chunk_size);
+	return 0;
+      }
+      BLAHBLAH(Prefs.verbosity_http, printf("http_read: CHUNK %d, size = %ld ['0x%s']\n", r->chunk_num, r->chunk_size, s_chunk_size));
+    }
+
+    if (len > r->chunk_size - r->chunk_pos) len = r->chunk_size - r->chunk_pos;
+  } else if (r->content_length != -1) {
+    /*
+    if (r->content_length - r->chunk_pos < 200) {
+      printf("http_read/cl len=%d, pos=%ld, clen=%d\n",
+	     len, r->chunk_pos, r->content_length);
+    }
+    */
+    if (len > r->content_length - r->chunk_pos) len = r->content_length - r->chunk_pos;
+  }
+  
+  if (len <= 0) return 0;
+
+  got = net_iread(r->telnet.fd, buff, len);
+  if (got > 0) { r->chunk_pos += got; }
+  else if (got == SOCKET_ERROR) {
+    if (!LASTERR_EAGAIN) {
+      /* erreur non r�cup�rable */
+      set_http_err();
+      snprintf(http_last_err_msg, HTTP_ERR_MSG_SZ, _("http_read has encountered a socket problem, pos=%d, len=%d !(%s)"), (int)r->chunk_pos, (int)len, STR_LAST_ERROR);
+      r->telnet.error = 1;
+    } else {
+      got = 0; /* on n'a rien lu ce coup-ci, mais �a viendra */
+    }
+  }
+
+  if (len>1) { // || (r->content_length != -1 && (r->content_length - r->chunk_pos < 200))) {
+    BLAHBLAH(Prefs.verbosity_http+1,printf(_("http_read: length finally requested: %d, received: %d, new pos=%ld\n"),
+	   len, got, r->chunk_pos));
+  }
+
+  return got;
+}
+
+int
+http_get_line(HttpRequest *r, char *s, int sz)
+{
+  int i, got=0,cnt;
+
+
+  flag_http_transfert++;
+
+  i = 0;
+  cnt = 0;
+  s[0] = 0;
+#ifndef __CYGWIN__ 
+  errno = 0;
+#else
+  WSASetLastError(0);
+#endif
+  do {
+
+    while (r->telnet.error == 0 && (got = http_read(r, s+i, 1)) > 0) {
+      cnt++;
+      if (s[i] == '\n' || s[i] == 0) {
+	s[i] = 0; break;
+      }
+      if ((unsigned char)s[i] >= (unsigned char)' ') {
+	i++;
+	if (i >= sz) i = sz-1; /* pas cool */
+      }
+      s[i] = 0;
+    }
+
+    if (got == 0 && r->chunk_pos != r->content_length && !LASTERR_EAGAIN && !LASTERR_ESUCCESS && (!(r->is_chunk_encoded && r->chunk_size == 0))) {
+      printf(_("http_get_line: weird, got=0 while reading %d/%d [r->telnet.error=%d, errmsg='%s']\n"), (int)r->chunk_pos, (int)r->content_length, r->telnet.error, STR_LAST_ERROR);
+    }
+  } while (got == 0 && LASTERR_EAGAIN && r->telnet.error == 0 && r->chunk_pos != r->content_length);
+
+  if (r->telnet.error) {
+    set_http_err();
+    snprintf(http_last_err_msg, HTTP_ERR_MSG_SZ, _("http_get_line messed up (got=%d): %s!"), got, STR_LAST_ERROR);
+    printf("[%s] %s\n", http_last_url, http_last_err_msg);
+    goto error;
+  }
+  BLAHBLAH(Prefs.verbosity_http+1,myprintf(_("http_get_line sent (cnt=%d): '%<yel %s>'\n"), cnt, s));
+  flag_http_transfert--;
+
+  flag_http_error = 0;
+
+  BLAHBLAH(Prefs.verbosity_http,myprintf("%<yel .>"); fflush(stdout));
+  return cnt;
+
+
+ error:
+  flag_http_error = 1;
+  flag_http_transfert--;
+  return SOCKET_ERROR;
+}
+
+int
+http_get_line_trim(HttpRequest *r, char *s, int sz) {
+  int err;
+  assert(sz); s[0] = 0;  
+  while ((err = http_get_line(r,s,sz)) > 0) {
+    str_trim(s);
+    if (s[0]) break;
+  }
+  if (err == SOCKET_ERROR) return err; 
+  else return strlen(s);
+}
+
+#define CRLF "\015\012"
+
+
+
+/*
+  renvoie le descripteur de fichier vers les donnees renvoyees ,
+  descripteur a fermer par un close(d)
+*/
+void
+http_request_send(HttpRequest *r)
+{
+  char *header = NULL;
+
+  /* corriger ce ifndef un de ces jours */
+#ifndef __CYGWIN__
+  if (Prefs.debug & 2) {
+    r->telnet.fd = open(r->host_path, O_RDONLY);
+    if (r->telnet.fd < 0) {
+      fprintf(stderr, _("http_send_request/debug, unable to open '%s':%s\n"), 
+	      r->host_path, STR_LAST_ERROR);
+      r->telnet.error = 1;
+    }
+    return;
+  }
+#endif
+
+  flag_http_transfert++;
+
+  BLAHBLAH(Prefs.verbosity_http,myprintf("http_request_send: %<grn %s>\n", r->host_path));
+
+
+  header = strdup("");
+
+
+  /* GET ou POST */
+  if (r->type == HTTP_GET) {
+    if (r->proxy_user_pass == NULL) {
+      if (r->proxy_name == NULL) {
+	header = str_cat_printf(header, "GET %s HTTP/1.1" CRLF, r->host_path);
+      } else {
+	header = str_cat_printf(header, "GET http://%s%s HTTP/1.1" CRLF,
+			      r->telnet.host, r->host_path);
+      }
+    } else {
+      header = str_cat_printf(header, "GET http://%s:%d%s HTTP/1.1" CRLF,
+			      r->telnet.host, r->telnet.port, r->host_path);
+    }
+  } else if (r->type == HTTP_POST) {
+    if (r->proxy_name == NULL) {
+      header = str_cat_printf(header, "POST %s HTTP/1.1" CRLF, 
+			    r->host_path);
+    } else {
+      header = str_cat_printf(header, "POST http://%s:%d%s HTTP/1.1" CRLF, 
+			    r->telnet.host, r->telnet.port, r->host_path);
+    }
+  }
+  
+  if (r->telnet.port != 80) {
+    header = str_cat_printf(header, "Host: %s:%d" CRLF, r->telnet.host, r->telnet.port);
+  } else {
+    /* qd le port est celui par d�faut, on ne le pr�cise pas
+       pour faire plaisir � f-cpu.tuxfamily.org qui n'en veut pas sinon */
+    header = str_cat_printf(header, "Host: %s" CRLF, r->telnet.host);
+  }
+
+  if (r->cookie) {
+    header = str_cat_printf(header, "Cookie: %s" CRLF, r->cookie);
+  }
+
+  if (r->pragma_nocache) {
+    header = str_cat_printf(header, "Pragma: no-cache" CRLF "Cache-Control: no-cache" CRLF);
+  }
+
+  /* on ne g�re que le schema d'authentification basique [base64(USER:PASS)]
+     wget 1.6 fait mieux, mais pas curl 7.6 donc ca ira...
+  */
+  if (r->proxy_user_pass) {
+    char *auth;
+    base64_encode(r->proxy_user_pass, strlen(r->proxy_user_pass), &auth); assert(auth);
+    header = str_cat_printf(header, "Proxy-Authorization: Basic %s" CRLF, auth);
+    free(auth);
+  }
+
+  if (r->p_last_modified && *(r->p_last_modified) && r->use_if_modified_since) {
+    unsigned char *s = *r->p_last_modified;
+    int l;
+    l = strlen(s); l--;
+    while (l>=0 && s[l] < ' ') s[l--]=0;
+    header = str_cat_printf(header, "If-Modified-Since: %s" CRLF, s);
+  }
+
+  snprintf(http_last_url, HTTP_LAST_ERR_URL_SZ, "%s:%d%s", r->telnet.host, r->telnet.port, r->host_path);
+
+  if (r->user_agent) {
+    header = str_cat_printf(header, "User-Agent: %s" CRLF,
+			  r->user_agent);
+  }
+
+  if (r->referer) {
+    header = str_cat_printf(header, "Referer: %s" CRLF,
+			  r->referer);
+  }
+
+  /* Triton>
+     le champ HttpRequest.accept a ete ajoute
+     zorel< a decide que text/xml etait mieux que * / * donc on fait comme il a dit
+     maintenant, le accept _devrait_ etre sette partout
+   */
+  if (r->accept) {
+    header = str_cat_printf(header, "Accept: %s" CRLF, r->accept);
+  }
+  else {
+  header = str_cat_printf(header, "Accept: */*" CRLF);
+  }
+
+  header = str_cat_printf(header, "Connection: close" CRLF);
+  if (r->type == HTTP_GET) {
+    header = str_cat_printf(header, CRLF);
+  } else {
+    header = str_cat_printf(header, "Content-Type: application/x-www-form-urlencoded" CRLF
+			  "Content-Length: %d" CRLF CRLF "%s", (int)strlen(r->post),r->post);
+  }
+  
+
+  if (r->proxy_name) {
+    r->telnet.fd = net_connect(r->proxy_name, r->proxy_port, &r->telnet.tic_cnt_tstamp);
+  } else {
+    r->telnet.fd = net_connect(r->telnet.host, r->telnet.port, &r->telnet.tic_cnt_tstamp);
+  }
+  if (r->telnet.fd == INVALID_SOCKET) goto error_close;
+
+  BLAHBLAH(Prefs.verbosity_http, myprintf("HTTP_REQUEST: \n%<YEL %s>\n", header));
+
+  if (net_iwrite(r->telnet.fd, header, strlen(header)) == SOCKET_ERROR) {
+    set_http_err();
+    snprintf(http_last_err_msg, HTTP_ERR_MSG_SZ, _("http_get couldn't send its request: %s"), STR_LAST_ERROR);
+    goto error_close;
+  }
+
+  BLAHBLAH(Prefs.verbosity_http ,printf(_("ok, request sent\n")));
+  
+  http_skip_header(r);
+  if (r->telnet.error) {
+    goto error_close;
+  }
+
+  if (header) free(header);
+  flag_http_error = 0;
+  flag_http_transfert--;
+  return;
+
+ error_close:
+  http_request_close(r); r->telnet.fd = SOCKET_ERROR;
+  if (header) free(header);
+  r->telnet.error = 1;
+  flag_http_error = 1;
+  flag_http_transfert--;
+}
+
+
+void
+http_request_init(HttpRequest *r) {
+  memset(r, 0, sizeof(HttpRequest));
+  r->content_length = -1;
+  r->is_chunk_encoded = 0;
+  /* proxy par d�faut chopp� dans la var d'env "http_proxy" 
+     
+  TODO: gerer aussi la var. d'env "no_proxy"
+  */
+  if (!str_is_empty(getenv("http_proxy"))) {
+    char *http_proxy_ = str_ndup(getenv("http_proxy"),1024), *p;
+    char *http_proxy = http_proxy_;
+    for (p = http_proxy; *p; ++p)
+      if ((*p) >= 0 && *p < ' ') *p = ' ';
+    if (str_startswith(http_proxy, "http://")) http_proxy += 7;
+    
+    if ((p=strchr(http_proxy, '@'))) {
+      char auth[200]; strncpy(auth, http_proxy, MIN(200, p - http_proxy)); auth[(sizeof auth) - 1] = 0;
+      http_proxy = p+1; 
+      ASSIGN_STRING_VAL(r->proxy_user_pass, auth);
+    }
+
+    /* remove trailing slashes */
+    for (p = http_proxy; *p; ++p)
+      if (*p == '/') *p = 0;
+
+    if ((p=strchr(http_proxy, ':'))) {
+      r->proxy_name = str_ndup(http_proxy, p - http_proxy);
+      r->proxy_port = atoi(p+1);
+    } else {
+      ASSIGN_STRING_VAL(r->proxy_name, http_proxy);
+      r->proxy_port = 3128;
+    }
+  }
+  telnet_session_init(&r->telnet);
+}
+
+void http_request_close (HttpRequest *r) {
+  FREE_STRING(r->host_path);
+  FREE_STRING(r->proxy_name);
+  FREE_STRING(r->proxy_user_pass);
+  FREE_STRING(r->user_agent);
+  FREE_STRING(r->referer);
+  FREE_STRING(r->cookie);
+  FREE_STRING(r->accept); /* Triton> Accept: header/http */
+  FREE_STRING(r->post);
+  r->content_length = -1;
+  telnet_session_close(&r->telnet);
+}
+
+/* fonction a-la-con: lecture de toutes les donn�es en m�moire.. */
+unsigned char *
+http_read_all(HttpRequest *r, char *what)
+{
+  unsigned char *s;
+  int bchunk = 1024;
+  int bsize;
+
+  /* on lit tout en un coup */
+  bsize = bchunk;
+  s = malloc(bsize+1); strcpy(s,_("Quack ! Missed"));
+  if (s) {
+    int got;
+    int bi;
+    bi = 0;
+    
+    /* attention : les ames sensible pourraient etre choques
+       par la brutalite de ce qui va suivre ... */
+    while ((got=http_read(r, s+bi, bchunk)) > 0 && r->telnet.error == 0) {
+      bi += got;
+      s[bi] = 0;
+      bsize += bchunk;
+      if (bsize > 300000) {
+	  BLAHBLAH(0, myprintf(_("%s: too big (bsize=%d!), let's cut\n"),
+			       what, bsize));
+	  break;
+      }
+      s = realloc(s, bsize+1);
+      if (!s) break;
+    }
+    if (got == -1) {
+      fprintf(stderr, _("problem while reading %s: %s\n"), what, http_error());
+      if (s) free(s);
+      s = NULL;
+    } else {
+      s[bi] = 0;
+    }
+    BLAHBLAH(Prefs.verbosity_http+3, myprintf(_("%s, read: %<mag %s>\n"), what, s));
+  }
+  return s;
+}
+
+void telnet_session_init(TelnetSession *ts) {
+  memset(ts, 0, sizeof(TelnetSession));
+  ts->tic_cnt_tstamp = -1;
+}
+
+void telnet_session_open(TelnetSession *ts) {
+  flag_http_transfert++;
+
+  ts->fd = net_connect(ts->host, ts->port, &ts->tic_cnt_tstamp);
+  if (ts->fd == INVALID_SOCKET) {
+    ts->error = 1;
+    flag_http_error = 1;
+  }
+  flag_http_transfert--;
+}
+
+void telnet_session_close(TelnetSession *ts) {
+  if (ts->host) free(ts->host); ts->host = NULL;
+  if (ts->fd != INVALID_SOCKET) {
+    net_close(ts->fd);
+    ts->fd = INVALID_SOCKET;
+  }
+}
+
+void telnet_get_line(TelnetSession *ts, char *buff, int sz) {
+  int i, got;
+  int ok = 0;
+  i = 0;
+
+  flag_http_transfert++;
+  buff[sz-1] = 0;  
+  do {
+    while((got = net_iread(ts->fd, buff+i, 1)) > 0) {
+      buff[i+1] = 0;
+      BLAHBLAH(Prefs.verbosity_http, myprintf("%<GRN %c>", buff[i]););
+      if(buff[i] == '\n') {
+	ok = 1;
+	break;
+      }
+      if(buff[i] == '\r')
+	continue;
+      i++; if (i >= sz-1) i = sz-2;
+    }
+  } while (got==SOCKET_ERROR && LASTERR_EAGAIN);
+  if (got == SOCKET_ERROR || ok == 0) {
+    set_http_err();
+    snprintf(http_last_err_msg, HTTP_ERR_MSG_SZ, _("telnet_get_line has a socket issue ! (%s)"), STR_LAST_ERROR);
+    ts->error = 2;
+    flag_http_transfert--;
+    return;
+  }
+  flag_http_transfert--;
+  flag_http_error = 0;
+  return;
+}
+
+void telnet_send(TelnetSession *ts, char *s) {
+  flag_http_transfert++;
+  if (net_iwrite(ts->fd, s, strlen(s)) == SOCKET_ERROR) {
+    set_http_err();
+    snprintf(http_last_err_msg, HTTP_ERR_MSG_SZ, _("telnet_send couldn't send: %s"), STR_LAST_ERROR);
+    goto error_close;
+  }
+  flag_http_error = 0;
+  flag_http_transfert--;
+  return;
+ error_close:
+  telnet_session_close(ts); ts->fd = SOCKET_ERROR;
+  ts->error = 1;
+  flag_http_error = 1;
+  flag_http_transfert--;
+}
+
+int telnet_is_ok(TelnetSession *ts) { return ts->error == 0; }
diff --git a/src/http.h b/src/http.h
new file mode 100644
index 0000000..41ba716
--- /dev/null
+++ b/src/http.h
@@ -0,0 +1,154 @@
+/*
+  rcsid=$Id: http.h,v 1.18 2004/03/07 13:51:12 pouaite Exp $
+  ChangeLog:
+  $Log: http.h,v $
+  Revision 1.18  2004/03/07 13:51:12  pouaite
+  commit du dimanche
+
+  Revision 1.17  2003/06/29 23:58:39  pouaite
+  suppression de l'overrideredirect du palmi et ajout de pinnipede_totoz.c et wmcoincoin-totoz-get etc
+
+  Revision 1.16  2003/01/11 17:44:10  pouaite
+  ajout de stats/coinping sur les sites
+
+  Revision 1.15  2002/12/20 15:49:51  pouaite
+  prout 2.4.2b ?
+
+  Revision 1.14  2002/09/08 18:21:26  pouaite
+  microfix pou cygwin + compil
+
+  Revision 1.13  2002/09/05 23:11:57  pouaite
+  <blog>ce soir g mang� une omelette</blog>
+
+  Revision 1.12  2002/08/29 00:15:53  pouaite
+  cosm�tique et capillotraction
+
+  Revision 1.11  2002/08/17 18:33:39  pouaite
+  grosse commition
+
+  Revision 1.10  2002/06/23 14:01:36  pouaite
+  ouups, j'avais flingu� les modifs depuis la v2.3.8b
+
+  Revision 1.9  2002/06/23 10:44:05  pouaite
+  i18n-isation of the coincoin(kwakkwak), thanks to the incredible jjb !
+
+  Revision 1.7  2002/05/12 22:06:27  pouaite
+  grosses modifs dans http.c
+
+  Revision 1.6  2002/04/13 11:55:19  pouaite
+  fix kde3 + deux trois conneries
+
+  Revision 1.5  2002/03/07 18:54:34  pouaite
+  raaa .. fix login_color (jjb) patch plop_words (estian) et bidouille pour le chunk encoding (a tester)
+
+  Revision 1.4  2002/02/02 23:49:17  pouaite
+  plop
+
+  Revision 1.3  2002/01/10 09:03:06  pouaite
+  integration du patch de glandium (requetes http/1.1 avec header 'If-Modified-Since' --> coincoin plus gentil avec dacode)
+
+  Revision 1.2  2001/12/02 18:34:54  pouaite
+  ajout de tags cvs Id et Log un peu partout...
+
+*/
+
+#ifndef HTTP_H
+#define HTTP_H
+
+#ifndef HAVE_WINDOWS_H
+# define SOCKET_ERROR -1
+# define INVALID_SOCKET -1
+# define SOCKET int
+#else /* WIN32 Detected */
+//# ifdef __INSIDE_HTTP
+//#   include "windows.h"
+//# else /* !__INSIDE_HTTP */
+#  ifndef SOCKET_ERROR
+#   define SOCKET_ERROR -1
+#  endif
+#  ifndef INVALID_SOCKET
+#   define INVALID_SOCKET 0
+#  endif
+#  ifndef SOCKET
+#   define SOCKET unsigned int
+#  endif
+//# endif
+#endif
+#include "global.h"
+
+typedef struct {
+  char *host;
+  int port;
+  SOCKET fd;
+  int error;
+  int tic_cnt_tstamp;
+} TelnetSession;
+
+typedef struct {
+  /* input members */
+  enum { HTTP_GET, HTTP_POST} type;
+  TelnetSession telnet;
+  /*char *host;
+    int port;*/
+  char *host_path;
+
+  char *proxy_name;
+  char *proxy_user_pass;
+  int         proxy_port;
+
+  int         pragma_nocache;
+  int use_if_modified_since;
+
+  char *user_agent;
+  char *referer;
+  char *cookie;
+  char *accept; /* Triton> Accept: header/http */
+
+  char **p_last_modified; /* is modified by http_skip_header */
+
+  /* output members */
+
+  int        is_chunk_encoded;
+  int        chunk_num;
+  long       chunk_pos, chunk_size;
+  /*SOCKET     fd;*/
+
+  int        content_length;
+  /*int        error;*/
+
+  int        response; /* 404, 200, 502 etc.. */
+  /*int        tic_cnt_tstamp;*/ /* -1 si le resolv n'a pas march�, 
+				sinon contient la valeur de wmcc_tic_cnt
+				� l'instant ou le connect a �t� tent� */
+
+  /* SeeSchlo�> comme il faut tout faire soi-m�me ici, voil� un truc pour
+                que ce coincoin prenne en compte le X-Post-Id que renvoie
+                ma tribune [:mareek] */
+  int        post_id;
+
+  char * new_cookie; /* la requ�te a renvoy� un Set-Cookie */
+
+  char * post;
+} HttpRequest;
+
+void net_init();
+char *http_error();
+char *http_complete_error_info(); /* renvoie une chaine allou�e, ATTENTION */
+
+void telnet_session_init(TelnetSession *ts);
+void telnet_session_open(TelnetSession *ts);
+void telnet_session_close(TelnetSession *ts);
+void telnet_get_line(TelnetSession *ts, char *s, int sz);
+void telnet_send(TelnetSession *ts, char *s);
+int telnet_is_ok(TelnetSession *ts);
+
+void http_request_init(HttpRequest *r);
+void http_request_send(HttpRequest *r);
+void http_request_close(HttpRequest *r);
+int  http_read(HttpRequest *r, char *buff, int max_len);
+int http_get_line(HttpRequest *r, char *s, int sz);
+int http_get_line_trim(HttpRequest *r, char *s, int sz);
+char *http_url_encode(const char *string, int use_plus);
+unsigned char *http_read_all(HttpRequest *r, char *what);
+int http_is_ok(HttpRequest *r);
+#endif
diff --git a/src/http_unix.c b/src/http_unix.c
new file mode 100644
index 0000000..9414d0e
--- /dev/null
+++ b/src/http_unix.c
@@ -0,0 +1,274 @@
+/*
+  rcsid=$Id: http_unix.c,v 1.20 2004/03/07 13:51:12 pouaite Exp $
+  ChangeLog:
+  $Log: http_unix.c,v $
+  Revision 1.20  2004/03/07 13:51:12  pouaite
+  commit du dimanche
+
+  Revision 1.19  2003/03/02 14:41:22  pouaite
+  ce commit est d�di� � la m�moire de jacques martin
+
+  Revision 1.18  2003/03/01 17:31:22  pouaite
+  compat ipv6 a tester
+
+  Revision 1.17  2002/09/07 16:21:15  pouaite
+  �a va releaser en douce
+
+  Revision 1.16  2002/09/05 23:11:57  pouaite
+  <blog>ce soir g mang� une omelette</blog>
+
+  Revision 1.15  2002/06/23 14:01:36  pouaite
+  ouups, j'avais flingu� les modifs depuis la v2.3.8b
+
+  Revision 1.14  2002/06/23 10:44:05  pouaite
+  i18n-isation of the coincoin(kwakkwak), thanks to the incredible jjb !
+
+  Revision 1.12  2002/06/02 12:37:36  pouaite
+  fix gethostbyname --> version 2.3.8b
+
+  Revision 1.11  2002/06/01 17:54:04  pouaite
+  nettoyage
+
+  Revision 1.10  2002/05/13 08:01:11  pouaite
+  bugfix (� tester) compil sous cygwin
+
+  Revision 1.9  2002/05/12 22:06:27  pouaite
+  grosses modifs dans http.c
+
+  Revision 1.8  2002/03/03 10:10:04  pouaite
+  bugfixes divers et vari�s
+
+  Revision 1.7  2002/02/26 09:18:23  pouaite
+  bugfixes divers
+
+  Revision 1.6  2002/02/02 23:49:17  pouaite
+  plop
+
+  Revision 1.5  2002/01/20 20:53:22  pouaite
+  bugfix configure.in && http_win.c pour cygwin + 2-3 petis trucs
+
+  Revision 1.4  2002/01/20 00:37:06  pouaite
+  bugfix qui permet d'utiliser l'option 'http.proxy_use_nocache:' sur les horribles proxy transparents
+
+  Revision 1.3  2002/01/10 09:03:06  pouaite
+  integration du patch de glandium (requetes http/1.1 avec header 'If-Modified-Since' --> coincoin plus gentil avec dacode)
+
+  Revision 1.2  2001/12/02 18:26:06  pouaite
+  modif http (affreux hack pr ispell + http.c fait maintenant un #include de http_unix/win.c )
+
+*/
+
+
+
+/* 
+   connection sans gestion de timeout ... pour les OS � moelle ? 
+*/
+int
+net_tcp_connect(int fd, struct sockaddr *sock, int salen)
+{
+  int ret;
+  assert(fd >= 0);
+  printf(_("Basic connect (can BLOCK THE COINCOIN)...\n"));
+
+  do {
+    ALLOW_X_LOOP; ALLOW_ISPELL;
+  block_sigalrm(1);
+    ret = connect(fd, sock, salen);
+  block_sigalrm(0);
+  ALLOW_X_LOOP; ALLOW_ISPELL;
+//    printf("connect: ret=%d, errno=%d (%s)\n", ret, errno, strerror(errno));
+  } while (errno == EINTR);
+  return ret;
+}
+
+/* vole dans une mailing liste (je sais plus laquelle) , �a n'a pas l'air ultra-portable */
+static int
+net_tcp_connect_with_timeout (int fd, struct sockaddr *sock, int salen, int timeout_secs)
+{
+  struct timeval timeout;
+  fd_set write_fds;
+
+  assert(fd >= 0);
+  
+  /*
+   * Set the socket to be non-blocking so that connect()
+   * doesn't block.
+   */
+  if (fcntl(fd, F_SETFL, O_NONBLOCK) < 0)
+    return -1;
+  ALLOW_X_LOOP; ALLOW_ISPELL;
+  /*
+   * Setup the connection timeout.
+   */
+  //printf("timeout=%d sec\n", timeout_secs);
+  timeout.tv_sec = timeout_secs;
+  timeout.tv_usec = 0;
+  
+  while (1) {
+    
+    /*
+     * Try to connect.
+     */
+    if (connect(fd, sock, salen) < 0) {
+      ALLOW_X_LOOP; ALLOW_ISPELL;
+      /* le test sur EISCONN special BSD -> bsd connecte plus vite que l'�clair? */
+      if (errno == EISCONN) goto cassos;
+      if (errno != EAGAIN && errno != EINPROGRESS) {
+	//	printf("%d %d\n", errno, EADDRINUSE);
+	perror ("net_tcp_connect_with_timeout: connect");
+	return -1;
+      }
+      if (flag_cancel_task) { return -1; }
+    } else {
+      //fprintf (stderr, "Connected succesfully!\n");
+      return 0;
+    }
+
+    /*
+     * We couldn't connect, so we select on the fd and
+     * wait for the timer to run out, or for the fd to be
+     * ready.
+     */
+    FD_ZERO (&write_fds);
+    FD_SET (fd, &write_fds);
+
+    while (select (getdtablesize (), NULL, &write_fds, NULL, &timeout) < 0) {
+      ALLOW_X_LOOP; ALLOW_ISPELL;
+      if (errno != EINTR) {
+	perror ("net_tcp_connect_with_timeout: select");
+	return -1;
+      }
+      if (flag_cancel_task) return -1;
+    }
+    if (timeout.tv_sec == 0 && timeout.tv_usec == 0) {
+      printf(_("Connection timed out (timeout=%d sec)!\n"), timeout_secs);
+      return -1;
+    }
+    ALLOW_X_LOOP; ALLOW_ISPELL;
+  }
+cassos:
+  fcntl(fd, F_SETFL, fcntl(fd, F_GETFL) & ~O_NONBLOCK);
+  ALLOW_X_LOOP; ALLOW_ISPELL;
+  return 0;
+}
+
+void net_init() {
+  global_http_download_cnt = 0;
+  global_http_upload_cnt = 0;
+}
+
+
+int net_close(SOCKET fd) {
+  do { close (fd); } while (errno == EINTR);
+  return 0;
+}
+
+/*
+  un bon gros fork pour ne plus se figer pendant le gethostbyname
+
+  �a a l'air de bien marcher
+*/
+char *
+get_host_ip_str_nonbloq(const char *hostname, int port) {
+  pid_t pid;
+  int tube[2];
+  char *iplist = NULL;
+
+  BLAHBLAH(Prefs.verbosity_http,fprintf(stderr, _("Welcome to the forked gethostbyname, everything is experimental, beware the zombies\n")));
+
+  if (pipe(tube) == -1) {
+    fprintf(stderr, _("Broken pipe: %s\n"), strerror(errno)); return NULL;
+  }
+  switch ((pid = fork())) {
+  case -1:
+    fprintf(stderr, _("Ooooops, it looks like there is a throng of zombies out there\nthe fork failed: %s"), strerror(errno));
+    break;
+
+  case 0: { /* fiston */
+    int n;
+    if (close(tube[0]) == -1) {
+      fprintf(stderr, _("son: pipe full (%s)\n"), strerror(errno)); close(tube[1]); exit(-1);
+    }
+    BLAHBLAH(Prefs.verbosity_http,fprintf(stderr, _("son: gethostbyname going on...\n")));
+    iplist = get_host_ip_str(hostname,port);
+    BLAHBLAH(Prefs.verbosity_http,fprintf(stderr, _("son: gethostbyname finished.\n")));
+    if( iplist != NULL ) {
+      assert(strlen(iplist) < 100000); /* faut pas pousser grand m�re */
+      n = write( tube[1], iplist, strlen(iplist)+1); /* on �crit aussi le 0 terminal */
+      BLAHBLAH(Prefs.verbosity_http,printf("son: wrote iplist=%s, len %d [status: %s]\n", iplist, n, strerror(errno)));
+    } else {
+      fprintf(stderr, _("son: gethostbyname on '%s' failed.\n"), hostname);
+    }
+    exit(iplist == NULL);
+    break;
+  }
+  default: { /* p�pa */
+    int got, cstat;
+    time_t time_debut;
+    int iplist_sz = 20, iplist_len=0, iplist_ok = 0;
+
+    iplist = malloc(iplist_sz); assert(iplist); iplist[0] = 0;
+    if (close(tube[1]) == -1) {
+      fprintf(stderr, _("daddy: pipe full (%s), what will do now ?\n"), strerror(errno)); close(tube[0]);
+    }
+    time_debut = time(NULL);
+    while (1) {
+      int retval;
+      if (flag_cancel_task) break;
+      ALLOW_X_LOOP_MSG("daddy listens to his son"); ALLOW_ISPELL;
+
+      retval = http_select_fd(tube[0], 0, 10000, 0);
+      BLAHBLAH(4,fprintf(stderr, "select : retval = %d %s\n", retval, (retval == -1) ? strerror(errno) : "ok"));
+
+      /* tube pr�t ? */
+      if (retval > 0) {
+        if (iplist_len >= iplist_sz-1) {
+          iplist_sz += 10; iplist = realloc(iplist, iplist_sz); assert(iplist);
+        }
+	got = read(tube[0], iplist+iplist_len, iplist_sz-1-iplist_len);
+	
+	/* probl�me : got = 0 peut vouloir dire que 
+	   (a) fiston n'a pas encore �crit dans le tube
+	   (b) fiston {a �crit|a rat� son gethostbyname} et ferm� le tube
+	*/
+
+	if (got == 0) {
+	  BLAHBLAH(Prefs.verbosity_http, fprintf(stderr,_("The son got the pipe full again!\n")));
+	  break;
+	} else if (got == -1) {
+	  BLAHBLAH(Prefs.verbosity_http, fprintf(stderr,_("What a fucking pipe! %s\n"), strerror(errno))); break;
+	} else { 
+          iplist_len += got; iplist[iplist_len] = 0; 
+          if (iplist[iplist_len-1] == 0) { /* on a re�u le 0 terminal de fiston */
+            iplist_ok = 1;
+            break; /* alors c tout bon */
+          }
+        }
+      } else if (retval == 0) { /* rien a lire pour l'instant */
+	BLAHBLAH(Prefs.verbosity_http+3, fprintf(stderr, _("select .. awaiting\n")));
+      } else if (errno == EINTR) {
+	BLAHBLAH(Prefs.verbosity_http+3, fprintf(stderr, _("select .. interrupted\n")));
+      } else {
+	BLAHBLAH(Prefs.verbosity_http+3, fprintf(stderr, _("select .. problem : %s\n"), strerror(errno)));
+      }
+    } /* while ((got == -1 && (errno == EAGAIN || errno == EINTR)) ||
+         	 len == -1 || cnt < len+1); */
+
+    close(tube[0]);
+
+    while (waitpid(pid,&cstat,WNOHANG) == 0) {
+      if (flag_cancel_task) break; /* on s'en fout, le ramasse zombie est l� pour �a */
+      usleep(10000);
+      ALLOW_X_LOOP_MSG("return from the forked gethostbyname"); ALLOW_ISPELL;
+      printf(_("We're waiting for the son... Come here boy !\n"));
+    }
+
+    if (!iplist_ok) {
+      fprintf(stderr, _("Daddy: I couldn't read from my son :-/ (len=%d got '%s') (lasterr=%s)\n"), iplist_len, iplist, strerror(errno));
+      return NULL;
+    }
+    break;
+  }
+  }
+  return iplist;  /*   \o/ ^o^ /o_ /o\   */
+}
diff --git a/src/http_win.c b/src/http_win.c
new file mode 100644
index 0000000..71d57cb
--- /dev/null
+++ b/src/http_win.c
@@ -0,0 +1,151 @@
+/*
+  rcsid=$Id: http_win.c,v 1.16 2004/03/07 13:51:12 pouaite Exp $
+  ChangeLog:
+  $Log: http_win.c,v $
+  Revision 1.16  2004/03/07 13:51:12  pouaite
+  commit du dimanche
+
+  Revision 1.15  2003/03/06 20:24:17  pouaite
+  cygwin remarche, ou pas
+
+  Revision 1.14  2003/03/01 17:31:22  pouaite
+  compat ipv6 a tester
+
+  Revision 1.13  2002/09/05 23:11:57  pouaite
+  <blog>ce soir g mang� une omelette</blog>
+
+  Revision 1.12  2002/08/26 00:52:22  pouaite
+  coin coin coin
+
+  Revision 1.11  2002/06/23 10:44:05  pouaite
+  i18n-isation of the coincoin(kwakkwak), thanks to the incredible jjb !
+
+  Revision 1.10  2002/06/01 17:54:04  pouaite
+  nettoyage
+
+  Revision 1.9  2002/05/13 08:01:11  pouaite
+  bugfix (� tester) compil sous cygwin
+
+  Revision 1.8  2002/05/12 22:06:27  pouaite
+  grosses modifs dans http.c
+
+  Revision 1.7  2002/02/26 09:18:23  pouaite
+  bugfixes divers
+
+  Revision 1.6  2002/02/02 23:49:17  pouaite
+  plop
+
+  Revision 1.5  2002/01/20 20:53:22  pouaite
+  bugfix configure.in && http_win.c pour cygwin + 2-3 petis trucs
+
+  Revision 1.4  2002/01/20 00:37:06  pouaite
+  bugfix qui permet d'utiliser l'option 'http.proxy_use_nocache:' sur les horribles proxy transparents
+
+  Revision 1.3  2002/01/10 09:03:06  pouaite
+  integration du patch de glandium (requetes http/1.1 avec header 'If-Modified-Since' --> coincoin plus gentil avec dacode)
+
+  Revision 1.2  2001/12/02 18:26:06  pouaite
+  modif http (affreux hack pr ispell + http.c fait maintenant un #include de http_unix/win.c )
+
+*/
+
+
+
+
+/* vole dans une mailing liste (je sais plus laquelle) */
+
+static int
+net_tcp_connect_with_timeout (SOCKET fd, struct sockaddr *sock, int salen, int timeout_secs)
+{
+  struct timeval timeout;
+  fd_set write_fds;
+  unsigned long argp;
+  int error;
+  int res;
+
+  assert(fd != INVALID_SOCKET);
+  
+  /*
+   * Set the socket to be non-blocking so that connect()
+   * doesn't block.
+   */
+  argp=1;
+  if (ioctlsocket (fd, FIONBIO, &argp) == SOCKET_ERROR)
+    return -1;
+
+  /*
+   * Setup the connection timeout.
+   */
+  //printf("timeout=%d sec\n", timeout_secs);
+  timeout.tv_sec = timeout_secs;
+  timeout.tv_usec = 0;
+  
+  while (1) {
+    
+    /*
+     * Try to connect.
+     */
+    if (connect (fd, sock, salen) < 0) {
+      error = WSAGetLastError();
+      if (error != WSAEWOULDBLOCK &&
+	  error != WSAEISCONN
+          ) {
+	perror ("connect");
+	return -1;
+      }
+      if (flag_cancel_task) return -1;
+    } else {
+      printf (_("Connected succesfully!\n"));
+      return 0;
+    }
+
+    /*
+     * We couldn't connect, so we select on the fd and
+     * wait for the timer to run out, or for the fd to be
+     * ready.
+     */
+    FD_ZERO (&write_fds);
+    FD_SET (fd, &write_fds);
+
+    
+    while ((res = select (fd + 1, NULL, &write_fds, NULL, &timeout)) == SOCKET_ERROR) {
+      if (WSAGetLastError() != WSAEINTR) {
+	perror ("select");
+	return -1;
+      }
+      if (flag_cancel_task) return -1;
+    }
+    if (res == 0) {
+      printf(_("Connection timed out (timeout=%d sec)!\n"), timeout_secs);
+      return -1;
+    }
+    if (res > 0) {
+      return 0;
+    }
+  }
+  // set socket to blocking
+  argp=0;
+  if (ioctlsocket (fd, FIONBIO, &argp) == SOCKET_ERROR) {
+    printf (_("could not set socket to blocking\n"));
+    return -1;
+  }
+  return 0;
+}
+
+void net_init (void) {
+  WSADATA wsaData;
+
+  global_http_download_cnt = 0;
+  global_http_upload_cnt = 0;
+  WSAStartup (MAKEWORD (2, 0), &wsaData);
+}
+
+int net_close (SOCKET fd) {     
+  return closesocket (fd);   
+}
+
+char *
+get_host_ip_str_nonbloq(const char *hostname, int port) {
+  printf("todo: s'arranger pour faire marcher le gethostbyname non bloquant sous win \n(il suffit de foutre tout �a dans un fichier s�par� de http.c, pour ne pas\n batailler avec le #include \"windows.h\"\n");
+  return get_host_ip_str_bloq(hostname, port);
+}
diff --git a/src/inet_aton.c b/src/inet_aton.c
new file mode 100644
index 0000000..32103e5
--- /dev/null
+++ b/src/inet_aton.c
@@ -0,0 +1,163 @@
+/* This file was stolen from openssh-3.5p1
+   (original name openssh-3.5p1/openbsd-compat/inet_aton.c) */
+
+/*
+ * ++Copyright++ 1983, 1990, 1993
+ * -
+ * Copyright (c) 1983, 1990, 1993
+ *    The Regents of the University of California.  All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ *    must display the following acknowledgement:
+ * 	This product includes software developed by the University of
+ * 	California, Berkeley and its contributors.
+ * 4. Neither the name of the University nor the names of its contributors
+ *    may be used to endorse or promote products derived from this software
+ *    without specific prior written permission.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ * -
+ * Portions Copyright (c) 1993 by Digital Equipment Corporation.
+ * 
+ * Permission to use, copy, modify, and distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies, and that
+ * the name of Digital Equipment Corporation not be used in advertising or
+ * publicity pertaining to distribution of the document or software without
+ * specific, written prior permission.
+ * 
+ * THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
+ * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS.   IN NO EVENT SHALL DIGITAL EQUIPMENT
+ * CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+ * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+ * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+ * SOFTWARE.
+ * -
+ * --Copyright--
+ */
+
+
+#if !defined(HAVE_INET_ATON)
+
+
+/* 
+ * Check whether "cp" is a valid ascii representation
+ * of an Internet address and convert to a binary address.
+ * Returns 1 if the address is valid, 0 if not.
+ * This replaces inet_addr, the return value from which
+ * cannot distinguish between failure and a local broadcast address.
+ */
+
+int
+inet_aton(const char *cp, struct in_addr *addr)
+{
+        register uint32_t val;
+	register int base, n;
+	register char c;
+	unsigned int parts[4];
+	register unsigned int *pp = parts;
+
+	c = *cp;
+	for (;;) {
+		/*
+		 * Collect number up to ``.''.
+		 * Values are specified as for C:
+		 * 0x=hex, 0=octal, isdigit=decimal.
+		 */
+		if (!isdigit(c))
+			return (0);
+		val = 0; base = 10;
+		if (c == '0') {
+			c = *++cp;
+			if (c == 'x' || c == 'X')
+				base = 16, c = *++cp;
+			else
+				base = 8;
+		}
+		for (;;) {
+			if (isascii(c) && isdigit(c)) {
+				val = (val * base) + (c - '0');
+				c = *++cp;
+			} else if (base == 16 && isascii(c) && isxdigit(c)) {
+				val = (val << 4) |
+					(c + 10 - (islower(c) ? 'a' : 'A'));
+				c = *++cp;
+			} else
+				break;
+		}
+		if (c == '.') {
+			/*
+			 * Internet format:
+			 *	a.b.c.d
+			 *	a.b.c	(with c treated as 16 bits)
+			 *	a.b	(with b treated as 24 bits)
+			 */
+			if (pp >= parts + 3)
+				return (0);
+			*pp++ = val;
+			c = *++cp;
+		} else
+			break;
+	}
+	/*
+	 * Check for trailing characters.
+	 */
+	if (c != '\0' && (!isascii(c) || !isspace(c)))
+		return (0);
+	/*
+	 * Concoct the address according to
+	 * the number of parts specified.
+	 */
+	n = pp - parts + 1;
+	switch (n) {
+
+	case 0:
+		return (0);		/* initial nondigit */
+
+	case 1:				/* a -- 32 bits */
+		break;
+
+	case 2:				/* a.b -- 8.24 bits */
+		if ((val > 0xffffff) || (parts[0] > 0xff))
+			return (0);
+		val |= parts[0] << 24;
+		break;
+
+	case 3:				/* a.b.c -- 8.8.16 bits */
+		if ((val > 0xffff) || (parts[0] > 0xff) || (parts[1] > 0xff))
+			return (0);
+		val |= (parts[0] << 24) | (parts[1] << 16);
+		break;
+
+	case 4:				/* a.b.c.d -- 8.8.8.8 bits */
+		if ((val > 0xff) || (parts[0] > 0xff) || (parts[1] > 0xff) || (parts[2] > 0xff))
+			return (0);
+		val |= (parts[0] << 24) | (parts[1] << 16) | (parts[2] << 8);
+		break;
+	}
+	if (addr)
+		addr->s_addr = htonl(val);
+	return (1);
+}
+
+#endif /* !defined(HAVE_INET_ATON) */
diff --git a/src/inet_aton.h b/src/inet_aton.h
new file mode 100644
index 0000000..87e3c9d
--- /dev/null
+++ b/src/inet_aton.h
@@ -0,0 +1,13 @@
+/* This file was stolen from openssh-3.5p1
+   (original name openssh-3.5p1/openbsd-compat/inet_aton.h) */
+
+#ifndef _BSD_INET_ATON_H
+#define _BSD_INET_ATON_H
+
+#include "config.h"
+
+#ifndef HAVE_INET_ATON
+int inet_aton(const char *cp, struct in_addr *addr);
+#endif /* HAVE_INET_ATON */
+
+#endif /* _BSD_INET_ATON_H */
diff --git a/src/kbcoincoin.c b/src/kbcoincoin.c
new file mode 100644
index 0000000..ab7517e
--- /dev/null
+++ b/src/kbcoincoin.c
@@ -0,0 +1,126 @@
+#include <libintl.h>
+#define _(String) gettext (String)
+#include "kbcoincoin.h"
+
+static struct KbState KbState_;
+
+struct KbState *kb_state() { return &KbState_; }
+
+/*KeySym kb_lookup_string(Dock *dock UNUSED, XKeyEvent *event) {
+  //EditW *ew = dock->editw;
+  KbState_.klen = XLookupString(event, (char*)KbState_.buff, sizeof(KbState_.buff), &KbState_.ksym, &KbState_.compose_status);
+  return KbState_.ksym;
+}
+
+KeySym kb_lookup_mb_string(Dock *dock UNUSED, XKeyEvent *event) {
+  //EditW *ew = dock->editw;
+  if (KbState_.input_context) {
+    KbState_.klen = XmbLookupString(KbState_.input_context[0], event, (char*) KbState_.buff, sizeof(KbState_.buff), &KbState_.ksym, 0);
+  } else {
+    KbState_.klen = XLookupString(event, (char*) KbState_.buff, sizeof(KbState_.buff), &KbState_.ksym, 0);
+  }
+  return KbState_.ksym;
+}
+*/
+/* stolen from "  Vietnamese Input Method for X(xvim) "  */
+
+#define BASE_BUFSIZE 20
+Status
+kb_xim_lookup_key(XKeyEvent *event, unsigned idx)
+{
+  static char *buf = 0;
+  static int buf_len, rlen;
+  Status status;
+  XIC ic = kb_state()->input_context[idx];
+
+  if (! buf) {
+    buf_len = BASE_BUFSIZE;
+    buf = malloc(buf_len);
+  }
+  memset(buf,0,buf_len);
+
+  if (!ic) {
+    rlen = XLookupString(event, buf, buf_len,
+			 &kb_state()->ksym, NULL); //KbState_.compose_status);
+    status = (rlen == 0 ? XLookupKeySym : XLookupBoth);
+  } else {
+    kb_state()->ksym = 0;
+    rlen = Xutf8LookupString(ic, event, buf, buf_len, 
+			   &kb_state()->ksym, &status);    
+    if ((status == XBufferOverflow)) {
+      buf_len += BASE_BUFSIZE;
+      buf = realloc(buf, buf_len);
+      memset(buf, 0, buf_len);
+      rlen = Xutf8LookupString(ic, event, buf, buf_len, &kb_state()->ksym, &status);
+    }
+  }
+  unsigned i;
+  switch (status) {
+    case XLookupNone:
+      //printf("XLookupNone\n");
+      rlen = 0;
+      return 0;
+      break;
+    case XLookupKeySym:
+      //printf("XLookupKeySym ksym=%d\n", (int)kb_state()->ksym);
+      rlen = 0;
+      break;
+    case XLookupChars:
+      //printf("XLookupChars len=%d ", rlen);
+      //for (i=0; i < buf_len; ++i) printf("%02x ", (unsigned char)buf[i]);
+      //printf("\n");
+      break;
+    case XLookupBoth:
+      //printf("XLookupBoth ksym=%d len=%d ", (int)kb_state()->ksym, rlen);
+      //for (i=0; i < buf_len; ++i) printf("%02x ", (unsigned char)buf[i]);
+      //printf("\n");
+      break;
+    default:
+      assert(0);
+  }
+  kb_state()->buff = (unsigned char*)buf;
+  kb_state()->status = status;
+  kb_state()->klen = rlen;
+  return status;
+}
+
+void kb_create_input_context_for(Dock *dock, Window win, unsigned idx) {
+  /* cette ligne marchait pile poil sur mon qwerty, je la garde en reserve...
+     en la reregardant je crois qu'elle etait debile, elle defibnit
+     deux fois XNInputSyle avec deux valeurs diffrenetes...
+    KbState_.input_context = 
+        XCreateIC(dock->input_method, 
+	      XNInputStyle, XIMPreeditNothing | XIMStatusNothing,
+	      XNInputStyle, XIMStatusNothing,
+	      XNClientWindow, ew->win,
+	      NULL);
+  */
+
+  /* celle-ci est parfaite sur l'azerty...
+    KbState_.input_context = 
+    XCreateIC(dock->input_method, XNInputStyle, 1032,
+	      XNClientWindow, ew->win, XNFocusWindow, ew->win, 0);*/
+#ifndef sun
+  if (dock->input_method) {
+    KbState_.input_context[idx] = 
+      XCreateIC(dock->input_method, XNInputStyle, XIMPreeditNothing | XIMStatusNothing,
+		XNClientWindow, win, XNFocusWindow, win, NULL);
+
+    if(KbState_.input_context[idx] == NULL) {
+      fprintf(stderr, _("Warning : errot in XCreateIC() !\n"));
+    }
+  }
+#endif
+}
+
+void kb_release_input_context(unsigned idx) {
+#ifndef sun
+  if (KbState_.input_context[idx])
+    XDestroyIC(KbState_.input_context[idx]);
+  KbState_.input_context[idx] = NULL;
+#endif
+}
+
+void kb_build() {
+  memset(&KbState_, 0, sizeof KbState_);
+}
diff --git a/src/kbcoincoin.h b/src/kbcoincoin.h
new file mode 100644
index 0000000..f8ef0c0
--- /dev/null
+++ b/src/kbcoincoin.h
@@ -0,0 +1,27 @@
+#ifndef KB_COINCOIN_H
+#define KB_COINCOIN_H
+
+#include <X11/X.h>
+#include <X11/Xlib.h>
+#include <X11/Xmd.h>
+#include <X11/keysym.h>
+#include "coincoin.h"
+
+enum { KB_PALMIPEDE, KB_PINNIPEDE, NB_INPUT_CONTEXTS };
+
+struct KbState {
+  KeySym ksym;
+  int klen;
+  unsigned char *buff;  
+  XComposeStatus compose_status;
+  XIC input_context[NB_INPUT_CONTEXTS];
+  Status status;
+};
+struct KbState *kb_state();
+KeySym kb_lookup_string(Dock *dock, XKeyEvent *event);
+KeySym kb_lookup_mb_string(Dock *dock, XKeyEvent *event);
+void kb_create_input_context_for(Dock *dock, Window win, unsigned idx);
+void kb_release_input_context(unsigned idx);
+void kb_build();
+Status kb_xim_lookup_key(XKeyEvent *event, unsigned idx);
+#endif
diff --git a/src/keylist.c b/src/keylist.c
new file mode 100644
index 0000000..c293761
--- /dev/null
+++ b/src/keylist.c
@@ -0,0 +1,151 @@
+#include <stdlib.h>
+#include <string.h>
+//#include "global.h"
+#include "coin_util.h"
+#include "myprintf.h"
+#include "keylist.h"
+
+#ifndef WMCCC
+#include <libintl.h>
+#define _(String) gettext (String)
+#else
+#define _(String) (String)
+#endif
+
+void
+key_list_destroy(KeyList *first)
+{
+  KeyList *hk, *n;
+  hk = first;
+  while (hk) {
+    n = hk->next;
+    free(hk->key); free(hk); hk = n;
+  }
+}
+ 
+KeyList *
+key_list_add(KeyList *first, const unsigned char *key, KeyListType type, int num, int from_prefs)
+{
+  KeyList *hk, *last;
+
+  ALLOC_OBJ(hk, KeyList);
+  hk->key = strdup(key);
+  hk->type = type;
+  hk->num = num;
+  hk->from_prefs = from_prefs;
+  hk->next = NULL;
+  
+  //BLAHBLAH(1, myprintf(_("Adding keyword: '%<CYA %s>'\n"), key));
+  last = first;
+  if (last == NULL) {
+    first = hk;
+  } else {
+    while (last->next != NULL && last->next->num > hk->num) last = last->next;
+    hk->next = last->next;
+    last->next = hk;
+  }
+  return first;
+}
+
+KeyList *
+key_list_remove(KeyList *first, const unsigned char *key, KeyListType type)
+{
+  KeyList *hk, *prev;
+
+  prev = NULL;
+  hk = first;
+  while (hk) {
+    if (strcasecmp(key, hk->key)==0 && (hk->type == type || type == HK_ALL)) {
+      //BLAHBLAH(1, myprintf(_("Deleting key: '%<CYA %s>'\n"), key));
+      if (prev) {
+	/* supprime les refs des postvisuals vers cette clef.. */
+	prev->next = hk->next;
+      } else {
+	first = hk->next;
+      }
+      free(hk->key);
+      free(hk);
+      break;
+    }
+    prev = hk;
+    hk = hk->next;
+  }
+  return first;
+}
+
+KeyList *
+key_list_clear_from_prefs(KeyList *first)
+{
+  KeyList *hk;
+  hk = first;
+  while (hk) {
+    if (hk->from_prefs) {
+      first = key_list_remove(first, hk->key, hk->type);
+      hk = first;
+    }
+    if (hk) hk = hk->next;
+  }
+  return first;
+}
+const char*
+key_list_type_name(KeyListType t)
+{
+  switch (t) {
+  case HK_UA: return _("useragent");
+  case HK_UA_NOLOGIN: return _("useragent w/o login");
+  case HK_LOGIN: return _("login");
+  case HK_WORD: return _("word");
+  case HK_ID: return _("message id");
+  case HK_THREAD: return _("thread from id");
+  case HK_ALL: break;
+  }
+  return NULL;
+}
+
+
+KeyList *
+key_list_swap(KeyList *first, const char *s, KeyListType t, int num)
+{
+  /* verifie si le mot est d�j� dans la liste */
+  if (key_list_find(first, s, t) == NULL) {
+    return key_list_add(first, s, t, num, 0);
+  } else {
+    return key_list_remove(first, s, t);
+  }
+}
+
+/* renvoie un hash_code identifiant l'�tat de la boitakon (pour savoir si elle a �t� modifi�e ou pas */
+unsigned
+key_list_get_state(KeyList *first, int num) {
+  unsigned hash = 0x98651030;
+  static unsigned bloup[4] = {0xf0e84bb1,0x8124e841,0xd1ccc871,0x31415976};
+  KeyList *hk;
+  int cnt = 0;
+
+  hk = first;
+  while (hk) {
+    if (hk->num >= num) {
+      hash ^= (((int)hk->type) ^ bloup[cnt % 4]);
+      hash ^= str_hache(hk->key, 100);
+      cnt++;
+    }
+    hk = hk->next;
+  }
+  return hash;
+}
+
+
+KeyList *
+key_list_find(KeyList *hk, const char *s, KeyListType t)
+{
+  while (hk) {
+    if ((hk->type != HK_WORD && strcmp(hk->key, s)==0) ||
+	(hk->type == HK_WORD && strcasecmp(hk->key, s)==0)) {
+      if (t == HK_ALL || t == hk->type) {
+	return hk;
+      }
+    }
+    hk = hk->next;
+  }
+  return NULL;
+}
diff --git a/src/keylist.h b/src/keylist.h
new file mode 100644
index 0000000..ecf54f4
--- /dev/null
+++ b/src/keylist.h
@@ -0,0 +1,33 @@
+#ifndef KEYLIST_H
+#define KEYLIST_H
+
+/* petite structure pour stocker la liste des mots-clefs qui d�clenche la mise en
+   valeur du post dans le pinnipede
+   (la mise en valeur des messages de l'utilisateur && leurs reponses fonctionne diff�rement) 
+
+   attention � ne pas abuser des appels � tribune_key_list_test_mi avec des HK_THREAD par milliers ! �a *pourrait*
+   commencer � faire mouliner coincoin (a voir..)
+*/
+typedef struct _KeyList KeyList;
+typedef enum {HK_UA, HK_LOGIN, HK_WORD, HK_ID, HK_THREAD, HK_UA_NOLOGIN,HK_ALL} KeyListType;
+struct _KeyList {
+  unsigned char *key;
+  short num;          /* indicateur de niveau (optionnel), pour les mots plops, indique le
+			 niveau de plopification (0 -> normal, 1->forte, 2->kickette) */
+  unsigned char from_prefs; /* non nul si le mot provient d'une liste definie dans le
+			       fichier d'options */
+  KeyListType type;
+  KeyList *next;
+};
+
+void        key_list_destroy(KeyList *first);
+KeyList*    key_list_add(KeyList *first, const unsigned char *key, 
+			 KeyListType type, int num, int from_prefs);
+KeyList*    key_list_remove(KeyList *first, const unsigned char *key, KeyListType type);
+KeyList*    key_list_clear_from_prefs(KeyList *first);
+const char* key_list_type_name(KeyListType t);
+KeyList*    key_list_swap(KeyList *first, const char *s, KeyListType t, int num);
+unsigned    key_list_get_state(KeyList *first, int num);
+KeyList*    key_list_find(KeyList *hk, const char *s, KeyListType t);
+
+#endif
diff --git a/src/md5.c b/src/md5.c
new file mode 100644
index 0000000..9e5105c
--- /dev/null
+++ b/src/md5.c
@@ -0,0 +1,381 @@
+/*
+  Copyright (C) 1999, 2000, 2002 Aladdin Enterprises.  All rights reserved.
+
+  This software is provided 'as-is', without any express or implied
+  warranty.  In no event will the authors be held liable for any damages
+  arising from the use of this software.
+
+  Permission is granted to anyone to use this software for any purpose,
+  including commercial applications, and to alter it and redistribute it
+  freely, subject to the following restrictions:
+
+  1. The origin of this software must not be misrepresented; you must not
+     claim that you wrote the original software. If you use this software
+     in a product, an acknowledgment in the product documentation would be
+     appreciated but is not required.
+  2. Altered source versions must be plainly marked as such, and must not be
+     misrepresented as being the original software.
+  3. This notice may not be removed or altered from any source distribution.
+
+  L. Peter Deutsch
+  ghost at aladdin.com
+
+ */
+/* $Id: md5.c,v 1.2 2004/03/07 13:51:12 pouaite Exp $ */
+/*
+  Independent implementation of MD5 (RFC 1321).
+
+  This code implements the MD5 Algorithm defined in RFC 1321, whose
+  text is available at
+	http://www.ietf.org/rfc/rfc1321.txt
+  The code is derived from the text of the RFC, including the test suite
+  (section A.5) but excluding the rest of Appendix A.  It does not include
+  any code or documentation that is identified in the RFC as being
+  copyrighted.
+
+  The original and principal author of md5.c is L. Peter Deutsch
+  <ghost at aladdin.com>.  Other authors are noted in the change history
+  that follows (in reverse chronological order):
+
+  2002-04-13 lpd Clarified derivation from RFC 1321; now handles byte order
+	either statically or dynamically; added missing #include <string.h>
+	in library.
+  2002-03-11 lpd Corrected argument list for main(), and added int return
+	type, in test program and T value program.
+  2002-02-21 lpd Added missing #include <stdio.h> in test program.
+  2000-07-03 lpd Patched to eliminate warnings about "constant is
+	unsigned in ANSI C, signed in traditional"; made test program
+	self-checking.
+  1999-11-04 lpd Edited comments slightly for automatic TOC extraction.
+  1999-10-18 lpd Fixed typo in header comment (ansi2knr rather than md5).
+  1999-05-03 lpd Original version.
+ */
+
+#include "md5.h"
+#include <string.h>
+
+#undef BYTE_ORDER	/* 1 = big-endian, -1 = little-endian, 0 = unknown */
+#ifdef ARCH_IS_BIG_ENDIAN
+#  define BYTE_ORDER (ARCH_IS_BIG_ENDIAN ? 1 : -1)
+#else
+#  define BYTE_ORDER 0
+#endif
+
+#define T_MASK ((md5_word_t)~0)
+#define T1 /* 0xd76aa478 */ (T_MASK ^ 0x28955b87)
+#define T2 /* 0xe8c7b756 */ (T_MASK ^ 0x173848a9)
+#define T3    0x242070db
+#define T4 /* 0xc1bdceee */ (T_MASK ^ 0x3e423111)
+#define T5 /* 0xf57c0faf */ (T_MASK ^ 0x0a83f050)
+#define T6    0x4787c62a
+#define T7 /* 0xa8304613 */ (T_MASK ^ 0x57cfb9ec)
+#define T8 /* 0xfd469501 */ (T_MASK ^ 0x02b96afe)
+#define T9    0x698098d8
+#define T10 /* 0x8b44f7af */ (T_MASK ^ 0x74bb0850)
+#define T11 /* 0xffff5bb1 */ (T_MASK ^ 0x0000a44e)
+#define T12 /* 0x895cd7be */ (T_MASK ^ 0x76a32841)
+#define T13    0x6b901122
+#define T14 /* 0xfd987193 */ (T_MASK ^ 0x02678e6c)
+#define T15 /* 0xa679438e */ (T_MASK ^ 0x5986bc71)
+#define T16    0x49b40821
+#define T17 /* 0xf61e2562 */ (T_MASK ^ 0x09e1da9d)
+#define T18 /* 0xc040b340 */ (T_MASK ^ 0x3fbf4cbf)
+#define T19    0x265e5a51
+#define T20 /* 0xe9b6c7aa */ (T_MASK ^ 0x16493855)
+#define T21 /* 0xd62f105d */ (T_MASK ^ 0x29d0efa2)
+#define T22    0x02441453
+#define T23 /* 0xd8a1e681 */ (T_MASK ^ 0x275e197e)
+#define T24 /* 0xe7d3fbc8 */ (T_MASK ^ 0x182c0437)
+#define T25    0x21e1cde6
+#define T26 /* 0xc33707d6 */ (T_MASK ^ 0x3cc8f829)
+#define T27 /* 0xf4d50d87 */ (T_MASK ^ 0x0b2af278)
+#define T28    0x455a14ed
+#define T29 /* 0xa9e3e905 */ (T_MASK ^ 0x561c16fa)
+#define T30 /* 0xfcefa3f8 */ (T_MASK ^ 0x03105c07)
+#define T31    0x676f02d9
+#define T32 /* 0x8d2a4c8a */ (T_MASK ^ 0x72d5b375)
+#define T33 /* 0xfffa3942 */ (T_MASK ^ 0x0005c6bd)
+#define T34 /* 0x8771f681 */ (T_MASK ^ 0x788e097e)
+#define T35    0x6d9d6122
+#define T36 /* 0xfde5380c */ (T_MASK ^ 0x021ac7f3)
+#define T37 /* 0xa4beea44 */ (T_MASK ^ 0x5b4115bb)
+#define T38    0x4bdecfa9
+#define T39 /* 0xf6bb4b60 */ (T_MASK ^ 0x0944b49f)
+#define T40 /* 0xbebfbc70 */ (T_MASK ^ 0x4140438f)
+#define T41    0x289b7ec6
+#define T42 /* 0xeaa127fa */ (T_MASK ^ 0x155ed805)
+#define T43 /* 0xd4ef3085 */ (T_MASK ^ 0x2b10cf7a)
+#define T44    0x04881d05
+#define T45 /* 0xd9d4d039 */ (T_MASK ^ 0x262b2fc6)
+#define T46 /* 0xe6db99e5 */ (T_MASK ^ 0x1924661a)
+#define T47    0x1fa27cf8
+#define T48 /* 0xc4ac5665 */ (T_MASK ^ 0x3b53a99a)
+#define T49 /* 0xf4292244 */ (T_MASK ^ 0x0bd6ddbb)
+#define T50    0x432aff97
+#define T51 /* 0xab9423a7 */ (T_MASK ^ 0x546bdc58)
+#define T52 /* 0xfc93a039 */ (T_MASK ^ 0x036c5fc6)
+#define T53    0x655b59c3
+#define T54 /* 0x8f0ccc92 */ (T_MASK ^ 0x70f3336d)
+#define T55 /* 0xffeff47d */ (T_MASK ^ 0x00100b82)
+#define T56 /* 0x85845dd1 */ (T_MASK ^ 0x7a7ba22e)
+#define T57    0x6fa87e4f
+#define T58 /* 0xfe2ce6e0 */ (T_MASK ^ 0x01d3191f)
+#define T59 /* 0xa3014314 */ (T_MASK ^ 0x5cfebceb)
+#define T60    0x4e0811a1
+#define T61 /* 0xf7537e82 */ (T_MASK ^ 0x08ac817d)
+#define T62 /* 0xbd3af235 */ (T_MASK ^ 0x42c50dca)
+#define T63    0x2ad7d2bb
+#define T64 /* 0xeb86d391 */ (T_MASK ^ 0x14792c6e)
+
+
+static void
+md5_process(md5_state_t *pms, const md5_byte_t *data /*[64]*/)
+{
+    md5_word_t
+	a = pms->abcd[0], b = pms->abcd[1],
+	c = pms->abcd[2], d = pms->abcd[3];
+    md5_word_t t;
+#if BYTE_ORDER > 0
+    /* Define storage only for big-endian CPUs. */
+    md5_word_t X[16];
+#else
+    /* Define storage for little-endian or both types of CPUs. */
+    md5_word_t xbuf[16];
+    const md5_word_t *X;
+#endif
+
+    {
+#if BYTE_ORDER == 0
+	/*
+	 * Determine dynamically whether this is a big-endian or
+	 * little-endian machine, since we can use a more efficient
+	 * algorithm on the latter.
+	 */
+	static const int w = 1;
+
+	if (*((const md5_byte_t *)&w)) /* dynamic little-endian */
+#endif
+#if BYTE_ORDER <= 0		/* little-endian */
+	{
+	    /*
+	     * On little-endian machines, we can process properly aligned
+	     * data without copying it.
+	     */
+	    if (!((data - (const md5_byte_t *)0) & 3)) {
+		/* data are properly aligned */
+		X = (const md5_word_t *)data;
+	    } else {
+		/* not aligned */
+		memcpy(xbuf, data, 64);
+		X = xbuf;
+	    }
+	}
+#endif
+#if BYTE_ORDER == 0
+	else			/* dynamic big-endian */
+#endif
+#if BYTE_ORDER >= 0		/* big-endian */
+	{
+	    /*
+	     * On big-endian machines, we must arrange the bytes in the
+	     * right order.
+	     */
+	    const md5_byte_t *xp = data;
+	    int i;
+
+#  if BYTE_ORDER == 0
+	    X = xbuf;		/* (dynamic only) */
+#  else
+#    define xbuf X		/* (static only) */
+#  endif
+	    for (i = 0; i < 16; ++i, xp += 4)
+		xbuf[i] = xp[0] + (xp[1] << 8) + (xp[2] << 16) + (xp[3] << 24);
+	}
+#endif
+    }
+
+#define ROTATE_LEFT(x, n) (((x) << (n)) | ((x) >> (32 - (n))))
+
+    /* Round 1. */
+    /* Let [abcd k s i] denote the operation
+       a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s). */
+#define F(x, y, z) (((x) & (y)) | (~(x) & (z)))
+#define SET(a, b, c, d, k, s, Ti)\
+  t = a + F(b,c,d) + X[k] + Ti;\
+  a = ROTATE_LEFT(t, s) + b
+    /* Do the following 16 operations. */
+    SET(a, b, c, d,  0,  7,  T1);
+    SET(d, a, b, c,  1, 12,  T2);
+    SET(c, d, a, b,  2, 17,  T3);
+    SET(b, c, d, a,  3, 22,  T4);
+    SET(a, b, c, d,  4,  7,  T5);
+    SET(d, a, b, c,  5, 12,  T6);
+    SET(c, d, a, b,  6, 17,  T7);
+    SET(b, c, d, a,  7, 22,  T8);
+    SET(a, b, c, d,  8,  7,  T9);
+    SET(d, a, b, c,  9, 12, T10);
+    SET(c, d, a, b, 10, 17, T11);
+    SET(b, c, d, a, 11, 22, T12);
+    SET(a, b, c, d, 12,  7, T13);
+    SET(d, a, b, c, 13, 12, T14);
+    SET(c, d, a, b, 14, 17, T15);
+    SET(b, c, d, a, 15, 22, T16);
+#undef SET
+
+     /* Round 2. */
+     /* Let [abcd k s i] denote the operation
+          a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s). */
+#define G(x, y, z) (((x) & (z)) | ((y) & ~(z)))
+#define SET(a, b, c, d, k, s, Ti)\
+  t = a + G(b,c,d) + X[k] + Ti;\
+  a = ROTATE_LEFT(t, s) + b
+     /* Do the following 16 operations. */
+    SET(a, b, c, d,  1,  5, T17);
+    SET(d, a, b, c,  6,  9, T18);
+    SET(c, d, a, b, 11, 14, T19);
+    SET(b, c, d, a,  0, 20, T20);
+    SET(a, b, c, d,  5,  5, T21);
+    SET(d, a, b, c, 10,  9, T22);
+    SET(c, d, a, b, 15, 14, T23);
+    SET(b, c, d, a,  4, 20, T24);
+    SET(a, b, c, d,  9,  5, T25);
+    SET(d, a, b, c, 14,  9, T26);
+    SET(c, d, a, b,  3, 14, T27);
+    SET(b, c, d, a,  8, 20, T28);
+    SET(a, b, c, d, 13,  5, T29);
+    SET(d, a, b, c,  2,  9, T30);
+    SET(c, d, a, b,  7, 14, T31);
+    SET(b, c, d, a, 12, 20, T32);
+#undef SET
+
+     /* Round 3. */
+     /* Let [abcd k s t] denote the operation
+          a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s). */
+#define H(x, y, z) ((x) ^ (y) ^ (z))
+#define SET(a, b, c, d, k, s, Ti)\
+  t = a + H(b,c,d) + X[k] + Ti;\
+  a = ROTATE_LEFT(t, s) + b
+     /* Do the following 16 operations. */
+    SET(a, b, c, d,  5,  4, T33);
+    SET(d, a, b, c,  8, 11, T34);
+    SET(c, d, a, b, 11, 16, T35);
+    SET(b, c, d, a, 14, 23, T36);
+    SET(a, b, c, d,  1,  4, T37);
+    SET(d, a, b, c,  4, 11, T38);
+    SET(c, d, a, b,  7, 16, T39);
+    SET(b, c, d, a, 10, 23, T40);
+    SET(a, b, c, d, 13,  4, T41);
+    SET(d, a, b, c,  0, 11, T42);
+    SET(c, d, a, b,  3, 16, T43);
+    SET(b, c, d, a,  6, 23, T44);
+    SET(a, b, c, d,  9,  4, T45);
+    SET(d, a, b, c, 12, 11, T46);
+    SET(c, d, a, b, 15, 16, T47);
+    SET(b, c, d, a,  2, 23, T48);
+#undef SET
+
+     /* Round 4. */
+     /* Let [abcd k s t] denote the operation
+          a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s). */
+#define I(x, y, z) ((y) ^ ((x) | ~(z)))
+#define SET(a, b, c, d, k, s, Ti)\
+  t = a + I(b,c,d) + X[k] + Ti;\
+  a = ROTATE_LEFT(t, s) + b
+     /* Do the following 16 operations. */
+    SET(a, b, c, d,  0,  6, T49);
+    SET(d, a, b, c,  7, 10, T50);
+    SET(c, d, a, b, 14, 15, T51);
+    SET(b, c, d, a,  5, 21, T52);
+    SET(a, b, c, d, 12,  6, T53);
+    SET(d, a, b, c,  3, 10, T54);
+    SET(c, d, a, b, 10, 15, T55);
+    SET(b, c, d, a,  1, 21, T56);
+    SET(a, b, c, d,  8,  6, T57);
+    SET(d, a, b, c, 15, 10, T58);
+    SET(c, d, a, b,  6, 15, T59);
+    SET(b, c, d, a, 13, 21, T60);
+    SET(a, b, c, d,  4,  6, T61);
+    SET(d, a, b, c, 11, 10, T62);
+    SET(c, d, a, b,  2, 15, T63);
+    SET(b, c, d, a,  9, 21, T64);
+#undef SET
+
+     /* Then perform the following additions. (That is increment each
+        of the four registers by the value it had before this block
+        was started.) */
+    pms->abcd[0] += a;
+    pms->abcd[1] += b;
+    pms->abcd[2] += c;
+    pms->abcd[3] += d;
+}
+
+void
+md5_init(md5_state_t *pms)
+{
+    pms->count[0] = pms->count[1] = 0;
+    pms->abcd[0] = 0x67452301;
+    pms->abcd[1] = /*0xefcdab89*/ T_MASK ^ 0x10325476;
+    pms->abcd[2] = /*0x98badcfe*/ T_MASK ^ 0x67452301;
+    pms->abcd[3] = 0x10325476;
+}
+
+void
+md5_append(md5_state_t *pms, const md5_byte_t *data, int nbytes)
+{
+    const md5_byte_t *p = data;
+    int left = nbytes;
+    int offset = (pms->count[0] >> 3) & 63;
+    md5_word_t nbits = (md5_word_t)(nbytes << 3);
+
+    if (nbytes <= 0)
+	return;
+
+    /* Update the message length. */
+    pms->count[1] += nbytes >> 29;
+    pms->count[0] += nbits;
+    if (pms->count[0] < nbits)
+	pms->count[1]++;
+
+    /* Process an initial partial block. */
+    if (offset) {
+	int copy = (offset + nbytes > 64 ? 64 - offset : nbytes);
+
+	memcpy(pms->buf + offset, p, copy);
+	if (offset + copy < 64)
+	    return;
+	p += copy;
+	left -= copy;
+	md5_process(pms, pms->buf);
+    }
+
+    /* Process full blocks. */
+    for (; left >= 64; p += 64, left -= 64)
+	md5_process(pms, p);
+
+    /* Process a final partial block. */
+    if (left)
+	memcpy(pms->buf, p, left);
+}
+
+void
+md5_finish(md5_state_t *pms, md5_byte_t digest[16])
+{
+    static const md5_byte_t pad[64] = {
+	0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+	0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+    };
+    md5_byte_t data[8];
+    int i;
+    memset(digest, 0, 16);
+    /* Save the length before padding. */
+    for (i = 0; i < 8; ++i)
+	data[i] = (md5_byte_t)(pms->count[i >> 2] >> ((i & 3) << 3));
+    /* Pad to 56 bytes mod 64. */
+    md5_append(pms, pad, ((55 - (pms->count[0] >> 3)) & 63) + 1);
+    /* Append the length. */
+    md5_append(pms, data, 8);
+    for (i = 0; i < 16; ++i)
+	digest[i] = (md5_byte_t)(pms->abcd[i >> 2] >> ((i & 3) << 3));
+}
diff --git a/src/md5.h b/src/md5.h
new file mode 100644
index 0000000..86ee082
--- /dev/null
+++ b/src/md5.h
@@ -0,0 +1,91 @@
+/*
+  Copyright (C) 1999, 2002 Aladdin Enterprises.  All rights reserved.
+
+  This software is provided 'as-is', without any express or implied
+  warranty.  In no event will the authors be held liable for any damages
+  arising from the use of this software.
+
+  Permission is granted to anyone to use this software for any purpose,
+  including commercial applications, and to alter it and redistribute it
+  freely, subject to the following restrictions:
+
+  1. The origin of this software must not be misrepresented; you must not
+     claim that you wrote the original software. If you use this software
+     in a product, an acknowledgment in the product documentation would be
+     appreciated but is not required.
+  2. Altered source versions must be plainly marked as such, and must not be
+     misrepresented as being the original software.
+  3. This notice may not be removed or altered from any source distribution.
+
+  L. Peter Deutsch
+  ghost at aladdin.com
+
+ */
+/* $Id: md5.h,v 1.1 2004/02/29 15:01:19 pouaite Exp $ */
+/*
+  Independent implementation of MD5 (RFC 1321).
+
+  This code implements the MD5 Algorithm defined in RFC 1321, whose
+  text is available at
+	http://www.ietf.org/rfc/rfc1321.txt
+  The code is derived from the text of the RFC, including the test suite
+  (section A.5) but excluding the rest of Appendix A.  It does not include
+  any code or documentation that is identified in the RFC as being
+  copyrighted.
+
+  The original and principal author of md5.h is L. Peter Deutsch
+  <ghost at aladdin.com>.  Other authors are noted in the change history
+  that follows (in reverse chronological order):
+
+  2002-04-13 lpd Removed support for non-ANSI compilers; removed
+	references to Ghostscript; clarified derivation from RFC 1321;
+	now handles byte order either statically or dynamically.
+  1999-11-04 lpd Edited comments slightly for automatic TOC extraction.
+  1999-10-18 lpd Fixed typo in header comment (ansi2knr rather than md5);
+	added conditionalization for C++ compilation from Martin
+	Purschke <purschke at bnl.gov>.
+  1999-05-03 lpd Original version.
+ */
+
+#ifndef md5_INCLUDED
+#  define md5_INCLUDED
+
+/*
+ * This package supports both compile-time and run-time determination of CPU
+ * byte order.  If ARCH_IS_BIG_ENDIAN is defined as 0, the code will be
+ * compiled to run only on little-endian CPUs; if ARCH_IS_BIG_ENDIAN is
+ * defined as non-zero, the code will be compiled to run only on big-endian
+ * CPUs; if ARCH_IS_BIG_ENDIAN is not defined, the code will be compiled to
+ * run on either big- or little-endian CPUs, but will run slightly less
+ * efficiently on either one than if ARCH_IS_BIG_ENDIAN is defined.
+ */
+
+typedef unsigned char md5_byte_t; /* 8-bit byte */
+typedef unsigned int md5_word_t; /* 32-bit word */
+
+/* Define the state of the MD5 Algorithm. */
+typedef struct md5_state_s {
+    md5_word_t count[2];	/* message length in bits, lsw first */
+    md5_word_t abcd[4];		/* digest buffer */
+    md5_byte_t buf[64];		/* accumulate block */
+} md5_state_t;
+
+#ifdef __cplusplus
+extern "C" 
+{
+#endif
+
+/* Initialize the algorithm. */
+void md5_init(md5_state_t *pms);
+
+/* Append a string to the message. */
+void md5_append(md5_state_t *pms, const md5_byte_t *data, int nbytes);
+
+/* Finish the message and return the digest. */
+void md5_finish(md5_state_t *pms, md5_byte_t digest[16]);
+
+#ifdef __cplusplus
+}  /* end extern "C" */
+#endif
+
+#endif /* md5_INCLUDED */
diff --git a/src/msgbox.c b/src/msgbox.c
new file mode 100644
index 0000000..3458196
--- /dev/null
+++ b/src/msgbox.c
@@ -0,0 +1,268 @@
+/*
+    wmCoinCoin, a braindamaged WindowMaker dock applet
+
+    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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+ */
+
+/*
+  rcsid=$Id: msgbox.c,v 1.12 2005/02/22 18:45:30 pouaite Exp $
+  ChangeLog:
+  $Log: msgbox.c,v $
+  Revision 1.12  2005/02/22 18:45:30  pouaite
+  *** empty log message ***
+
+  Revision 1.11  2004/02/29 19:01:27  pouaite
+  et hop
+
+  Revision 1.10  2004/02/29 15:01:19  pouaite
+  May the charles bronson spirit be with you
+
+  Revision 1.9  2003/06/25 20:18:21  pouaite
+  support xinerama qui marche
+
+  Revision 1.8  2003/02/25 23:05:58  pouaite
+  fix warning
+
+  Revision 1.7  2003/01/19 18:52:23  pouaite
+  patch gle (couleur de fond du palmi)
+
+  Revision 1.6  2002/08/17 18:33:39  pouaite
+  grosse commition
+
+  Revision 1.5  2002/06/23 10:44:05  pouaite
+  i18n-isation of the coincoin(kwakkwak), thanks to the incredible jjb !
+
+  Revision 1.4  2002/04/01 01:39:38  pouaite
+  grosse grosse commition (cf changelog)
+
+  Revision 1.3  2001/12/18 12:43:37  pouaite
+  ajout de l'option de la fonte des ballons d'aide (pour mr. imr !) + bugfix d'une connerie assez naze dans la gestion du nom du fichier d'options (merci glandium de me l'avoir signal�)
+
+  Revision 1.2  2001/12/02 18:34:54  pouaite
+  ajout de tags cvs Id et Log un peu partout...
+
+*/
+
+
+#include <libintl.h>
+#define _(String) gettext (String)
+
+
+#include <X11/Xlib.h>
+#include "coincoin.h"
+#include "coin_xutil.h"
+#include "dock.h"
+
+struct _MsgBox {
+  Window win;
+  PicoHtml *ph;
+  int w,h;
+  int mapped;
+  CCColorId bg_color, dark_color, light_color, bg_title_color;
+};
+
+
+#define TOP	0
+#define BOTTOM	1
+#define LEFT	0
+#define RIGHT	2
+
+#define 	SPACE	12
+
+
+static void
+msgbox_refresh(Dock *dock, Drawable d)
+{
+  MsgBox *m = dock->msgbox;
+  char *title;
+  int tw;
+
+  title = str_printf("%s " VERSION,_("MESSAGE FROM WMCOINCOIN"));
+
+  if (m->mapped == 0) return;
+  //printf("refresh!\n");
+  
+  tw = ccfont_text_width8(picohtml_get_fn_bold(m->ph), title, -1);
+
+  XSetForeground(dock->display, dock->NormalGC, cccolor_pixel(m->bg_color));
+  XFillRectangle(dock->display, d, dock->NormalGC, 1, 13, m->w-1, m->h-1);
+
+  XSetForeground(dock->display, dock->NormalGC, cccolor_pixel(m->bg_title_color));
+  XFillRectangle(dock->display, d, dock->NormalGC, 1, 1, m->w-2, 12);
+  //XSetForeground(dock->display, dock->NormalGC, WhitePixel(dock->display, dock->screennum));
+  //XSetFont(dock->display, dock->NormalGC, picohtml_get_fn_bold(m->ph)->fid);
+  //XDrawString(dock->display, d, dock->NormalGC, m->w/2-tw/2, 11, title, strlen(title)); 
+  ccfont_draw_string8(picohtml_get_fn_bold(m->ph), dock->white_color,
+                      d, m->w/2-tw/2, 11, title, strlen(title));
+
+  XSetForeground(dock->display, dock->NormalGC, cccolor_pixel(m->dark_color));
+  XDrawLine(dock->display, d, dock->NormalGC, 0, m->h-1, m->w-1, m->h-1);
+  XDrawLine(dock->display, d, dock->NormalGC, m->w-1, 0, m->w-1, m->h-1);
+  XSetForeground(dock->display, dock->NormalGC, cccolor_pixel(m->light_color));
+  XDrawLine(dock->display, d, dock->NormalGC, 0, 0, m->w-1, 0);
+  XDrawLine(dock->display, d, dock->NormalGC, 0, 0, 0, m->h-1);
+  picohtml_render(m->ph, d, 5, 13);
+  free(title);
+}
+
+
+void
+msgbox_build(Dock *dock)
+{
+  MsgBox *m;
+
+  ALLOC_OBJ(m, MsgBox);
+
+  m->bg_color = dock->bg_color;
+  m->dark_color = dock->dark_color;
+  m->light_color = dock->light_color;
+  m->bg_title_color = cccolor_get_rgb(0, 50, 200);
+  m->mapped = 0;
+  m->ph = NULL;
+  dock->msgbox = m;
+}
+
+void
+msgbox_show(Dock *dock, char *text)
+{
+  XSetWindowAttributes wa;
+  MsgBox *m;
+  //  int scr_width, scr_height;
+  int iconx, icony, mx, my;
+  int xiscr;
+  m = dock->msgbox;
+  
+  //  fprintf(stderr, "MSGBOX: %s\n", text);
+  if (m->mapped) {
+    msgbox_hide(dock);
+  }
+
+  
+  assert(m->ph == NULL);
+  m->ph = picohtml_create(dock, Prefs.balloon_fn_family, Prefs.balloon_fn_size, 0);
+  picohtml_set_parag_skip(m->ph, 1.0);
+  picohtml_set_line_skip(m->ph, 1.0);
+  picohtml_set_parag_indent(m->ph, 0);
+  picohtml_set_tabul_skip(m->ph, 10);
+
+  m->w = 300;
+  picohtml_parse(m->ph, text, m->w);
+  picohtml_gettxtextent(m->ph, &m->w, &m->h);
+
+  m->w = MAX(m->w, 150);
+
+  m->h += 20; m->w += 10;
+
+  xiscr = MAX(dock_get_icon_pos(dock, &iconx, &icony),0);
+  
+  if (iconx - dock->xiscreen[xiscr].x_org < m->w+10) {
+    mx = iconx + 70;
+  } else {
+    mx = iconx - m->w - 10;
+  }
+  if (icony - dock->xiscreen[xiscr].y_org < m->h+10) {
+    my = icony + 70;
+  } else {
+    my = icony - m->h - 10;
+  }
+
+  /* creation fenetre (une bonne fois pour toutes) */
+  m->win = XCreateSimpleWindow (dock->display, RootWindow(dock->display,dock->screennum), 
+				mx, my, m->w, m->h, 0,
+				cccolor_pixel(m->dark_color),
+				cccolor_pixel(m->bg_color));
+
+  //wa.background_pixmap = ButtonBarImage ;
+  wa.event_mask =
+    ExposureMask | 
+    ButtonPressMask | 
+    ButtonReleaseMask;
+  wa.override_redirect = True ;
+  //  wa.save_under = True;
+  XChangeWindowAttributes (dock->display, m->win,
+			   /*CWSaveUnder | */CWEventMask | CWOverrideRedirect, &wa);
+
+
+  m->mapped = 1;
+  XMapRaised(dock->display, m->win);
+  //  msgbox_refresh(dock);
+}
+
+void
+msgbox_hide(Dock *dock)
+{
+  MsgBox *m = dock->msgbox;
+
+  BLAHBLAH(3, printf(_("close msgbox\n")));
+  if (m->mapped) {
+    m->mapped = 0;
+    
+    picohtml_destroy(m->ph); m->ph = NULL;
+    XDestroyWindow(dock->display, m->win);
+    m->win = None;
+  }
+}
+
+int 
+msgbox_ismapped(Dock *dock)
+{
+  return dock->msgbox->mapped;
+}
+
+Window
+msgbox_get_win(Dock *dock)
+{
+  return dock->msgbox->win;
+}
+
+
+void 
+msgbox_dispatch_event(Dock *dock, XEvent *event)
+{
+  MsgBox *m = dock->msgbox;
+
+  if (m->mapped) {
+    switch (event->type) {
+    case Expose:
+      {
+	if (event->xexpose.count == 0) {
+	  msgbox_refresh(dock, m->win);
+	}
+      } break;
+      //    case ButtonPress:
+    case ButtonRelease:
+      {
+	msgbox_hide(dock);
+      } break;
+    }
+  }
+}
+
+void
+msgbox_show_modal(Dock *dock, char *text)
+{
+  MsgBox *m = dock->msgbox;
+
+  XEvent event;
+  msgbox_show(dock, text);
+  while (m->mapped) {
+    XNextEvent(dock->display, &event);
+    if (event.xany.window == m->win) {
+      msgbox_dispatch_event(dock, &event);
+    }
+  }
+}
diff --git a/src/myprintf.c b/src/myprintf.c
new file mode 100644
index 0000000..cdc6d70
--- /dev/null
+++ b/src/myprintf.c
@@ -0,0 +1,329 @@
+/*
+    wmCoinCoin, the stupidest WindowMaker dock applet
+    Copyright (C) 2001  Julien Pommier
+
+    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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+
+*/
+
+/*
+  rcsid=$Id: myprintf.c,v 1.3 2003/03/02 14:41:22 pouaite Exp $
+  ChangeLog:
+  $Log: myprintf.c,v $
+  Revision 1.3  2003/03/02 14:41:22  pouaite
+  ce commit est d�di� � la m�moire de jacques martin
+
+  Revision 1.2  2001/12/02 18:34:54  pouaite
+  ajout de tags cvs Id et Log un peu partout...
+
+*/
+
+#include <stdio.h>
+#include <stdarg.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include "myprintf.h"
+
+int use_ansi_codes = 1;
+int use_color_codes = 1;
+
+static struct {
+  char *code;
+  char *esc_sequence;
+  int is_color_code;
+  char *replacement;
+} code_list[] = {{"def","\033[0m", 0, ""},    /* default attributes */
+		 {"cls","\033[2J", 0, "\n"},    /* clear screen */
+		 {"clb","\033[1K", 0, "\015"},  /* clear begin of line */
+		 {"cle","\033[2K", 0, ""},      /* clear end of line */
+		 {"cll","\015\033[2K", 0, "\015"},  /* clear line */
+		 {"bld","\033[1m", 0, ""},      /* bold */
+		 {"blk","\033[5m", 0, ""},      /* blink */
+		 {"nblk","\033[5m", 0, ""},     /* disable blink */
+		 {"rev","\033[7m", 0, ""},      /* reverse video */
+		 {"nrev","\033[27m", 0, ""},    /* disable reverse video */
+		 {"brt","\033[22m",0, ""},      /* bright */
+		 {"nor","\033[22m",0, ""},      /* normal intensity */ 	 
+		 {"blk","\033[30m",1, ""},               /* black foreground*/	       
+		 {"red","\033[22m\033[31m",1, ""},               /* red foreground */	       
+		 {"RED","\033[1m\033[31m",1, ""},       /* bright red foreground */
+		 {"grn","\033[22m\033[32m",1, ""},               /* green foreground */	       
+		 {"GRN","\033[1m\033[32m",1, ""},       /* bright green */
+		 {"yel","\033[22m\033[33m",1, ""},               /* brown foreground */	       
+		 {"YEL","\033[1m\033[33m",1, ""},       /* (bright) yellow */
+		 {"blu","\033[22m\033[34m",1, ""},               /* blue foreground */	       
+		 {"BLU","\033[1m\033[34m",1, ""},       /* bright blue */
+		 {"mag","\033[22m\033[35m",1, ""},               /* magenta foreground */	       
+		 {"MAG","\033[1m\033[35m",1, ""},       /* bright magenta */
+		 {"cya","\033[22m\033[36m",1, ""},               /* cyan foreground */	       
+		 {"CYA","\033[1m\033[36m",1, ""},       /* bright cyan */
+		 {"wht","\033[22m\033[37m",1, ""},               /* white foreground */	       
+		 {"WHT","\033[1m\033[37m",1, ""},       /* bright white */
+		 {"bblk","\033[40m",1, ""},              /* black background*/	       
+		 {"bred","\033[41m",1, ""},              /* red background */	       
+		 {"bgrn","\033[42m",1, ""},              /* green background */	       
+		 {"byel","\033[43m",1, ""},              /* brown background */	       
+		 {"bblu","\033[44m",1, ""},              /* blue background */	       
+		 {"bmag","\033[45m",1, ""},              /* magenta background */	       
+		 {"bcya","\033[46m",1, ""},              /* cyan background */	       
+		 {"bwht","\033[47m",1, ""},              /* white background */	       
+		 {"bdef","\033[49m",1, ""},              /* set default background color */
+		 {"und","\033[4m", 0, ""},              /* underscore, default foreground */
+		 {"nund","\033[24m", 0, ""},             /* no underscore */
+		 {"", "\n\n[myprintf:MAUVAIS CODE!!!]", 0, "\n\n[myprintf:MAUVAIS CODE]"}};
+
+#define ERROR_CODE ((sizeof(code_list)/sizeof(code_list[0]))-1)
+
+char * reformat(const char *fmt);
+
+	       
+void 
+myprintf_disable_ansi_codes() 
+{
+  use_ansi_codes = 0;
+  use_color_codes = 0;
+}
+
+void 
+myprintf_disable_color() 
+{
+  use_color_codes = 0;
+}
+
+void 
+myprintf_enable_ansi_codes() 
+{
+  use_ansi_codes = 1;
+}
+
+void 
+myprintf_enable_color() 
+{
+  use_ansi_codes = 1;
+  use_color_codes = 1;
+}
+
+
+int
+myfprintf(FILE *f, const char *fmt, ...)
+{
+  va_list ap;
+  char *fmt2;
+  int nchar;
+
+  if (isatty(fileno(f))) {
+    myprintf_enable_color();
+  } else {
+    myprintf_disable_ansi_codes();
+  }
+  va_start(ap, fmt);
+  fmt2 = reformat(fmt);
+  if (fmt2) {
+    nchar = vfprintf(f, fmt2, ap);
+    free(fmt2);
+  } else {  /* il y a eu une erreur */
+    vfprintf(f, fmt, ap);
+    nchar = -1;
+  }
+  return nchar;
+}
+
+int
+myprintf(const char *fmt, ...)
+{
+  va_list ap;
+  char *fmt2;
+  int nchar;
+
+  if (isatty(STDOUT_FILENO)) {
+    myprintf_enable_color();
+  } else {
+    myprintf_disable_ansi_codes();
+  }
+  va_start(ap, fmt);
+  fmt2 = reformat(fmt);
+  if (fmt2) {
+    nchar = vprintf(fmt2, ap);
+    free(fmt2);
+  } else {  /* il y a eu une erreur */
+    vprintf(fmt, ap);
+    nchar = -1;
+  }
+  return nchar;
+}
+
+int
+mysprintf(char *s, const char *fmt, ...)
+{
+  va_list ap;
+  char *fmt2;
+  int nchar;
+
+  va_start(ap, fmt);
+  fmt2 = reformat(fmt);
+  if (fmt2) {
+    nchar = vsprintf(s, fmt2, ap);
+    free(fmt2);
+  } else {  /* il y a eu une erreur */
+    vsprintf(s, fmt, ap);
+    nchar = -1;
+  }
+  return nchar;
+}
+
+
+
+#define FMT_MARGE 50      /* nombre d'octets alloues en prevision de l'allongement de 
+			     'outformat' au cours du remplacement des code par 
+			     les sequences ANSI */
+
+char *
+reformat(const char *fmt)
+{
+  int cnum;
+  char *format_out, *format_in;
+  int maxsize;
+  char *esc, *esc2, *def_pos;
+  int j;
+  char *p, *p0, *p1;
+  int just_replace, need_len, code_len;
+
+  if (fmt == NULL) return 0;
+
+  if (use_ansi_codes) {
+    format_in = (char*)malloc(strlen(fmt) + strlen("%<def>") + 1);
+    strcpy(format_in, fmt); 
+    strcat(format_in, "%<def>"); /* retour aux couleurs par defaut a la fin de l'affichage */
+  } else {
+    format_in = (char*)malloc(strlen(fmt) + 1);
+    strcpy(format_in, fmt); 
+  }
+
+  maxsize = strlen(format_in) + FMT_MARGE;
+  format_out = (char*)malloc(maxsize+1); 
+  if (format_out == NULL) { return NULL; }
+  format_out[0]=0;
+  j = 0;
+  p1 = format_in;
+  do {
+    /* recherche de la chaine '%<' */
+    p0 = p1;
+    p1 = strstr(p0, "%<");
+    if (p1) {           
+      /* recherche du code qui suit '%<' */
+      cnum = 0;
+      while (code_list[cnum].code[0]) {
+	if (strncmp(p1+2, code_list[cnum].code, strlen(code_list[cnum].code)) == 0) {
+	  break;
+	}
+	cnum++;
+      }
+
+      /* remplacement du code si necessaire */
+      if (use_ansi_codes == 0 || (code_list[cnum].is_color_code == 1 && use_color_codes == 0)) {
+	esc = code_list[cnum].replacement;
+      } else {
+	esc = code_list[cnum].esc_sequence;
+      }
+
+      just_replace = 0;
+      def_pos = NULL;
+      if (strlen(p1+2) <= strlen(code_list[cnum].code)) {
+	esc = code_list[ERROR_CODE].code;
+      } else {
+	char nextc =  p1[2 + strlen(code_list[cnum].code)];
+	if (nextc == '>') {
+	  just_replace = 1;
+	} else if (nextc == ' ') {
+	  def_pos = p1 + 2 + strlen(code_list[cnum].code);
+	  do {
+	    def_pos++;
+	  } while (*def_pos != '>' && def_pos < p1 + strlen(p1)-1);
+	  if (*def_pos == '>') {
+	    just_replace = 0;  /* on va chercher le '>' correspondant et 
+				  le remplacer par %<def> */
+	  } else {
+	    just_replace = 1;
+	    esc = code_list[ERROR_CODE].esc_sequence;
+	  }
+	}
+	else {
+	  just_replace = 1;
+	  esc = code_list[ERROR_CODE].esc_sequence;
+	}
+      }
+
+      esc2 = NULL;
+      if (just_replace == 0) {
+	if (use_ansi_codes == 0) {
+	  esc2 = code_list[0].replacement;
+	} else {
+	  esc2 = code_list[0].esc_sequence;
+	}
+	need_len = strlen(esc) + j + (p1 - p0) + strlen(esc2) - 1;
+      } else {
+	need_len = strlen(esc) + j + (p1 - p0);
+      }
+
+      code_len = strlen(code_list[cnum].code); /* +1 pour le '>' */
+
+      /* verification espace disponible dans 'format_out' */
+      if (need_len >= maxsize) {
+	maxsize = need_len + FMT_MARGE;
+	format_out = (char*)realloc(format_out, maxsize+1);
+	if (format_out == NULL) { return NULL; }
+      }
+      
+      /* copie de la partie avant le code */
+      for (p=p0; p < p1; p++) {
+	format_out[j++] = *p;
+      }
+
+      /* copie de la sequence ANSI */
+      for (p = esc; *p; p++)
+	format_out[j++] = *p;
+      format_out[j] = 0;
+
+      p1 += 2+code_len; 
+      if (just_replace == 1) {
+	p1++;     /* saute le '>' */
+      } else {      /* copie jusqu'au '>' et insere le %<def>*/
+	for (p = p1+1; p < def_pos; p++) {
+	  format_out[j++] = *p;
+	}
+	for (p = esc2; *p; p++)
+	  format_out[j++] = *p;
+        format_out[j] = 0;
+	p1 = def_pos+1;
+      }
+
+    } else {       /* pas de '%<' avant la fin de la chaine */
+      /* verif espace disponible */
+      if (j + (int)strlen(p0) >= maxsize) {
+	maxsize = j+strlen(p0);
+	format_out = (char*)realloc(format_out, maxsize+1);
+	if (format_out == NULL) { return NULL; }
+      }
+      /* et paf */
+      strcat(format_out, p0);
+      p0 += strlen(p0);
+    }
+  } while (*p0);
+  free(format_in);
+  return format_out;
+}
+
diff --git a/src/myprintf.h b/src/myprintf.h
new file mode 100644
index 0000000..7773f73
--- /dev/null
+++ b/src/myprintf.h
@@ -0,0 +1,32 @@
+/*
+  rcsid=$Id: myprintf.h,v 1.4 2003/03/02 14:41:22 pouaite Exp $
+
+  ChangeLog:
+  $Log: myprintf.h,v $
+  Revision 1.4  2003/03/02 14:41:22  pouaite
+  ce commit est d�di� � la m�moire de jacques martin
+
+  Revision 1.3  2002/04/04 20:38:10  pouaite
+  plop
+
+  Revision 1.2  2001/12/02 18:34:54  pouaite
+  ajout de tags cvs Id et Log un peu partout...
+
+  Revision 1.1.1.1  2001/11/27 19:17:09  pouaite
+  vraie initialisation
+*/
+
+#ifndef __MY_PRINTF_H
+#define __MY_PRINTF_H
+
+#include <stdio.h>
+
+#ifndef __GNUC__
+#  define __attribute__(x) /*nothing*/
+#endif
+
+int  myfprintf(FILE *f, const char *fmt, ...); /*__attribute__((format(printf,1,2)));*/
+int  myprintf(const char *fmt, ...); /*__attribute__((format(printf,1,2)));*/
+int  mysprintf(char *s, const char *fmt, ...); /*__attribute__((format(printf,1,2)));*/
+
+#endif
diff --git a/src/options_list.h b/src/options_list.h
new file mode 100644
index 0000000..ec11d77
--- /dev/null
+++ b/src/options_list.h
@@ -0,0 +1,308 @@
+/* ce fichier est genere autmatiquement � partir du fichier "options"
+   par le script "genoptlst.sh" NE PAS EDITER !!! */
+#ifndef OPTIONS_LIST_H
+
+#define OPTIONS_LIST_H
+
+
+typedef enum {
+OBSOLETE_OPT_site,
+OPT_board_site,
+OPT_rss_site,
+OPT_pop_site,
+OPT_http_timeout,
+OPT_http_inet_ip_version,
+OPT_http_browser,
+OPT_http_browser2,
+OPT_http_gogole_search_url,
+OPT_http_wikipedia_search_url,
+OPT_pinnipede_font_family,
+OPT_pinnipede_font_size,
+OPT_pinnipede_start_in_transparency_mode,
+OPT_pinnipede_use_fake_real_transparency,
+OPT_pinnipede_transparency,
+OPT_pinnipede_emph_color,
+OPT_pinnipede_sel_bgcolor,
+OPT_pinnipede_popup_fgcolor,
+OPT_pinnipede_popup_bgcolor,
+OPT_pinnipede_buttonbar_bgcolor,
+OPT_pinnipede_buttonbar_fgcolor,
+OPT_pinnipede_buttonbar_msgcnt_color,
+OPT_pinnipede_buttonbar_updlcnt_color,
+OPT_pinnipede_buttonbar_progressbar_color,
+OPT_pinnipede_hilight_my_msg_color,
+OPT_pinnipede_hilight_answer_my_msg_color,
+OPT_pinnipede_hilight_keyword_color0,
+OPT_pinnipede_hilight_keyword_color1,
+OPT_pinnipede_hilight_keyword_color2,
+OPT_pinnipede_hilight_keyword_color3,
+OPT_pinnipede_hilight_keyword_color4,
+OPT_pinnipede_plopify_color,
+OPT_scrollcoin_bg_color,
+OPT_scrollcoin_bg_light_color,
+OPT_scrollcoin_bg_dark_color,
+OPT_scrollcoin_arrow_normal_color,
+OPT_scrollcoin_arrow_emphasized_color,
+OPT_scrollcoin_bar_color,
+OPT_scrollcoin_bar_light_color,
+OPT_scrollcoin_bar_dark_color,
+OPT_pinnipede_location,
+OPT_pinnipede_dimensions,
+OPT_pinnipede_buttons,
+OPT_pinnipede_show_tags,
+OPT_pinnipede_show_seconds,
+OPT_pinnipede_nick_mode,
+OPT_pinnipede_show_troll_score,
+OPT_pinnipede_use_classical_tabs,
+OPT_pinnipede_use_colored_tabs,
+OPT_pinnipede_tabs_position,
+OPT_pinnipede_plop_keywords,
+OPT_pinnipede_hilight_keywords,
+OPT_pinnipede_plop_words,
+OPT_pinnipede_hungry_boitakon,
+OPT_pinnipede_url_replace,
+OPT_pinnipede_auto_open,
+OPT_board_miniua_rule,
+OPT_spell_enable,
+OPT_spell_cmd,
+OPT_spell_dict,
+OPT_font_encoding,
+OPT_tribunenews_max_refresh_delay,
+OPT_tribunenews_switch_off_coincoin_delay,
+OPT_board_enable_hfr_pictures,
+OPT_board_auto_dl_pictures,
+OPT_balltrap_enable,
+OPT_balltrap_max_ducks,
+OPT_tribune_troll_detector,
+OPT_tribune_post_cmd,
+OPT_tribune_post_cmd_enabled,
+OPT_tribune_post_cmd2,
+OPT_tribune_post_cmd2_enabled,
+OPT_tribune_archive,
+OPT_dock_bg_color,
+OPT_dock_bg_pixmap,
+OPT_dock_skin_pixmap,
+OPT_dock_fg_color,
+OPT_dock_draw_border,
+OPT_dock_iconwin,
+OPT_dock_auto_swallow,
+OPT_dock_disable_xft_antialiasing,
+OPT_palmipede_override_wmanager,
+OPT_palmipede_enable_scroll_wheel_for_boulets,
+OPT_dock_use_balloons,
+OPT_dock_balloons_font_family,
+OPT_dock_balloons_font_size,
+OPT_dock_pos,
+OPT_dock_start_in_boss_mode,
+OPT_verbosity_underpants,
+OPT_verbosity_http,
+OPT_palmipede_default_message,
+OBSOLETE_OPT_news_font_family,
+OBSOLETE_OPT_news_font_size,
+OBSOLETE_OPT_pinnipede_fortune_font_size,
+OBSOLETE_OPT_pinnipede_show_fortune,
+OBSOLETE_OPTS_http_cookie,
+OPTS_check_board,
+OPTS_balltrap_enable,
+OBSOLETE_OPTSG_http_site_url,
+OBSOLETE_OPTSG_http_path_tribune_backend,
+OBSOLETE_OPTSG_http_path_tribune_add,
+OBSOLETE_OPTSG_http_board_post,
+OPTSG_backend_flavour,
+OPTSG_backend_url,
+OPTSG_post_url,
+OPTSG_post_template,
+OPTSG_rss_ignore_description,
+OPTSG_http_proxy,
+OPTSG_http_proxy_auth,
+OPTSG_http_proxy_use_nocache,
+OPTSG_http_use_if_modified_since,
+OPTSG_pinnipede_bg_color,
+OPTSG_pinnipede_fg_color,
+OPTSG_pinnipede_clock_color,
+OPTSG_pinnipede_useragent_color,
+OPTSG_pinnipede_login_color,
+OPTSG_pinnipede_url_color,
+OPTSG_pinnipede_visited_url_color,
+OPTSG_pinnipede_trollscore_color,
+OPTSG_pinnipede_strike_color,
+OPTSG_pinnipede_clock_style,
+OPTSG_pinnipede_login_style,
+OPTSG_pinnipede_useragent_style,
+OPTSG_pinnipede_mark_id_gaps,
+OPTSG_pinnipede_use_AM_PM,
+OPTSG_locale,
+OPTSG_tribune_delay,
+OBSOLETE_OPTSG_board_auto_refresh,
+OPTSG_tribune_max_messages,
+OPTSG_tribune_wiki_emulation,
+OPTSG_palmipede_username,
+OPTSG_palmipede_userlogin,
+OPTSG_palmipede_useragent,
+OPTSG_palmipede_msg_max_length,
+OPTSG_palmipede_useragent_max_length,
+OBSOLETE_OPTSG_check_news,
+OBSOLETE_OPTSG_check_comments,
+OBSOLETE_OPTSG_news_delay,
+OBSOLETE_OPTSG_http_path_end_news_url,
+OBSOLETE_OPTSG_tribune_backend_type,
+OBSOLETE_OPTSG_backend_type,
+OBSOLETE_OPTSG_http_path_myposts,
+OBSOLETE_OPTSG_http_path_news_backend,
+OBSOLETE_OPTSG_news_max_age,
+NB_WMCC_OPTIONS
+} wmcc_options_id;
+
+
+#if defined(PREFS_C)
+
+char *wmcc_options_strings[NB_WMCC_OPTIONS+1] = {
+"site",
+"board_site",
+"rss_site",
+"pop_site",
+"http.timeout",
+"http.inet_ip_version",
+"http.browser",
+"http.browser2",
+"http.gogole_search_url",
+"http.wikipedia_search_url",
+"pinnipede.font_family",
+"pinnipede.font_size",
+"pinnipede.start_in_transparency_mode",
+"pinnipede.use_fake_real_transparency",
+"pinnipede.transparency",
+"pinnipede.emph_color",
+"pinnipede.sel_bgcolor",
+"pinnipede.popup_fgcolor",
+"pinnipede.popup_bgcolor",
+"pinnipede.buttonbar.bgcolor",
+"pinnipede.buttonbar_fgcolor",
+"pinnipede.buttonbar_msgcnt_color",
+"pinnipede.buttonbar_updlcnt_color",
+"pinnipede.buttonbar_progressbar_color",
+"pinnipede.hilight.my_msg_color",
+"pinnipede.hilight.answer_my_msg_color",
+"pinnipede.hilight.keyword_color0",
+"pinnipede.hilight.keyword_color1",
+"pinnipede.hilight.keyword_color2",
+"pinnipede.hilight.keyword_color3",
+"pinnipede.hilight.keyword_color4",
+"pinnipede.plopify_color",
+"scrollcoin.bg_color",
+"scrollcoin.bg_light_color",
+"scrollcoin.bg_dark_color",
+"scrollcoin.arrow_normal_color",
+"scrollcoin.arrow_emphasized_color",
+"scrollcoin.bar_color",
+"scrollcoin.bar_light_color",
+"scrollcoin.bar_dark_color",
+"pinnipede.location",
+"pinnipede.dimensions",
+"pinnipede.buttons",
+"pinnipede.show_tags",
+"pinnipede.show_seconds",
+"pinnipede.nick_mode",
+"pinnipede.show_troll_score",
+"pinnipede.use_classical_tabs",
+"pinnipede.use_colored_tabs",
+"pinnipede.tabs.position",
+"pinnipede.plop_keywords",
+"pinnipede.hilight_keywords",
+"pinnipede.plop_words",
+"pinnipede.hungry_boitakon",
+"pinnipede.url_replace",
+"pinnipede.auto_open",
+"board.miniua_rule",
+"spell.enable",
+"spell.cmd",
+"spell.dict",
+"font.encoding",
+"tribunenews.max_refresh_delay",
+"tribunenews.switch_off_coincoin_delay",
+"board.enable_hfr_pictures",
+"board.auto_dl_pictures",
+"balltrap.enable",
+"balltrap.max_ducks",
+"tribune.troll_detector",
+"tribune.post_cmd",
+"tribune.post_cmd_enabled",
+"tribune.post_cmd2",
+"tribune.post_cmd2_enabled",
+"tribune.archive",
+"dock.bg_color",
+"dock.bg_pixmap",
+"dock.skin_pixmap",
+"dock.fg_color",
+"dock.draw_border",
+"dock.iconwin",
+"dock.auto_swallow",
+"dock.disable_xft_antialiasing",
+"palmipede.override_wmanager",
+"palmipede.enable_scroll_wheel_for_boulets",
+"dock.use_balloons",
+"dock.balloons.font_family",
+"dock.balloons.font_size",
+"dock.pos",
+"dock.start_in_boss_mode",
+"verbosity.underpants",
+"verbosity.http",
+"palmipede.default_message",
+"news.font_family",
+"news.font_size",
+"pinnipede.fortune_font_size",
+"pinnipede.show_fortune",
+".http.cookie",
+".check_board",
+".balltrap.enable",
+"!http.site_url",
+"!http.path_tribune_backend",
+"!http.path_tribune_add",
+"!http.board_post",
+"!backend_flavour",
+"!backend.url",
+"!post.url",
+"!post.template",
+"!rss.ignore_description",
+"!http.proxy",
+"!http.proxy_auth",
+"!http.proxy_use_nocache",
+"!http.use_if_modified_since",
+"!pinnipede.bg_color",
+"!pinnipede.fg_color",
+"!pinnipede.clock_color",
+"!pinnipede.useragent_color",
+"!pinnipede.login_color",
+"!pinnipede.url_color",
+"!pinnipede.visited_url_color",
+"!pinnipede.trollscore_color",
+"!pinnipede.strike_color",
+"!pinnipede.clock_style",
+"!pinnipede.login_style",
+"!pinnipede.useragent_style",
+"!pinnipede.mark_id_gaps",
+"!pinnipede.use_AM_PM",
+"!locale",
+"!tribune.delay",
+"!board.auto_refresh",
+"!tribune.max_messages",
+"!tribune.wiki_emulation",
+"!palmipede.username",
+"!palmipede.userlogin",
+"!palmipede.useragent",
+"!palmipede.msg_max_length",
+"!palmipede.useragent_max_length",
+"!check_news",
+"!check_comments",
+"!news.delay",
+"!http.path_end_news_url",
+"!tribune.backend_type",
+"!backend_type",
+"!http.path_myposts",
+"!http.path_news_backend",
+"!news.max_age",
+NULL};
+#else
+extern char *wmcc_options_strings[];
+#endif
+#endif
diff --git a/src/palmipede.c b/src/palmipede.c
new file mode 100644
index 0000000..19e3d82
--- /dev/null
+++ b/src/palmipede.c
@@ -0,0 +1,2721 @@
+/*
+
+    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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+
+ */
+
+/*
+  rcsid=$Id: palmipede.c,v 1.30 2005/09/27 16:59:13 pouaite Exp $
+  ChangeLog:
+  $Log: palmipede.c,v $
+  Revision 1.30  2005/09/27 16:59:13  pouaite
+  2.5.1c
+
+  Revision 1.29  2005/09/26 21:40:24  pouaite
+  v 2.5.1b
+
+  Revision 1.28  2005/09/25 12:08:55  pouaite
+  ca marche encore ca ?
+
+  Revision 1.27  2005/06/11 22:47:41  pouaite
+  prout?
+
+  Revision 1.26  2005/02/22 18:45:32  pouaite
+  *** empty log message ***
+
+  Revision 1.25  2004/05/16 12:54:29  pouaite
+  250c
+
+  Revision 1.24  2004/04/28 22:19:00  pouaite
+  bugfixes dae + des trucs que j'ai oublie
+
+  Revision 1.23  2004/04/26 20:32:31  pouaite
+  roger demande le commit
+
+  Revision 1.22  2004/04/18 15:37:28  pouaite
+  un deux un deux
+
+  Revision 1.21  2004/03/07 13:51:12  pouaite
+  commit du dimanche
+
+  Revision 1.20  2004/02/29 19:01:27  pouaite
+  et hop
+
+  Revision 1.19  2004/02/29 15:01:19  pouaite
+  May the charles bronson spirit be with you
+
+  Revision 1.18  2003/08/26 21:50:48  pouaite
+  2.6.4b au mastic
+
+  Revision 1.17  2003/07/20 22:22:28  pouaite
+  ce commit est dedie a Pierre Tramo
+
+  Revision 1.16  2003/06/29 23:58:39  pouaite
+  suppression de l'overrideredirect du palmi et ajout de pinnipede_totoz.c et wmcoincoin-totoz-get etc
+
+  Revision 1.15  2003/06/25 20:18:21  pouaite
+  support xinerama qui marche
+
+  Revision 1.14  2003/06/24 22:27:57  pouaite
+  speciale dedicace a nos amis de l'ile de beaute
+
+  Revision 1.13  2003/06/23 22:43:47  pouaite
+  shift-enter pour le post anonyme + fix ouinouin
+
+  Revision 1.12  2003/06/22 12:17:19  pouaite
+  2.4.5a a la piscine
+
+  Revision 1.11  2003/06/21 14:48:45  pouaite
+  g cho
+
+  Revision 1.10  2003/06/09 16:42:29  pouaite
+  pan pan
+
+  Revision 1.9  2003/03/01 17:31:22  pouaite
+  compat ipv6 a tester
+
+  Revision 1.8  2003/01/19 18:52:23  pouaite
+  patch gle (couleur de fond du palmi)
+
+  Revision 1.7  2003/01/11 14:10:07  pouaite
+  fix du palmi pour xf 4.3
+
+  Revision 1.6  2002/12/20 11:26:35  pouaite
+  deux trois conneries
+
+  Revision 1.5  2002/10/05 18:08:14  pouaite
+  ajout menu contextuel + fix de la coloration des boutons du wmccc
+
+  Revision 1.4  2002/09/07 16:21:15  pouaite
+  ?a va releaser en douce
+
+  Revision 1.3  2002/08/21 01:11:49  pouaite
+  commit du soir, espoir
+
+  Revision 1.2  2002/08/18 00:29:30  pouaite
+  en travaux .. pri�re de porter le casque
+
+  Revision 1.1  2002/08/17 18:54:15  pouaite
+  ajout des fichiers manquants
+
+  Revision 1.21  2002/06/23 10:44:05  pouaite
+  i18n-isation of the coincoin(kwakkwak), thanks to the incredible jjb !
+
+  Revision 1.20  2002/05/20 16:01:25  pouaite
+  nouveau raccourci alt-F du palmipede
+
+  Revision 1.19  2002/04/01 22:56:03  pouaite
+  la pseudo-transparence du pinni, bugfixes divers, option tribune.backend_type
+
+  Revision 1.18  2002/04/01 01:39:38  pouaite
+  grosse grosse commition (cf changelog)
+
+  Revision 1.17  2002/03/28 00:06:15  pouaite
+  le clic sur un login ouvre le palmipede en remplissant '/msg lelogin '
+
+  Revision 1.16  2002/03/19 09:55:58  pouaite
+  bugfixes compilation
+
+  Revision 1.15  2002/03/18 22:46:49  pouaite
+  1 ou 2 bugfix mineurs, et surtout suppression de la dependance avec la libXpm .. un premier pas vers wmc� en 8bits
+
+  Revision 1.14  2002/03/09 00:25:12  pouaite
+  coin coin
+
+  Revision 1.13  2002/03/08 23:53:40  pouaite
+  derniers bugfixes pour la v2.3.6
+
+  Revision 1.12  2002/03/03 10:10:04  pouaite
+  bugfixes divers et vari�s
+
+  Revision 1.11  2002/03/01 00:27:40  pouaite
+  trois fois rien
+
+  Revision 1.10  2002/02/24 22:13:57  pouaite
+  modifs pour la v2.3.5 (selection, scrollcoin, plopification, bugfixes)
+
+  Revision 1.9  2002/01/19 19:56:09  pouaite
+  petits crochets pour la mise en valeur de certains messages (cf changelog)
+
+  Revision 1.8  2002/01/13 18:19:20  pouaite
+  nouvelles suggestions pour clipouille (merci jjb!)
+
+  Revision 1.7  2002/01/12 19:03:54  pouaite
+  bugfix de picohtml et raccourci altgr-e pour le symbole euro (gruik)
+
+  Revision 1.6  2002/01/12 17:29:08  pouaite
+  support de l'iso8859-15 (euro..)
+
+  Revision 1.5  2001/12/18 12:43:37  pouaite
+  ajout de l'option de la fonte des ballons d'aide (pour mr. imr !) + bugfix d'une connerie assez naze dans la gestion du nom du fichier d'options (merci glandium de me l'avoir signal�)
+
+  Revision 1.4  2001/12/16 20:28:45  pouaite
+  bugfixes divers
+
+  Revision 1.3  2001/12/16 16:46:12  pouaite
+  Clippouille joins C0IN C0IN
+
+  Revision 1.2  2001/12/02 18:34:54  pouaite
+  ajout de tags cvs Id et Log un peu partout...
+
+*/
+
+/*
+  ceci est le palmipede editor
+*/
+
+
+#include <libintl.h>
+#define _(String) gettext (String)
+
+#include <X11/X.h>
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+#include <X11/Xatom.h>
+#include <X11/Xmu/Atoms.h>
+
+#include <X11/Xmd.h>
+#include <X11/keysym.h>
+#include <X11/cursorfont.h>
+#include <X11/extensions/shape.h>
+#include "coin_util.h"
+#include "coin_xutil.h"
+#include "coincoin.h"
+#include "fontcoincoin.h"
+#include "kbcoincoin.h"
+#include "../xpms/editwin_minib.xpm"
+#include "../xpms/clippy.xpm"
+#include "spell_coin.h" 
+#include "dock.h"
+#include "site.h"
+#include "board_util.h" // pour le boards_find_id de l'antibloub
+
+#define FN_W 6
+#define FN_H 11
+#define FN_BASE_H 9
+//#define FN_W (ew->fn_w)
+//#define FN_H (ccfont_height(ew->fn))
+//#define FN_BASE_H (ccfont_ascent(ew->fn))
+//#define EW_FONT "-*-fixed-*--10-*"
+#define EW_FONT "monospace:pixelsize=10"
+#define EW_NCOL 64
+#define EW_NROW 4
+
+#define EW_TXT_XBORD_WIDTH 8
+#define EW_TXT_Y0 2
+#define EW_TXT_WIDTH  (EW_NCOL*FN_W)
+#define EW_TXT_HEIGHT (EW_NROW*FN_H)
+
+#define EW_SHAPE_SPACEX 14
+#define EW_SHAPE_SPACEY 8
+#define EW_WIDTH (EW_TXT_WIDTH + 2*EW_TXT_XBORD_WIDTH)
+#define EW_HEIGHT 59
+#define EW_SHAPED_WIDTH (EW_WIDTH + EW_SHAPE_SPACEX)
+#define EW_SHAPED_HEIGHT (EW_HEIGHT + EW_SHAPE_SPACEY)
+#define EW_XBORD (ew->dock_side==RIGHT ? 0 : EW_SHAPE_SPACEX)
+#define EW_TXT_X0 (EW_XBORD+EW_TXT_XBORD_WIDTH)
+
+#define EW_MAX_TOTAL_NROW 20
+
+enum { BT_CLOSE=0, BT_CHANGE, BT_ITAL, BT_BOLD, BT_STRIKE, BT_UNDERLINE,
+       BT_UNDO, BT_CLEAR, BT_DEFAULTUA, BT_TT, BT_TOTOZBOOKMARK, NB_MINIBT };
+
+#define EWC_NORMAL 0
+#define EWC_LONGWORD 1
+#define EWC_URL 2
+#define EWC_KNOWN_URL 3 // todo un jour.. UPDATE: done!!
+#define EWC_BALISE 4
+#define EWC_SPELLWORD 5
+#define EWC_NBATTR 6
+
+#ifdef SWAP
+#undef SWAP
+#endif
+
+#define SWAP(a,b,t) { t tmp; tmp = (t)a; a = (t)b; b = (t)tmp; }
+
+/* utilise pour le copier coller */
+typedef CARD32 Atom32;
+
+typedef struct _MiniBouton {
+  int pix_x, pix_y;
+  int x,y,w,h;
+  int visible;
+  int enfonce;
+} MiniBouton;
+
+typedef enum {CUTPASTE, INSERT_CHAR, DELETE_CHAR, OTHER} EditWCommandClass;
+
+struct _EditW {
+  Window win;
+  Pixmap pix;
+  CCFontId fn; //XFontStruct *fn;
+  unsigned char *buff;
+
+  int  buff_sz;
+
+  int  mapped;
+
+  int buff_len;
+
+  int sel_anchor, sel_head; /* premier et [dernier+1] numero de char de la selection ( a classer dans l'ordre)*/
+  
+  int y_scroll;
+  int curs_x, curs_y;
+
+  struct {
+    unsigned char *buff;
+    int y_scroll;
+    int curs_x, curs_y;
+  } undo;
+
+  /* pour le word-wrap */
+  int row_firstchar[EW_MAX_TOTAL_NROW+1]; 
+  int nrow_used;
+
+  CCColorId win_bgcolor, dark_color, light_color;
+  CCColorId txt_fgcolor[EWC_NBATTR], txt_bgcolor;
+  CCColorId cur_fgcolor, cur_bgcolor;
+  CCColorId sel_fgcolor, sel_bgcolor;
+  CCColorId fill_bgcolor;
+  MiniBouton mini[NB_MINIBT];
+  Pixmap minipix;
+
+  enum {NOACTION, SORTIR, RENTRER} action;
+  int action_step;
+
+  int dock_x, dock_y;
+  enum {LEFT,RIGHT} dock_side;
+
+  int win_xpos, win_ypos;
+
+  int buff_num; /* 0 -> dock->coin_coin_message,
+		   1 -> dock->coin_coin_ueragent */
+
+  /* utilise pour le undo */
+  EditWCommandClass last_command;
+
+  Pixmap clippy_pixmap;
+  int clippy_w, clippy_h;
+
+  id_type antibloub_id; /* id du message ayant poste l'url bloubesque */
+  int antibloub_cnt;    /* nb de fois ou l'url bloublesque a ete postee */
+  int antibloub_need_clipouille; /* pas mal comme nom de variable :) */
+  SitePrefs *prefs;
+};
+
+#define IS_SEP(c,nc) (((c) <=' ') || ((c)=='.') || ((c)==',')  || \
+                      ((c) ==';') || ((c)==':') || ((c)=='!')  || ((c)=='?') || \
+                      ((nc)=='(') || ((c)==')') || \
+                      ((nc)=='{') || ((c)=='}') || \
+                      ((nc)=='<') || ((c)=='>'))
+
+#define IS_SEP2(c)   (((c) <=' ') || ((c)=='.') || ((c)==',')  || \
+                      ((c) ==';') || ((c)==':') || ((c)=='!')  || ((c)=='?') || \
+                      ((c)=='(') || ((c)==')') || \
+                      ((c)=='{') || ((c)=='}') || \
+                      ((c)=='<') || ((c)=='>'))
+
+
+static unsigned char *cb_buffer = NULL;
+
+int *head,*anch;
+
+
+/* (x,y) = position dans le tableau EW_NCOL x EW_NROW */
+static int
+editw_xy2strpos(EditW *ew, int x, int y)
+{
+  int i;
+
+  if (x < 0 || x >= EW_NCOL) {
+    myprintf(_("%<MAG> FUCK THAT BUG! x=%d y=%d curs_x=%d curs_y=%d,y_scroll=%d,sel_anchor=%d,sel_head=%d\n"),
+	     x,y,ew->curs_x,ew->curs_y,ew->y_scroll,ew->sel_anchor,ew->sel_head);
+  }
+    //  assert(x >= 0 && x < EW_NCOL);
+  assert(y >= 0 && (y-ew->y_scroll) < EW_NROW);
+  
+  i = ew->row_firstchar[y] + x;
+  if (i > ew->row_firstchar[y+1]) i =  ew->row_firstchar[y+1];
+  
+  return i;
+}
+
+static void
+editw_strpos2xy(EditW *ew, int pos, int *x, int *y)
+{
+  *y = 0;
+  assert(pos <= ew->buff_len);
+
+  while (ew->row_firstchar[*y+1] < pos) (*y)++;
+  (*x) = pos - ew->row_firstchar[*y];
+
+  /* cas particulier: la ligne est de longueur EW_NCOL */
+  if ((*x) == EW_NCOL) {
+    *x = 0;
+    (*y)++;
+  }
+  assert(*x < EW_NCOL);
+}
+
+static void editw_adjust_yscroll(EditW *ew) {
+  if (ew->curs_y >= ew->y_scroll + EW_NROW) {
+    ew->y_scroll =  ew->curs_y - (EW_NROW - 1);
+  } else if (ew->curs_y < ew->y_scroll) {
+    ew->y_scroll = ew->curs_y;
+  }
+  //  printf("yscroll=%d\n",ew->y_scroll);
+}
+
+static void editw_strpos2curs(EditW *ew, int pos)
+{
+  editw_strpos2xy(ew, pos, &ew->curs_x, &ew->curs_y);
+  editw_adjust_yscroll(ew);
+}
+
+/* effectue le word-wrap en s'assurant que le curseur d�signe toujours le bon caract�re */
+static void
+editw_wordwrap(EditW *ew)
+{
+  int l, i, j, curs_pos;
+
+  ew->buff_len = strlen(ew->buff);
+
+  /* il faudra recalculer la pos du curseur si ca wrappe */
+  curs_pos = editw_xy2strpos(ew, ew->curs_x, ew->curs_y);
+  curs_pos = MIN(curs_pos, ew->buff_len);
+  
+  i = 0;
+  ew->row_firstchar[0] = i;
+
+  i = IS_SEP('e','g');
+  ew->nrow_used = 0;
+  l = 1;
+  for (l=1; l < EW_MAX_TOTAL_NROW+1; l++) {
+    if (i < ew->buff_len || i == 0) {
+      /* nb de ligne utilisees pour l'affichage (avec cas pasticulier quand
+	 la chaine est vide) */
+      ew->nrow_used++; 
+    }
+    i += EW_NCOL;
+    if (i >= ew->buff_len) {
+      ew->row_firstchar[l] = ew->buff_len;
+    } else {
+      j = i-1;
+      /* on essaye de couper la ligne precedente au bon endroit,
+       en cherchant un separateur parmi les 15 dernier caracteres*/
+      while (!IS_SEP(ew->buff[j], ew->buff[j+1])) {
+	j--;
+	if (j < 0) { j = 0; break; }
+	if (j < i-15) break;
+      }
+
+      ew->row_firstchar[l] = ew->buff_len;
+      if (ew->buff[j]) {
+	if (IS_SEP(ew->buff[j], ew->buff[j+1])) {
+	  i = ew->row_firstchar[l] = j+1;
+	} else {
+	  ew->row_firstchar[l] = i;
+	}
+      }
+    }
+    //    printf("row_firstchar[%d] = %d\n", l, ew->row_firstchar[l]);
+  }
+
+  /* cas particulier: la derniere ligne fait exactement EW_NCOL char
+     donc on rajoute une ligne vide en dessous */
+  if (ew->row_firstchar[ew->nrow_used] - ew->row_firstchar[ew->nrow_used-1] == EW_NCOL &&
+      ew->nrow_used < EW_MAX_TOTAL_NROW) {
+    assert(ew->buff[ew->row_firstchar[ew->nrow_used]] == 0);
+    ew->nrow_used++;
+    //    ew->row_firstchar[ew->nrow_used] = ew->row_firstchar[ew->nrow_used-1];
+  }
+
+  /* cas particulier, EW_MAX_TOTAL_NROW trop faible,
+     ca ne devrait jamais arriver. au cas on, on tronque comme une bete */
+  if (i < ew->buff_len) ew->buff[i] = 0;
+
+  editw_strpos2curs(ew, curs_pos);
+}
+
+static
+void editw_get_sel_bounds(EditW *ew, int *sel_start, int *sel_end)
+{
+  if (ew->sel_anchor <= ew->sel_head) {
+    *sel_start = ew->sel_anchor;
+    *sel_end = ew->sel_head;
+  } else {
+    *sel_end = ew->sel_anchor;//-1;
+    *sel_start = ew->sel_head;
+  }
+}
+
+
+int
+editw_has_selection(EditW *ew) 
+{
+  int sel_start;
+  int sel_end;
+
+  editw_get_sel_bounds(ew, &sel_start, &sel_end);
+  return (sel_end != sel_start);
+}
+
+
+static void
+editw_unselect(EditW *ew)
+{
+  ew->sel_head = ew->sel_anchor = -1;
+}
+
+/* efface le cut-buffer */
+static void
+editw_cb_clear()
+{
+  if (cb_buffer) {
+    free(cb_buffer); cb_buffer = NULL;
+  }
+}
+
+/*
+static char *cmd_str(EditWCommandClass cmd) {
+  switch (cmd) {
+  case CUTPASTE: return "CUTPASTE";
+  case INSERT_CHAR: return "INSERT_CHAR";
+  case DELETE_CHAR: return "DELETE_CHAR";
+  case OTHER: return "OTHER";
+  }
+  return NULL;
+  }*/
+/* pour pouvoir faire un undo */
+static void
+editw_save_state(EditW *ew, EditWCommandClass cmd) {
+  if ((cmd == CUTPASTE) ||
+      (cmd == INSERT_CHAR && ew->last_command != INSERT_CHAR) ||
+      (cmd == DELETE_CHAR && ew->last_command != DELETE_CHAR)) {
+    //    printf("save STATE %s -> %s\n", cmd_str(ew->last_command), cmd_str(cmd));
+    strcpy(ew->undo.buff, ew->buff);
+    ew->undo.y_scroll = ew->y_scroll;
+    ew->undo.curs_x = ew->curs_x;
+    ew->undo.curs_y = ew->curs_y;
+  }
+  ew->last_command = cmd;
+}
+
+static void
+editw_remove_txt(EditW *ew, int i0, int i1)
+{
+  if (i0 < i1) {
+    assert(i1 <= (int)strlen(ew->buff));
+
+    if (i1-i0 > 1) {
+      editw_save_state(ew, CUTPASTE);
+    } else {
+      editw_save_state(ew, DELETE_CHAR);
+    }
+
+    //    printf("delete %d %d\n",i0,i1);
+    memmove(ew->buff + i0, ew->buff+i1, strlen(ew->buff+i1)+1);
+    editw_wordwrap(ew);
+  }
+}
+
+static void
+editw_erase_selection(EditW *ew)
+{
+  int i0, i1;
+  
+  if (editw_has_selection(ew)) {
+    editw_get_sel_bounds(ew, &i0, &i1);
+    editw_unselect(ew);
+    editw_remove_txt(ew, i0, i1);
+    editw_strpos2curs(ew, i0);
+  }
+}
+
+/* efface tout le buffer si il n'y a pas de selection active */
+void
+editw_erase(EditW *ew)
+{
+  if (editw_has_selection(ew)) {
+    editw_erase_selection(ew);
+  } else {
+    editw_unselect(ew);
+    editw_remove_txt(ew, 0, strlen(ew->buff));
+    editw_strpos2curs(ew, 0);
+  }
+  { int x = ew->curs_x, y = ew->curs_y;
+  if (x < 0 || x >= EW_NCOL) {
+    myprintf(_("%<MAG> RAH ENCORE CE BUG! x=%d y=%d curs_x=%d curs_y=%d,y_scroll=%d,sel_anchor=%d,sel_head=%d\n"),
+	     x,y,ew->curs_x,ew->curs_y,ew->y_scroll,ew->sel_anchor,ew->sel_head);
+  }}
+}
+
+
+/* renvoie 0 si pas de pb, longueur tronquee si tronquage */
+int
+editw_insert_string(EditW *ew, const unsigned char *str)
+{
+  unsigned char *s = strdup(str);
+  convert_to_iso8859("UTF-8", &s);
+  int ls,lb,lrest,ldec;
+  int tronq;
+
+  if (strlen(s)>1) {
+    editw_save_state(ew, CUTPASTE);
+  } else {
+    editw_save_state(ew, INSERT_CHAR);
+  }
+
+  editw_erase_selection(ew);
+
+  lb = strlen(ew->buff);
+  ls = strlen(s);
+  lrest = ew->buff_sz-1-ls-lb;
+
+  tronq = 0;
+
+  if (lrest < 0) {
+    tronq = -lrest;
+    ls += lrest;
+    lrest = 0;
+  }
+  assert(ls >= 0);
+  //  printf("ls=%d",ls);
+  if (ls > 0) {
+    int i,j;
+    i = editw_xy2strpos(ew, ew->curs_x, ew->curs_y);
+    ldec = MIN(lb - i + 1, ew->buff_sz-1-i-ls); assert(ldec>=0);
+    //    printf(" ldec=%d\n",ldec);
+    if (ldec) {
+      memmove(ew->buff + i + ls, ew->buff+i, ldec);
+    }
+    assert(ew->buff[ew->buff_sz-1] == 0);
+    for (j=0; j < ls; j++) 
+      ew->buff[i+j] = (s[j] >= ' ' ? s[j] : ' ');
+    //    memmove(ew->buff + i, s, ls);
+    editw_wordwrap(ew);
+    editw_strpos2curs(ew, i+ls);
+  }
+
+  return tronq;
+  /*
+  l = MIN(strlen(s), ew->buff_sz-1-strlen(s)-strlen(ew->buff));
+  if (l > 0) {
+    int i;
+    int l2;
+    i = editw_xy2strpos(ew, ew->curs_x, ew->curs_y);
+    l2 = MIN(strlen(ew->buff+i)+1, ew->buff_sz-1-l-i); 
+    memmove(ew->buff + i + l, ew->buff+i, l2);
+    assert(ew->buff[ew->buff_sz-1] == 0);
+    memmove(ew->buff + i, s, l);
+    //    printf("'%s' [%s]\n", ew->buff, s);
+    editw_wordwrap(ew);
+    editw_strpos2curs(ew, i+l);
+    }*/
+}
+
+
+
+static void
+editw_insert_char(EditW *ew, unsigned char c)
+{
+  char s[2];
+  s[0] = c; s[1] = 0;
+  editw_insert_string(ew, s);
+}
+
+/* X clipboard function -- stolen from wmpinboard  Copyright (C) 1998-2000 by Marco G"otze. */
+
+
+
+/*
+ * copies <text> to the X clipboard
+ */
+void
+editw_cb_copy(Dock *dock, Window win, const char *text, int len)
+{
+  int l;
+
+  if (!text) return;
+
+  if (cb_buffer) free(cb_buffer);
+  l = len < 0 ? (int)strlen(text) : len;
+  cb_buffer = malloc(l+1); assert(cb_buffer);
+  strncpy(cb_buffer, text, l);
+  cb_buffer[l] = 0;
+
+  XSetSelectionOwner(dock->display, XA_PRIMARY, win, CurrentTime);
+  if (XGetSelectionOwner(dock->display, XA_PRIMARY) != win) {
+    fprintf(stderr, _("wmcoincoin: Failed to set XA_PRIMARY ownership."));
+    XChangeProperty(dock->display, dock->rootwin, XA_CUT_BUFFER0,
+		    XA_UTF8_STRING(dock->display), 8, PropModeReplace, cb_buffer, l);
+  }
+}
+
+
+/*
+ * responds to a SelectionRequest event
+ * [once again, thanks to the RXVT source]
+ */
+void
+editw_cb_handle_selectionrequest(Dock *dock, XSelectionRequestEvent *rq)
+{
+  XEvent ev;
+  Atom32 target_list[2];
+  static Atom xa_targets = None;
+
+  if (xa_targets == None) xa_targets = XInternAtom(dock->display, "TARGETS", 0);
+
+  ev.xselection.type = SelectionNotify;
+  ev.xselection.property = None;
+  ev.xselection.display = rq->display;
+  ev.xselection.requestor = rq->requestor;
+  ev.xselection.selection = rq->selection;
+  ev.xselection.target = rq->target;
+  ev.xselection.time = rq->time;
+
+  if (rq->target == xa_targets) {
+    target_list[0] = (Atom32) xa_targets;
+    target_list[1] = (Atom32) XA_UTF8_STRING(dock->display);
+    XChangeProperty(dock->display, rq->requestor, rq->property, rq->target,
+      8*sizeof(target_list[0]), PropModeReplace,
+      (unsigned char*) target_list,
+      sizeof(target_list)/sizeof(target_list[0]));
+    ev.xselection.property = rq->property;
+  } else if (rq->target == XA_UTF8_STRING(dock->display)) {
+    XChangeProperty(dock->display, rq->requestor, rq->property, rq->target,
+      8, PropModeReplace, cb_buffer, strlen((char*) cb_buffer));
+      ev.xselection.property = rq->property;
+  }
+  XSendEvent(dock->display, rq->requestor, 0, 0, &ev);
+}
+
+/*
+ * pastes the current contents of the clipboard into <note> at <pos>, inserting
+ * or overwriting depending on <ins>, trying to word-wrap unless <raw>; moves
+ * the cursor
+ */
+static void
+editw_cb_paste_external(Dock *dock, EditW *ew, Window window, Atom prop, int Delete)
+{
+  unsigned long bytes_after, nitems;
+  unsigned char *data;
+  Atom actual_type;
+  int actual_fmt;
+
+  data = NULL;
+  if (prop == None) return;
+  /* 256 -> longueur max qu'on copy est 256*4 */
+  if ((XGetWindowProperty(dock->display, window, prop, 0, 256, Delete,
+    AnyPropertyType, &actual_type, &actual_fmt, &nitems, &bytes_after,
+    &data) != Success))
+  {
+    XFree(data);
+    return;
+  }
+  if (nitems && data) {
+    editw_unselect(ew);
+    editw_insert_string(ew,data);
+  }
+  if (data)  XFree(data);
+}
+
+/*
+ * handle's the user's request to paste text into a note
+ */
+static void
+editw_cb_paste(Dock *dock, EditW *ew, int external_only)
+{
+  Atom prop;
+
+  if (cb_buffer && external_only == 0) {
+    editw_unselect(ew);
+    editw_insert_string(ew, cb_buffer); 
+  } else if (XGetSelectionOwner(dock->display, XA_PRIMARY) == None) {
+    editw_cb_paste_external(dock, ew, dock->rootwin, XA_CUT_BUFFER0, 0);
+  } else {
+    prop = XInternAtom(dock->display, "VT_SELECTION", 0);
+    XConvertSelection(dock->display, XA_PRIMARY, XA_UTF8_STRING(dock->display), prop, ew->win, CurrentTime);
+  }
+}
+
+
+/* end of stolen function from wmpinboard */
+
+
+
+static void
+editw_cut_selection(Dock *dock, EditW *ew)
+{
+  int i0, i1;
+  
+  if (editw_has_selection(ew)) {
+    editw_get_sel_bounds(ew, &i0, &i1);
+    editw_cb_copy(dock, ew->win, ew->buff+i0, i1-i0);
+    editw_remove_txt(ew, i0, i1);
+    editw_strpos2curs(ew, i0);
+    editw_unselect(ew);
+  }
+}
+
+/* renvoie le numero du minibouton contenant le pixel (x,y)
+   -1 sinon
+*/
+static int
+editw_xy2minibutton(EditW *ew, int x, int y)
+{
+  int i;
+  for (i=0; i < NB_MINIBT; i++) {
+    if (ew->mini[i].visible) {
+      if (IS_INSIDE(x,y,ew->mini[i].x, ew->mini[i].y, 
+		    ew->mini[i].x + ew->mini[i].w - 1, ew->mini[i].y + ew->mini[i].h - 1)) {
+	return i;
+      }
+    }
+  }
+  return -1;
+}
+
+static int
+editw_button_pressed(EditW *ew) {
+  int i;
+  for (i=0; i < NB_MINIBT; i++) {
+    if (ew->mini[i].visible && ew->mini[i].enfonce) {
+      return i;
+    }
+  }
+  return -1;
+}
+
+#define IS_BLANK(i) (((unsigned char)i)<=' ')
+
+/*
+  defini les couleurs a afficher pour chaque caractere de ew->buff
+   -> detecte les mots trops longs, les urls et les balises html
+*/
+static void
+editw_colorize(EditW *ew, unsigned char *ctab)
+{
+  int word_start, word_end,word_len, i, j;
+  ErrList spelled_faults;
+
+  int old_antibloub_cnt = ew->antibloub_cnt;
+  ew->antibloub_cnt = 0; 
+
+  if( ew->buff_num!=0 ) { /* ainsi on evite de se taper 2 fois la boucle 
+			     ( comme pour les versions precedentes ) */
+    for( i=0; ew->buff[i]; i++)
+      ctab[i] = EWC_NORMAL;
+  } else {
+    if( Prefs.ew_do_spell )
+      spelled_faults = spellString(ew->buff);
+    else
+      spelled_faults = NULL;
+    i = 0;
+    do {
+      /* isolation du premier/prochain mot de buf */
+      for(; ew->buff[i] && IS_BLANK(ew->buff[i]); ++i)
+	ctab[i] = EWC_NORMAL;
+      if( ew->buff[i]==0 )
+	break;
+      word_start = i;
+      for(; ew->buff[i] && !IS_BLANK(ew->buff[i]); ++i);
+      word_end = i;
+      word_len = word_end-word_start+1; assert(word_len>0);
+      /* detection des URLs */
+      if( is_url(ew->buff+word_start) != -1) {
+        unsigned char *url = str_ndup(ew->buff+word_start,
+                                      word_end - word_start);
+        unsigned char c = EWC_URL;
+        if ((ew->antibloub_cnt = logged_urls_find_url(url, &ew->antibloub_id))) 
+          c = EWC_KNOWN_URL;
+	for( j=word_start; j<word_end; ++j) 
+	  ctab[j] = c;
+        
+	/* detection des mots trops longs */
+      } else if( word_len>31 ) {
+	for( j=word_start; j<word_end; ++j)
+	  ctab[j] = EWC_LONGWORD;
+      } else {
+	j = word_start;
+	while( j<word_end ) {
+	  if( !isalpha(ew->buff[j]) ) {
+	    ctab[j] = EWC_NORMAL;
+	    if( ew->buff[j]!='<' ) 
+	      ;
+	    /* detection des balises connues */
+	    else if ( strncmp(ew->buff+j, "<i>", 3)==0 ||
+		      strncmp(ew->buff+j, "</i>", 4)==0 ||
+		      strncmp(ew->buff+j, "<b>", 3)==0 ||
+		      strncmp(ew->buff+j, "</b>", 4)==0 ||
+		      strncmp(ew->buff+j, "<u>", 3)==0 ||
+		      strncmp(ew->buff+j, "</u>", 4)==0 ||
+		      strncmp(ew->buff+j, "<s>", 3)==0 ||
+		      strncmp(ew->buff+j, "</s>", 4)==0 ) {
+	      for(; ew->buff[j]!='>'; ++j)
+		ctab[j] = EWC_BALISE;
+	      ctab[j] = EWC_BALISE;
+	    }
+	    ++j;
+	    /* Detection des mots pleins de fautes */
+	  } else if( spelled_faults!=NULL && (unsigned)j==spelled_faults->offset ) {
+	    for(; isalpha(ew->buff[j]) || ew->buff[j]=='\''; ++j)
+	      ctab[j] = EWC_SPELLWORD;
+	    spelled_faults = spelled_faults->next;
+	  } else {
+	    /* Cas ou on a un caratere alpha qui est dans un mot san fautes (?) */
+	    ctab[j] = EWC_NORMAL;
+	    ++j;
+	  }
+	}
+      }
+    } while(ew->buff[i]);
+  }
+  if (ew->antibloub_cnt != old_antibloub_cnt) {
+    ew->antibloub_need_clipouille = 0;
+  }
+}
+
+static void
+editw_draw_frame(Dock *dock, EditW *ew, Drawable d, GC *gc, int mono)
+{  
+#define EWDF_COLOR(p) { if (!mono) {XSetForeground(dock->display, *gc, (p)); } \
+                        else XSetForeground(dock->display, *gc, 1); } 
+
+#define GROUIK_NPTS 19
+  static XPoint grouik[GROUIK_NPTS] = 
+    {{216                        , EW_SHAPED_HEIGHT-1},
+     {216                        , EW_HEIGHT-3},
+     {216+7                      , EW_HEIGHT-3-7},
+     {EW_WIDTH - 8               , EW_HEIGHT-3-7},
+     {EW_WIDTH - 4               , EW_HEIGHT-3-7-4},
+     {EW_WIDTH - 4               , 15},
+     {EW_WIDTH - 4+4             , 11},
+     {EW_WIDTH + 4               , 11},
+     {EW_WIDTH + 4               , 28},
+     {EW_SHAPED_WIDTH-3          , 28},
+
+     {EW_SHAPED_WIDTH-3          , 2},
+     {EW_SHAPED_WIDTH-1          , 2},
+     {EW_SHAPED_WIDTH-1          , 61},
+     {EW_SHAPED_WIDTH-3          , 61},
+
+
+     {EW_SHAPED_WIDTH-3          , 36},
+     {EW_WIDTH + 4               , 36},
+     {EW_WIDTH + 4               , EW_SHAPED_HEIGHT-1-7},
+     {EW_WIDTH + 4 - 7           , EW_SHAPED_HEIGHT-1},
+     {216                        , EW_SHAPED_HEIGHT-1}};
+  
+  XPoint grouik2[GROUIK_NPTS];
+
+  // 1 -> couleur claire, -1 ->sombre, 0 ->normal
+  static char grouik_seg_side_left[GROUIK_NPTS-1] = 
+    {-1,0,1,0,-1,0,1,1,1,-1,0,0,0,-1, -1,1,0,-1};
+  static char grouik_seg_side_right[GROUIK_NPTS-1] = 
+    {1,1,1,1,1,1,1,-1,1, 1,0,0,0,1, -1,-1,-1,-1};
+
+
+  int i;
+
+
+  /* cadres */
+  EWDF_COLOR(cccolor_pixel(ew->win_bgcolor));
+  XFillRectangle(dock->display, d, *gc, 
+		 EW_XBORD, 0, EW_XBORD+EW_WIDTH, EW_HEIGHT);
+
+  /* partie claire */
+  EWDF_COLOR(cccolor_pixel(ew->light_color));
+  XDrawLine(dock->display, d, *gc, EW_XBORD, 0, EW_XBORD+EW_WIDTH-1, 0);
+  XDrawLine(dock->display, d, *gc, EW_XBORD, 0, EW_XBORD, EW_HEIGHT-1);
+
+  XDrawLine(dock->display, d, *gc, 
+  	    EW_TXT_X0, EW_TXT_Y0+EW_TXT_HEIGHT, EW_TXT_X0 + EW_TXT_WIDTH, EW_TXT_Y0+EW_TXT_HEIGHT);
+  XDrawLine(dock->display, d, *gc, 
+  	    EW_TXT_X0 + EW_TXT_WIDTH, EW_TXT_Y0, EW_TXT_X0 + EW_TXT_WIDTH, EW_TXT_Y0+EW_TXT_HEIGHT);
+
+  XDrawLine(dock->display, d, *gc, EW_XBORD, 0, EW_XBORD, EW_HEIGHT);
+
+  /* partie sombre */
+  EWDF_COLOR(cccolor_pixel(ew->dark_color));
+  XDrawLine(dock->display, d, *gc, EW_XBORD, EW_HEIGHT-1, EW_XBORD+EW_WIDTH-1, EW_HEIGHT-1);
+  XDrawLine(dock->display, d, *gc, EW_XBORD+EW_WIDTH-1, 0, EW_XBORD+EW_WIDTH-1, EW_HEIGHT-1);
+  XDrawLine(dock->display, d, *gc, 
+	    EW_TXT_X0-1, EW_TXT_Y0-1, EW_TXT_X0 + EW_TXT_WIDTH, EW_TXT_Y0-1);
+  XDrawLine(dock->display, d, *gc, 
+	    EW_TXT_X0-1, EW_TXT_Y0-1, EW_TXT_X0-1, EW_TXT_Y0+EW_TXT_HEIGHT);
+
+  /* partie coloree normale */
+  EWDF_COLOR(dock->bg_pixel);
+
+  for (i=0; i < GROUIK_NPTS; i++) {
+    if (ew->dock_side == RIGHT) {
+      grouik2[i] = grouik[i];
+    } else {
+      grouik2[i].x = EW_SHAPED_WIDTH-1 - grouik[i].x;
+      grouik2[i].y = grouik[i].y;
+    }
+  }
+    
+  XFillPolygon(dock->display, d, *gc, grouik2, GROUIK_NPTS, Complex, CoordModeOrigin);
+
+  for (i=0; i < GROUIK_NPTS-1; i++) {
+    int x0, y0, x1, y1;
+    int v;
+    x0 = grouik2[i].x; y0 = grouik2[i].y;
+    x1 = grouik2[i+1].x; y1 = grouik2[i+1].y;
+
+    v = (ew->dock_side == LEFT ? grouik_seg_side_left[i] : grouik_seg_side_right[i]);
+    if (v == 1) { EWDF_COLOR(dock->light_pixel); }
+    else if (v == -1) { EWDF_COLOR(dock->dark_pixel); }
+    else { EWDF_COLOR(dock->bg_pixel); }
+    XDrawLine(dock->display, d, *gc, x0, y0, x1, y1);
+  }
+}
+
+
+/* s'assurer que le wordwrap a ete fait avec d'appeler cette fonction */
+static void
+editw_draw(Dock *dock, EditW *ew, Drawable d)
+{
+  int i;
+  unsigned char *ctab;
+  int charcnt;
+
+  if (strlen(ew->buff)) {
+    ctab = malloc(strlen(ew->buff));
+  } else ctab = NULL;
+
+  editw_colorize(ew, ctab);
+  
+  /* le texte */
+  //XSetFont(dock->display, dock->NormalGC, ew->fn->fid);
+  if (!Prefs.pp_use_colored_tabs) {
+    XSetForeground(dock->display, dock->NormalGC, cccolor_pixel(ew->txt_bgcolor));
+    XFillRectangle(dock->display, d, dock->NormalGC, 
+                   EW_TXT_X0, EW_TXT_Y0, EW_TXT_WIDTH, EW_TXT_HEIGHT);
+  } else {
+    XSetForeground(dock->display, dock->NormalGC, IRGB2PIXEL(ew->prefs->pp_bgcolor));
+    XFillRectangle(dock->display, d, dock->NormalGC, 
+                   EW_TXT_X0, EW_TXT_Y0, EW_TXT_WIDTH, EW_TXT_HEIGHT);
+    cccolor_reset(&ew->txt_fgcolor[EWC_NORMAL], ew->prefs->pp_fgcolor.opaque);
+  }
+
+
+
+  //  XSetForeground(dock->display, dock->NormalGC, ew->txt_fgpixel[EWC_NORMAL]);
+  
+  charcnt = ew->row_firstchar[ew->y_scroll];
+  for (i = ew->y_scroll; i < EW_NROW+ew->y_scroll; i++) {
+    int j, cnt;
+    for (j=ew->row_firstchar[i], cnt=0; j < ew->row_firstchar[i+1]; j++, cnt++) {
+      /*if (ctab[j] != 0 || Prefs.pp_use_colored_tabs==0)
+	XSetForeground(dock->display, dock->NormalGC, cccolor_pixel(ew->txt_fgcolor[ctab[j]]));
+        else XSetForeground(dock->display, dock->NormalGC, IRGB2PIXEL(ew->prefs->pp_fgcolor.opaque));*/
+      ccfont_draw_string8(ew->fn, ew->txt_fgcolor[ctab[j]], d, EW_TXT_X0+cnt*FN_W, 
+                          EW_TXT_Y0 + (i-ew->y_scroll)*FN_H + FN_BASE_H, ew->buff+j, 1);
+      /*XDrawString(dock->display, d, dock->NormalGC, 
+        EW_TXT_X0+cnt*FN_W, EW_TXT_Y0 + (i-ew->y_scroll)*FN_H + FN_BASE_H, ew->buff+j, 1);*/
+    }
+
+    if (i >= ew->nrow_used-1) charcnt += EW_NCOL; else charcnt += cnt;
+    
+
+    //    llast = ew->nrow_used + (ew->buff_sz - ew->row_firstchar[ew->nrow_used])/EW_NCOL
+    if ((i < ew->nrow_used - 1 && cnt < EW_NCOL)
+	|| charcnt > ew->buff_sz) {
+      if (charcnt > ew->buff_sz) cnt = MAX(EW_NCOL - (charcnt - ew->buff_sz+1), 0);
+      XSetForeground(dock->display, dock->NormalGC, cccolor_pixel(ew->fill_bgcolor));
+      XFillRectangle(dock->display, d, dock->NormalGC, 
+		     EW_TXT_X0+FN_W*cnt, EW_TXT_Y0 + (i-ew->y_scroll)*FN_H, 
+		     EW_TXT_WIDTH-(FN_W*cnt), FN_H);
+    }
+  }
+
+
+  /* pas de selection active -> on affiche le curseur */
+  if (!editw_has_selection(ew)) {
+    int curs_idx;
+
+    XSetForeground(dock->display, dock->NormalGC, cccolor_pixel(ew->cur_bgcolor));
+    XFillRectangle(dock->display, d, dock->NormalGC, 
+		   EW_TXT_X0 + FN_W * ew->curs_x, 
+		   EW_TXT_Y0 + FN_H * (ew->curs_y-ew->y_scroll), FN_W, FN_H);
+    curs_idx = editw_xy2strpos(ew, ew->curs_x, ew->curs_y);
+    //XSetForeground(dock->display, dock->NormalGC, cccolor_pixel(ew->cur_fgcolor));
+    
+    if (curs_idx < ew->row_firstchar[ew->curs_y+1]) {
+      ccfont_draw_string8(ew->fn, ew->cur_fgcolor, d, EW_TXT_X0 + FN_W * ew->curs_x, 
+                          EW_TXT_Y0 + FN_H * (ew->curs_y-ew->y_scroll) + FN_BASE_H, 
+                          &ew->buff[curs_idx], 1);
+      /*XDrawString(dock->display, d, dock->NormalGC, 
+		   EW_TXT_X0 + FN_W * ew->curs_x, 
+		  EW_TXT_Y0 + FN_H * (ew->curs_y-ew->y_scroll) + FN_BASE_H, 
+		  &ew->buff[curs_idx], 1);*/
+    }
+  } else {
+    /* affichage de la selection */
+    int sx0, sy0, sx1, sy1, y, x0, x1;
+    int sel_start, sel_end;
+
+
+    editw_get_sel_bounds(ew, &sel_start, &sel_end);
+    assert(sel_start < sel_end);
+    editw_strpos2xy(ew, sel_start, &sx0, &sy0);
+    editw_strpos2xy(ew, sel_end-1, &sx1, &sy1);
+
+    /* printf("sel: (%d,%d) - (%d,%d), ew->y_scroll=%d\n", sx0,sy0,sx1,sy1, ew->y_scroll); */
+
+    if (sy0 < ew->y_scroll) { sy0 = ew->y_scroll; sx0 = 0; }
+    if (sy1 > ew->y_scroll + EW_NROW - 1) { sy1 = ew->y_scroll + EW_NROW - 1; sx1 = EW_NCOL; }
+    for (y = sy0; y <= sy1; y++) {
+      if (y == sy0) x0 = sx0; else x0 = 0;
+      if (y == sy1) {
+	x1 = sx1;
+	x1 = MIN(x1, ew->row_firstchar[y+1]-ew->row_firstchar[y] - 1);
+      } else x1 = ew->row_firstchar[y+1]-ew->row_firstchar[y] - 1;
+
+      /* printf("y=%d, x0=%d, x1=%d, row first=%d row last=%d\n", y, x0, x1, ew->row_firstchar[y], ew->row_firstchar[y+1]); */
+      XSetForeground(dock->display, dock->NormalGC, cccolor_pixel(ew->sel_bgcolor));
+      XFillRectangle(dock->display, d, dock->NormalGC, 
+		     EW_TXT_X0 + FN_W * x0, EW_TXT_Y0 + FN_H * (y-ew->y_scroll), FN_W*(x1+1-x0), FN_H);
+
+      ccfont_draw_string8(ew->fn, ew->sel_fgcolor, d, EW_TXT_X0 + FN_W * x0, 
+                          EW_TXT_Y0 + FN_H * (y-ew->y_scroll) + FN_BASE_H, 
+                          &ew->buff[ew->row_firstchar[y]+x0], x1 - x0 + 1);
+      /*XSetForeground(dock->display, dock->NormalGC, cccolor_pixel(ew->sel_fgcolor));
+      XDrawString(dock->display, d, dock->NormalGC, 
+		   EW_TXT_X0 + FN_W * x0, EW_TXT_Y0 + FN_H * (y-ew->y_scroll) + FN_BASE_H, 
+		  &ew->buff[ew->row_firstchar[y]+x0], x1 - x0 + 1);
+      */
+    }
+  }
+
+
+  /* titre */
+  {
+    int x_title, x_name;
+    char *title;
+    char *site_name;
+    assert(ew->prefs);
+    title = str_printf("palmipede editor: %s",
+		       ew->buff_num == 0 ? "MSG" : "UA");
+    site_name = str_printf("%.8s", ew->prefs->site_name);
+    
+    x_title = (ew->dock_side == RIGHT ? EW_TXT_X0 + 8 : 216);
+    x_name = x_title + strlen(title)*FN_W + 8;
+
+    
+    ccfont_draw_string8(ew->fn, ew->light_color, d, 
+                        x_title - 1, EW_HEIGHT - 3 -1, 
+                        title, strlen(title));
+    /*ccfont_draw_string8(ew->fn, ew->light_color, d, 
+                        x_name - 1, EW_HEIGHT - 3 -1, 
+                        site_name, strlen(site_name));*/
+    ccfont_draw_string8(ew->fn, ew->dark_color, d, 
+                        x_title, EW_HEIGHT - 3, 
+                        title, strlen(title));
+    ccfont_draw_string8(ew->fn, dock->blue_color, d,
+                        x_name, EW_HEIGHT - 3, 
+                        site_name, strlen(site_name));
+    /*
+    XSetForeground(dock->display, dock->NormalGC, cccolor_pixel(ew->light_color));
+    XDrawString(dock->display, d, dock->NormalGC, 
+		x_title - 1, EW_HEIGHT - 3 -1, 
+		title, strlen(title));
+    XDrawString(dock->display, d, dock->NormalGC, 
+		x_name - 1, EW_HEIGHT - 3 -1, 
+		site_name, strlen(site_name));
+    XSetForeground(dock->display, dock->NormalGC, cccolor_pixel(ew->dark_color));
+    XDrawString(dock->display, d, dock->NormalGC, 
+		x_title, EW_HEIGHT - 3, 
+		title, strlen(title));
+    XSetForeground(dock->display, dock->NormalGC, IRGB2PIXEL(0x0000ff));
+    XDrawString(dock->display, d, dock->NormalGC, 
+		x_name, EW_HEIGHT - 3, 
+		site_name, strlen(site_name));
+    */
+    free(title);
+    free(site_name);
+  }
+  /* miniboutons */
+  for (i=0; i < NB_MINIBT; i++) {
+    int x,y,w,h;
+    x =  ew->mini[i].x; y = ew->mini[i].y;
+    w =  ew->mini[i].w; h = ew->mini[i].h;
+    if (ew->mini[i].visible) {
+      int dx;
+      dx = (i == BT_TOTOZBOOKMARK) ? 1:0;
+      XCopyArea(dock->display, ew->minipix, d, dock->NormalGC, ew->mini[i].pix_x, ew->mini[i].pix_y,
+		w,h,x+ew->mini[i].enfonce+dx,y+ew->mini[i].enfonce+dx);
+      
+      if (ew->mini[i].enfonce) {
+	XSetForeground(dock->display, dock->NormalGC, dock->dark_pixel);
+	
+	XDrawLine(dock->display, d, dock->NormalGC, x, y, x+w, y);
+	XDrawLine(dock->display, d, dock->NormalGC, x, y, x, y+h);
+      } else {
+	XSetForeground(dock->display, dock->NormalGC, dock->dark_pixel);
+	
+	XDrawLine(dock->display, d, dock->NormalGC, x+w, y+1, x+w, y+h);
+	XDrawLine(dock->display, d, dock->NormalGC, x+1, y+h, x+w, y+h);
+      }
+    }
+  }
+  if (ctab) free(ctab);
+}
+
+void
+editw_show_pix(Dock *dock, EditW *ew)
+{
+  XCopyArea(dock->display, ew->pix, ew->win, dock->NormalGC, 0, 0, EW_SHAPED_WIDTH, EW_SHAPED_HEIGHT, 0, 0);
+}
+
+void
+editw_refresh(Dock *dock, EditW *ew)
+{
+  editw_draw(dock, ew, ew->pix);
+  editw_show_pix(dock, ew);
+}
+
+/* un seul niveau d'undo... */
+void
+editw_undo(Dock *dock, EditW *ew) {
+  if (ew->undo.buff) {
+    int i;
+    for (i=0; i < ew->buff_sz; i++) {
+      SWAP(ew->buff[i], ew->undo.buff[i], char);
+    }
+    SWAP(ew->y_scroll, ew->undo.y_scroll, int);
+    SWAP(ew->curs_x, ew->undo.curs_x, int);
+    SWAP(ew->curs_y, ew->undo.curs_y, int);
+
+
+    editw_unselect(ew);
+    editw_wordwrap(ew);
+    editw_refresh(dock, ew);
+  }
+}
+
+int
+editw_get_site_id(Dock *dock) {
+  int i;
+  for (i=0; i < MAX_SITES; i++) {
+    if (dock->editw->prefs == Prefs.site[i]) return i;
+  }
+  return -1;
+}
+
+/* changement de buffer edite: message <-> useragent */
+static void
+editw_select_buff(Dock *dock, EditW *ew, int user_agent_mode)
+{
+  int j,x,sgn;
+
+  Site *s = sl_find_site_by_name(dock->sites, ew->prefs->site_name);
+  assert(s);
+  assert(s->board);
+  if (user_agent_mode == 1) {
+    ew->buff_num = 1;
+    ew->buff_sz = s->prefs->palmi_ua_max_len+1; //USERAGENT_MAX_LEN+1;
+    ew->buff = s->board->coin_coin_useragent;
+  } else if (user_agent_mode == 0) {
+    ew->buff_num = 0;
+    ew->buff_sz = s->prefs->palmi_msg_max_len+1; //MESSAGE_MAX_LEN+1;
+    ew->buff = dock->coin_coin_message;
+  } else {
+    assert(0);
+  }
+
+  ew->buff[ew->buff_sz-1] = 0; // securite
+
+  ew->curs_x = 0; ew->curs_y = 0; ew->y_scroll = 0;
+  ew->sel_anchor = 0;
+  ew->sel_head = strlen(ew->buff);
+
+  editw_wordwrap(ew);
+
+  if (ew->dock_side == RIGHT) {
+    x = EW_WIDTH-8;
+    sgn = -1;
+  } else {
+    x = EW_XBORD+8-15;
+    sgn = +1;
+  }
+  
+  for (j=0; j < NB_MINIBT; j++) {
+    static const int miniorder[NB_MINIBT] = {
+      BT_CLOSE, BT_CHANGE, BT_TOTOZBOOKMARK, BT_UNDO, BT_CLEAR, 
+      BT_STRIKE, BT_UNDERLINE, BT_ITAL, BT_BOLD, BT_TT, BT_DEFAULTUA};
+    int i;
+    
+    i = miniorder[j];
+
+    ew->mini[i].visible = 1;
+    if ((user_agent_mode && i != BT_CLOSE && i != BT_CHANGE && i != BT_UNDO && i != BT_CLEAR && i != BT_DEFAULTUA) ||
+	(user_agent_mode==0 && i == BT_DEFAULTUA)) {
+      ew->mini[i].visible = 0;
+    }
+    ew->mini[i].enfonce = 0;
+
+    if (ew->mini[i].visible)
+      x += sgn*(ew->mini[i].w+1);
+    ew->mini[i].x = x;
+    ew->mini[i].y = EW_SHAPED_HEIGHT - 15;
+    if (j == 2) x += sgn*10;
+    if (j == 4) x += sgn*10;
+  }
+
+  if (ew->undo.buff) free(ew->undo.buff);
+  ew->undo.buff = malloc(ew->buff_sz); 
+  memset(ew->undo.buff, 0, ew->buff_sz);
+
+  ew->last_command = OTHER;
+  editw_save_state(ew, CUTPASTE);
+
+  //editw_refresh(dock, ew);
+  editw_draw_frame(dock, ew, ew->pix, &dock->NormalGC, 0);
+  editw_draw(dock, ew, ew->pix);
+  //  XMoveWindow(dock->display, ew->win, 1200, 70) ;
+  editw_action(dock, ew);
+}
+
+/* appel�e par editw_show */
+static void
+editw_select_site(Dock *dock, int site_id) {
+  Site *s;
+  s = sl_find_site_id(dock->sites, site_id); assert(s);
+  assert(s->prefs->check_board);
+  dock->coin_coin_site_id = site_id;
+  dock->editw->prefs = s->prefs;
+}
+
+static void
+editw_select_default_site(Dock *dock) {
+  Site *s;
+  dock->editw->prefs = NULL;
+  for (s = dock->sites->list; s; s = s->next) {
+    if (s->prefs->check_board) {
+      dock->editw->prefs = s->prefs; break;
+    }
+  }
+}
+
+/* declenche l'affichage de la fenetre */
+void
+editw_show(Dock *dock, SitePrefs *sp, int user_agent_mode)
+{
+  EditW *ew = dock->editw;
+  XSetWindowAttributes wa;
+  Pixmap shape_mask;
+  GC monoGC;
+  int xiscr;
+  if (sp) ew->prefs = sp;
+  if (ew->prefs == NULL) {
+    editw_select_default_site(dock);
+  }
+  if (ew->prefs == NULL) { /* raaaah y'a aucune tribune */
+    msgbox_show(dock, _("looks like you fucked your options file, no board "
+			"has be defined: no noard, no palmipede"));
+    return;
+  } else {
+    Site *s = sl_find_site_by_name(dock->sites, ew->prefs->site_name);
+    if (s->prefs->check_board) {
+      editw_select_site(dock, s->site_id);
+    } else editw_select_default_site(dock);
+  }
+
+  assert(ew->mapped == 0);
+  ew->mapped = 1;
+
+  xiscr = MAX(dock_get_icon_pos(dock, &ew->dock_x, &ew->dock_y),0);
+  if (ew->dock_x - dock->xiscreen[xiscr].x_org < EW_SHAPED_WIDTH) ew->dock_side = LEFT; else ew->dock_side = RIGHT;
+  
+  ew->win = XCreateSimpleWindow (
+        dock->display, dock->rootwin, 0, 0, EW_SHAPED_WIDTH, EW_SHAPED_HEIGHT, 0,
+        WhitePixel(dock->display, dock->screennum),
+        cccolor_pixel(ew->win_bgcolor));
+  
+  //wa.background_pixmap = ButtonBarImage ;
+  wa.event_mask =
+    ButtonPressMask | 
+    ButtonReleaseMask | 
+    ExposureMask | 
+    PointerMotionMask | 
+    StructureNotifyMask |
+    KeyPressMask | 
+    KeyReleaseMask | 
+    EnterWindowMask | 
+    LeaveWindowMask | 
+    FocusChangeMask; // raaaaah necessaire pour que les Input Method fonctionnent!
+  
+  //  if (! ClickOnly) wa.event_mask |= EnterWindowMask | LeaveWindowMask ;
+  wa.override_redirect = (Prefs.palmipede_override_redirect ? True : False) ;
+  XChangeWindowAttributes (dock->display, ew->win,
+			   //CWBackPixmap | 
+			   CWEventMask | CWOverrideRedirect, &wa);
+  XSetTransientForHint(dock->display, ew->win, DOCK_WIN(dock));
+  XSetWindowBorderWidth(dock->display, ew->win, 0);
+  /* passage en borderless � grands coups de massue sur la t�te du wmanager */
+  XSetWMProtocols(dock->display, ew->win, &dock->atom_WM_TAKE_FOCUS, 1);
+  set_borderless_window_hints(dock->display, ew->win);
+  /*  set_window_sizepos_hints(dock->display, ew->win, -10000, -10000, 
+                           EW_SHAPED_WIDTH,EW_SHAPED_WIDTH,EW_SHAPED_WIDTH,
+                           EW_SHAPED_HEIGHT,EW_SHAPED_HEIGHT,EW_SHAPED_HEIGHT);
+  */
+  set_window_class_hint(dock->display, ew->win, "wmcoincoin", "palmipede");
+  //#ifdef OLD_KBCOINCOIN
+  kb_create_input_context_for(dock, ew->win, KB_PALMIPEDE);
+  //#endif
+  /* cree le pixmap et le rempli de noir */
+  ew->pix = XCreatePixmap(dock->display, ew->win, EW_SHAPED_WIDTH, EW_SHAPED_HEIGHT, 
+			  DefaultDepth(dock->display,dock->screennum));
+  XSetForeground(dock->display, dock->NormalGC, BlackPixel(dock->display,dock->screennum));
+  XFillRectangle(dock->display, ew->pix, dock->NormalGC, 0, 0, EW_SHAPED_WIDTH, EW_SHAPED_HEIGHT);
+
+  /* cree le mask, avec le GC-qui-va-bien et le met a 0 */
+  shape_mask = XCreatePixmap(dock->display, dock->rootwin, EW_SHAPED_WIDTH, EW_SHAPED_HEIGHT, 1);
+  monoGC = XCreateGC(dock->display, shape_mask, 0, NULL);
+  XSetForeground(dock->display, monoGC, 0); 
+  XFillRectangle(dock->display, shape_mask, monoGC, 0, 0, EW_SHAPED_WIDTH, EW_SHAPED_HEIGHT);
+
+  editw_draw_frame(dock, ew, ew->pix, &dock->NormalGC, 0);
+  editw_draw_frame(dock, ew, shape_mask, &monoGC, 1);
+  XShapeCombineMask(dock->display, ew->win, ShapeBounding, 0, 0, shape_mask,
+		    ShapeSet);
+  XFreePixmap(dock->display, shape_mask);
+  XFreeGC(dock->display, monoGC);
+
+  /*
+  {
+    XRectangle xr[2];
+    
+    xr[0].x = 0; xr[0].y = 0; xr[0].width = EW_WIDTH; xr[0].height = EW_HEIGHT-10;
+    xr[1].x = 100; xr[1].y = EW_HEIGHT-9; xr[1].width = EW_WIDTH-100; xr[1].height = 10;
+    XShapeCombineRectangles(dock->display, ew->win, ShapeBounding, 0, 0, xr, 2, ShapeSet, Unsorted);
+    }*/
+
+  ew->action = SORTIR; ew->action_step = 0;
+
+  /* user_agent_mode = -1 -> on ne change pas le buff_num,
+     sinon on lui assigne user_agent_mode */
+  editw_select_buff(dock, ew, (user_agent_mode == -1 ? ew->buff_num : user_agent_mode));
+
+}
+
+
+void
+editw_unmap(Dock *dock, EditW *ew)
+{
+  ew->mapped = 0;
+  //#ifdef OLD_KBCOINCOIN
+  kb_release_input_context(KB_PALMIPEDE);
+  //#endif
+  //  fprintf(stderr, "destroy! %lx\n", (unsigned long)ew->win);
+  XDestroyWindow(dock->display, ew->win);
+  //  fprintf(stderr, "destroy2!\n");
+
+  XFreePixmap(dock->display, ew->pix);
+  ew->win = None;
+  ew->action = NOACTION; /* au cas ou on fait un unmap en pleine sortie */
+  ew->buff = NULL; ew->buff_sz = 0;
+  if (ew->undo.buff) { free(ew->undo.buff); ew->undo.buff = NULL; }
+}
+
+int editw_ismapped(EditW *ew) {
+  return ew->mapped;
+}
+
+#define ACTION_NB_STEPS 15
+
+double exp(double x);
+/* animation de la fenetre quand elle rentre et sort .. */
+void
+editw_action(Dock *dock, EditW *ew)
+{
+  //  printf("%d %d\n", ew->action, ew->action_step);
+  if (ew->action == SORTIR) {
+    float f;
+    int l;
+    static int save_prev_l = 0;
+    Pixmap tpix = Prefs.palmipede_override_redirect ? 
+      None : XCreatePixmap(dock->display, ew->win, EW_SHAPED_WIDTH, EW_SHAPED_HEIGHT, 
+                           DefaultDepth(dock->display,dock->screennum));
+    f = (ew->action_step+1) / ((float)ACTION_NB_STEPS);
+    l = (int)(EW_SHAPED_WIDTH * f * f + .5);
+    //    l = (EW_SHAPED_WIDTH * (ew->action_step+1)) / (ACTION_NB_STEPS);
+    
+    //printf("SORTIR l=%d\n",l);
+    if (l == 0) {
+      l = 2;
+    }
+    if (ew->action_step == 0) {
+      /* traitement particulier quand le dock est a gauche de editw,
+	 a cause des XShape...
+      */
+      if (ew->dock_side == LEFT) {
+	XShapeOffsetShape(dock->display, ew->win, ShapeBounding, -EW_SHAPED_WIDTH+l, 0);
+	save_prev_l = l;
+      }
+    }
+    if (l > EW_SHAPED_WIDTH) l = EW_SHAPED_WIDTH;
+    if (ew->dock_side == LEFT) {
+      ew->win_xpos = ew->dock_x+64-2;
+      ew->win_ypos = ew->dock_y;
+      XShapeOffsetShape(dock->display, ew->win, ShapeBounding, l-save_prev_l, 0);
+      save_prev_l = l;
+      XMoveResizeWindow(dock->display, ew->win, ew->win_xpos, ew->win_ypos, l, EW_SHAPED_HEIGHT);
+      if (Prefs.palmipede_override_redirect)
+        XCopyArea(dock->display, ew->pix, ew->win, dock->NormalGC, EW_SHAPED_WIDTH-l, 0, l, EW_SHAPED_HEIGHT, 0, 0);
+      else
+        XCopyArea(dock->display, ew->pix, tpix, dock->NormalGC, EW_SHAPED_WIDTH-l, 0, l, EW_SHAPED_HEIGHT, 0, 0);
+    } else {
+      ew->win_xpos = ew->dock_x-l +2;
+      ew->win_ypos = ew->dock_y;
+      XMoveResizeWindow(dock->display, ew->win, ew->win_xpos, ew->win_ypos, l, EW_SHAPED_HEIGHT);
+      if (Prefs.palmipede_override_redirect)
+        XCopyArea(dock->display, ew->pix, ew->win, dock->NormalGC, 0, 0, l, EW_SHAPED_HEIGHT, 0, 0);
+      else XCopyArea(dock->display, ew->pix, tpix, dock->NormalGC, 0, 0, l, EW_SHAPED_HEIGHT, 0, 0);
+    }
+    
+    if (!Prefs.palmipede_override_redirect) {
+      XSetWindowBackgroundPixmap(dock->display, ew->win, tpix); 
+      XFreePixmap(dock->display, tpix);
+    }
+    if (ew->action_step == 0) {
+      Window root_return;
+      int x_return, y_return, width_return, height_return, border_width_return, depth_return;
+      set_window_sizepos_hints(dock->display, ew->win, ew->win_xpos, ew->win_ypos, l, l, l, 
+                               EW_SHAPED_HEIGHT,EW_SHAPED_HEIGHT,EW_SHAPED_HEIGHT);
+      XGetGeometry(dock->display, ew->win, &root_return, &x_return, &y_return, &width_return,
+                   &height_return, &border_width_return, &depth_return);
+      //printf("kikoo XMapRaised palmi %d,%d <-> %dx%d+%d+%d\n", ew->win_xpos, ew->win_ypos, width_return, height_return, x_return, y_return);
+      XMapRaised(dock->display, ew->win);
+    }
+    ew->action_step ++;
+    if (ew->action_step >= ACTION_NB_STEPS) {
+      //      ew->action_step = 0;
+      editw_set_kbfocus(dock, ew, 1);
+      ew->action = NOACTION;
+    }
+  } else if (ew->action == RENTRER) {
+    //    int l = (EW_SHAPED_WIDTH * (ew->action_step)) / (ACTION_NB_STEPS);
+    float f;
+    int l;
+    static int save_prev_l = 0;
+ 
+    f = (ew->action_step) / ((float)ACTION_NB_STEPS);
+    l = (int)(EW_SHAPED_WIDTH * (1. - (1-f) * (1-f)) + .5);
+
+    if (ew->action_step == ACTION_NB_STEPS) save_prev_l = l;
+
+    if (l > 0) {
+      Pixmap tpix = XCreatePixmap(dock->display, ew->win, EW_SHAPED_WIDTH, EW_SHAPED_HEIGHT, 
+                                  DefaultDepth(dock->display,dock->screennum));
+      if (ew->dock_side == LEFT) {
+	ew->win_xpos = ew->dock_x+64-2;
+	ew->win_ypos = ew->dock_y;
+	XShapeOffsetShape(dock->display, ew->win, ShapeBounding, l-save_prev_l, 0);
+	save_prev_l = l;
+	XMoveResizeWindow(dock->display, ew->win, ew->win_xpos, ew->win_ypos, l, EW_SHAPED_HEIGHT);
+	////XCopyArea(dock->display, ew->pix, ew->win, dock->NormalGC, EW_SHAPED_WIDTH-l, 0, l, EW_SHAPED_HEIGHT, 0, 0);
+        XCopyArea(dock->display, ew->pix, tpix, dock->NormalGC, EW_SHAPED_WIDTH-l, 0, l, EW_SHAPED_HEIGHT, 0, 0);
+      } else {
+	ew->win_xpos = ew->dock_x-l +2;
+	ew->win_ypos = ew->dock_y;
+	XMoveResizeWindow(dock->display, ew->win,  ew->win_xpos, ew->win_ypos, l, EW_SHAPED_HEIGHT);
+	////XCopyArea(dock->display, ew->pix, ew->win, dock->NormalGC, 0, 0, l, EW_SHAPED_HEIGHT, 0, 0);
+        XCopyArea(dock->display, ew->pix, tpix, dock->NormalGC, 0, 0, l, EW_SHAPED_HEIGHT, 0, 0);
+      }
+      XSetWindowBackgroundPixmap(dock->display, ew->win, tpix); 
+      XFreePixmap(dock->display, tpix);
+    }
+
+    ew->action_step --;
+
+    if (ew->action_step == 0) {
+      ew->action = NOACTION;
+      editw_unmap(dock, ew);
+    }
+  }
+}
+
+void
+editw_hide(Dock *dock, EditW *ew) {
+  if (dock)
+    ew->action = RENTRER;
+  //  ew->action_step = 0;
+}
+
+void editw_init_colors(EditW *ew) {
+  ew->win_bgcolor = ew->dark_color = ew->light_color = 
+    ew->fill_bgcolor = ew->txt_fgcolor[EWC_NORMAL] = 
+    ew->txt_bgcolor = ew->txt_fgcolor[EWC_LONGWORD] = 
+    ew->txt_fgcolor[EWC_BALISE] = ew->txt_fgcolor[EWC_URL] = 
+    ew->txt_fgcolor[EWC_KNOWN_URL] = ew->txt_fgcolor[EWC_SPELLWORD] = 
+    ew->cur_bgcolor = 
+    ew->cur_fgcolor = ew->sel_bgcolor = ew->sel_fgcolor = (CCColorId)(-1);
+}
+
+void editw_release_colors(EditW *ew) {
+   cccolor_release(&ew->win_bgcolor);
+   cccolor_release(&ew->dark_color);
+   cccolor_release(&ew->light_color);
+   cccolor_release(&ew->fill_bgcolor);
+   cccolor_release(&ew->txt_fgcolor[EWC_NORMAL]);
+   cccolor_release(&ew->txt_bgcolor);
+   cccolor_release(&ew->txt_fgcolor[EWC_LONGWORD]);
+   cccolor_release(&ew->txt_fgcolor[EWC_BALISE]);
+   cccolor_release(&ew->txt_fgcolor[EWC_URL]);
+   cccolor_release(&ew->txt_fgcolor[EWC_KNOWN_URL]);
+   cccolor_release(&ew->txt_fgcolor[EWC_SPELLWORD]);
+   cccolor_release(&ew->cur_bgcolor);
+   cccolor_release(&ew->cur_fgcolor);
+   cccolor_release(&ew->sel_bgcolor);
+   cccolor_release(&ew->sel_fgcolor); 
+ }
+
+void
+editw_reload_colors(Dock *dock, EditW *ew)
+{
+  char s_xpm_bgcolor[30];
+
+  cccolor_reset(&ew->win_bgcolor, 0xC0C0C0); // = RGB2PIXEL(200,200,200);
+  cccolor_reset(&ew->dark_color, 0x808080); // = RGB2PIXEL(128, 128, 128);
+  cccolor_reset(&ew->light_color, 0xD8D8D8); // = RGB2PIXEL(230, 230, 230);
+  cccolor_reset(&ew->fill_bgcolor, 0xD8D8D8); // = RGB2PIXEL(230, 230, 230);
+  /* couleurs du texte */
+  cccolor_reset(&ew->txt_fgcolor[EWC_NORMAL], 0x00000);
+  cccolor_reset(&ew->txt_bgcolor, 0xFFFFFF); // = RGB2PIXEL(255,255,255);
+  cccolor_reset(&ew->txt_fgcolor[EWC_LONGWORD], 0xff0000);// = RGB2PIXEL(255,0,0);
+  cccolor_reset(&ew->txt_fgcolor[EWC_BALISE],0x008000); // = RGB2PIXEL(0, 127, 0);
+  cccolor_reset(&ew->txt_fgcolor[EWC_URL], 0x0000FF); // = RGB2PIXEL(0, 0, 255);
+  cccolor_reset(&ew->txt_fgcolor[EWC_KNOWN_URL], 0xFF00FF); // = RGB2PIXEL(0, 0, 255);
+  cccolor_reset(&ew->txt_fgcolor[EWC_SPELLWORD], 0xC03262);// = RGB2PIXEL(200, 50, 100);
+  cccolor_reset(&ew->cur_bgcolor, 0xff0000);// = RGB2PIXEL(255,0,0);
+  cccolor_reset(&ew->cur_fgcolor, 0xffffff);
+  cccolor_reset(&ew->sel_bgcolor, 0xffe000);// = RGB2PIXEL(255,215,0);
+  cccolor_reset(&ew->sel_fgcolor, 0); // = RGB2PIXEL(0,0,0);
+  
+  /* on remplace la ligne de la couleur transparente par notre couleur de fond,
+     c une ruse de sioux */
+  if (ew->minipix) { XFreePixmap(dock->display, ew->minipix); ew->minipix = None; }
+
+/* un jour je m'insulterai en me disant que j'ai du mettre un commentaire
+   instructif et pertinent par rapport � la presence des deux espaces en debut
+   de ligne. */
+  snprintf(s_xpm_bgcolor, 30, "  \tc #%06X", Prefs.dock_bgcolor); 
+  editwin_minib_xpm[1] = s_xpm_bgcolor;
+  ew->minipix = RGBACreatePixmapFromXpmData(dock->rgba_context, editwin_minib_xpm); assert(ew->minipix);
+    
+  if (ew->clippy_pixmap) { XFreePixmap(dock->display, ew->clippy_pixmap); ew->clippy_pixmap = None; }
+  snprintf(s_xpm_bgcolor, 30, " \tc #%06X", (255 << 16) + (231 << 8) + 186);
+  clippy_xpm[1] = s_xpm_bgcolor;
+  ew->clippy_pixmap = RGBACreatePixmapFromXpmData(dock->rgba_context, clippy_xpm); assert(ew->clippy_pixmap);
+
+  sscanf(clippy_xpm[0], "%d %d", &ew->clippy_w, &ew->clippy_h);
+}
+
+
+/* initialisation */
+void
+editw_build(Dock *dock)
+{
+  EditW *ew;
+
+  ALLOC_OBJ(ew, EditW);
+  ew->mapped = 0;
+  ew->action = NOACTION;
+  ew->buff_num = 0;
+  ew->win_xpos = ew->win_ypos = 0;
+  ew->undo.buff = NULL;
+  ew->last_command = OTHER;
+  /*{
+    char fn[512];
+    snprintf(fn, 512, "%s-%s", EW_FONT, Prefs.font_encoding);
+    ew->fn = XLoadQueryFont(dock->display, fn);
+    if (!ew->fn) {
+      myfprintf(stderr, _("Unable to load font %s, trying iso8859-1 encoding \n"), fn);
+      snprintf(fn, 512, "%s-%s", EW_FONT, "iso8859-1");
+      ew->fn = XLoadQueryFont(dock->display, fn);
+      if (!ew->fn) {
+	myfprintf(stderr, _("Failed\n"));
+	exit(-1);
+      }
+    }
+    }*/
+  ew->fn = ccfont_get(EW_FONT); //"monospace-7");
+ 
+
+  ew->sel_anchor = ew->sel_head = -1;
+  ew->y_scroll = 0;
+  ew->curs_x = 0;
+  ew->curs_y = 0;
+
+  head = &ew->sel_head;
+  anch = &ew->sel_anchor;
+
+  ew->prefs = NULL;
+
+  ew->minipix = None;
+  ew->clippy_pixmap = None;
+  editw_init_colors(ew);
+  editw_reload_colors(dock, ew);
+
+  {
+    static int bt_x[NB_MINIBT] = { 0, 12, 27, 41, 55, 69, 83, 97, 111, 125, 139};
+    static int bt_w[NB_MINIBT] = {11, 15, 14, 14, 14, 14, 14, 14, 14, 14, 14};
+    int i;
+
+    for (i=0; i < NB_MINIBT; i++) {
+      ew->mini[i].pix_x = bt_x[i]; ew->mini[i].pix_y = 0;
+      ew->mini[i].w = bt_w[i]; ew->mini[i].h = 12;
+    }
+  }
+  ew->antibloub_id = id_type_invalid_id();
+  ew->antibloub_cnt = 0;
+  ew->antibloub_need_clipouille = 0;
+  dock->editw = ew;
+}
+
+void
+editw_rebuild(Dock *dock)
+{
+  EditW *ew = dock->editw;
+  int show = 0;
+  if (editw_ismapped(ew)) { editw_unmap(dock, ew); show = 1; }
+  editw_reload_colors(dock, ew);
+  editw_select_default_site(dock);
+  if (show) { editw_show(dock, ew->prefs, 0); }
+}
+
+static void
+editw_move_cursor_rel(EditW *ew, int dec)
+{
+  int i;
+  i = editw_xy2strpos(ew, ew->curs_x, ew->curs_y);
+  i += dec;
+  i = MIN(i, (int)strlen(ew->buff));
+  i = MAX(i, 0);
+  editw_strpos2curs(ew, i);
+}
+
+/*
+ * (des)active le keyboard focus sur la fenetre
+ */  
+void 
+editw_set_kbfocus(Dock *dock, EditW *ew, int get_it)
+{
+  Window focwin;
+  int revert_to, pp_focus;
+  if (Prefs.palmipede_override_redirect) {
+    XGetInputFocus(dock->display, &focwin, &revert_to);
+    pp_focus = (pp_ismapped(dock) && focwin == pp_get_win(dock));
+    if (get_it && ew->mapped/* && !pp_focus*/)
+      XSetInputFocus(dock->display, ew->win, RevertToPointerRoot, CurrentTime);
+    else /*if (!get_it) {
+           if (focwin == editw_get_win(ew)) {
+           if (pp_ismapped(dock)) 
+           XSetInputFocus(dock->display, pp_get_win(dock), RevertToPointerRoot, CurrentTime);
+           else*/
+      XSetInputFocus(dock->display, PointerRoot, RevertToNone, CurrentTime);
+  }
+}
+
+/* gestion de la selection pour les mouvements de curseur
+   avec 'shift' enfoncee */
+static void
+editw_shift_move_start(EditW *ew, int shift_move)
+{
+  if (shift_move) {
+    if (editw_has_selection(ew) == 0) {
+      ew->sel_anchor = editw_xy2strpos(ew, ew->curs_x, ew->curs_y);
+      ew->sel_head = ew->sel_anchor;
+    }
+  } else {
+    editw_unselect(ew);
+  }
+}
+
+static void
+editw_shift_move_end(EditW *ew, int shift_move)
+{
+  if (shift_move) {
+    ew->sel_head = editw_xy2strpos(ew, ew->curs_x, ew->curs_y);
+    //    printf("sel anch=%d, head = %d\n", ew->sel_anchor, ew->sel_head);
+  }
+}
+
+static int
+editw_move_left(EditW *ew, int shift_move)
+{
+  editw_shift_move_start(ew, shift_move);
+  if (ew->curs_x == 0) {
+    if (ew->curs_y > 0) {
+      ew->curs_y--; 
+      /* MIN pour le cas particulier d'une ligne de NCOL char exactment */
+      ew->curs_x = MIN(ew->row_firstchar[ew->curs_y+1] - ew->row_firstchar[ew->curs_y], EW_NCOL-1);
+      editw_adjust_yscroll(ew);
+    } else return 0;
+  } else ew->curs_x--;
+  editw_shift_move_end(ew, shift_move);
+  return 1;
+}
+
+static int
+editw_move_right(EditW *ew, int shift_move)
+{
+  editw_shift_move_start(ew, shift_move);
+  if (ew->curs_x+1 > MIN(ew->row_firstchar[ew->curs_y+1] - ew->row_firstchar[ew->curs_y], EW_NCOL-1)) {
+    if (ew->curs_y < ew->nrow_used-1) {
+      ew->curs_y++; ew->curs_x = 0;
+      editw_adjust_yscroll(ew);
+    } else return 0;
+  } else ew->curs_x++;
+  editw_shift_move_end(ew, shift_move);
+  return 1;
+}
+static void editw_move_up(EditW *ew, int shift_move) {
+  editw_shift_move_start(ew, shift_move);
+  if (ew->curs_y > 0) {
+    ew->curs_y--;
+    ew->curs_x = MIN(ew->curs_x, ew->row_firstchar[ew->curs_y+1] - ew->row_firstchar[ew->curs_y]);
+    editw_adjust_yscroll(ew);
+  }
+  editw_shift_move_end(ew, shift_move);
+}
+
+static void editw_move_down(EditW *ew, int shift_move) {
+  editw_shift_move_start(ew, shift_move);
+  if (ew->curs_y < ew->nrow_used-1) {
+    ew->curs_y++;
+    ew->curs_x = MIN(ew->curs_x, ew->row_firstchar[ew->curs_y+1] - ew->row_firstchar[ew->curs_y]);
+    editw_adjust_yscroll(ew);
+  }
+  editw_shift_move_end(ew, shift_move);
+}
+
+static void editw_move_next_word(EditW *ew, int shift_move) {
+  int i;
+
+  editw_shift_move_start(ew, shift_move);
+  i =   editw_xy2strpos(ew, ew->curs_x, ew->curs_y);
+  if (i == (int)strlen(ew->buff)) return;
+
+  while (IS_SEP2(ew->buff[i]) && ew->buff[i]) i++;
+  while (!IS_SEP2(ew->buff[i]) && ew->buff[i]) i++;
+
+  editw_strpos2curs(ew, i);
+  editw_shift_move_end(ew, shift_move);
+}
+
+static void editw_move_prev_word(EditW *ew, int shift_move) {
+  int i;
+
+  editw_shift_move_start(ew, shift_move);
+  i = editw_xy2strpos(ew, ew->curs_x, ew->curs_y);
+  if (i == 0) return;
+
+  while (IS_SEP2(ew->buff[i]) && i) i--;
+  while (!IS_SEP2(ew->buff[i]) && i) i--;
+  editw_strpos2curs(ew, i);
+  editw_shift_move_end(ew, shift_move);
+}
+
+
+static void editw_move_start_of_line(EditW *ew, int shift_move) {
+  editw_shift_move_start(ew, shift_move);
+  ew->curs_x = 0;
+  editw_shift_move_end(ew, shift_move);
+}
+
+/* pas statique car utilisee par le pinnipede */
+void editw_move_end_of_line(EditW *ew, int shift_move) {
+  editw_shift_move_start(ew, shift_move);
+  ew->curs_x = MIN(ew->row_firstchar[ew->curs_y+1] - ew->row_firstchar[ew->curs_y], EW_NCOL-1);
+  editw_shift_move_end(ew, shift_move);
+}
+
+static void editw_move_start(EditW *ew, int shift_move) {
+  editw_shift_move_start(ew, shift_move);
+  ew->curs_x = 0; ew->curs_y = 0;
+  editw_adjust_yscroll(ew);
+  editw_shift_move_end(ew, shift_move);
+}
+
+static void editw_move_end(EditW *ew, int shift_move) {
+  editw_shift_move_start(ew, shift_move);
+  ew->curs_y = ew->nrow_used-1;
+  ew->curs_x = MIN(ew->row_firstchar[ew->curs_y+1] - ew->row_firstchar[ew->curs_y], EW_NCOL-1);
+  editw_adjust_yscroll(ew);
+  editw_shift_move_end(ew, shift_move);
+}
+
+static void editw_del_char(EditW *ew, int backspace)
+{
+  if (editw_has_selection(ew)) {
+    editw_erase_selection(ew);
+  } else {
+    int i;
+    i = editw_xy2strpos(ew, ew->curs_x, ew->curs_y);
+    if (!backspace) {
+      if (i > 0) {
+	editw_move_cursor_rel(ew, -1);
+	editw_remove_txt(ew, i-1, i);
+	//	editw_move_left(ew, 0);
+      }
+    } else if (i < (int)strlen(ew->buff)) {
+      editw_remove_txt(ew, i, i+1);
+    }
+  }
+  editw_unselect(ew);
+  //  printf(ew->buff);
+  //	editw_wordwrap(ew);
+}
+
+static void
+editw_balise(EditW *ew, const char *bstart, const char *bend) {
+  int i;
+  int i0, i1;
+  int lstart, lend;
+  char *s;
+  lstart = strlen(bstart); lend = strlen(bend);
+  editw_get_sel_bounds(ew, &i0, &i1); i0=MAX(i0,0); i1=MAX(i1,0);
+  s = malloc(i1-i0+lstart+lend+1); 
+  strcpy(s, bstart); strncpy(s+lstart, ew->buff+i0, i1-i0); strcpy(s+lstart+i1-i0, bend);
+  i = editw_insert_string(ew, s); if (i<lend && i1==i0) editw_move_cursor_rel(ew,-lend+i);
+  free(s);
+}
+
+static void 
+editw_set_pinnipede_filter(Dock *dock) {
+  EditW *ew = dock->editw;
+  int curs_pos, i0, i1, blen;
+
+  if (!pp_ismapped(dock)) {
+    pp_show(dock);
+  }
+  if (pp_get_filter_mode(dock)) pp_change_filter_mode(dock, 0);
+  else {
+    blen = strlen(ew->buff);
+    curs_pos = editw_xy2strpos(ew, ew->curs_x, ew->curs_y);
+    curs_pos = MIN(curs_pos, blen);
+    
+    i0 = i1 = curs_pos; 
+    while (i0 > 0 && ew->buff[i0-1] > ' ') i0--;
+    while (i1 < blen && ew->buff[i1] > ' ') i1++;
+    if (i0 < i1) {
+      char *w;
+      
+      w = malloc(i1-i0+1); assert(w);
+      strncpy(w, ew->buff+i0, i1-i0);
+      w[i1-i0] = 0;
+      
+      if (ew->buff_num == 0) {
+        pp_set_word_filter(dock, w);
+      } else {
+        pp_set_ua_filter(dock, w);
+      }
+      free(w);
+    }
+  }
+}
+
+static void editw_set_pinnipede_scroll_to_bloub(Dock *dock) {
+  EditW *ew = dock->editw;
+  if (ew->antibloub_cnt && !id_type_is_invalid(ew->antibloub_id)) 
+    pp_show_message_from_id(dock, ew->antibloub_id);
+}
+
+void
+editw_next_site(Dock *dock, int dir) {
+  EditW *ew = dock->editw;
+  Site *s0 = sl_find_site_by_name(dock->sites, ew->prefs->site_name);
+  Site *sb = NULL, *sc;
+  assert(s0);
+  
+  /* look for the next site with a board */
+  sc = s0->next;
+  while (sc != s0) {
+    if (sc == NULL) sc = dock->sites->list;
+    if (sc == s0) break;
+    assert(sc);
+    if (sc && sc->prefs->check_board && !str_is_empty(sc->prefs->post_url)) {
+      sb = sc;
+      if (dir == +1) break;
+    }
+    sc = sc->next; 
+  }
+  if (sb == NULL) sb = s0;
+
+  assert(sb);
+  editw_select_site(dock, sb->site_id);
+  editw_select_buff(dock, ew, ew->buff_num);
+}
+
+
+/*
+static void
+editw_balise_tt(EditW *ew) {
+  int i;
+  i = editw_insert_string(ew, "<tt></tt>"); if (i<5) editw_move_cursor_rel(ew,-5);
+}
+*/
+#ifdef OLD_KBCOINCOIN
+#define FORWARD_KEY XSendEvent(dock->display, dock->rootwin, True, KeyPressMask, event); \
+  if (editw_ismapped(dock->editw)) editw_set_kbfocus(dock, ew, 1);
+#else 
+#define FORWARD_KEY ;
+#endif
+
+static void floude(Dock *dock, char *s) {
+  char *msg = s; 
+  Site *site;
+  pp_set_download_info("[all]", "flooding ...");
+  if (!s) msg = dock->coin_coin_message;
+  for (site = dock->sites->list; site; site = site->next) {
+    if (pp_tabs_is_site_visible(dock,site) && board_can_post_messages(site->board)) {
+      printf("C'esT PARTI [%s]: UA=\"%s\", MSG=\"%s\"\n", 
+             site->prefs->site_name,
+             site->board->coin_coin_useragent, 
+             msg);
+      ccqueue_push_board_post(site->site_id,  
+                              site->board->coin_coin_useragent, msg);
+    }
+  }
+  editw_hide(dock, dock->editw);
+}
+
+
+int
+editw_handle_keypress(Dock *dock, EditW *ew, XEvent *event)
+{
+  //static XComposeStatus compose_status = { 0, 0 };
+  static unsigned ctrl_mem = 0;
+  static unsigned lev = 0;
+  if (!editw_ismapped(dock->editw) || ew->action != NOACTION) return 0; /* animation encours */
+#ifdef OLD_KBCOINCOIN
+  if ((event->xkey.state & 0xdf60) || // c'�tait 0xdfe0 avant xfree 4.3 :-/ altgr est devenu "iso-levl3-shift" 
+      (kb_state()->input_context && XFilterEvent(event, None))) {
+    //printf("forward key: \n");
+    FORWARD_KEY;
+    return 1;
+  }
+  kb_lookup_string(dock, &event->xkey);
+#else
+  //if (need_lookup) kb_xim_lookup_key(&event->xkey, KB_PALMIPEDE);
+#endif
+  if (!(event->xkey.state & ControlMask) || !(event->xkey.state & ShiftMask)) { ctrl_mem = 0; lev = 0; }
+  else { ctrl_mem ^= kb_state()->ksym; ctrl_mem += (kb_state()->ksym & 0xff) << 4; lev++; }
+  /*printf("klen=%2d %08x %c state=%08x buff=%02x%02x%02x%02x\n", 
+         kb_state()->klen, (int)kb_state()->ksym, (int)kb_state()->ksym, event->xkey.state,
+         kb_state()->buff[0],kb_state()->buff[1],kb_state()->buff[2],kb_state()->buff[3]);*/
+
+  if (lev >= 3) {
+    switch (ctrl_mem) {
+    case 0xf38: msgbox_show(dock, "Dave ?"); break;
+    case 0x13cd: msgbox_show(dock, "I'm afraid. I'm afraid, Dave."); break;
+    case 0x22fa: break;
+    case 0x1850: msgbox_show(dock, "I honestly think you ought to calm down"); lev += 10; break;
+    case 0x27a5: break;
+    case 0x1D99: msgbox_show(dock, "..."); lev += 100; break;
+    case 0x31CC: msgbox_show(dock, "CO1N C01N IS COMING NOW!"); floude(dock,NULL); break;
+    case 0x2d40: break;
+    default: {
+      if (lev > 4 && lev < 100) {
+        msgbox_show(dock, "I'm sorry Dave, I'm afraid I can't do that.");
+      } else if (lev > 100) {
+        char *s = "I GIVE MY SOUL NOW I SURRENDER TO COINCOIN";
+        msgbox_show(dock, s); floude(dock,s);
+      } 
+      lev = 0; ctrl_mem = 0;
+    } break;
+    }
+    return 1;
+  }
+
+  //printf("editw_handle_keypress: ksym=%04x len=%d\n", (int)kb_state()->ksym, kb_state()->klen);
+
+  if (kb_state()->ksym == 0x20ac) { /* vilain hack pour reconnaite l'euro (le klen == 0 !!) */
+    editw_insert_char(ew, (unsigned char)'?');
+  } else if (event->xkey.state & Mod1Mask) {
+    switch (kb_state()->ksym) {
+      case 'I':
+      case 'i': editw_balise(ew,"<i>", "</i>"); break;
+      case 'B':
+      case 'b': editw_balise(ew, "<b>", "</b>"); break;
+      case 'U':
+      case 'u': editw_balise(ew, "<u>", "</u>"); break;
+      case 'S':
+      case 's': editw_balise(ew, "<s>", "</s>"); break;
+      case 'M':
+      case 'm': editw_balise(ew, _("====> <b>Moment "), "</b> <===="); break;
+      case 'O':
+      case 'o': editw_insert_string(ew, _("_o/* <b>BLAM</b>! ")); break;
+      case 'P':
+      case 'p': editw_insert_string(ew, _("_o/* <b>paf</b>! ")); break;
+      case 'C':
+      case 'c': editw_insert_string(ew, _("sale chauve ")); break;
+      case 'N':
+      case 'n': editw_insert_string(ew, "ounet "); break;
+      case 'G':
+      case 'g': editw_insert_string(ew, "Ta gueule pwet "); break;
+      case 'Z':
+      case 'z': editw_insert_string(ew, "La SuSE sa sent bon, sai libre "); break;
+      /* ci-dessous la formidable contribution de motodashi */
+      case 'J':
+      case 'j': editw_insert_string(ew, "\\o/ "); break;
+      case 'K':
+      case 'k': editw_insert_string(ew, "/o\\ "); break;
+      case 'H':
+      case 'h': editw_insert_string(ew, "[:haha]"); break;
+      case 'A':
+      case 'a': editw_insert_string(ew, "[:aloyd]"); break;
+      case 'W':
+      case 'w': editw_insert_string(ew, "[:cate winigan]"); break;
+      case 'T':
+      case 't': editw_insert_string(ew, "[:papatte]"); break;
+      case 'R':
+      case 'r': editw_insert_string(ew, "[:uxam]"); break;
+      case 'Q':
+      case 'q': editw_insert_string(ew, "sai maure icitte"); break;
+      case 'X':
+      case 'x': editw_insert_string(ew, "<b>Daubian is dying !</b>"); break;
+      /*case 'Z':
+            case 'z': editw_insert_string(ew, "<b>Merdriva is dead</b>");
+                break;*/
+      case '1': editw_insert_string(ew, "[:totoz]"); break;
+      case '2': editw_insert_string(ew, "[:infocore]"); break;
+      case '3': editw_insert_string(ew, "[:kibito]"); break;
+      case '4': editw_insert_string(ew, "[:itm]"); break;
+      case '5': editw_insert_string(ew, "[:artishow]"); break;
+      case '6': editw_insert_string(ew, "[:dodo]"); break;
+      case '7': editw_insert_string(ew, "[:pikazzz]"); break;
+      case '8': editw_insert_string(ew, "[:titoui]"); break;
+      case '9': editw_insert_string(ew, "[:m-power-bmw]"); break;
+      case '0': editw_balise(ew, _("[:"), "]"); break;
+      case '@': editw_insert_string(ew, "[:c at ssius]"); break;
+      case '^': editw_insert_string(ew, "?bloub?"); break;
+      /* end of motodashi */
+      
+      case 'F':
+      case 'f': editw_set_pinnipede_filter(dock); break;
+      case 'L':
+      case 'l': editw_set_pinnipede_scroll_to_bloub(dock); break;
+      case XK_KP_Left:
+      case XK_Left:
+        editw_next_site(dock, -1); break;
+      case XK_KP_Right:
+      case XK_Right:
+        editw_next_site(dock, +1); break;
+        /*
+          case 'T':
+          case 't': editw_balise_tt(ew); break;
+        */
+      default:
+        FORWARD_KEY; break;
+    }
+  } else if (event->xkey.state & ControlMask) {
+    switch (kb_state()->ksym) {
+    case 'A':
+    case 'a': editw_move_start_of_line(ew, 0); break;
+
+    case 'E':
+    case 'e': editw_move_end_of_line(ew, 0); break;
+
+    case 'F':
+    case 'f': editw_move_right(ew, 0); break;
+      
+    case 'B':
+    case 'b': editw_move_left(ew, 0); break;
+      
+    case 'N':
+    case 'n': editw_move_down(ew, 0); break;
+
+    case 'P':
+    case 'p': editw_move_up(ew, 0); break;
+
+    case 'D':
+    case 'd': editw_del_char(ew, 1); break;
+
+    case 'U':
+    case 'u': editw_unselect(ew);  editw_move_start(ew, 1); editw_cut_selection(dock, ew); break;
+
+    case 'K':
+    case 'k': editw_unselect(ew); editw_move_end(ew, 1); editw_cut_selection(dock, ew); break;
+
+    case 'W':
+    case 'w': editw_cut_selection(dock, ew); break;
+
+    case 'Y':
+    case 'y': editw_cb_paste(dock, ew, 0); break;
+
+    case '_': editw_undo(dock, ew); break;
+
+      /*case XK_Tab:
+      {
+	editw_next_site(dock,+1);
+      } break;
+      */
+    case XK_KP_Left:
+    case XK_Left:
+      editw_move_prev_word(ew, event->xkey.state & ShiftMask); break;
+
+    case XK_KP_Right:
+    case XK_Right:
+      editw_move_next_word(ew, event->xkey.state & ShiftMask); break;
+
+    case XK_KP_Home:
+    case XK_Home: 
+      editw_move_start(ew, event->xkey.state & ShiftMask); break;
+
+    case XK_KP_End:  
+    case XK_End:
+      editw_move_end(ew, event->xkey.state & ShiftMask); break;
+
+    default:
+      FORWARD_KEY; break;
+    }
+  } else {
+#ifdef OLD_KBCOINCOIN
+    kb_lookup_mb_string(dock, &event->xkey);
+#endif
+
+    switch (kb_state()->ksym) {
+    case XK_KP_Left:
+    case XK_Left:
+      editw_move_left(ew, event->xkey.state & ShiftMask); break;
+
+    case XK_KP_Right:
+    case XK_Right:
+      editw_move_right(ew, event->xkey.state & ShiftMask); break;
+
+    case XK_KP_Up:
+    case XK_Up:
+      editw_move_up(ew, event->xkey.state & ShiftMask); break;
+
+    case XK_KP_Down:
+    case XK_Down:
+      editw_move_down(ew, event->xkey.state & ShiftMask); break;
+
+    case XK_Delete:
+      if ((event->xkey.state & ShiftMask) == 0) {
+	editw_del_char(ew,1); 
+      } else {
+	editw_cut_selection(dock, ew);
+      } break;
+
+    case XK_BackSpace:
+      editw_del_char(ew,0); break;
+
+    case XK_Insert:
+      if (event->xkey.state & ShiftMask) {
+	editw_cb_paste(dock, ew, 0);
+      } break;
+      
+    case XK_KP_Home:
+    case XK_Home: 
+      editw_move_start_of_line(ew, event->xkey.state & ShiftMask); break;
+
+    case XK_KP_End:  
+    case XK_End:
+      editw_move_end_of_line(ew, event->xkey.state & ShiftMask); break;
+
+    case XK_Escape:
+      editw_hide(dock, ew); break;
+
+    case XK_Tab:
+      editw_select_buff(dock, ew, 1-ew->buff_num); break;
+
+    case XK_KP_0:
+    case XK_KP_1:
+    case XK_KP_2:
+    case XK_KP_3:
+    case XK_KP_4:
+    case XK_KP_5:
+    case XK_KP_6:
+    case XK_KP_7:
+    case XK_KP_8:
+    case XK_KP_9: editw_insert_char(ew, (unsigned char)(kb_state()->ksym - XK_KP_0) + '0'); break;
+    case XK_KP_Decimal: editw_insert_char(ew, '.'); break;
+    case XK_KP_Subtract: editw_insert_char(ew, '-'); break;
+    case XK_KP_Add: editw_insert_char(ew, '+'); break;
+    case XK_KP_Divide: editw_insert_char(ew, '/'); break;
+    case XK_KP_Multiply: editw_insert_char(ew, '*'); break;
+
+    case XK_Return:
+    case XK_KP_Enter:
+      //      printf("state %d\n", dock->door_state);
+      if (dock->door_state != OPENING && dock->door_state != OPENED) {
+	//printf("opening %d\n", dock->door_state);
+	dock->door_state = OPENING;
+      } else if (dock->door_state == OPENED || dock->door_state_step > 12) {
+	dock->red_button_press_flag = 1;
+	dock->post_anonyme = ((event->xkey.state & ShiftMask) ? 1:0);
+      }
+      break;
+    default:
+#ifdef OLD_KBCOINCOIN
+      if (kb_state()->ksym <= 0x00ff && (kb_state()->ksym & 0xff)) {
+	if (kb_state()->buff[0])
+	  editw_insert_string(ew, kb_state()->buff);
+      }
+#else
+      if (kb_state()->klen != 0)
+        editw_insert_string(ew, kb_state()->buff);
+#endif
+      break;
+    }
+    /*
+    if (kb_state()->ksym > ' ' && kb_state()->ksym <= 0xff) {
+      editw_insert_char(dock, ew, c);
+    */
+  }
+  editw_refresh(dock, ew);
+  //printf("kb_state()->ksym=%04x klen=%d buff=%02x(%c) %02x %02x %02x\n",(unsigned)kb_state()->ksym,klen, buff[0], buff[0], buff[1],buff[2],buff[3]);
+  //printf("cassos\n");
+  return 1;
+}
+
+void
+editw_handle_keyrelease(Dock *dock, EditW *ew, XEvent *event)
+{
+  KeySym ksym;
+  int klen;
+  unsigned char buff[4];
+
+  klen = XLookupString(&event->xkey, (char*)buff, sizeof(buff), &ksym, NULL);
+  if (ksym == XK_Return || ksym == XK_KP_Enter) {
+    if (dock_red_button_check(dock)) {
+      editw_hide(dock, ew);
+    }
+  }
+}
+
+void 
+editw_handle_button_press(Dock *dock, EditW *ew, XButtonEvent *event)
+{
+  int mx,my;
+  int b;
+
+  mx = event->x; my = event->y;
+  //  BLAHBLAH(2,printf("editw click click ! %d %d\n",x,y));
+
+  if (event->button == Button1 || event->button == Button2) {
+    b = editw_xy2minibutton(ew, mx,my); 
+    if (b>=0) { 
+      ew->mini[b].enfonce = 1;
+      editw_refresh(dock,ew);
+      return;
+    }
+  }
+
+  if (IS_INSIDE(mx,my,EW_TXT_X0, EW_TXT_Y0,EW_TXT_X0+ EW_TXT_WIDTH-1, EW_TXT_Y0+EW_TXT_HEIGHT-1)) {
+    int x,y;
+    
+    x = (mx - EW_TXT_X0)/FN_W;
+    y = (my - EW_TXT_Y0)/FN_H + ew->y_scroll;
+    assert(x >= 0 && x < EW_NCOL);
+    assert(y >= 0 && (y-ew->y_scroll) < EW_NROW);
+    /* left clic */
+    if (event->button == Button1) {
+      if (y >= ew->nrow_used) {
+	y = ew->nrow_used - 1;
+	x = ew->buff_len - ew->row_firstchar[y];
+      } else if (x >= ew->row_firstchar[y+1] - ew->row_firstchar[y]) {
+	x = ew->row_firstchar[y+1]-ew->row_firstchar[y];
+      }
+      ew->curs_x = x; ew->curs_y = y;
+      ew->sel_anchor = editw_xy2strpos(ew,x,y);
+      ew->sel_head = ew->sel_anchor;
+      /* middle clic */  
+    } else if (event->button == Button2) {
+      editw_cb_paste(dock, ew, 1);
+    } else if (event->button == Button3) {
+      int i;
+      plopup_unmap(dock);
+      for (i = 0; i < MAX_SITES; i++) {
+	if (Prefs.site[i] && Prefs.site[i]->check_board && strlen(Prefs.site[i]->post_url)) {
+	  plopup_pushentry(dock, Prefs.site[i]->site_name, i);
+	}
+      }
+      i = plopup_show_modal(dock, event->x_root, event->y_root);
+      if (i>=0) {
+	editw_change_current_site(dock,i);
+      }
+    }
+  } else if (event->button == Button1) {
+    XRaiseWindow(dock->display, ew->win);
+  }
+  if (Prefs.palmipede_enable_scroll_wheel_for_boulets) {
+    if (event->button == Button4) {
+      editw_next_site(dock,-1);
+    } else if (event->button == Button5) {
+      editw_next_site(dock,+1);
+    }
+  }
+}
+
+void editw_change_current_site(Dock *dock, int sid) {  
+  assert(editw_ismapped(dock->editw));
+  editw_select_site(dock, sid);
+  editw_select_buff(dock, dock->editw, dock->editw->buff_num);
+  editw_refresh(dock, dock->editw);
+}
+
+static void
+editw_handle_button_release(Dock *dock, EditW *ew, XButtonEvent *event)
+{
+  int b;
+
+  b = editw_button_pressed(ew);
+  if (b >= 0) {
+    ew->mini[b].enfonce = 0;
+    if (b == editw_xy2minibutton(ew, event->x, event->y)) {
+      switch (b) {
+      case BT_CLOSE: editw_hide(dock, ew); break;
+      case BT_CHANGE: editw_select_buff(dock, ew, 1-ew->buff_num); break;
+      case BT_ITAL: editw_balise(ew, "<i>", "</i>"); break;
+      case BT_BOLD: editw_balise(ew, "<b>", "</b>"); break;
+      case BT_UNDERLINE: editw_balise(ew, "<u>", "</u>"); break;
+      case BT_STRIKE: editw_balise(ew, "<s>", "</s>"); break;
+      case BT_TT: editw_balise(ew, "<tt>", "</tt>"); break;
+	//      case BT_TT: editw_balise_tt(ew); break;
+      case BT_UNDO: editw_undo(dock,ew); break;
+      case BT_DEFAULTUA: editw_erase(ew);
+	editw_insert_string(ew, ew->prefs->user_agent);
+	break;
+      case BT_CLEAR: 
+	/* patch de monsieur glandium [v2.22, 11/11/2001] (tres legerement reorganis�) */
+ 	{
+	  editw_erase(ew);
+	  /* insere le username si tout le buffer a �t� effac� */
+ 	  if (ew->prefs->user_name && strlen(ew->buff) == 0) {
+	    char *buffer = NULL;
+ 	    buffer = malloc(strlen(ew->prefs->user_name) + 3);
+ 	    strcpy(buffer,ew->prefs->user_name);
+ 	    strcat(buffer, " ");
+	    editw_insert_string(ew, buffer);
+	    free(buffer);
+	  }
+	}
+	break;
+      case BT_TOTOZBOOKMARK:
+        {
+          unsigned char *s = (unsigned char*)totoz_bookmark_url_html();
+          open_url(s, event->x_root, event->y_root, (event->button == Button1 ? 1 : 2) | URL_YES_I_KNOW_WHAT_I_DO);
+        }
+        break;
+      default: assert(0); break;
+      }
+    }
+  } else {
+
+    /* si on n'a pas relache un bouton .. */
+    if (editw_has_selection(ew)) {
+      int i0, i1;
+      editw_get_sel_bounds(ew, &i0, &i1);
+      editw_cb_copy(dock,ew->win,ew->buff + i0, i1-i0);
+    }
+  }
+
+  editw_refresh(dock, ew);
+}
+
+static void 
+editw_handle_motion(Dock *dock, EditW *ew, XMotionEvent *event)
+{
+  int mx,my;
+
+  mx = event->x; my = event->y;
+  //  BLAHBLAH(2,printf("editw click click ! %d %d\n",x,y));
+
+  if ((event->state & Button1Mask) && editw_button_pressed(ew) == -1) {
+    int x,y;
+    int pos;
+
+    //    printf("selection en cours..(%d,%d)",mx,my);
+    mx = MAX(mx,EW_TXT_X0);
+    mx = MIN(mx,EW_TXT_X0 + EW_TXT_WIDTH-1);
+    my = MAX(my,EW_TXT_Y0);
+    my = MIN(my,EW_TXT_Y0 + EW_TXT_HEIGHT-1);
+    //    printf("-> (%d,%d)",mx,my);
+
+    x = (mx - EW_TXT_X0)/FN_W;
+    y = (my - EW_TXT_Y0)/FN_H + ew->y_scroll;
+    //    printf("-> (%d,%d)\n",x,y);
+    assert(x >= 0 && x < EW_NCOL);
+    assert(y >= 0 && (y-ew->y_scroll) < EW_NROW);
+
+    
+    if (y >= ew->nrow_used) {
+      y = ew->nrow_used - 1;
+      x = ew->buff_len - ew->row_firstchar[y];
+    } else if (x >= ew->row_firstchar[y+1] - ew->row_firstchar[y]) {
+      x = ew->row_firstchar[y+1]-ew->row_firstchar[y];
+    }
+    pos = editw_xy2strpos(ew,x,y);
+
+    if (pos != ew->sel_head && ew->sel_anchor != -1) {
+      ew->sel_head = pos;
+      editw_refresh(dock, ew);
+    }
+  }
+}
+
+
+void
+editw_dispatch_event(Dock *dock, EditW *ew, XEvent *event)
+{
+  if (ew->action != NOACTION) return; /* animation encours */
+  switch (event->type) {
+  case DestroyNotify: 
+    {
+    } break;
+  case ButtonPress:
+    {
+      editw_handle_button_press(dock, ew, &event->xbutton);
+      
+    } break;
+  case ButtonRelease:
+    {
+      editw_handle_button_release(dock, ew, &event->xbutton);
+      editw_refresh(dock, ew);
+    } break;
+  case MotionNotify:
+    {
+      editw_handle_motion(dock, ew, &event->xmotion);
+    } break;
+  case EnterNotify:
+    {
+      editw_set_kbfocus(dock, ew, 1);
+    } break;
+  case LeaveNotify:
+    {
+      editw_set_kbfocus(dock, ew, 0);
+    } break;
+  case Expose:
+    {
+      XCopyArea(dock->display, ew->pix, ew->win, dock->NormalGC, 
+		event->xexpose.x, event->xexpose.y, 
+		event->xexpose.width, event->xexpose.height,
+		event->xexpose.x, event->xexpose.y);
+	//editw_show_pix(dock, ew);
+	//      printf("expose!\n");
+    } break;
+  case MapNotify:
+    {
+    } break;
+  case SelectionClear:
+    {
+      //      printf("selection clear\n");
+      editw_unselect(ew); 
+      editw_cb_clear();
+    } break;
+  case SelectionNotify:
+    {
+      //      printf("selection notify\n");
+      editw_cb_paste_external(dock, ew, event->xselection.requestor,
+			      event->xselection.property, 1);
+      editw_refresh(dock, ew);
+    } break;
+  case SelectionRequest: 
+    {
+      //      printf("selection request\n");
+      editw_cb_handle_selectionrequest(dock, &(event->xselectionrequest));
+    } break;
+  case UnmapNotify:
+    {
+      if (editw_ismapped(ew)) editw_unmap(dock,ew);
+    } break;
+  }
+}
+
+Window editw_get_win(EditW *ew) {
+  return ew->win;
+}
+
+
+void editw_balloon_test(Dock *dock, EditW *ew, int x, int y) {
+  const char *s[NB_MINIBT];
+  int i;
+  static int nb_suggest = 0;
+  const char *suggestion[] = {
+    "une histoire de clavier qui se blo, �a plait toujours :)",
+    "une fine allusion a folop et mooby",
+    "un bon vieux troll de distribs",
+    "un contre-troll, par exemple: <i>y'en a marre des trolls de distribs!</i>",
+    "quelque chose du genre <i>Debian r0x0r</i>",
+    "<i>w1nch10tte ssuxX!</i>",
+    "<i>C01N C01N is your M4ST3R<i>",
+    "<i>grouik grouiiiiiik !</i>",
+    "<i>vi sux0r, emacs roulaize</i>",
+    "une question a la con qui se termine par <i>c'est normal?</i>",
+    "une contrepetrie",
+    "une bonne blague, par exemple que'est-ce que �a fait quand on se trompe entre la vaseline et le mastic",
+    "d'attendre 11:11:11 pour donner l'heure",
+    "<i>Plop!</i>",
+    "de vous faire passer pour un admin NT",
+    "d'imiter le cri d'un animal",
+    "un <i>Moment Nuttela</i>",
+    "de faire une blague en base 13",
+    "de parler de vos probl�mes de digestion",
+    "d'aller faire un tour sur bbspot et de poster une news bidon sur la tribune",
+    "d'expliquer pourquoi votre iguane des sables n'utilise que bsd",
+    "de vous faire passer pour un utilisateur de MacOS/X",
+    "de lancer un troll orteaugrafique",
+    "de faire de l'ascii-art",
+    "d'aller prendre une douche", 
+    "de relancer le d�bat 'nmap' vs 'telnet sur le port 25'",
+    "14:00 chotomie ?",
+    "14:00 plodocus",
+    "d'ouvrir une bi�re",
+    "d'aller prendre un caf�",
+    "de poster un jeu de mot bien pourri (exemple: windows m'ecoeure)",
+    "demander o� est la FAQ de la tribune",
+    "de signaler que WindowMaker 0.70.0 is out!",
+    "de rappeler que Rational a �t� rachet� par IBM avec une [url] qui claque",
+    "d'annoncer avec �motion que vous venez de d�passer les 100XP",
+    "de gueuler contre le syst�me de votes",
+    "de tenter un concours de trollom�tre",
+    "de convaincre les moules de lancer un manual DDOS",
+    "de poster un lien sur un forum externe (hardware.fr, aufeminin, forum.topchretien.org, ...)",
+    "d'arr�ter de mouler sur la tribune",
+    "de lancer un d�bat sur pbpg",
+    "de donner la m�t�o",
+    "de dire qu'aucune news n'a �t� mod�r�e depuis bien longtemps",
+    "de demander ce que peuvent bien faire les mod�rateurs",
+    "de vous renseigner sur la fa�on d'avoir le meilleur rendu graphique pour votre site web en flash",
+    "de lancer un sondage sur la quantit� de sel dans une motte de beurre",
+    "d'aller vous promener dans la for�t",
+    "de prendre une photo",
+    "de demander aux moules ce qu'elles utilisent comme langage de programmation",
+    "<i>le COBOL, c'est de la merde !<i>",
+    "un troll de langages de programmation",
+    "14:00 pht�rie ?",
+    "d'expliquer comment vous faites pour attraper et tuer les chats",
+    "<i>wolfenstein cd key</i>",
+    "d'expliquer pourquoi vous n'irez pas passer vos vacances en Bretagne",
+    "de disserter sur la fain�antise des fonctionnaires de ce pays",
+    "de raconter vos malheurs de fa�on larmoyante, tout en rappelant que vous gagnez 400kf/an et que votre boulot est super-g�nial",
+    "de r�pondre en tant qu'expert � la premi�re question qui vient, en pla�ant un maximum de buzzwords",
+    "de demander � quoi sert le gros bouton rouge",
+    "de poster un lien vers une news sur Britney Spears",
+    "de demander combien Poolpy a de ventouses",
+    "de poster un script permettant de voter en continu pour un sondage en ligne � la con",
+    "\\o/ Nartaaaaaaa !",
+    "un moment Village People: \\o/ ^o^ o[ /o\\",
+    "de lancer une discussion sur les qualit�s et inconv�nient de l'�nergie �olienne compar�e � l'energie nucl�aire",
+    "de donner votre avis sur les motivations de Jos� Bov�",
+    "de rappeler que les 4x4 c'est gros, laid et �a pollue",
+    "d'insulter bruyamment tous les fonctionnaires de France Telecom qui sont tous des faineants et des incapables",
+    "de donner votre avis sur tuxfamily",
+    "de vous moquer d'un chauve",
+    NULL
+  };
+  char txt[512];
+
+  if (nb_suggest == 0) {
+    while (suggestion[nb_suggest])
+      nb_suggest++;
+    //printf("il y a %d suggest\n", nb_suggest);
+  }
+
+  i = rand() % nb_suggest;
+  snprintf(txt, 512, _("<p align=center><b>wmCoinCoin Agent</b></p>"
+	   "Hmmm, it seems that you don't know what to say, so, if you don't mind,"
+	   "I suggest <font color=blue>%s</font>"), suggestion[i]);
+  if (ew->buff_num == 0) {
+    balloon_test_with_image(dock, x, y, ew->win_xpos, ew->win_ypos, 8000,
+			    EW_TXT_X0, EW_TXT_Y0, EW_TXT_WIDTH-1, EW_TXT_HEIGHT-1,
+			    txt, ew->clippy_pixmap, ew->clippy_w+8, ew->clippy_h);
+  } else {
+    balloon_test(dock, x, y, ew->win_xpos, ew->win_ypos, 10000,
+		 EW_TXT_X0, EW_TXT_Y0, EW_TXT_WIDTH-1, EW_TXT_HEIGHT-1,
+		 _("Put here the user-agent"));
+  }
+
+  s[BT_CLOSE] = _("Fold back the palmipede<p>shortcut: <b>escape</b>");
+  s[BT_CHANGE] = (ew->buff_num == 0 ? _("Edit the user-agent") : _("Edit the message<p>shortcut: <b>Tab</b>"));
+  s[BT_ITAL] = _("Insert italic<p>shortcut: <b>Alt-I</b>");
+  s[BT_BOLD] = _("Insert bold<p>shortcut: <b>Alt-B</b>");
+  s[BT_TT] = _("Insert teletype tag<p>shortcut: <b>Alt-T</b>");
+  s[BT_STRIKE] = _("Overstrike text<p>shortcut: <b>Alt-S</b>");
+  s[BT_UNDERLINE] = _("Underline text<p>shortcut: <b>Alt-U</b>");
+  //  s[BT_TT] = "Inserer les balises TeleType<p>shortcut: <b>Alt-T</b>";
+  s[BT_UNDO] = _("Undo<p>shortcut: <b>Ctrl-Z</b> or <b>Ctrl-_</b>");
+  s[BT_CLEAR] = _("Clear");
+  s[BT_TOTOZBOOKMARK] = _("View the [:totoz] picture bookmark in your browser");
+  s[BT_DEFAULTUA] = _("Restore the default user-agent");
+  for (i = 0; i < NB_MINIBT; i++) {
+    if (ew->mini[i].visible) {
+      balloon_test(dock, x, y, ew->win_xpos, ew->win_ypos, 0, 
+		   ew->mini[i].x, ew->mini[i].y, 
+		   ew->mini[i].w, ew->mini[i].h, s[i]);
+    }
+  }
+}
+
+/* on ne s'endort pas sur le bouton rouge */
+int
+editw_check_corse(Dock *dock, unsigned keycode) {
+  if (dock->red_button_send_cnt < 20) {
+    if (!balloon_ismapped(dock)) {
+      int x,y;
+      dock_get_icon_pos(dock, &x, &y);
+      balloon_show_with_image(dock, x, y, 64, 64,
+                              "<p align=center><b>wmCoinCoin Agent - Corsica Edition</b></p>Hmmm on dirait que<br>"
+                              " (a) vous vous �tes endormi sur la touche enter<br>"
+                              " (b) votre clavier est blo<br>"
+                              "<i>Hint:</i>:remove your big finger from the \"Return\" key", 400, 
+                              dock->editw->clippy_pixmap, dock->editw->clippy_w+8, dock->editw->clippy_h);
+    }
+    dock->red_button_send_cnt = 10;
+    balloon_disable_key(dock,keycode); /* desactive temporairement la disparition du ballon au premier KeyPressEvent */
+  } else if (balloon_ismapped(dock)) balloon_hide(dock);
+  return (dock->editw->action == NOACTION && dock->red_button_send_cnt > 20);
+}
+
+void editw_check_bloub(Dock *dock) {
+  EditW *ew = dock->editw;
+  if (ew->antibloub_cnt && !balloon_ismapped(dock)) {
+    int x,y;
+    dock_get_icon_pos(dock, &x, &y);
+    id_type id = ew->antibloub_id;
+    board_msg_info *mi = boards_find_id(dock->sites->boards, id);
+    char *bloub0 = 0;
+    
+    char site_name[512]; site_name[0] = 0;
+    if (!id_type_is_invalid(id) && id_type_sid(id) < Prefs.nb_sites)
+      snprintf(site_name, 512, "@%s", Prefs.site[id_type_sid(id)]->site_name);
+    if (mi) {      
+      char login_name[512]; login_name[0] = 0;
+      if (mi->login) snprintf(login_name, 512, _(" by %s"), mi->login);
+      
+      if (ew->antibloub_cnt == 1)
+        bloub0 = str_printf(_("at %02d:%02d:%02d%s%s"), mi->hmsf[0], mi->hmsf[1], mi->hmsf[2], site_name,login_name);
+      else 
+        bloub0 = str_printf(_("<b>%d</b> times (first reference at %02d:%02d:%02d%s%s)"), 
+                            ew->antibloub_cnt,mi->hmsf[0], mi->hmsf[1], mi->hmsf[2], site_name,login_name);
+    } else bloub0 = str_printf(_("<b>%d</b> times (the url has left the pinnipede)"), 
+                               ew->antibloub_cnt);
+    char *bloub = str_printf(_("<b>�Bloub!�</b> It looks like you are living in the water. "
+                               "This url has already been posted %s<p>Press Alt-L to scroll "
+                               "to the url in the pinnipede, (Alt-F is also an option)"), bloub0);
+    balloon_show_with_image(dock, x, y, 64, 64, bloub, 200, dock->editw->clippy_pixmap, dock->editw->clippy_w+8, dock->editw->clippy_h);
+    free(bloub); free(bloub0);
+  }
+}
diff --git a/src/picohtml.c b/src/picohtml.c
new file mode 100644
index 0000000..cfbccf6
--- /dev/null
+++ b/src/picohtml.c
@@ -0,0 +1,693 @@
+/*
+  rcsid=$Id: picohtml.c,v 1.18 2004/02/29 19:01:27 pouaite Exp $
+  ChangeLog:
+  $Log: picohtml.c,v $
+  Revision 1.18  2004/02/29 19:01:27  pouaite
+  et hop
+
+  Revision 1.17  2004/02/29 15:01:19  pouaite
+  May the charles bronson spirit be with you
+
+  Revision 1.16  2003/01/11 17:44:10  pouaite
+  ajout de stats/coinping sur les sites
+
+  Revision 1.15  2002/12/20 11:26:35  pouaite
+  deux trois conneries
+
+  Revision 1.14  2002/10/16 20:41:45  pouaite
+  killall toto
+
+  Revision 1.13  2002/10/15 23:17:28  pouaite
+  rustinage � la truelle
+
+  Revision 1.12  2002/09/22 23:16:33  pouaite
+  i had a friend, but he does not move anymore
+
+  Revision 1.11  2002/08/17 18:33:39  pouaite
+  grosse commition
+
+  Revision 1.10  2002/06/23 14:01:36  pouaite
+  ouups, j'avais flingu� les modifs depuis la v2.3.8b
+
+  Revision 1.9  2002/06/23 10:44:05  pouaite
+  i18n-isation of the coincoin(kwakkwak), thanks to the incredible jjb !
+
+  Revision 1.7  2002/04/01 01:39:38  pouaite
+  grosse grosse commition (cf changelog)
+
+  Revision 1.6  2002/03/03 10:10:04  pouaite
+  bugfixes divers et vari�s
+
+  Revision 1.5  2002/02/27 00:32:19  pouaite
+  modifs velues
+
+  Revision 1.4  2002/01/12 19:03:54  pouaite
+  bugfix de picohtml et raccourci altgr-e pour le symbole euro (gruik)
+
+  Revision 1.3  2002/01/12 17:29:08  pouaite
+  support de l'iso8859-15 (euro..)
+
+  Revision 1.2  2001/12/02 18:34:54  pouaite
+  ajout de tags cvs Id et Log un peu partout...
+
+*/
+
+#include <libintl.h>
+#define _(String) gettext (String)
+
+#include "coincoin.h"
+#include "coin_xutil.h"
+#include "picohtml.h"
+
+/* dans la famille des fonction pourries, je demande ... */
+static char *
+get_tok(const unsigned char **p, const unsigned char **np, 
+	unsigned char *tok, int max_toklen)
+{
+  const unsigned char *start, *end;
+  assert(p); 
+  assert(*p); 
+  assert(tok);
+
+  start = *p; *np = NULL;
+  // saute les espaces
+  while (*start <= ' ' && *start) start++;
+  end = start;
+  if (*start == '<') {
+    while (*end && *end != '>') end++;
+    if (*end) end++;
+  } else {
+    while (*end && *end != '<' && *end > ' ') end++;
+  }
+  if (end == start) return NULL;
+  else strncpy(tok, start, MIN(end-start, max_toklen-1));
+  tok[MIN(end-start, max_toklen-1)] = 0;
+  *p = start;
+  *np = end;
+  return tok;
+}
+
+void
+picohtml_set_url_path(PicoHtml *ph, const char *s) {
+  ph->url_path = strdup(s);
+}
+
+void
+picohtml_unset_url_path(PicoHtml *ph) {
+  COND_FREE(ph->url_path);
+}
+
+/* ajoute un mot dans la liste */
+static PicoHtmlItem *
+picohtml_additem(PicoHtml *ph, const unsigned char *s, int len, c_attr attrib, int x, int y, 
+	       CCFontId fn, CCColorId color, char *link, int special_attr)
+{
+  PicoHtmlItem *it, *pit;
+  int i;
+
+  assert(len < 10000); /* restons raisonnables */
+  /* recherche du dernier elt */
+  it = ph->txt;
+  if (it) {
+    while (it) {
+      pit = it;
+      it = it->next;
+    }
+    ALLOC_OBJ(it, PicoHtmlItem);
+    pit->next = it;
+  } else {
+    ALLOC_OBJ(it, PicoHtmlItem); ph->txt = it;
+  }
+
+  ALLOC_VEC(it->s, len+1, unsigned char);
+  it->s[len] = 0;
+  for (i=0; i < len; i++) it->s[i] = s[i];
+  it->x = x; 
+  it->y = y; 
+  it->w = ccfont_text_width8(fn, s, len);
+  it->h = ccfont_height(fn);
+  it->attr = attrib;
+  it->fn = fn;
+  if (attrib & CATTR_LNK) {
+    it->color = ph->url_color;
+    //    printf("ajout item CATTR_LNK\n");
+  } else {
+    it->color = color;
+  }
+  it->link_str = link;
+  it->special_attr = special_attr;
+  BLAHBLAH(5, myprintf("{%<CYA %s>,x=%d, y=%d, w=%<YEL %d>, h=%d}\n", 
+		       it->s, it->x, it->y,it->w,it->h));
+  it->next = NULL;
+  return it;
+}
+
+#define NORMAL 1
+#define CENTER 2
+#define RIGHT  3
+#define LEFT   4
+
+/* justification d'une ligne (rustique) */
+static void
+//justif_ligne(PicoHtml *ph, PicoHtmlItem *it_debut_ligne, int xpos_debut_ligne, int xmax, int parag_align)
+justif_ligne(PicoHtmlItem *it_debut_ligne, int xmax, int parag_align)
+{
+  PicoHtmlItem *it;
+  int nb_word, xjust, xdec, incxdec, xcheck;
+
+  if (it_debut_ligne == NULL) return;
+
+  if (parag_align == LEFT) return;
+
+  it = it_debut_ligne;
+  if (it->next == NULL && parag_align == NORMAL) return; /* des fois, y'a pas d'espoir */
+  nb_word = 0; 
+  xjust = -1;
+
+  /* comptage de l'espace a combler */
+  while (it) { 
+    if (it->next == NULL) 
+      xjust = xmax - (it->x + it->w);
+    it = it->next; 
+    nb_word++; 
+  }
+
+  if (xjust < 0) xjust = 0; /* �a arrive si le mot est plus large que la fenetre et qu'on essaye
+			       deseperement de le centrer ... */
+  //  assert(xjust >= 0); 
+  if (xjust == 0) return;
+
+  /* justification � droite et � gauche */
+  if (parag_align == NORMAL) {
+    if (xjust / nb_word > 10) return; /* pas de justification quand �a cr�� trop d'espaces entre les mots */
+    it = it_debut_ligne->next;
+    xdec = 0; xcheck = 0;
+    while (it) {
+      incxdec = xjust / (nb_word-1);
+      xjust -= incxdec;
+      xdec += incxdec;
+      it->x += xdec;
+      nb_word--;
+      xcheck = it->x + it->w;
+      it = it->next;
+    }
+  //printf("xcheck = %d, xmax = %d\n", xcheck, xmax);
+    assert(xcheck == xmax);
+    assert(nb_word = 1);
+  } else if (parag_align == CENTER) {
+    it = it_debut_ligne;
+    while (it) {
+      it->x += xjust/2;
+      it = it->next;
+    }
+  } else if (parag_align == RIGHT) {
+    it = it_debut_ligne;
+    while (it) {
+      it->x += xjust;
+      it = it->next;
+    }
+  }
+}
+
+
+/* construction du texte avec ses quelques attributs */
+void
+picohtml_parse(PicoHtml *ph, const char *buff, int width)
+{
+  #define MAX_TOK_LEN 500
+  const unsigned char *p, *np;
+  unsigned char tok[MAX_TOK_LEN];
+  c_attr attrib;
+  char *cur_link; /* pointe vers l'url courante (ou bien NULL) */
+  int special_attr; /* un attribut particulier utilis� pour besoins internes (cf newswin) */
+
+  /* positionne quand on change de paragraphe */
+  int new_parag;
+
+  /* valable pour la ligne en cours de traitement,
+     utilises pour la justification finale */
+  int xpos_debut_ligne;
+  PicoHtmlItem *it_debut_ligne;
+
+  int htext, space_width, parag_skip, line_skip, parag_align, next_parag_align;
+  int flag_debut_ligne, flag_item_to_add;
+  int x,y,w;
+  CCFontId cur_fn=(CCFontId)(-1);
+
+  CCColorId cur_color;
+
+  int isListe = 0;
+  int isOrderedListe = 0;
+  int indexListe = 0;
+  int isBlockquote = 0;
+
+  if (buff == NULL) {
+    fprintf(stderr, _("Bug! calling picohtml(NULL)!"));
+    buff = _("Bug ! appel de picohtml(NULL) !");
+  } 
+
+  p = buff;
+  htext  = ccfont_height(ph->fn_base);
+
+  space_width = ccfont_text_width8(ph->fn_base, "  ", 2);
+  parag_skip = (int)(htext * ph->parag_fskip+.5);
+  line_skip = (int)(htext * ph->line_fskip+.5);
+  
+  attrib = 0;
+
+  ph->required_width = -1;
+
+  new_parag = 1;
+  parag_align = NORMAL; next_parag_align = NORMAL;
+  flag_debut_ligne = 1; 
+  it_debut_ligne = NULL;
+
+  cur_link = NULL;
+  ph->nb_links = 0;
+  special_attr = 0;
+
+  x = 0; //- parag_skip;
+  y = 0; //parag_skip;
+
+  xpos_debut_ligne = x;
+  cur_color = ph->default_color;
+  while (*p) {
+    flag_item_to_add = 0;
+
+    if (get_tok(&p, &np, tok, MAX_TOK_LEN) == NULL) break;
+
+
+
+     /* il est pas beau le parser d'html ? */
+    if (strncasecmp(tok, "<br", 3) == 0) {
+      new_parag = 1;
+ /* Patch lordOric */			
+    } else if (strcasecmp(tok, "<ol>") == 0) {
+			y+=4; isOrderedListe = 1; indexListe = 0;
+    } else if (strcasecmp(tok, "</ol>") == 0) {
+      new_parag = 1; y+=4; isOrderedListe = 0;
+    } else if (strcasecmp(tok, "<ul>") == 0) {
+			y+=4; 
+    } else if (strcasecmp(tok, "</ul>") == 0) {
+      new_parag = 1; y+=4;
+		} else if (strcasecmp(tok, "<li>") == 0 ) {
+			new_parag = 1; isListe = 1;	indexListe++;
+		} else if (strcasecmp(tok, "</li>") == 0 ) {
+			isListe = 0;  
+    } else if (strcasecmp(tok, "<blockquote>") == 0) {
+      new_parag = 1; next_parag_align = NORMAL; isBlockquote = 1;
+    } else if (strcasecmp(tok, "</blockquote>") == 0) {
+      new_parag = 1; next_parag_align = NORMAL; y += 10; isBlockquote = 0;
+/* Patch lordOric */
+   } else if (strcasecmp(tok, "<p>") == 0) {
+      new_parag = 1; next_parag_align = NORMAL; y += 10; 
+    } else if (strcasecmp(tok, "</p>") == 0) {
+      new_parag = 1; next_parag_align = NORMAL; y += 4;
+    } else if (strcasecmp(tok, "<p align=center>") == 0) {
+      new_parag = 1; next_parag_align = CENTER; 
+      ph->required_width = width; // presence d'alignement => interdiction de renoyer la largeur minimale
+
+    } else if (strcasecmp(tok, "<p align=right>") == 0) {
+      new_parag = 1; next_parag_align = RIGHT;
+      ph->required_width = width; // presence d'alignement => interdiction de renoyer la largeur minimale
+    } else if (strncasecmp(tok, "<tab",4) == 0 && 
+	       (tok[4]=='>' || (isdigit(tok[4]) && tok[5] == '>'))) { /* extension proprietaire ;-) */
+      int n = (tok[4]=='>' ? 1 : tok[4]-'0');
+      if (n) 
+	x = ((x + (n*ph->tabul_skip))/(n*ph->tabul_skip))*(n*ph->tabul_skip);
+      parag_align = LEFT;
+    } else if (strncasecmp(tok, "<!special=", 10)==0) { /* encore une extension (pour phv_title de newswin.c) */
+      special_attr = atoi(tok+10);
+      //      printf("special_attr <- %d\n", special_attr);
+    } else if (strncasecmp(tok, "<a", 2) == 0) {
+      char *s1, *s2;
+      s1 = tok;
+      while (*s1 != '"' && *s1) s1++;
+      if (*s1) {
+	s1++;
+	s2 = s1;
+	while (*s2 != '"' && *s2) s2++;
+	if (*s2 == '"') {
+	  char *url;
+	  *s2 = 0;
+	  url = NULL;
+	  if (strncasecmp(s1, "http://", 7) == 0 ||
+	      strncasecmp(s1, "https://", 8) == 0 ||
+	      strncasecmp(s1, "ftp://", 6) == 0) {
+	    url = strdup(s1);
+	  } else if (ph->url_path
+		     && (strncmp(s1, "./",2) == 0 ||
+			 strncmp(s1, "../",3) == 0)) {
+	    url = str_printf("%s%s", ph->url_path, s1);
+	  }
+	  if (url) {
+	    if (ph->nb_links < PH_MAX_LINKS) {
+	      attrib |= CATTR_LNK;
+	      ph->links_array[ph->nb_links] = url; url = NULL;
+	      cur_link = ph->links_array[ph->nb_links];
+	      ph->nb_links++;
+	    }
+	    COND_FREE(url);
+	  }
+	}
+      }
+
+    } else if (strncasecmp(tok, "</a", 3) == 0) {
+      attrib &= ~CATTR_LNK;
+      cur_link = NULL;
+    } else if (strcasecmp(tok, "<b>") == 0 || strcasecmp(tok,"<strong>") == 0) {
+      attrib |= CATTR_BOLD;
+    } else if (strcasecmp(tok, "</b>") == 0 || strcasecmp(tok,"</strong>") == 0 ) {
+      attrib &= ~CATTR_BOLD;
+    } else if (strcasecmp(tok, "<i>") == 0 || strcasecmp(tok,"<em>") == 0) {
+      attrib |= CATTR_ITAL;
+    } else if (strcasecmp(tok, "</i>") == 0 || strcasecmp(tok,"</em>") == 0 ) {
+      attrib &= ~CATTR_ITAL;
+    } else if (strcasecmp(tok, "<tt>") == 0) {
+      attrib |= CATTR_TT;
+    } else if (strcasecmp(tok, "</tt>") == 0) {
+      attrib &= ~CATTR_TT;
+    } else if (strncasecmp(tok, "<font color=", 12) == 0) {
+      char *col, *c2;
+      //XColor screen_col, exact_col;
+      col = tok; while (*col != '=' && *col) col++; if (*col) col++;
+      c2 = col; while (*c2 != '>' && *c2) c2++;
+      *c2 = 0;
+      if (strlen(col)) {
+	if ((cur_color = cccolor_from_name(col)) == (CCColorId)(-1)) {
+	  BLAHBLAH(2,myprintf(_("Allocation of '%s' failed\n"), col));
+          cur_color = ph->default_color;
+        }
+#if 0
+        if (XAllocNamedColor(dock->display, DefaultColormap(dock->display, dock->screennum), 
+			     col, &screen_col, &exact_col)) {
+	  /* faudrait-il que je fasse des XFreeColor ?... */
+	  BLAHBLAH(2,myprintf(_("Allocation of '%s' OK\n"), col));
+	  cur_pixel_color = screen_col.pixel;
+	} else {
+	  BLAHBLAH(2,myprintf(_("Allocation of '%s' failed\n"), col));
+	  cur_pixel_color = ph->default_pixel_color;
+	}
+#endif
+      }
+    } else if (strcasecmp(tok, "</font>") == 0) {
+      cur_color = ph->default_color;
+    } else if (strncasecmp(tok, "<img",4) == 0) {
+      BLAHBLAH(1, myprintf(_("we forget '%<YEL %s>'\n"), tok));
+      /*} else if (tok[0] == '<') {
+      
+      BLAHBLAH(1,myprintf("tag html non reconnu: '%<YEL %s>'\n", tok));
+      */
+    } else {
+      flag_item_to_add = 1;
+    }
+
+    if (new_parag) {
+      x = ph->parag_indent;
+      y += parag_skip;
+      xpos_debut_ligne = x;
+      if (parag_align != NORMAL) {
+	//	justif_ligne(ph, it_debut_ligne, xpos_debut_ligne, width, parag_align);
+	justif_ligne(it_debut_ligne, width, parag_align);
+      }
+      parag_align = next_parag_align;
+      new_parag = 0;
+      flag_debut_ligne = 1;
+      if ( isListe )
+        {
+          char str[5];
+          
+          if ( isOrderedListe )
+            /* je d�fie quiconque de poster une news avec une liste de plus de 99 �l�ments */
+            snprintf(str,5,"%2d.", indexListe); 
+          else
+            strcpy(str,"-");
+          
+          it_debut_ligne = picohtml_additem(ph,str, strlen( str ), attrib, x, y, cur_fn, cur_color, cur_link, special_attr);
+          flag_debut_ligne = 0;
+          x+=ph->parag_indent;
+        }
+    }
+
+    if (flag_item_to_add) {
+      int len;
+      if (attrib & CATTR_TT) cur_fn = ph->fn_mono;
+      else if (attrib & CATTR_BOLD) cur_fn = ph->fn_bd;
+      else if (attrib & CATTR_ITAL) cur_fn = ph->fn_it;
+      else cur_fn = ph->fn_base;
+
+      if (new_parag) {
+	x = ph->parag_indent;
+	y += parag_skip;
+	xpos_debut_ligne = x;
+	parag_align = next_parag_align;
+      }
+
+      /* ca c'est recent (v2.2) et c'est Bien(tm) */
+      len = convert_to_ascii(tok, tok, MAX_TOK_LEN);
+      
+      w = ccfont_text_width8(cur_fn, tok, len);
+      
+      if (x + w + (space_width)*(1-new_parag) >= width) {
+	//justif_ligne(ph, it_debut_ligne, xpos_debut_ligne, width, parag_align);
+	justif_ligne(it_debut_ligne, width, parag_align);
+	if ( isBlockquote )
+		x = ph->parag_indent;
+	else
+		x = 0;
+	y += line_skip; 
+	xpos_debut_ligne = x;
+	it_debut_ligne = picohtml_additem(ph, tok, len, attrib, x, y, cur_fn, cur_color, cur_link, special_attr);
+	x += w;
+      } else {
+	PicoHtmlItem *it;
+	x += (space_width)*(1-flag_debut_ligne);
+	it = picohtml_additem(ph, tok, len, attrib, x, y, cur_fn, cur_color, cur_link, special_attr);
+	if (flag_debut_ligne) it_debut_ligne = it;
+	x += w;
+      }
+      flag_debut_ligne = 0;
+    }
+
+
+    p = np;
+  }
+}
+
+/* renvoie la zone rectqngulqire, en pixel, englobant l'ensemble du
+   texte -> utilise pour determiner la hauteur de la fenetre */
+void
+picohtml_gettxtextent(PicoHtml *ph, int *width, int *height)
+{
+  PicoHtmlItem *it;
+
+  assert(width && height);
+  it = ph->txt;
+  *width = *height = 0;
+  if (it) {
+    *width = it->x + it->w;
+    //    *height = it->y + it->h;
+    *height = it->y;
+    it = it->next;
+  }
+  while (it) {
+    *width  = MAX(*width , it->x + it->w);
+    //    *height = MAX(*height, it->y + it->h);
+    *height = MAX(*height, it->y);
+    it = it->next;
+  }
+
+  if (ph->required_width > 0) {
+    *width = ph->required_width;
+  }
+}
+
+/*
+  affiche l'html dans le pixmap
+*/
+void
+picohtml_render(PicoHtml *ph, Drawable d, int x, int y)
+{
+  PicoHtmlItem *it;
+  
+  it = ph->txt;
+  while (it) {
+    /*    XSetFont(dock->display, gc, it->fn->fid);
+    XSetForeground(dock->display, gc, it->pixel);
+    XDrawString(dock->display, d, gc, x + it->x, y + it->y, it->s, strlen(it->s));
+    */
+    ccfont_draw_string8(it->fn, it->color, d, x + it->x, y + it->y, it->s, -1);
+    it = it->next;
+  }
+}
+
+void
+picohtml_freetxt(PicoHtml *ph)
+{
+  PicoHtmlItem *it, *nit;
+  int i;
+
+  it = ph->txt;
+  while (it) {
+    nit = it->next;
+    free(it->s);
+    free(it);
+    it = nit;
+  }
+  ph->txt = NULL;
+  for (i=0; i < ph->nb_links; i++) free(ph->links_array[i]);
+}
+
+int picohtml_isempty(PicoHtml *ph) {
+  return (ph->txt == NULL);
+}
+
+void picohtml_set_parag_indent(PicoHtml *ph, int parag_indent) {
+  ph->parag_indent = parag_indent;
+}
+
+/* interligne entre deux paragraphes, 1.0 = hauteur des car, 2.0 = double interligne etc.. */
+void picohtml_set_parag_skip(PicoHtml *ph, float parag_skip) {
+  ph->parag_fskip = parag_skip;
+}
+
+/* interligne, 1.0 = hauteur des car, 2.0 = double interligne etc.. */
+void picohtml_set_line_skip(PicoHtml *ph, float line_skip) {
+  ph->line_fskip = line_skip;
+}
+
+void picohtml_set_tabul_skip(PicoHtml *ph, int tabul_skip) {
+  ph->tabul_skip = tabul_skip;
+}
+
+CCFontId picohtml_get_fn_base(PicoHtml *ph)
+{
+  return ph->fn_base;
+}
+
+CCFontId picohtml_get_fn_bold(PicoHtml *ph)
+{
+  return ph->fn_bd;
+}
+
+static
+int
+picohtml_try_loadfonts(PicoHtml *ph, char *fn_family, int fn_size)
+{
+  char base_name[512];
+  char ital_name[512];
+  char bold_name[512];
+  char tt_name[512];
+
+  snprintf(base_name, 512, "%s:pixelsize=%d", fn_family, fn_size);
+  snprintf(ital_name, 512, "%s:pixelsize=%d:slant=italic,oblique", fn_family, fn_size);
+  snprintf(bold_name, 512, "%s:pixelsize=%d:bold", fn_family, fn_size);
+  snprintf(tt_name, 512, "%s:pixelsize=%d:monospace", fn_family, fn_size);
+  ph->fn_base = ccfont_get(base_name);
+  ph->fn_it = ccfont_get(ital_name);
+  ph->fn_bd = ccfont_get(bold_name);
+  ph->fn_mono = ccfont_get(tt_name);
+  if (ph->fn_base == (CCFontId)(-1)) return -1;
+  if (ph->fn_it == (CCFontId)(-1)) ph->fn_it = ccfont_incref(ph->fn_base);
+  if (ph->fn_bd == (CCFontId)(-1)) ph->fn_bd = ccfont_incref(ph->fn_base);
+  if (ph->fn_mono == (CCFontId)(-1)) ph->fn_mono = ccfont_incref(ph->fn_base);
+
+#if 0
+  /* police de base ... si on ne la trouve pas, c'est une erreur fatale */
+  snprintf(base_name, 512, "-*-%s-medium-r-*-*-%d-*-*-*-*-*-%s", fn_family, fn_size, encoding);
+  ph->fn_base = XLoadQueryFont(display, base_name);
+  if (!ph->fn_base) {
+    fprintf(stderr, _("XLoadQueryFont: failed loading font '%s'\n"), base_name);
+    fprintf(stderr, _("Please choose another font.\n"));
+    return -1;
+  }
+
+  /* police italique -> on cherche d'abord la police oblique */
+  snprintf(ital_name, 512, "-*-%s-medium-o-*-*-%d-*-*-*-*-*-%s", fn_family, fn_size, encoding);
+  ph->fn_it = XLoadQueryFont(display, ital_name);
+  if (!ph->fn_it) {
+    /* puis la police italique */
+    BLAHBLAH(1, fprintf(stderr, _("Slanted font '%s' not found -> we're looking for the italic font\n"), ital_name));
+    snprintf(ital_name, 512, "-*-%s-medium-i-*-*-%d-*-*-*-*-*-%s", fn_family, fn_size, encoding);
+    ph->fn_it = XLoadQueryFont(display, ital_name);
+    if (!ph->fn_it) {
+      myfprintf(stderr, _("%<RED WARNING>: error while looking for the italic font: '%s'\n"), ital_name);
+      myfprintf(stderr, _("We'll use the base font.\n"));
+
+      /* pas de copie de pointer pour pas poser de pbs dans picohtml_destroy */
+      ph->fn_it = XLoadQueryFont(display, base_name); assert(ph->fn_it);
+    }
+  }
+
+  /* police bold */
+  snprintf(bold_name, 512, "-*-%s-bold-r-*-*-%d-*-*-*-*-*-%s", fn_family, fn_size, encoding);
+  ph->fn_bd = XLoadQueryFont(display, bold_name);
+  if (!ph->fn_bd) {
+    myfprintf(stderr, _("%<RED WARNING>: error while looking for the bold font: '%s'\n"), bold_name);
+    myfprintf(stderr, _("We'll use the base font.\n"));
+    ph->fn_bd = XLoadQueryFont(display, base_name); assert(ph->fn_bd);
+  }
+
+  /* police courier */
+  snprintf(tt_name, 512, "-*-courier-medium-r-*-*-%d-*-*-*-*-*-%s", fn_size, encoding);
+  ph->fn_mono = XLoadQueryFont(display, tt_name);
+  if (!ph->fn_mono) {
+    myfprintf(stderr, _("%<RED WARNING>: error while looking for the courier font: '%s'\n"), tt_name);
+    myfprintf(stderr, _("We'll use the base font.\n"));
+    ph->fn_mono = XLoadQueryFont(display, base_name); assert(ph->fn_mono);
+  }
+#endif
+  return 0;
+}
+
+static void
+picohtml_loadfonts(PicoHtml *ph, char *fn_family, int fn_size) {
+  if (picohtml_try_loadfonts(ph,fn_family,fn_size)==-1) {
+    myfprintf(stderr, _("Now we try sans/12\n"));
+    if (picohtml_try_loadfonts(ph,"sans",12)==-1) {
+      myfprintf(stderr, _("Uuuurg, no sans/12 , I prefer to die\n"));
+      exit(-1);
+    }
+  }
+}
+
+PicoHtml *picohtml_create(Dock *dock, char *base_family, int base_size, int white_txt)
+{
+  PicoHtml *ph;
+
+  ALLOC_OBJ(ph,PicoHtml);
+  ph->txt = NULL;
+  if (white_txt) {
+    ph->default_color = cccolor_get(0xffffff); //WhitePixel(dock->display, dock->screennum);
+  } else {
+    ph->default_color = cccolor_get(0x000000); //BlackPixel(dock->display, dock->screennum);
+  }
+  ph->url_color = dock->blue_color;
+  picohtml_loadfonts(ph, base_family, base_size);
+  ph->parag_fskip = 1.3;
+  ph->line_fskip = 1.0;
+  ph->tabul_skip = 20;
+  ph->parag_indent = 20;
+  ph->nb_links = 0;
+  ph->required_width = -1;
+  ph->url_path = NULL;
+  return ph;
+}
+/*
+void
+picohtml_set_default_pixel_color(PicoHtml *ph, unsigned long pix)
+{
+  ph->default_pixel_color = pix;
+}
+*/
+void picohtml_destroy(PicoHtml *ph)
+{
+  ccfont_release(&ph->fn_base);
+  ccfont_release(&ph->fn_it);
+  ccfont_release(&ph->fn_bd);
+  ccfont_release(&ph->fn_mono);
+  cccolor_release(&ph->default_color);
+  COND_FREE(ph->url_path);
+  if (ph->txt) picohtml_freetxt(ph);
+  free(ph);
+}
diff --git a/src/picohtml.h b/src/picohtml.h
new file mode 100644
index 0000000..15900cb
--- /dev/null
+++ b/src/picohtml.h
@@ -0,0 +1,66 @@
+/*
+  rcsid=$Id: picohtml.h,v 1.6 2004/02/29 19:01:27 pouaite Exp $
+  ChangeLog:
+  $Log: picohtml.h,v $
+  Revision 1.6  2004/02/29 19:01:27  pouaite
+  et hop
+
+  Revision 1.5  2004/02/29 15:01:19  pouaite
+  May the charles bronson spirit be with you
+
+  Revision 1.4  2002/10/15 23:17:28  pouaite
+  rustinage � la truelle
+
+  Revision 1.3  2002/01/18 00:28:42  pouaite
+  le m�nage continue + grosses modifs (experimentales pour l'instant)
+
+  Revision 1.2  2001/12/02 18:34:54  pouaite
+  ajout de tags cvs Id et Log un peu partout...
+
+*/
+
+#ifndef PICOHTML_H__
+#define PICOHTML_H__
+
+#include "coincoin.h"
+#include "fontcoincoin.h"
+
+#define PH_MAX_LINKS 100
+
+#define CATTR_LNK    (1<<1)
+#define CATTR_BOLD   (1<<2)
+#define CATTR_ITAL   (1<<3)
+#define CATTR_TT     (1<<4)
+
+typedef unsigned char c_attr;
+
+struct _PicoHtmlItem {
+  unsigned char *s;
+  short x, y, w, h;
+  c_attr attr;
+  PicoHtmlItem *next;
+  CCFontId fn;
+  char *link_str; /* pointe (si CATTR_LNK positionn�) vers une entree de links_array */
+  int special_attr; /* un attribut remplit avec le tag personnel: <!special=xxx> (utilis� pour reconnaitre les news_id dans la liste de titres de newswin) */
+  CCColorId color;
+};
+
+struct _PicoHtml {
+  PicoHtmlItem *txt;
+  CCFontId fn_base, fn_it, fn_bd, fn_mono;
+  //XFontStruct *fn_base, *fn_it, *fn_bd, *fn_mono;
+  CCColorId default_color;
+  CCColorId url_color;
+  float parag_fskip, line_fskip;
+  int parag_indent, tabul_skip;
+
+  int required_width; /* si > 0, on ne doit pas reduire la largeur
+			 c'est le cas quand certains elements sont centr�s,
+		        dans ce cas, required width == la width demandee */
+
+  char *url_path; /* url de base (pour les liens relatifs) */
+  char *links_array[PH_MAX_LINKS]; /* liste des urls cit�es */
+  int nb_links;
+};
+
+#endif
diff --git a/src/pinnipede.c b/src/pinnipede.c
new file mode 100644
index 0000000..cfd4cb3
--- /dev/null
+++ b/src/pinnipede.c
@@ -0,0 +1,4268 @@
+/*
+  rcsid=$Id: pinnipede.c,v 1.108 2005/09/26 21:40:24 pouaite Exp $
+  ChangeLog:
+    Revision 1.78  2002/09/21 11:41:25  pouaite 
+    suppression du changelog
+*/
+#include <X11/keysym.h>
+#include "pinnipede.h"
+#include "kbcoincoin.h"
+#include "xpms/miniduck.xpm"
+
+inline static int
+pp_thread_filter_find_id(const struct _PinnipedeFilter *f, id_type id) {
+  int i;
+  for (i=0; i < f->nid; i++) {
+    if (id_type_eq(f->id[i],id)) return 1;
+  }
+  return 0;
+}
+
+inline int
+filter_msg_info(const board_msg_info *mi, const struct _PinnipedeFilter *filter)
+{
+  /* cas particulier: la boitakon */
+  if (mi->in_boitakon && filter->filter_boitakon) return 0;
+
+  if (filter->visible_sites[id_type_sid(mi->id)] == 0) return 0;
+  if (filter->filter_mode == 0) return 1;
+  if (filter->anything) {
+    if (filter->anything[0] == 0) return 1;
+    else
+      return ((str_noaccent_casestr(mi->msg, filter->anything) != NULL) ||
+              (str_noaccent_casestr(mi->useragent, filter->anything) != NULL) ||
+              (str_noaccent_casestr(mi->login, filter->anything) != NULL));
+  } else if (filter->ua) {
+    return (strcmp(filter->ua, mi->useragent) == 0);
+  } else if (filter->login) {
+    return (strcmp(filter->login, mi->login) == 0);
+  } else if (filter->word && strlen(filter->word)) {
+    return (str_noaccent_casestr(mi->msg, filter->word) != NULL);
+  } else if (filter->id != NULL) {
+    return pp_thread_filter_find_id(filter, mi->id);
+  } else {
+    return 1;
+  }
+}
+
+
+
+/* les deux fonctions suivantes permettent de se balader dans la liste des posts 
+ (de maniere bourrine... c pas pour 250000 messages )
+*/
+id_type
+get_next_id_filtered(Boards *boards, id_type id, board_msg_info **nmi, struct _PinnipedeFilter *filter) 
+{
+  board_msg_info *mi;
+  id_type nid;
+
+  nid = id_type_invalid_id();
+  mi = boards_find_id(boards, id);
+  if (mi) {
+    mi = mi->g_next;
+    while (mi) {
+      if (filter == NULL || filter_msg_info(mi,filter)) {
+	nid = mi->id;
+	break;
+      }
+      mi = mi->g_next;
+    }
+  }
+  if (nmi) *nmi = mi;
+  return nid;
+}
+
+static id_type
+get_prev_id_filtered(Boards *boards, id_type id, board_msg_info **prev, const struct _PinnipedeFilter *filter) 
+{
+  board_msg_info *mi;
+
+  mi = boards_find_id(boards, id);
+  if (mi) {
+    mi = mi->g_prev;
+    while (mi) {
+      if (filter == NULL || filter_msg_info(mi,filter)) {
+	break;
+      }
+      mi = mi->g_prev;
+    }
+  }
+
+  if (prev) *prev = mi;
+  if (mi) {
+    return mi->id;
+  }
+  else return id_type_invalid_id();
+}
+
+id_type
+get_last_id_filtered(Boards *boards, struct _PinnipedeFilter *filter) {
+  board_msg_info *mi;
+
+  mi = boards->last;
+  while (mi) {
+    if (filter == NULL || filter_msg_info(mi,filter)) {
+      return mi->id;
+    }
+    mi = mi->g_prev;
+  }
+  return id_type_invalid_id();
+}
+
+id_type
+get_first_id_filtered(Boards *boards, struct _PinnipedeFilter *filter) {
+  board_msg_info *mi;
+
+  mi = boards->first;
+  while (mi) {
+    if (filter == NULL || filter_msg_info(mi,filter)) {
+      return mi->id;
+    }
+    mi = mi->g_next;
+  }
+  return id_type_invalid_id();
+}
+
+int
+count_all_id_filtered(Boards *boards, struct _PinnipedeFilter *filter) {
+  board_msg_info *mi;
+  int nid;
+
+  mi = boards->first;
+  nid = 0;
+  while (mi) {
+    if (filter == NULL || filter_msg_info(mi,filter)) {
+      nid++;
+    }
+    mi = mi->g_next;
+  }
+  return nid;
+}
+
+id_type
+get_nth_id_filtered(Boards *boards, struct _PinnipedeFilter *filter, int n) {
+  board_msg_info *mi, *last_mi;
+
+  mi = boards->first; last_mi = NULL;
+  while (mi && n > 0) {
+    if (filter == NULL || filter_msg_info(mi,filter)) {
+      n--;
+      last_mi = mi;
+    }
+    mi = mi->g_next;
+  }
+  return (last_mi ? last_mi->id : id_type_invalid_id());
+}
+
+static int
+get_id_count_filtered(Boards *boards, struct _PinnipedeFilter *filter, id_type id) {
+  board_msg_info *mi;
+  int cnt = 1;
+
+  mi = boards->first;
+  while (mi) {
+    if (filter == NULL || filter_msg_info(mi,filter)) {
+      if (id_type_eq(mi->id, id)) {
+	return cnt;
+      }
+      cnt++;
+    }
+    mi = mi->g_next;
+  }
+  return -1;
+}
+
+static void
+pp_unset_filter(struct _PinnipedeFilter *f)
+{
+  f->filter_mode = 0;
+  if (f->filter_name) { free(f->filter_name); f->filter_name = NULL;}
+  if (f->anything) { free(f->anything); f->anything = NULL; }
+  if (f->ua) { free(f->ua); f->ua = NULL;}
+  if (f->login) { free(f->login); f->login = NULL; }
+  if (f->word) { free(f->word); f->word = NULL; }
+  if (f->id) { free(f->id); f->id = NULL; f->nid = 0; }
+}
+
+void
+pp_visited_links_add(Pinnipede *pp, const char *s)
+{
+  int id = str_hache(s, strlen(s));
+  if (pp->nb_visited_links == MAX_VISITED_LINKS) {
+    memmove(pp->visited_links, pp->visited_links+1, (MAX_VISITED_LINKS-1)*sizeof(int));
+  } else pp->nb_visited_links++;
+  pp->visited_links[pp->nb_visited_links-1] = id;
+}
+
+int
+pp_visited_links_find(Pinnipede *pp, const char *s)
+{
+  int id = str_hache(s, strlen(s));
+  int i;
+  assert(pp);
+  for (i=pp->nb_visited_links-1; i >= 0; --i) 
+    if (pp->visited_links[i] == id) return 1;
+  return 0;
+}
+
+static void
+pv_destroy(PostVisual *pv)
+{
+  PostWord *pw,*pw2;
+
+  //  printf("pv_destroy(id=%d)\n", pv->id);
+  pw = pv->first;
+  while (pw) {
+    pw2 = pw->next;
+    free(pw);
+    pw = pw2;
+  }
+  free(pv);
+}
+
+static PostWord*
+pw_create(const unsigned char *w, unsigned attr, const unsigned char *attr_s, PostVisual *parent)
+{
+  int alen; 
+  int wlen;
+  PostWord *pw;
+
+  wlen = strlen(w);
+  if (attr_s) alen=strlen(attr_s); else alen = -1;
+  pw = malloc(sizeof(PostWord)+wlen+1+alen+1);
+  pw->w = ((unsigned char*)pw)+sizeof(PostWord); strcpy(pw->w,w);
+  if (attr_s) {
+    pw->attr_s = ((unsigned char*)pw)+sizeof(PostWord)+wlen+1;
+    strcpy(pw->attr_s, attr_s);
+  } else pw->attr_s = NULL;
+  pw->next = NULL;
+  pw->xpos = pw->xdraw = -1; pw->ligne=-1; pw->xwidth = 0; 
+  pw->attr = attr;
+  pw->parent = parent;
+  return pw;
+}
+
+static void
+pw_add_style(PostWord *pw, FontStyle *fs)
+{
+  if (fs && pw) {
+    if (fs->underlined) { pw->attr |= PWATTR_U; }
+    if (fs->slanted) { pw->attr |= PWATTR_IT; }
+    if (fs->bold) { pw->attr |= PWATTR_BD; }
+    if (fs->teletype) { pw->attr |= PWATTR_TT; }
+  }
+}
+
+/* remplace de maniere +/- aleatoire un mot par plop, grouik etc.. 
+   en regardant aussi le mot precedent
+*/
+static void
+plopify_word(unsigned char *s_src, unsigned sz, int bidon)
+{
+  unsigned char s_simple[sz], s_dest[sz];
+
+  static char *not_plop[] = {"alors", 
+			     "amha", 
+			     "apres",
+			     "aura", 
+			     "auras",
+			     "auraient",
+			     "aurais",
+			     "aurait",
+			     "aurez",
+			     "auront",
+			     "aussi",
+			     "autant",
+			     "avant", 
+			     "avec", 
+			     "avoir", 
+			     "beaucoup",
+			     "ben",
+			     "bof",
+			     "celle",
+			     "ces", 
+			     "cette", 
+			     "ceux",
+			     "chez", 
+			     "comme",
+			     "comment", 
+			     "dans",
+			     "deja",
+			     "depuis", 
+			     "des", 
+			     "devez",
+			     "devons",
+			     "devrez",
+			     "devrons",
+			     "dire",
+			     "dois",
+			     "doivent",
+			     "donc", 
+			     "dont",
+			     "elle", 
+			     "elles",
+			     "encore",
+			     "entre", 
+			     "est", 
+			     "etait", 
+			     "ete",
+			     "etes", 
+			     "etre",
+			     "fait", 
+			     "fallait",
+			     "falloir",
+			     "fallu",
+			     "faudra",
+			     "faudrait",
+			     "faut",
+			     "fera", 
+			     "ils", 
+			     "la", 
+			     "les", 
+			     "leur", 
+			     "leurs",
+			     "lui",
+			     "mais",
+			     "meme", 
+			     "mes", 
+			     "mien", 
+			     "moi"
+			     "moins", 
+			     "mon", 
+			     "non", 
+			     "nos", 
+			     "notre", 
+			     "nous", 
+			     "ont", 
+			     "ouais", 
+			     "oui", 
+			     "par", 
+			     "parce", 
+			     "pas", 
+			     "pas", 
+			     "peu", 
+			     "peux",
+			     "plus", 
+			     "pour", 
+			     "pourquoi", 
+			     "pourtant",
+			     "puis", 
+			     "quand", 
+			     "que", 
+			     "quel",
+			     "qui",
+			     "quoi", 
+			     "sais",
+			     "sait",
+			     "sans", 
+			     "sera", 
+			     "ses", 
+			     "sien",
+			     "son", 
+			     "sont", 
+			     "sur", 
+			     "tant", 
+			     "tien", 
+			     "toujours",
+			     "tous", 
+			     "tout", 
+			     "toutes", 
+			     "une", 
+			     "vas",
+			     "vais", 
+			     "vos", 
+			     "votre", 
+			     "vous", 
+			     NULL};
+
+  static unsigned nb_not_plop = 0;
+  static unsigned *not_plop_hached = NULL;
+
+  unsigned i;
+  unsigned hache_s = 0;
+  unsigned src_pos, dest_pos, s_len;
+
+  const char *s_bizarre = "'\",;:/!+=)]@^_\\-|([{}#~?.*$���";
+
+  /* comptage des mots � ne pas plopifier, et 'hachage' des ces mots
+     (pour les detecter plus rapidement) 
+
+     ici: initialisation des donn�es (�x�cut� au premier appel)
+  */
+  if (nb_not_plop == 0) {
+    while (not_plop[nb_not_plop] != NULL) {
+      nb_not_plop++;
+    }
+    ALLOC_VEC(not_plop_hached, nb_not_plop, int);
+    for (i=0; i < nb_not_plop; i++) {
+      not_plop_hached[i] = str_hache(not_plop[i], strlen(not_plop[i]));
+    }
+  }
+
+  /* enleve les accents et v�rifie que le mot ne contient que des lettres */
+  
+  src_pos = 0; dest_pos = 0;
+  do {
+    int do_plopify;
+
+    do_plopify = 1;
+
+    /* on copie les caract�res bizarres qui peuvent preceder le mot */
+    while (s_src[src_pos] && strchr(s_bizarre,s_src[src_pos]) && 
+	   dest_pos < sz-1) { 
+      s_dest[dest_pos++] = s_src[src_pos++]; 
+    }
+    if (s_src[src_pos]==0) break;
+    if (dest_pos == sz-1) break;
+    /* on copie le mot dans s_simple */
+    s_len = 0;
+    while (s_src[src_pos+s_len] && !strchr(s_bizarre, s_src[src_pos+s_len])) {
+      s_simple[s_len] = s_src[src_pos+s_len]; s_len++;
+    }
+    s_simple[s_len] = 0;    assert(s_len > 0);
+
+    //    strcpy(s_simple, s);
+    str_noaccent_tolower(s_simple);
+  
+    
+    for (i = 0; i < s_len; i++) {
+      if (!(s_simple[i] >= 'a' && s_simple[i] <= 'z')) {
+	do_plopify = 0; break;
+      }
+    }
+
+    if (s_len < 3) do_plopify = 0;
+
+    if (do_plopify) {
+      hache_s = str_hache(s_simple, s_len);
+      for (i=0; i < nb_not_plop; i++) {
+	if (hache_s == not_plop_hached[i]) { do_plopify = 0; break; }
+      }
+    }
+
+    /* j'ai pas �t� tr�s inspir� en �crivant tout �a, l'est po clair */
+
+    if (do_plopify) {
+      /* longeur > 10 => substitution assur�e,
+         longuer 0 => 1/2 chance sur deux */
+      int mod = Prefs.nb_plop_words + (10-MIN(s_len,10))*Prefs.nb_plop_words/10;
+
+      hache_s = (hache_s ^ bidon) % mod;
+      if (hache_s >= Prefs.nb_plop_words) do_plopify = 0;
+    }
+    
+    if (do_plopify) {
+      i = 0; 
+      while (Prefs.plop_words[hache_s][i] && dest_pos < sz-1) {
+	s_dest[dest_pos++] = Prefs.plop_words[hache_s][i++];
+      }
+      src_pos += s_len;
+    } else {
+      i = 0;
+      while (i < s_len && dest_pos < sz) {
+	s_dest[dest_pos++] = s_src[src_pos++]; i++;
+      }
+    }
+  } while (s_src[src_pos]);
+  s_dest[dest_pos] = 0;
+  strcpy(s_src, s_dest);
+}
+
+
+/* construction d'un postvisual � partir du message 'mi' */
+static PostVisual *
+pv_tmsgi_parse(Pinnipede *pp, Board *board, board_msg_info *mi, int with_seconds, int html_mode, int nick_mode, int troll_mode, int disable_plopify, KeyList *hk_plop, KeyList *hk_hili) {
+#define PVTP_SZ 768
+
+  PostVisual *pv;
+  PostWord *pw, *tmp;
+  
+  unsigned char s[PVTP_SZ];
+  unsigned char attr_s[PVTP_SZ];
+
+  const unsigned char *p, *np;
+  unsigned attr;
+  int add_word;
+  int has_initial_space; // indique si le prochain mot est coll� au precedent
+
+  ALLOC_OBJ(pv, PostVisual);
+
+  pv->first = NULL;
+  pv->nblig = -1;
+  pv->ref_cnt = 0;
+  pv->next = NULL;
+  pv->id = mi->id;
+  pv->tstamp = mi->timestamp;
+
+  pv->sub_tstamp = mi->sub_timestamp;
+  pv->is_my_message = mi->is_my_message;
+  pv->is_answer_to_me = mi->is_answer_to_me;
+
+  pv->is_skipped_id = board_find_id(board, mi->id.lid-1) ? 0 : 1;
+
+  pv->is_hilight_key = 0;
+  if (hk_hili) {
+    pv->is_hilight_key = hk_hili->num+1; assert(hk_hili->num < NB_PP_KEYWORD_CATEG);
+  }
+  pv->is_plopified = 0;
+  if (hk_plop) {
+    pv->is_plopified = (disable_plopify ? 1 : hk_plop->num+2);
+  }
+
+  if (mi->in_boitakon) {
+    pv->is_plopified = 1; /* pour afficher les messages boitakonn�s
+			     par contagion quand disable_plopify==1 */
+    assert(disable_plopify==1); /* un bon pi�ge � bug */
+  } 
+    
+  /*
+  printf("pv = %p\n", pv);
+  printf("  pv = %d\n", pv->id);
+  printf("  pv->is_my_message = %d\n", pv->is_my_message);
+  printf("  pv->is_answer = %d\n", pv->is_answer_to_me);
+  printf("  pv->is_high = %d\n", pv->is_hilight_key);
+  */
+
+  pw = NULL;
+
+  if (troll_mode && Prefs.enable_troll_detector) {
+    if (mi->troll_score > 0) {
+      snprintf(s, PVTP_SZ, "%d", mi->troll_score);
+    } else {
+      snprintf(s, PVTP_SZ, "  ");
+    }
+
+    tmp = pw_create(s, PWATTR_TROLLSCORE | (mi->troll_score > 2 ? PWATTR_BD : 0), NULL, pv);
+    if (pw == NULL) { pv->first = tmp; } else { pw->next = tmp; }
+    pw = tmp;
+  }
+
+  /* affichage timestamp */
+  time_t tnow = time(NULL);
+  char sdate[20]; sdate[0] = 0;
+  if ((tnow / (24*3600)) - (pv->tstamp / (24*3600)) >= 2) { /* on va mettre la date */
+    struct tm *t = localtime(&pv->tstamp);
+    snprintf(sdate,20,"%02d/%02d#", t->tm_mon+1, t->tm_mday);
+  }
+  if (with_seconds) {
+    snprintf(s, PVTP_SZ, "%s%02d:%02d:%02d",sdate, mi->hmsf[0], mi->hmsf[1], mi->hmsf[2]);
+  } else {
+    snprintf(s, PVTP_SZ, "%s%02d:%02d",sdate, mi->hmsf[0], mi->hmsf[1]);
+  }
+  
+  tmp = pw_create(s, PWATTR_TSTAMP | (pw == NULL ? 0 : PWATTR_HAS_INITIAL_SPACE), NULL, pv);  
+  if (pw == NULL) { pv->first = tmp; } else { pw->next = tmp; }
+  pw = tmp;
+  pw_add_style(pw, &board->site->prefs->pp_clock_style);
+
+  if (nick_mode) {
+    char *p;
+    //#define SUA_SZ 15
+    //char short_ua[SUA_SZ];
+    int is_login;
+
+    /*
+
+    popopo !! a reparer
+
+    if (mi->tatouage) {
+      p = mi->tatouage->name;
+      if (strcmp(mi->tatouage->name, "?") == 0) {
+    */
+    //make_short_name_from_ua(mi->useragent, short_ua, SUA_SZ);
+	p = mi->miniua.name;
+	/*      }
+    } else p = "[???]";
+	*/
+
+    is_login = 0;
+    if (nick_mode == 4 && strlen(mi->login) != 0) {
+      p = mi->login; is_login = 1;
+    }
+    
+    if (nick_mode == 1 || nick_mode == 3 || nick_mode == 4) {
+      tmp = pw_create(p, (is_login == 0 ? PWATTR_NICK : PWATTR_LOGIN) | PWATTR_HAS_INITIAL_SPACE, NULL, pv);
+      if (pw == NULL) { pv->first = tmp; } else { pw->next = tmp; }
+      pw = tmp;
+      pw_add_style(pw, (is_login == 0 ? &board->site->prefs->pp_ua_style : &board->site->prefs->pp_login_style));
+    }
+
+    if ((nick_mode == 2 || nick_mode == 3) && strlen(mi->login)) {
+      tmp = pw_create(mi->login, PWATTR_LOGIN | PWATTR_HAS_INITIAL_SPACE, NULL, pv);
+      if (pw == NULL) { pv->first = tmp; } else { pw->next = tmp; }
+      pw = tmp;      
+      pw_add_style(pw, &board->site->prefs->pp_login_style);
+    }
+  }
+
+  p = mi->msg;
+  attr = 0;
+
+  if (pv->is_plopified == 3) p = "plop"; /* bienvenue dans le monde de la hard plopification */
+  assert(pv->is_plopified <= 3);
+
+  has_initial_space = 1;
+  while (p) {
+    add_word = 1;
+    if (board_get_tok(&p,&np,s,PVTP_SZ, &has_initial_space) == NULL) { break; }
+
+    /* nouveau (v2.3.5) tous les '<' et '>' provenant d'authentiques tags
+       html ont �t� pr�fix�s d'une tabulation par 'convert_to_ascii', ce qui �vite
+       de se retrouver � interpreter � moiti� un message du style "<a href='prout'>" 
+       (par contre, y'a quelques feintes au trollo qui marcheront plus ;)
+    */
+
+    if (s[0] == '\t' && html_mode) {
+      add_word = 0;
+      if (strcasecmp(s, "\t<i\t>")==0) {
+	attr |= PWATTR_IT; 
+      } else if (strcasecmp(s,"\t</i\t>")==0) {
+	attr &= (~PWATTR_IT);
+      } else if (strcasecmp(s,"\t<b\t>")==0) {
+	attr |= PWATTR_BD; 
+      } else if (strcasecmp(s,"\t</b\t>")==0) {
+	attr &= (~PWATTR_BD);
+      } else if (strcasecmp(s,"\t<u\t>")==0 ||
+		 strcasecmp(s, "\t<span style=\"text-decoration: underline\"\t>")==0) {
+	attr |= PWATTR_U;
+      } else if (strcasecmp(s,"\t</u\t>")==0) {
+	attr &= (~PWATTR_U);
+      } else if (strcasecmp(s,"\t<s\t>")==0 ||
+		 strcasecmp(s, "\t<span style=\"text-decoration: line-through\"\t>")==0) {
+	attr |= PWATTR_S; 
+      } else if (strcasecmp(s, "\t</span\t>")==0) { /* lequel choisir... fait chier :-/ */
+	if (attr & PWATTR_S) attr &= ~PWATTR_S; /* dtc si c pas le bon ordre */
+	else if (attr & PWATTR_U) attr &= ~PWATTR_U;
+      } else if (strcasecmp(s,"\t</s\t>")==0) {
+	attr &= (~PWATTR_S);
+      } else if (strcasecmp(s,"\t<tt\t>")==0) {
+	attr |= PWATTR_TT;
+      } else if (strcasecmp(s,"\t</tt\t>")==0) {
+	attr &= (~PWATTR_TT);
+      } else if (strncasecmp(s,"\t<a href=\"", 10)==0) {
+	int i;
+	char *url;
+	attr |= PWATTR_LNK;
+        /* MODIF lo v2.4.6a 05/08/03 ITEM#FFE902  (j'ai presque l'impression d'%/1��iso8859-15�
+           tre au taff) */
+        /* Oooops. S'il y a un target qui traine, tout est p%/1��iso8859-15�t%/1��iso8859-15�
+         * Alors on va plut%/1��iso8859-15�t chercher la fin depuis le d%/1��iso8859-15�but
+         * (sisi, suivez moi bien
+         */
+        i=strlen("\t<a href=\"") + 1;
+        while (s[i] && s[i] != '\"') i++;
+        /* FIN_MODIF lo v2.4.6a 05/08/03 ITEM#FFE902 */
+	s[i] = 0;
+	url = s+10;
+	if (url[0] == '.') { /* chemin relatif :-/ */	  
+	  char *tmp = strdup(board->site->relative_urls_base);
+	  url_au_coiffeur(tmp, 1); /* vire le nom du backend */
+	  tmp = str_cat_printf(tmp, "/%s", url);
+	  url_au_coiffeur(tmp, 0);
+	  snprintf(attr_s, PVTP_SZ, "%s", tmp);
+	  free(tmp);
+	} else {
+	  strncpy(attr_s, url, PVTP_SZ); 
+	}
+      } else if (strcasecmp(s,"\t</a\t>")==0) {
+	attr &= (~PWATTR_LNK);
+      } else {
+	fprintf(stderr, "un tag qui pue ? '%s'\n", s);
+	add_word = 1;
+      }
+    }
+    if (add_word) {
+      int is_ref;
+      board_msg_info *ref_mi = NULL;
+
+      if ((attr & PWATTR_LNK) == 0) {
+        ref_mi = check_for_horloge_ref(board->boards, mi->id, s,attr_s, PVTP_SZ, &is_ref, NULL);
+        if (is_ref) {
+          attr |= PWATTR_REF;
+        }
+      }
+
+      if (has_initial_space) {
+	attr |= PWATTR_HAS_INITIAL_SPACE;
+      } else {
+	attr &= (~PWATTR_HAS_INITIAL_SPACE);
+      }
+
+      if (pv->is_plopified) {
+	attr &= ~(PWATTR_U | PWATTR_BD | PWATTR_S | PWATTR_IT);
+	
+	if (pv->is_plopified >1) {
+	  int i;
+	  for (i=0; s[i]; i++) { if (s[i] >= 'A' && s[i] <= 'Z') s[i] = s[i]+'a'-'A'; }
+	  if (strlen(s) >= 3 && Prefs.nb_plop_words > 0) {
+	    plopify_word(s, PVTP_SZ,  (char*)p - (char*)mi->msg);
+	  }
+	}
+      }
+
+      if ((attr & PWATTR_LNK) && attr_s[0]) {
+	if (pp_visited_links_find(pp, attr_s)) attr |= PWATTR_VISITED;
+      }
+
+      if (Prefs.board_enable_hfr_pictures &&
+          s[0] == '[' && s[1] == ':' && strlen(s) > 4 && s[strlen(s)-1] == ']') { /* totoz ? */
+        const char *st = "bug...";
+        int z = pp_totoz_img_status(pp,s);
+        switch (z) {
+        case PP_TOTOZ_STATUS_UNKNOWN: attr |= PWATTR_TOTOZ_UNKNOWN; st = "unknown"; break;
+        case PP_TOTOZ_STATUS_DOWNLOADING: attr |= PWATTR_TOTOZ_DOWNLOADING; st = "download in progress"; break;
+        case PP_TOTOZ_STATUS_NOTFOUND: attr |= PWATTR_TOTOZ_NOTFOUND; st = "not found"; break;
+        case PP_TOTOZ_STATUS_FOUND: attr |= PWATTR_TOTOZ_FOUND; st = "found"; break;
+        }
+        BLAHBLAH(2,myprintf("TOTOZ: %<GRN %s> [status = %<GRN %s>]\n",s,st));
+      }
+
+      pw->next = pw_create(s, attr, (attr & PWATTR_LNK) ? attr_s : NULL, pv);
+      has_initial_space = 0;
+      attr &= ~(PWATTR_REF | PWATTR_VISITED | PWATTR_TOTOZ) ;
+      //      printf("ADD(id=%d): '%s'\n", mi->id, s);
+      pw = pw->next;
+    }
+    p=np;
+  }
+  return pv;
+}
+
+static CCFontId
+pv_get_font(Pinnipede *pp, unsigned attr)
+{
+  CCFontId fn;
+  if ((attr & PWATTR_BD) && (attr & PWATTR_IT)) {
+    fn = pp->fn_itbd;
+  } else if (attr & PWATTR_IT) {
+    fn = pp->fn_it;
+  } else if (attr & (PWATTR_BD)) {
+    fn = pp->fn_bd;
+  } else if (attr & (PWATTR_TT)) {
+    fn = pp->fn_mono;
+  } else {
+    fn = pp->fn_base;
+  }
+  return fn;
+}
+
+static void
+pv_justif(Pinnipede *pp, PostVisual *pv, int x0, int width) {
+  int x, start_of_line;
+  PostWord *pw;
+  CCFontId fn;
+  int trollscore_width = 0;
+  short xoffset;
+
+  pw = pv->first;
+  start_of_line = 1;
+  x = x0;
+  fn = pp->fn_base;
+  pv->nblig = 0;
+
+  if (pp->trollscore_mode) {
+    fn = pv_get_font(pp, PWATTR_BD);
+    trollscore_width = ccfont_text_width_utf8(fn, "0", 1);
+  } else {
+    trollscore_width = 0;
+  }
+
+  while (pw) {
+    if (start_of_line) {
+      pv->nblig++; 
+    } else x += (pw->attr & PWATTR_HAS_INITIAL_SPACE) ? pp->fn_base_space_w : 0;
+    fn = pv_get_font(pp, pw->attr);
+    assert(pw->w); assert(strlen(pw->w));
+
+    pw->xwidth = ccfont_text_xbox_utf8(fn, pw->w, strlen(pw->w), &pw->xpos, &xoffset);
+    //pw->xwidth = ccfont_text_width_utf8(fn, pw->w, strlen(pw->w));
+    
+    if (pw->attr & PWATTR_TROLLSCORE) {
+      pw->xwidth = MAX(pw->xwidth,trollscore_width);
+    }
+
+    pw->ligne = pv->nblig;
+    pw->xdraw = x;
+    pw->xpos += x; 
+    x += xoffset;
+    if (x > width-3 && start_of_line == 0) { 
+      x = 13; start_of_line = 1;       
+    } else {
+      pw = pw->next;
+      start_of_line = 0;
+    }
+  }
+}
+
+static PostVisual *
+pp_find_pv(Pinnipede *pp, id_type id)
+{
+  PostVisual *pv;
+
+  pv = pp->pv;
+  while (pv) {
+    if (id_type_eq(pv->id,id)) return pv;
+    pv = pv->next;
+  }
+  return NULL;
+}
+
+/* ajout (si necessaire) du message 'id' dans la liste */
+PostVisual *
+pp_pv_add(Pinnipede *pp, Boards *boards, id_type id)
+{
+  PostVisual *pv;
+  int with_seconds = 1;
+
+  pv = pp_find_pv(pp, id);
+  if (pv) {
+    pv->ref_cnt++;
+  } else {
+    board_msg_info *mi;
+
+    mi = boards_find_id(boards,id);
+    if (mi == NULL) {
+      return NULL;
+    }
+
+    if (pp->show_sec_mode == 0) {
+      with_seconds = mi->hmsf[3];
+    }
+
+    pv = pv_tmsgi_parse(pp, boards->btab[mi->id.sid], mi, with_seconds, 1, 
+			pp->nick_mode, pp->trollscore_mode, pp->disable_plopify,
+			board_key_list_test_mi(boards, mi, Prefs.plopify_key_list),
+			board_key_list_test_mi(boards, mi, Prefs.hilight_key_list)); 
+    pv_justif(pp, pv, 11, pp->zmsg_w); // ZL win_width - (pp->sc ? SC_W-1 : 0));
+    assert(pv);
+    pv->next = pp->pv;
+    pp->pv = pv;
+  }
+  return pv;
+}
+
+static int
+pp_pv_uncount(Pinnipede *pp) {
+  PostVisual *pv;
+  int cnt = 0;
+
+  pv = pp->pv;
+  while (pv) {
+    //    assert(pv->ref_cnt > 0);
+    pv->ref_cnt = 0;
+    pv = pv->next;
+  }
+  return cnt;
+}
+
+static int
+pp_pv_garbage_collect(Pinnipede *pp) {
+  PostVisual *pv, *npv, *ppv;
+  int cnt = 0;
+
+  pv = pp->pv;
+  ppv = NULL;
+  while (pv) {
+    //    printf("pv = %d, next = %p\n", pv->id, pv->next);
+    assert(pv->ref_cnt >= 0);
+    if (pv->ref_cnt == 0) {
+      npv = pv->next;
+      if (pv == pp->pv) pp->pv = npv;
+      pv_destroy(pv);
+      if (ppv) ppv->next = npv;
+      pv = npv;
+      cnt++;
+    } else {
+      ppv = pv;
+      pv = pv->next;
+    }
+  }
+  return cnt;
+}
+
+void
+pp_pv_destroy(Pinnipede *pp) {
+  PostVisual *pv;
+
+  pv = pp->pv;  
+  while (pv) { pv->ref_cnt = 0; pv = pv->next; }
+  pp_pv_garbage_collect(pp);
+  if (pp->lignes) { free(pp->lignes); pp->lignes = NULL; }
+}
+
+
+static int 
+pp_pv_count_horloges(PostVisual *pv) {
+  PostWord *pw = pv->first;
+  int cnt = 0;
+  while (pw) {
+    if ((pw->attr & PWATTR_REF)) ++cnt;
+    pw = pw->next;
+  }
+  return cnt;
+}
+
+static PostWord *
+pp_pv_get_nth_horloge(PostVisual *pv, int n) {
+  PostWord *pw = pv->first;
+  while (n && pw) {
+    if ((pw->attr & PWATTR_REF)) {
+      n--;
+      if (n == 0) return pw;
+    }
+    pw = pw->next;
+  }
+  return NULL;
+}
+
+void
+pp_selection_unselect(Pinnipede *pp) {
+  if (pp->lignes_sel) free(pp->lignes_sel);
+  pp->lignes_sel = NULL;
+  pp->sel_l0 = pp->sel_l1 = 0;
+  pp->sel_anchor_x = pp->sel_head_x = 0;
+  pp->sel_anchor_y = pp->sel_head_y = 0;
+}
+
+unsigned long
+pp_get_win_bgcolor(Dock *dock) {
+  Pinnipede *pp = dock->pinnipede;
+
+  if (pp->active_tab) {
+    int sid = pp->active_tab->site->site_id; assert(sid>=0);
+    return cccolor_pixel(pp->win_bgcolor[sid]);
+  } else return WhitePixel(dock->display, dock->screennum);
+}
+
+
+
+/* mise � jour du contenu du pinnipede (reparse tous les messages affich�s etc...
+   c'est une des fonctions les plus importantes) */
+/* adjust: param interne, appeler toujours avec adjust  = 0 */
+void
+pp_update_content(Dock *dock, id_type id_base, int decal, int adjust, int update_scrollbar_bounds)
+{
+  Pinnipede *pp = dock->pinnipede;
+  Boards *boards = dock->sites->boards;
+
+  int cur_lig, plig;
+  id_type id;
+  PostVisual *pv;
+
+  if (flag_updating_board) return; // on repousse un peu le refresh
+
+
+  if (pp->lignes_sel) {
+    pp_selection_unselect(pp);
+  }
+  if (pp->last_selected_text) {
+    free(pp->last_selected_text); pp->last_selected_text = NULL;
+  }
+
+  //  printf("[colle_en_bas=%d] ..", pp->colle_en_bas);
+  if (id_type_is_invalid(id_base) ||
+      id_type_eq(id_base, get_last_id_filtered(boards, &pp->filter))) {
+    pp->colle_en_bas = 1;
+  } else pp->colle_en_bas = 0;
+
+
+  pp->last_post_id = boards_last_id(boards);
+
+  /* pour determiner la position de la zone d'affichage */
+  pp_widgets_set_pos(dock);
+
+/*   printf("id_base = %d/%d, pp->id_base=%d, last_id=%d, colle_en_bas=%d decal=%d\n", */
+/*   	 id_base.sid,id_base.lid, pp->id_base.lid,  */
+/* 	 get_last_id_filtered(boards, &pp->filter).lid, pp->colle_en_bas, decal); */
+
+  pp->nb_lignes = pp->zmsg_h / pp->fn_h;
+  cur_lig = pp->nb_lignes;
+
+  /* on s'aligne sur le premier message qui n'est pas dans la boitakon */
+  if (pp->disable_plopify == 0) {
+    board_msg_info *mi;
+    mi = boards_find_id(boards, id_base);
+    while (mi && mi->in_boitakon) {
+      decal = 0;
+      id_base = get_prev_id_filtered(boards, id_base, &mi, &pp->filter);
+    }
+  }
+
+  id = id_base;
+
+
+  /* 'scroll down' */
+  //printf("entree update_content: id_base = %d (%d), decal = %d (%d), adjust=%d\n",
+  //id_base,pp->id_base, decal, pp->decal_base, adjust);
+
+  pp->id_base = id_type_invalid_id();
+
+  /* 'reduit' le decalage */
+  while (decal > 0) {
+    id_type nid;
+    nid = get_next_id_filtered(boards, id, NULL, &pp->filter);
+    if (id_type_is_invalid(nid)) { decal = 0; break; }
+    id = nid;
+    pv = pp_pv_add(pp, boards, id);
+    if (pv == NULL) { decal = 0; break; }
+    decal -= pv->nblig;
+  }
+
+  /* assignation des lignes */
+  pp_pv_uncount(pp);
+  if (pp->lignes) { free(pp->lignes); pp->lignes=NULL; }
+  ALLOC_VEC(pp->lignes, pp->nb_lignes, PostWord*);
+
+  while (cur_lig >= 0) {
+    pv = pp_pv_add(pp, boards, id); 
+    //    printf("cur_lig = %d, id=%d pv=%p\n", cur_lig, id.lid, pv);
+    if (pv == NULL) { /* on n'arrive pas a remplir jusqu'en haut ? */
+      if (adjust == 0) {
+	if (!id_type_is_invalid(pp->id_base)) {
+	  pp_update_content(dock,pp->id_base,pp->decal_base+cur_lig, 1, update_scrollbar_bounds); /* pas joli-joli */
+	} else {
+	  id = get_first_id_filtered(boards, &pp->filter); /* premier id affichable */
+
+	  if (!id_type_is_invalid(id)) { /* sinon �a veut dire que la tribune est comptelemt vide */
+	    pp_update_content(dock,id,0, 0, update_scrollbar_bounds); /* pas joli-joli */
+	  }
+	}
+      }
+      break;
+    }
+    pv->ref_cnt = 0;
+    id = get_prev_id_filtered(boards, id, NULL, &pp->filter);
+
+    //printf("pv->nblig=%d, , pid=%d\n",pv->nblig, id);
+    if (decal + pv->nblig > 0) { // test si le 'scroll up a �t� suffisant
+      PostWord *pw;
+
+      if (id_type_is_invalid(pp->id_base)) { /* on sauve l'id_base et le decal soigneusement calcul� */
+	pp->id_base = pv->id;
+	pp->decal_base = decal;
+      }
+
+      cur_lig -= pv->nblig + decal;
+      decal = 0;
+      plig = 0;
+      pw = pv->first;
+      for (plig = 0; plig < pv->nblig && cur_lig+plig < pp->nb_lignes; plig++) {
+	int l;
+	if (cur_lig + plig >= 0) {
+	  //	  printf("ajout: ligne %d, pw->w='%s'\n", cur_lig+plig, pw->w);
+	  pp->lignes[cur_lig+plig] = pw;
+	  pv->ref_cnt = 1;
+	}
+	l = pw->ligne;
+	while (pw && l == pw->ligne) pw = pw->next;
+      }
+    } else {      
+      decal += pv->nblig;
+    }
+  }
+  pp_pv_garbage_collect(pp); // rhooooo
+  if (update_scrollbar_bounds) { pp_scrollcoin_update_bounds(dock); }
+  if (pp->sc)
+    scrollcoin_setpos(pp->sc, get_id_count_filtered(boards, &pp->filter, pp->id_base));
+}
+
+
+void
+pp_clear_win_area(Dock *dock, int x, int y, int w, int h)
+{
+  Pinnipede *pp = dock->pinnipede;
+  if (pp->transparency_mode == 0 && w > 0 && h > 0) {
+    //    XClearArea(dock->display, pp->win, x, y, w, h, False);
+    XSetForeground(dock->display, dock->NormalGC, pp_get_win_bgcolor(dock));
+    XFillRectangle(dock->display, pp->win, dock->NormalGC, x, y, w, h);
+  } else {
+    XCopyArea(dock->display, pp->lpix, pp->win, dock->NormalGC, x, y+pp->lpix_h0, 
+	      w, h, x, y);
+  }
+}
+
+/* dessine une ligne */
+PostWord *
+pp_draw_line(Dock *dock, Pixmap lpix, PostWord *pw, 
+	     unsigned long bgpixel, PinnipedeLignesSel *sel_info, int use_bg_pixmap, int dest_y)
+{
+  Pinnipede *pp = dock->pinnipede;
+  int pl;
+  int old_pos;
+  unsigned long pixel; //, old_pixel;
+  CCColorId color;
+  int y;
+  int site_num = -1;
+
+  if (pw) {
+    assert(pw->parent);
+    site_num = id_type_sid(pw->parent->id);
+  } else {
+    assert(pp->active_tab);
+    site_num = pp->active_tab->site->site_id;
+  }
+  assert(site_num >=0 && site_num < MAX_SITES);
+
+  XSetForeground(dock->display, dock->NormalGC, bgpixel);
+  if (use_bg_pixmap == 0) {
+    XFillRectangle(dock->display, lpix, dock->NormalGC, 0, 0, pp->zmsg_w, pp->fn_h);
+  } else {
+    XCopyArea(dock->display, pp->lpix, pp->lpix, dock->NormalGC, pp->zmsg_x1, dest_y+pp->lpix_h0, pp->zmsg_w, pp->fn_h, 0, 0);
+  }
+
+
+  if (!use_bg_pixmap) {
+    XSetForeground(dock->display, dock->NormalGC, pp_get_win_bgcolor(dock));
+    XFillRectangle(dock->display, lpix, dock->NormalGC, 0, 0, 4, pp->fn_h);
+    //    XFillRectangle(dock->display, lpix, dock->NormalGC, pp->win_width-3-(pp->sc ? SC_W : 0), 0, 2, pp->fn_h);
+  }
+
+  /* verifie si c'est un nouveau message */
+  if (pw) {
+    Board *board = dock->sites->boards->btab[id_type_sid(pw->parent->id)];
+    if (id_type_lid(pw->parent->id) > board->last_post_id_prev) {
+      /*unsigned long pixel = 0x8080ff;
+      if ((wmcc_tic_cnt - board->wmcc_tic_cnt_last_check) > 10*(1000/WMCC_TIMER_DELAY_MS)) {
+	pixel = ((((bgpixel & 0xff0000) + (pixel & 0xff0000))/2 & 0xff0000) + 
+		 (((bgpixel & 0x00ff00) + (pixel & 0x00ff00))/2 & 0x00ff00) + 
+		 (((bgpixel & 0x0000ff) + (pixel & 0x0000ff))/2 & 0x0000ff));
+      }
+      XSetForeground(dock->display, dock->NormalGC, IRGB2PIXEL(pixel));
+      XFillRectangle(dock->display, lpix, dock->NormalGC, 0, 0, 4, pp->fn_h);*/
+      unsigned long pixel = 0x106fe5; // un bleu qui claque
+      int y = 0 - dest_y%4;
+      XSetForeground(dock->display, dock->NormalGC, IRGB2PIXEL(pixel));
+      while (y < pp->fn_h) {
+        XFillRectangle(dock->display, lpix, dock->NormalGC, 2, y, 2, 2);
+        y += 4;
+      }
+    }
+  }
+
+  /* couleur de la zone selectionn�e */
+  if (sel_info) {
+    if (sel_info->x0 < sel_info->x1) {
+      XSetForeground(dock->display, dock->NormalGC, cccolor_pixel(pp->sel_bgcolor));
+      XFillRectangle(dock->display, lpix, dock->NormalGC, 
+		     sel_info->x0, 0, 
+		     sel_info->x1-sel_info->x0, pp->fn_h);
+    }
+  }
+
+  /* dessine une ligne horizontale pour signifier qu'il y a eu une coupure dans le
+     "flux" des messages (puisque le msg id-1 n'existe pas / n'a pas �t� r�cup�r�) */
+  if (pw && Prefs.site[site_num]->mark_id_gaps && pw->ligne == 1 && pw->parent->is_skipped_id) {
+    XGCValues xgc;
+    xgc.foreground = IRGB2PIXEL(0xff0000);
+    xgc.line_style = LineOnOffDash;
+    
+    XChangeGC(dock->display, dock->NormalGC, GCForeground | GCLineStyle, &xgc);
+    XDrawLine(dock->display, lpix, dock->NormalGC, 5, 0, pp->zmsg_w, 0);
+    xgc.line_style = LineSolid;
+    XChangeGC(dock->display, dock->NormalGC, GCLineStyle, &xgc);
+  }
+
+  XSetBackground(dock->display, dock->NormalGC, bgpixel);
+  //  old_pixel = bgpixel;
+
+  pixel = 0L;
+  y = ccfont_ascent(pp->fn_base)-1;
+  old_pos = 0;
+  if (pw) {
+    CCFontId fn;
+    pl = pw->ligne;
+    /*
+      printf("pw->parent = %d\n", pw->parent->id);
+      printf("pw->parent->is_my_message = %d\n", pw->parent->is_my_message);
+      printf("pw->parent->is_answer = %d\n", pw->parent->is_answer_to_me);
+      printf("pw->parent->is_high = %d\n", pw->parent->is_hilight_key);
+    */
+    
+    /* affichage du petit crochet sur la gauche de certains messages */
+    if (pw->parent->is_my_message || 
+	pw->parent->is_answer_to_me || 
+	pw->parent->is_hilight_key) {
+      PostWord *pw2;
+      int first_line, last_line;
+      int do_hilight = 1;
+      if (pw == pw->parent->first) { first_line = 1; } else first_line = 0;
+      pw2 = pw;
+      while (pw2 && pw2->ligne == pl) pw2 = pw2->next;
+      if (pw2 == NULL) last_line = 1; else last_line = 0;
+
+      
+      if (pw->parent->is_my_message && pp->hilight_my_message_mode) { 
+	pixel = cccolor_pixel(pp->hilight_my_msg_color);
+      } else if (pw->parent->is_answer_to_me && pp->hilight_answer_to_me_mode) { 
+	pixel = cccolor_pixel(pp->hilight_answer_my_msg_color);
+      } else if (pw->parent->is_hilight_key && pp->hilight_key_mode) { 
+	pixel = cccolor_pixel(pp->hilight_keyword_color[pw->parent->is_hilight_key-1]);
+      } else do_hilight = 0;
+      
+      if (do_hilight) {
+	XSetForeground(dock->display, dock->NormalGC, pixel);
+	XFillRectangle(dock->display, lpix, dock->NormalGC, 4, 0, 3, pp->fn_h);
+	XDrawLine(dock->display, lpix, dock->NormalGC, 6,first_line,  6, pp->fn_h-1-last_line);
+	if (first_line) XDrawLine(dock->display, lpix, dock->NormalGC, 7,0,9, 0);
+	if (last_line) XDrawLine(dock->display, lpix, dock->NormalGC, 7,pp->fn_h-1,9, pp->fn_h-1);
+
+	if (first_line) {
+	  pw2 = pw;
+	  while (pw2 && (pw2->attr & PWATTR_TSTAMP) == 0) pw2 = pw2->next;
+	  if (pw2) {
+	    int x0,width;
+	    x0 = pw2->xpos-2; width = pw2->xwidth+3;
+	    XDrawLine(dock->display, lpix, dock->NormalGC, 10, 0, x0, 0);
+	    XDrawRectangle(dock->display, lpix, dock->NormalGC, x0,0,width,pp->fn_h-1);
+	  }
+	}
+
+	//old_pixel = pixel;
+      }
+    }
+
+    /* la boucle sur tous les mots */
+    while (pw && pw->ligne == pl) {
+      int force_bold = 0;
+      if (pw->attr & PWATTR_TSTAMP) {
+	color = pp->timestamp_color[site_num];
+//	if (pw->parent->is_my_message) { pixel = IRGB2PIXEL(0x000080); }
+      } else if (pw->attr & (PWATTR_LNK|PWATTR_REF)) {
+	if ((pw->attr & PWATTR_VISITED) == 0) {
+	  color = pp->lnk_color[site_num];
+	} else {
+	  color = pp->visited_lnk_color[site_num];
+	}
+      } else if (pw->attr & PWATTR_NICK) {
+	color = pp->useragent_color[site_num];
+      } else if (pw->attr & PWATTR_LOGIN) {
+	color = pp->login_color[site_num];
+      } else if (pw->attr & PWATTR_TROLLSCORE) {
+	color = pp->trollscore_color[site_num];
+      } else {
+	color = pp->txt_color[site_num];
+      }
+
+      if (pw->attr & (PWATTR_TOTOZ_UNKNOWN)) {
+        color = pp->totoz_unknown_color; 
+      } else if (pw->attr & (PWATTR_TOTOZ_DOWNLOADING)) {
+        color = pp->totoz_downloading_color; 
+      } else if (pw->attr & (PWATTR_TOTOZ_NOTFOUND)) {
+        color = pp->plopify_color;
+      } else if (pw->attr & (PWATTR_TOTOZ_FOUND)) {
+        color = pp->totoz_found_color; 
+      }
+
+      if (pw->parent->is_plopified) {
+	color = pp->plopify_color;
+      }
+
+      if (pw->attr & (PWATTR_TMP_EMPH)) {
+	XSetForeground(dock->display, dock->NormalGC, cccolor_pixel(pp->popup_bgcolor));
+	XFillRectangle(dock->display, lpix, dock->NormalGC,pw->xpos, 1, pw->xwidth, pp->fn_h-1);
+	color = pp->popup_fgcolor;
+	//XSetForeground(dock->display, dock->NormalGC, pixel);
+      }
+
+      /*if (pixel != old_pixel) {
+	XSetForeground(dock->display, dock->NormalGC, pixel);
+	old_pixel = pixel;
+        }*/
+
+      fn = pv_get_font(pp, pw->attr | (force_bold ? PWATTR_BD : 0));
+
+
+      //XDrawString(dock->display, lpix, dock->NormalGC, pw->xpos, y, pw->w, strlen(pw->w));
+      ccfont_draw_string_utf8(fn, color, lpix, pw->xpos, y, pw->w, -1);
+
+      if (pw->attr & PWATTR_U) {
+	int x1;
+	if (pw->next && pw->next->ligne == pw->ligne && (pw->next->attr & PWATTR_U)) {
+	  x1 = pw->next->xpos;
+	} else {
+	  x1 = pw->xpos+pw->xwidth-1;
+	}
+        XSetForeground(dock->display, dock->NormalGC, cccolor_pixel(color));
+	XDrawLine(dock->display, lpix, dock->NormalGC, pw->xpos, y+1, x1, y+1);
+      }
+      if (pw->attr & (PWATTR_TMP_EMPH)) {
+        XSetForeground(dock->display, dock->NormalGC, cccolor_pixel(pp->popup_fgcolor));
+	XDrawLine(dock->display, lpix, dock->NormalGC, pw->xpos, y+1,  pw->xpos+pw->xwidth-1, y+1);
+	if (pw->xwidth > 2) {
+	  XDrawLine(dock->display, lpix, dock->NormalGC, pw->xpos+1, y+2, pw->xpos+pw->xwidth-2, y+2);
+	}
+      }
+
+      if (pw->attr & PWATTR_S) {	  
+	int x1;
+	pixel = cccolor_pixel(pp->txt_color[site_num]);
+	XSetForeground(dock->display, dock->NormalGC, pixel);
+	if (pw->next && pw->next->ligne == pw->ligne && (pw->next->attr & PWATTR_S)) {
+	  x1 = pw->next->xpos;
+	} else {
+	  x1 = pw->xpos+pw->xwidth-1;
+	}
+	XDrawLine(dock->display, lpix, dock->NormalGC, pw->xpos, y-ccfont_height(fn)/2, x1, y-ccfont_height(fn)/2);
+      }
+      pw->attr &= ~PWATTR_TMP_EMPH;
+      old_pos = pw->xpos + pw->xwidth;
+      pw = pw->next;
+    }
+  }
+
+
+  return pw;
+}
+
+void pp_refresh_hilight_refs(Pinnipede *pp, Boards *boards, int sid, time_t timestamp, int sub_timestamp) {
+  int l;
+
+  for (l=0; l < pp->nb_lignes; l++) {
+    if (pp->lignes[l]) {
+      board_msg_info *ref2_mi;
+      int pl;
+      PostWord *pw;
+
+      pw = pp->lignes[l];
+      pl = pw->ligne;
+      while (pw && pl == pw->ligne) {
+	if (pw->attr & PWATTR_REF) {
+	  int bidon, ref2_num;
+
+	  ref2_mi = check_for_horloge_ref(boards, pw->parent->id, pw->w, NULL, 0, &bidon, &ref2_num); assert(bidon);
+	  if (ref2_mi && ref2_mi->timestamp == timestamp) { /* test sur timestamp pour les situation o� +sieurs msg ont le m�me */
+	    if (id_type_sid(ref2_mi->id) == sid) {
+	      if (ref2_num == -1                                 /* ref � plusieurs posts */
+		  || (ref2_num==0 && sub_timestamp <= 0) /* au cas on a mis un � inutile par inadvertance */
+		  || (ref2_num == sub_timestamp)) {
+		pw->attr |= PWATTR_TMP_EMPH;
+	      }
+	    }
+	  }
+	}
+	pw = pw->next;
+      }
+    }	
+  }
+}
+
+/* 
+   pw_ref: si non null, c'est que le pointeur survole une r�f�rence (c'est a d qu'il
+   est utilise quand on survole une reference � un post precedent, 
+   ou bien quand on survole un timestamp)
+   
+   cette fonction est malheureusement devenue un vrai sac de noeud
+
+*/
+void
+pp_refresh(Dock *dock, Drawable d, PostWord *pw_ref)
+{
+  Pinnipede *pp = dock->pinnipede;
+  Boards *boards = dock->sites->boards;
+
+  int l;
+  board_msg_info *ref_mi, *caller_mi;
+  unsigned char ref_comment[200];
+  int ref_in_window = 0; /* mis a 1 si le message soulign� par pw_ref est affich� parmi
+			    les autres messages. sinon, on l'affiche en haut, dans une petite fenetre */
+
+#define MAXANTIREF 60
+  id_type anti_ref_id[MAXANTIREF];
+  /* les antireferences : si on survolle un timestamp, on emphasize les commentaires qui
+     lui font reference */
+  int nb_anti_ref;
+  int ref_num; /* utilise pour les ref pr�cises dans les post multiples (ie qui ont le meme timestamp) 
+		  par defaut, vaut -1 (cad d�sactiv�)
+                  peut valoir -2 : la ref est pr�cise, mais on ne se sert que de l'id, pas des timestamps
+		*/
+
+  pp->flag_pp_refresh_request = 0;
+  if (pp->lignes == NULL) return; /* �a peut arriver pendant que flag_updating_board != 0 */
+
+  /*  {
+    time_t t=time(NULL);
+    printf("%02d:%02d:%02d in pp_refresh...\n", (t/3600)%24, (t/60)%60, t%60);
+    dump_backtrace();
+  }
+  */
+  ref_num = -1;
+  ref_comment[0] = 0;
+
+  /* effacage des bandes blanches */
+  {
+    int y,h;
+    /* en haut */
+    y = pp->zmsg_y1;
+    h = LINEY0(0)-y;
+    if (h>0) {
+      pp_clear_win_area(dock, pp->zmsg_x1, y, pp->zmsg_w, h);
+    }
+
+    /* en bas */
+    y = LINEY0(pp->nb_lignes);
+    h = (pp->zmsg_y2 - y) + 1;
+    if (h>0) {
+      pp_clear_win_area(dock, pp->zmsg_x1, y, pp->zmsg_w, h);
+    }
+  }
+
+  caller_mi = NULL;
+  ref_mi = NULL;
+  nb_anti_ref = 0;
+  
+  /* premier cas: on survole une reference */
+  if (pw_ref && (pw_ref->attr & PWATTR_REF)) {
+    int bidon;
+    ref_mi = check_for_horloge_ref(boards, pw_ref->parent->id, pw_ref->w, ref_comment, 200, &bidon, &ref_num); assert(bidon);
+  } else if (pw_ref && (pw_ref->attr & PWATTR_LNK)) {
+    char *link = strdup(pw_ref->attr_s);
+    char *anchor = strrchr(link, '#');
+    if (anchor && anchor > strrchr(link, '/')) *anchor = 0;
+    RSSBonusInfo *ri = rss_find_from_link(boards, link);
+    if (ri) {
+      ref_mi = boards_find_id(boards, ri->id); 
+      ref_num = -2; // pour eviter les multiples hilights
+      if (ref_mi) pw_ref->attr |= PWATTR_TMP_EMPH;
+    } else printf("this is not possible\n");
+    free(link);
+  } else if (pw_ref && (pw_ref->attr & PWATTR_TSTAMP)) {
+    pp_refresh_hilight_refs(pp, boards, id_type_sid(pw_ref->parent->id), 
+			    pw_ref->parent->tstamp, pw_ref->parent->sub_tstamp);
+  }
+  if (ref_mi) { 
+    board_msg_info *mi;
+    
+    /* on verifie que la ref apparait *entierement* dans la fenetre 
+       -> on boucle pour les situation ou il y a plusieurs messages qui ont le meme timestamp 
+    */
+    mi = ref_mi;
+    while (mi && mi->timestamp == ref_mi->timestamp && 
+           id_type_sid(mi->id) == id_type_sid(ref_mi->id)) {
+      ref_in_window = 0;
+      for (l=0; l < pp->nb_lignes; l++) {
+        if (pp->lignes[l]) {
+          if (id_type_eq(pp->lignes[l]->parent->id, ref_mi->id)) {
+            if (ref_in_window == 0) {
+              /* sale ruse... si toutes les lignes sont l�, a la fin du FOR on obtient ref_in_window = 1 */
+		ref_in_window = pp->lignes[l]->parent->nblig;
+            } else {
+              ref_in_window--;
+            }
+          }
+        }
+      }
+      if (ref_in_window != 1) {
+        ref_in_window = 0;
+        break;
+      }
+      get_next_id_filtered(boards, mi->id, &mi, NULL);
+      if (ref_num >= 0) break; /* si c'est pas une ref � un multipost sans pr�cision, break (chuis pas clair) */
+    }
+    
+    /* et maintenant on detecte toutes les autres references vers ce message pour les afficher
+       temporairement en gras (�a c vraiment pour faire le cakos)*/
+    pp_refresh_hilight_refs(pp, boards, id_type_sid(ref_mi->id), 
+                            ref_mi->timestamp, ref_mi->sub_timestamp);
+  }
+
+  /* 
+     affichage du contenu de la tribune 
+  */
+
+  for (l=0; l < pp->nb_lignes; l++) {
+    PostWord *pw;
+    unsigned long bgpixel;
+    int opaque_bg;
+    
+    pw = pp->lignes[l];
+    opaque_bg = 0;
+    bgpixel = cccolor_pixel(pp->win_bgcolor[pp->active_tab->site->site_id]);
+    
+    if (pw) {
+      int site_num;
+      int i;
+      
+      site_num = id_type_sid(pw->parent->id);
+      bgpixel = cccolor_pixel(pp->win_bgcolor[site_num]);
+      
+      /* if (pw->parent->is_answer_to_me) bgpixel = pp->answer_my_msg_bgpixel; */
+      /*      if (pw->parent->is_my_message) bgpixel = pp->my_msg_bgpixel;*/
+      
+      if (ref_mi) {
+       if (ref_num == -1) {
+	 if (pw->parent->tstamp == ref_mi->timestamp && ref_in_window
+	     && id_type_sid(pw->parent->id) == id_type_sid(ref_mi->id)) {
+	   bgpixel = cccolor_pixel(pp->emph_color); opaque_bg = 1;
+	 }
+       } else {
+	 if (id_type_eq(pw->parent->id, ref_mi->id) && ref_in_window) {
+	   bgpixel = cccolor_pixel(pp->emph_color); opaque_bg = 1;
+	 }
+       }
+     }
+     for (i = 0; i < nb_anti_ref; i++) {
+       if (id_type_eq(anti_ref_id[i], pw->parent->id)) {
+	 bgpixel = cccolor_pixel(pp->emph_color); opaque_bg = 1;
+       }
+     }
+     if (pw->parent && id_type_eq(pw->parent->id, pp->kbnav_current_id)) {
+       bgpixel = cccolor_pixel(pp->sel_bgcolor);
+     }
+   }
+   
+   pp_draw_line(dock, pp->lpix, pw, bgpixel, NULL, 
+                pp->transparency_mode && !opaque_bg, LINEY0(l));
+
+    XCopyArea(dock->display, pp->lpix, d, dock->NormalGC, 0, 0, pp->zmsg_w, pp->fn_h, pp->zmsg_x1, LINEY0(l));
+  }
+
+  if (pw_ref && ref_in_window == 0) {
+    int y;
+    board_msg_info *mi;
+    
+    y = 3;
+    /* affichage de la reference tout en haut du pinnipede */
+
+    /* 
+       on boucle pour les situation ou il y a plusieurs messages qui ont le meme timestamp 
+    */
+    mi = ref_mi;
+    while (mi && mi->timestamp == ref_mi->timestamp
+	   && id_type_sid(mi->id) == id_type_sid(ref_mi->id)) {
+      PostVisual *pv;
+      if (mi->in_boitakon == 0 || pp->disable_plopify) {
+	pv = pp_pv_add(pp, boards, mi->id);
+	if (pv) {
+	  PostWord *pw = pv->first;
+	  while (pw) {
+	    pw = pp_draw_line(dock, pp->lpix, pw, cccolor_pixel(pp->emph_color), NULL, 0, y); 
+	    XCopyArea(dock->display, pp->lpix, d, dock->NormalGC, 0, 0, pp->zmsg_w, pp->fn_h, pp->zmsg_x1, y);
+	    y += pp->fn_h;
+	  }
+	}
+      }
+      get_next_id_filtered(boards, mi->id, &mi, NULL);
+      if (ref_num != -1) break;
+    }
+
+    /* affichage du commentaire (optionnel) */
+    if (ref_mi || strlen(ref_comment)) {
+      if (strlen(ref_comment) && (ref_mi==NULL || (ref_mi->in_boitakon && pp->disable_plopify == 0))) {
+	XSetForeground(dock->display, dock->NormalGC, cccolor_pixel(pp->emph_color)); //WhitePixel(dock->display, dock->screennum));
+	XFillRectangle(dock->display, pp->lpix, dock->NormalGC, 0, 0, pp->win_width, pp->fn_h);
+	XSetBackground(dock->display, dock->NormalGC, cccolor_pixel(pp->emph_color)); //WhitePixel(dock->display, dock->screennum));
+	//XSetFont(dock->display, dock->NormalGC, pp->fn_it->fid);
+        ccfont_draw_string_utf8(pp->fn_it, pp->timestamp_color[pp->active_tab->site->site_id], 
+                            pp->lpix, 5, ccfont_ascent(pp->fn_it), ref_comment, strlen(ref_comment));
+	//XDrawString(dock->display, pp->lpix, dock->NormalGC, 5, pp->fn_base->ascent, ref_comment, strlen(ref_comment));
+	XCopyArea(dock->display, pp->lpix, d, dock->NormalGC, 0, 0, pp->zmsg_w, pp->fn_h, pp->zmsg_x1, y);
+	y += pp->fn_h;
+      }
+      XSetForeground(dock->display, dock->NormalGC, cccolor_pixel(pp->emph_color)); //WhitePixel(dock->display, dock->screennum));
+      XFillRectangle(dock->display, pp->win, dock->NormalGC, pp->zmsg_x1, 0, pp->win_width, 3);
+      XFillRectangle(dock->display, pp->win, dock->NormalGC, pp->zmsg_x1, y, pp->win_width, 3);
+      y+=3;
+      XSetForeground(dock->display, dock->NormalGC, BlackPixel(dock->display, dock->screennum));
+      XDrawLine(dock->display, pp->win, dock->NormalGC, pp->zmsg_x1, y, pp->win_width, y);
+    }
+  }
+
+  /* toutes les boards affich�es � l'ecran sont marqu�es comme completement lues */
+  /*{
+    int sid = -1;
+    for (l=0; l < pp->nb_lignes; l++) {
+      PostWord *pw = pp->lignes[l];
+      if (pw && pw->parent) {
+        if (id_type_sid(pw->parent->id) != sid) {
+          sid = id_type_sid(pw->parent->id);
+          if (sid >= 0 && boards->btab[sid]) board_set_viewed(boards->btab[sid]);
+        }
+      }
+    }
+  }
+  */
+  pp_widgets_refresh(dock);
+}
+
+#define MAXAGE 30
+/*
+void
+pp_hilight_newest_messages(Dock *dock)
+{
+  Pinnipede *pp = dock->pinnipede;
+  
+  int l = 0;
+
+
+
+
+  if (pp->lignes == NULL) return;
+  while (l < pp->nb_lignes) {
+    PostVisual *pv;
+    if (pp->lignes[l] == NULL) { l++; continue; }
+    pv = pp->lignes[l]->parent;
+    if (pv->new_decnt) {
+      int rw,rh,rx0,ry0;
+      int spot;
+      pv->new_decnt--;
+      rx0 = 2; ry0 = LINEY0(l-pp->lignes[l]->ligne) - pp->fn_h;
+      rw = pp->win_width - 2*rx0 - (pp->sc ? SC_W : 0);
+      rh = pv->nblig * pp->fn_h;
+
+      //myprintf("id=%d %<yel update decnt %d>\n", id_type_lid(pv->id), pv->new_decnt);
+
+
+      for (spot = 0; spot < 10; spot++) {
+	int pos[2], x[3], y[3];
+	int side[2];
+	int halfperim, j;
+//	
+//
+//          _______0_______
+//         |               | 
+//       3 |_______________|1
+//                 2
+
+
+ 	unsigned long pix;
+	halfperim = (rw-2+rh);
+	pos[0] = ((spot * 2* halfperim)/10 + 100000 - pv->new_decnt);
+	pos[1] = pos[0] + 200;
+
+	for (j=0; j < 2; j++) {
+	  pos[j] %= 2*halfperim;
+	  side[j] = ((pos[j] / (halfperim)) % 2)*2 + ((pos[j] % (halfperim)) < rw-1 ? 0 : 1);
+	  switch (side[j]) {
+	  case 0: x[j] = rx0 + pos[j]; y[j] = ry0; break;
+	  case 1: x[j] = rx0 + rw-1; y[j] = ry0+(pos[j]-rw+1); break;
+	  case 2: x[j] = rx0 + rw-1 - (pos[j]-halfperim); y[j] = ry0+rh-1; break;
+	  case 3: x[j] = rx0; y[j] = ry0+rh - (pos[j]-halfperim-rw)-2; break;
+	  }
+	}
+	
+	j = 0;
+
+	pix = RGB2PIXEL(0xff,0,0);
+	XSetForeground(dock->display, dock->NormalGC, pp_get_win_bgcolor(dock));
+	XDrawPoint(dock->display, pp->win, dock->NormalGC, x[0], y[0]);
+	XDrawPoint(dock->display, pp->win, dock->NormalGC, x[0], y[0]+1);
+	XSetForeground(dock->display, dock->NormalGC, pix);
+	XDrawPoint(dock->display, pp->win, dock->NormalGC, x[1], y[1]);
+	XDrawPoint(dock->display, pp->win, dock->NormalGC, x[1], y[1]+1);
+      }
+    }
+
+    do {
+      l++;
+    } while (l < pp->nb_lignes && (pp->lignes[l]==NULL || pv == pp->lignes[l]->parent));
+  }
+}
+*/
+
+
+/* appel�e depuis wmcoincoin.c, pour g�rer l'autoscroll et rafraichir l'affichage */
+void
+pp_check_board_updated(Dock *dock)
+{
+  Pinnipede *pp = dock->pinnipede;
+  Boards *boards = dock->sites->boards;
+
+  if (pp && pp->mapped && flag_updating_board == 0) {
+    /* test si on scrolle qutomatiquement pour afficher le nouveau message */
+    //    if (trib->last_post_id != pp->last_post_id && pp->last_post_id == pp->id_base && pp->decal_base == 0) {
+    if (pp->flag_board_updated) {
+      id_type last_id;
+
+      /* eh oui, il faut pas autoscroller ou rafraichir alors qu'une selection est active 
+	 (le update_content deselectionne automatiquement, mais faut �tre s�r que
+	 l'utilisateur n'est pas justement *en train* de selectionner)
+       */
+      if (pp->lignes_sel) {
+	if (difftime(time(NULL),pp->time_sel) > 20.) { /* on accorde 20 sec. de delai */
+	  pp_selection_unselect(pp);
+	} else {
+	  return;
+	}
+      }
+
+      pp_scrollcoin_update_bounds(dock); 
+
+      last_id = get_last_id_filtered(boards, &pp->filter);
+      if ((!id_type_eq(last_id, pp->last_post_id)) && 
+	  pp->colle_en_bas) { // && pp->decal_base == 0) {
+	//	myprintf("pp_check_board_updated, on %<yel colle> de %d � %d\n", pp->last_post_id, trib->last_post_id);
+	
+	pp_pv_destroy(pp); /* force le rafraichissement complet */
+	pp_update_content(dock, last_id, 0, 0, 0);
+      } else {
+	/*	if (trib->last_post_id != pp->last_post_id)
+		printf("pp_check_board_updated, on laisse filer de %d � %d (pos=%d/%d)\n", pp->last_post_id, trib->last_post_id, pp->id_base, pp->decal_base);*/
+	pp_pv_destroy(pp); /* force le rafraichissement complet */
+	pp_update_content(dock, pp->id_base, pp->decal_base, 0, 0);
+      }
+      pp_refresh(dock, pp->win, NULL);
+      pp->flag_board_updated = 0;
+    }
+  }
+}
+
+void
+pp_animate(Dock *dock)
+{
+  Pinnipede *pp = dock->pinnipede;
+  if (pp && pp->mapped /*&& flag_updating_board == 0*/) {
+    /* pour affichage du temps restant avant refresh */
+    if (pp->use_minibar) {
+      pp_minib_refresh(dock);
+      pp_tabs_refresh(dock);
+    }
+    if (pp->flag_pp_update_request && !flag_updating_board) {
+      pp->flag_pp_update_request = 0;
+      pp_pv_destroy(pp);
+      pp_update_content(dock, get_last_id_filtered(dock->sites->boards, &pp->filter), 100,0,1);
+      pp_refresh(dock, pp->win, NULL);   
+    } else if (pp->flag_pp_refresh_request) {
+      pp_refresh(dock, pp->win, NULL);
+    }
+  }
+}
+
+void pp_update_and_redraw(Dock *dock, id_type id_base, int decal, int adjust, int update_scrollbar_bounds) 
+{
+  Pinnipede *pp = dock->pinnipede;
+  if (!flag_updating_board) {
+    pp_pv_destroy(pp);
+    pp_update_content(dock, id_base, decal, adjust, update_scrollbar_bounds);
+    pp_refresh(dock, pp->win, NULL);
+    pp->flag_pp_update_request = 0; /* a tout hasard */
+  }
+  else pp->flag_pp_update_request = 1; 
+}
+
+void
+pp_update_bg_pixmap(Dock *dock)
+{
+  Pinnipede *pp = dock->pinnipede;
+  assert(pp->win != None);
+
+  if (pp->lpix != None) {
+    XFreePixmap(dock->display, pp->lpix); pp->lpix = None;
+  }
+  
+  pp->lpix_h0 = MAX(MAX(MINIB_H, pp->fn_h), PPT_MAX_H);
+
+  if (pp->transparency_mode) {
+    int xpos, ypos;
+    xpos = pp->win_real_xpos; ypos = pp->win_real_ypos;
+    //    get_window_pos_with_decor(dock->display, pp->win, &xpos, &ypos);
+    //printf("window pos without: %d, %d (pp_xpos=%d, pp_ypos=%d)\n", xpos, ypos, pp->win_real_xpos, pp->win_real_ypos);
+    pp->lpix = XCreatePixmap(dock->display, pp->win, pp->win_width, pp->win_height+pp->lpix_h0, DefaultDepth(dock->display,dock->screennum));
+    if (pp->lpix == None || extract_root_pixmap_and_shade(dock->rgba_context,
+                                                          xpos, ypos, 
+                                                          pp->win_width, pp->win_height,
+                                                          &Prefs.pp_transparency, 
+                                                          Prefs.use_fake_real_transparency, pp->lpix, 0, pp->lpix_h0) != 0) {
+      myprintf(_("%<yel impossible to use the pseudo-transparency> (probable solution: relaunch wmsetbg or its equivalent)\n"));
+      XFreePixmap(dock->display, pp->lpix); pp->lpix = None;
+      pp_change_transparency_mode(dock, 0);
+    }
+  }
+  if (pp->lpix == None) {
+    pp_change_transparency_mode(dock, 0);
+    pp->lpix = XCreatePixmap(dock->display, pp->win, pp->win_width, pp->lpix_h0, DefaultDepth(dock->display,dock->screennum));
+  }
+}
+
+static int
+pp_load_fonts(Pinnipede *pp, char *fn_family, int fn_size)
+{
+  char base_name[512];
+  char ital_name[512];
+  char bold_name[512];
+  char itbd_name[512];
+  char mono_name[512];
+#if 0
+
+  /* police de base ... si on ne la trouve pas, c'est une erreur fatale */
+  pp->font_base = ccfont_get("times-12");
+
+  snprintf(base_name, 512, "-*-%s-medium-r-*-*-%d-*-*-*-*-*-%s", fn_family, fn_size, Prefs.font_encoding);
+  pp->fn_base = XLoadQueryFont(display, base_name);
+  if (!pp->fn_base) {
+    fprintf(stderr, _("XLoadQueryFont: failed loading font '%s'\n"), base_name);
+    fprintf(stderr, _("Please choose another font.\n"));
+    return -1;
+  }
+
+  /* police italique -> on cherche d'abord la police oblique */
+  snprintf(ital_name, 512, "-*-%s-medium-o-*-*-%d-*-*-*-*-*-%s", fn_family, fn_size, Prefs.font_encoding);
+  pp->fn_it = XLoadQueryFont(display, ital_name);
+  if (!pp->fn_it) {
+    /* puis la police italique */
+    BLAHBLAH(1, fprintf(stderr, _("Slanted font '%s' not found -> we're looking for the italic font\n"), ital_name));
+    snprintf(ital_name, 512, "-*-%s-medium-i-*-*-%d-*-*-*-*-*-%s", fn_family, fn_size, Prefs.font_encoding);
+    pp->fn_it = XLoadQueryFont(display, ital_name);
+    if (!pp->fn_it) {
+      myfprintf(stderr, _("%<RED WARNING>: error while looking for the italic font: '%s'\n"), ital_name);
+      myfprintf(stderr, _("We'll use the base font.\n"));
+
+      /* pas de copie de pointer pour pas poser de pbs dans picohtml_destroy */
+      pp->fn_it = XLoadQueryFont(display, base_name); assert(pp->fn_it);
+    }
+  }
+
+  /* police bold */
+  snprintf(bold_name, 512, "-*-%s-bold-r-*-*-%d-*-*-*-*-*-%s", fn_family, fn_size, Prefs.font_encoding);
+  pp->fn_bd = XLoadQueryFont(display, bold_name);
+  if (!pp->fn_bd) {
+    myfprintf(stderr, _("%<RED WARNING>: error while looking for the bold font: '%s'\n"), bold_name);
+    myfprintf(stderr, _("We'll use the base font.\n"));
+    pp->fn_bd = XLoadQueryFont(display, base_name); assert(pp->fn_bd);
+  }
+
+  /* police bold oblique */
+  snprintf(itbd_name, 512, "-*-%s-bold-o-*-*-%d-*-*-*-*-*-%s", fn_family, fn_size, Prefs.font_encoding);
+  pp->fn_itbd = XLoadQueryFont(display, itbd_name);
+  if (!pp->fn_itbd) {
+    /* puis la police bold italique */
+    BLAHBLAH(1, fprintf(stderr, _("Bold slanted font '%s' not found -> we're looking for the italic font\n"), itbd_name));
+    snprintf(itbd_name, 512, "-*-%s-bold-i-*-*-%d-*-*-*-*-*-%s", fn_family, fn_size, Prefs.font_encoding);
+    pp->fn_itbd = XLoadQueryFont(display, itbd_name);
+    if (!pp->fn_itbd) {
+      myfprintf(stderr, _("%<RED WARNING>: error while looking for the italic font: '%s'\n"), itbd_name);
+      myfprintf(stderr, _("We'll use the base font.\n"));
+
+      /* pas de copie de pointer pour pas poser de pbs dans picohtml_destroy */
+      pp->fn_itbd = XLoadQueryFont(display, base_name); assert(pp->fn_itbd);
+    }
+  }
+  pp->fn_h = pp->fn_base->ascent + pp->fn_base->descent+1;
+
+
+#endif
+  if ((pp->fn_minib = ccfont_get("sans:pixelsize=10")) == (CCFontId)(-1)) {
+    printf("your fonts suck\n"); exit(1);
+  }
+  snprintf(base_name, 512, "%s:pixelsize=%d", fn_family, fn_size);
+  snprintf(ital_name, 512, "%s:pixelsize=%d:slant=italic,oblique", fn_family, fn_size);
+  snprintf(bold_name, 512, "%s:pixelsize=%d:bold", fn_family, fn_size);
+  snprintf(itbd_name, 512, "%s:pixelsize=%d:bold:slant=italic,oblique", fn_family, fn_size);
+  snprintf(mono_name, 512, "%s:pixelsize=%d:monospace", fn_family, fn_size);
+  pp->fn_base = ccfont_get(base_name);
+  pp->fn_it = ccfont_get(ital_name);
+  pp->fn_bd = ccfont_get(bold_name);
+  pp->fn_itbd = ccfont_get(itbd_name);
+  pp->fn_mono = ccfont_get(mono_name);
+  
+  if (pp->fn_base == (CCFontId)(-1)) {
+    return -1;
+  }
+  if (pp->fn_it == (CCFontId)(-1)) pp->fn_it = ccfont_incref(pp->fn_base);
+  if (pp->fn_bd == (CCFontId)(-1)) pp->fn_bd = ccfont_incref(pp->fn_base);
+  if (pp->fn_itbd == (CCFontId)(-1)) pp->fn_itbd = ccfont_incref(pp->fn_it);
+  if (pp->fn_mono == (CCFontId)(-1)) pp->fn_mono = ccfont_incref(pp->fn_base);
+
+  pp->fn_base_space_w = ccfont_text_width_utf8(pp->fn_base, "  ", 2);
+  pp->fn_h = ccfont_height(pp->fn_base)+1;
+  pp->fn_h = MAX(pp->fn_h, ccfont_height(pp->fn_it));
+  pp->fn_h = MAX(pp->fn_h, ccfont_height(pp->fn_bd));
+  pp->fn_h = MAX(pp->fn_h, ccfont_height(pp->fn_itbd));
+  return 0;
+}
+
+
+static void
+pp_free_fonts(Pinnipede *pp)
+{
+  ccfont_release(&pp->fn_base);
+  ccfont_release(&pp->fn_it);
+  ccfont_release(&pp->fn_bd);
+  ccfont_release(&pp->fn_itbd);
+  ccfont_release(&pp->fn_mono);
+  ccfont_release(&pp->fn_minib);
+  /*
+  if (pp->fn_base)
+    XFreeFont(display, pp->fn_base); 
+  pp->fn_base = NULL;
+  if (pp->fn_it)
+    XFreeFont(display, pp->fn_it); 
+  pp->fn_it = NULL;
+  if (pp->fn_bd) 
+    XFreeFont(display, pp->fn_bd); 
+  pp->fn_bd = NULL;
+  if (pp->fn_itbd)
+    XFreeFont(display, pp->fn_itbd);
+  pp->fn_itbd = NULL;
+  */
+}
+
+
+#define GET_BICOLOR(x) (pp->transparency_mode ? x.transp : x.opaque)
+enum { INIT_COLORS, RELEASE_COLORS, RESET_COLORS };
+#define INIT_OR_RESET_OR_FREE_COLOR(a,b) { if (mode == INIT_COLORS) a = cccolor_get(b); \
+  else if (mode == RELEASE_COLORS) cccolor_release(&a); else cccolor_reset(&a,b); }
+
+#define S_INIT_OR_RESET_OR_FREE_COLOR(a,b) { INIT_OR_RESET_OR_FREE_COLOR(a, (Prefs.site[i]) ? (b) : 0x000000) }
+static void
+pp_set_prefs_colors(Pinnipede *pp, int mode) 
+{
+  int i;
+
+  INIT_OR_RESET_OR_FREE_COLOR(pp->ccc_black, 0);
+  INIT_OR_RESET_OR_FREE_COLOR(pp->popup_fgcolor, GET_BICOLOR(Prefs.pp_popup_fgcolor));
+  INIT_OR_RESET_OR_FREE_COLOR(pp->plopify_color, GET_BICOLOR(Prefs.pp_plopify_color));
+  INIT_OR_RESET_OR_FREE_COLOR(pp->totoz_unknown_color, 0xa00000);
+  INIT_OR_RESET_OR_FREE_COLOR(pp->totoz_found_color, 0x0000a0);
+  INIT_OR_RESET_OR_FREE_COLOR(pp->totoz_downloading_color, 0x00a000);
+  INIT_OR_RESET_OR_FREE_COLOR(pp->minib_dark_color, GET_BICOLOR(Prefs.pp_buttonbar_fgcolor));
+
+  for (i=0; i <MAX_SITES; i++) {
+    //if (Prefs.site[i] == NULL) continue;
+    S_INIT_OR_RESET_OR_FREE_COLOR(pp->win_bgcolor[i], Prefs.site[i]->pp_bgcolor);
+    //S_INIT_OR_RESET_OR_FREE_COLOR(pp->strike_color[i], GET_BICOLOR(Prefs.site[i]->pp_strike_color));
+    S_INIT_OR_RESET_OR_FREE_COLOR(pp->timestamp_color[i], GET_BICOLOR(Prefs.site[i]->pp_tstamp_color));
+    S_INIT_OR_RESET_OR_FREE_COLOR(pp->useragent_color[i], GET_BICOLOR(Prefs.site[i]->pp_useragent_color));
+    S_INIT_OR_RESET_OR_FREE_COLOR(pp->login_color[i], GET_BICOLOR(Prefs.site[i]->pp_login_color));
+    S_INIT_OR_RESET_OR_FREE_COLOR(pp->lnk_color[i], GET_BICOLOR(Prefs.site[i]->pp_url_color));
+    S_INIT_OR_RESET_OR_FREE_COLOR(pp->visited_lnk_color[i], GET_BICOLOR(Prefs.site[i]->pp_visited_url_color));
+    S_INIT_OR_RESET_OR_FREE_COLOR(pp->txt_color[i], GET_BICOLOR(Prefs.site[i]->pp_fgcolor));
+    S_INIT_OR_RESET_OR_FREE_COLOR(pp->trollscore_color[i], GET_BICOLOR(Prefs.site[i]->pp_trollscore_color));
+  }
+  INIT_OR_RESET_OR_FREE_COLOR(pp->popup_bgcolor, GET_BICOLOR(Prefs.pp_popup_bgcolor));
+  INIT_OR_RESET_OR_FREE_COLOR(pp->minib_color, GET_BICOLOR(Prefs.pp_buttonbar_bgcolor));
+  INIT_OR_RESET_OR_FREE_COLOR(pp->minib_msgcnt_color, GET_BICOLOR(Prefs.pp_buttonbar_msgcnt_color));
+  INIT_OR_RESET_OR_FREE_COLOR(pp->minib_updlcnt_color, GET_BICOLOR(Prefs.pp_buttonbar_updlcnt_color));
+  INIT_OR_RESET_OR_FREE_COLOR(pp->progress_bar_color, GET_BICOLOR(Prefs.pp_buttonbar_progressbar_color));
+  INIT_OR_RESET_OR_FREE_COLOR(pp->sel_bgcolor, GET_BICOLOR(Prefs.pp_sel_bgcolor));
+  INIT_OR_RESET_OR_FREE_COLOR(pp->emph_color, GET_BICOLOR(Prefs.pp_emph_color));
+  INIT_OR_RESET_OR_FREE_COLOR(pp->hilight_my_msg_color, GET_BICOLOR(Prefs.pp_my_msg_color));
+  INIT_OR_RESET_OR_FREE_COLOR(pp->hilight_answer_my_msg_color, GET_BICOLOR(Prefs.pp_answer_my_msg_color));
+  for (i=0; i < NB_PP_KEYWORD_CATEG; i++) {
+    INIT_OR_RESET_OR_FREE_COLOR(pp->hilight_keyword_color[i], GET_BICOLOR(Prefs.pp_keyword_color[i]));
+  }
+
+  if (mode != RELEASE_COLORS && pp->sc) {
+    scrollcoin_change_colors(pp->sc, pp->transparency_mode);
+  }
+}
+
+void
+pp_change_transparency_mode(Dock *dock, int on_off)
+{
+  Pinnipede *pp = dock->pinnipede;
+  pp->transparency_mode = on_off;
+  pp_set_prefs_colors(pp, RESET_COLORS);
+}
+
+
+/* initialisation */
+void
+pp_build(Dock *dock) 
+{
+  Pinnipede *pp;
+  ALLOC_OBJ(pp, Pinnipede);
+  dock->pinnipede = pp;
+
+  pp->mapped = 0;
+
+  pp->fn_base = pp->fn_it = pp->fn_itbd = pp->fn_bd = pp->fn_mono = pp->fn_minib = (CCFontId)(-1);
+  
+  pp_set_prefs_colors(pp, INIT_COLORS);
+
+  pp->lpix_h0 = 0;
+  pp_change_transparency_mode(dock, Prefs.pp_start_in_transparency_mode);
+
+  pp->id_base = id_type_invalid_id(); pp->decal_base = 0;
+  pp->colle_en_bas = 1;
+
+  pp->flag_pp_update_request = 0;
+  pp->flag_pp_refresh_request = 0;
+
+  pp->win_width = Prefs.pp_width;
+  pp->win_height = Prefs.pp_height;
+  pp->win_decor_xpos = Prefs.pp_xpos;
+  pp->win_decor_ypos = Prefs.pp_ypos;
+  pp->win_real_xpos = -1;
+  pp->win_real_ypos = -1;
+
+  pp->lignes = NULL;
+  pp->nb_lignes = 0;
+  pp->lignes_sel = NULL;
+  pp->sel_l0 = pp->sel_l1 = 0;
+  pp->sel_anchor_x = pp->sel_head_x = 0;
+  pp->sel_anchor_y = pp->sel_head_y = 0;
+  pp->last_selected_text = NULL;
+
+  pp_unset_kbnav(dock);
+
+  pp->sc = NULL;
+
+  //  pp->html_mode = Prefs.pp_html_mode;
+  pp->nick_mode = Prefs.pp_nick_mode;
+  pp->show_sec_mode = Prefs.pp_show_sec_mode;
+  pp->trollscore_mode = Prefs.pp_trollscore_mode;
+  pp->disable_plopify = 0;
+  pp->hilight_my_message_mode = 1;
+  pp->hilight_answer_to_me_mode = 1;
+  pp->hilight_key_mode = 1;
+
+  pp->filter.filter_mode = 0;
+  pp->filter.filter_name = NULL;
+  pp->filter.anything = NULL;
+  pp->filter.ua = NULL;
+  pp->filter.login = NULL;
+  pp->filter.word = NULL;
+  pp->filter.nid = 0; pp->filter.id = NULL;
+  pp->filter.filter_boitakon = 1;
+
+  pp->pv = NULL;
+  pp->survol_hash = 0;
+
+  pp->use_minibar = Prefs.pp_minibar_on;
+
+  //  if (pp->use_minibar)
+  //    pp_minib_initialize(pp);
+
+  //pp->fn_minib = dock->fixed_font;
+
+  pp_totoz_build(dock);
+  pp_rebuild(dock,1);
+
+  pp->flag_board_updated = 0;
+
+  char s_xpm_bgcolor[30];
+  snprintf(s_xpm_bgcolor, 30, "  \tc #%06X", GET_BICOLOR(Prefs.pp_buttonbar_bgcolor));
+  miniduck_xpm[1] = s_xpm_bgcolor;
+  pp->miniduck_pixmap = RGBACreatePixmapFromXpmData(dock->rgba_context, miniduck_xpm); assert(pp->miniduck_pixmap);
+}
+
+void
+pp_destroy(Dock *dock)
+{
+  Pinnipede *pp = dock->pinnipede;
+  if (pp->mapped) pp_unmap(dock);
+  assert(pp->pv == NULL); assert(pp->sc == NULL); 
+  assert(pp->lignes_sel == NULL); assert(pp->lignes == NULL);
+  pp_free_fonts(pp);
+  pp_set_prefs_colors(pp, RELEASE_COLORS);
+  pp_tabs_destroy(pp);
+  pp_totoz_destroy(dock);
+  free(pp); dock->pinnipede = NULL;
+}
+
+void
+pp_rebuild(Dock *dock, int destroy_tabs)
+{
+  Pinnipede *pp = dock->pinnipede;
+  pp_pv_destroy(pp);
+  pp->survol_hash = 0;
+  pp_free_fonts(pp);
+  if (pp_load_fonts(pp, Prefs.pp_fn_family, Prefs.pp_fn_size)) {
+    myprintf(_("Failed to load the '%s' fonts with size '%d'\nLet's try with sans/12.\n"),Prefs.pp_fn_family, Prefs.pp_fn_size);
+    if (pp_load_fonts(pp, "sans", 12)==-1) {
+      myprintf(_("Uuuurg !! No helvetica, I shoot my nose.\n")); exit(-1);
+    }
+  }
+  pp_set_prefs_colors(pp, RESET_COLORS);
+  if (pp_ismapped(dock)) {
+    pp_scrollcoin_set(dock,0);
+    pp_update_bg_pixmap(dock);
+    pp_scrollcoin_set(dock,1);
+  }
+  if (destroy_tabs) {
+    pp_tabs_rebuild(dock);
+  }
+  pp_widgets_set_pos(dock);  
+  if (pp_ismapped(dock)) {
+    pp_update_content(dock, pp->colle_en_bas ? 
+		      get_last_id_filtered(dock->sites->boards, &pp->filter) : 
+		      id_type_invalid_id(), 0, 0, 1);
+    pp_refresh(dock, pp->win, NULL);
+  }
+  pp_totoz_rebuild(dock);
+}
+
+
+/*
+  un petit mot: j'ai enfin compris comment faire apparaitre cette fenetre
+   ou je veux: il suffit de donner la position dans xcreatewindow
+   et d'activer USPosition dans les WM_HINTS (MAIS, les valeurs indiqu�es dans
+   les champs x et y n'ont aucune influence)
+*/
+void
+pp_show(Dock *dock)
+{
+  Boards *boards = dock->sites->boards;
+  XSetWindowAttributes wa;
+  Pinnipede *pp = dock->pinnipede;
+  int xpos, ypos;
+  int wrong_pos = 1, xiscr;
+  /*
+  {
+    board_msg_info *mi = boards->first;
+    int cnt = 1;
+    while (mi) {
+      myprintf("%3d sid=%2d lid=%<YEL %5d> login=%.10s msg=%.60s\n", cnt++,
+	       id_type_sid(mi->id), id_type_lid(mi->id), mi->login, mi->msg);
+      mi = mi->g_next;
+    }
+  }
+  */
+
+  if (pp->active_tab == NULL) {
+    msgbox_show(dock, "looks like you fucked your options file, no board ");
+    return;
+  }
+
+  if (pp->win_decor_xpos == -10000 && pp->win_decor_ypos == -10000) {
+    xpos = dock->xiscreen[0].x_org; ypos = dock->xiscreen[0].y_org; /* �a n'a d'effet que sur certain windowmanagers rustiques (genre pwm) */
+  } else {
+    xpos = pp->win_decor_xpos;
+    ypos = pp->win_decor_ypos;
+  }
+  /* verifie la visibilit� du pinni */
+  for (xiscr=0; xiscr < dock->nb_xiscreen; ++xiscr) {
+    int x0=dock->xiscreen[xiscr].x_org, y0=dock->xiscreen[xiscr].y_org;
+    int x1=x0+dock->xiscreen[xiscr].width,y1=y0+dock->xiscreen[xiscr].height;
+    //printf("[%d-%dx%d-%x] %d %d\n", x0,x1,y0,y1);
+    if (MIN(xpos + pp->win_width,x1) - MAX(xpos,x0)  > 20 &&
+        MIN(ypos + pp->win_height,y1) - MAX(ypos,y0)  > 20)
+      wrong_pos = 0;
+  }
+  if (wrong_pos) {
+    pp->win_decor_xpos = pp->win_decor_ypos = -10000;
+    xpos = dock->xiscreen[0].x_org; ypos = dock->xiscreen[0].y_org;
+  }
+  
+
+  if (dock->pp_win) { /* on recycle tjs la meme fenetre ? 
+                         inconvenient: (avec wmaker) la fenetre est toujours remapp�e dans le m�me workspace :/
+                       */
+    pp->win = dock->pp_win;
+  } else {
+    pp->win = XCreateSimpleWindow (dock->display, dock->rootwin, 
+                                   xpos, ypos, pp->win_width,pp->win_height, 0,
+                                   WhitePixel(dock->display, dock->screennum),
+                                   pp_get_win_bgcolor(dock));
+    kb_create_input_context_for(dock, pp->win, KB_PINNIPEDE);
+  }
+  XMoveResizeWindow(dock->display, pp->win, xpos, ypos, pp->win_width, pp->win_height);
+
+  wa.event_mask =
+    ButtonPressMask | 
+    ButtonReleaseMask | 
+    ExposureMask | 
+    PointerMotionMask | 
+    StructureNotifyMask |
+    EnterWindowMask | 
+    //    ResizeRedirectMask |
+    KeyPressMask | 
+    KeyReleaseMask | 
+    FocusChangeMask |
+    LeaveWindowMask;
+    
+  /* �a sera a changer .. pour l'instant �a ira */
+  //  if (pp->transparency_mode) {
+  //    wa.override_redirect = True ;
+  //  } else
+  wa.override_redirect = False ;
+    
+  
+  //wa.background_pixmap = ParentRelative;
+  //wa.override_redirect = False ;
+  XChangeWindowAttributes (dock->display, pp->win,
+			   //CWBackPixmap | 
+			   CWEventMask | CWOverrideRedirect, &wa);
+
+  {
+    XWMHints *wm_hint;
+      
+    set_window_title(dock->display, pp->win, "pinnipede teletype", "pinnipede");
+    set_window_sizepos_hints(dock->display, pp->win, xpos, ypos, 
+                          200, 300, -1,
+                          80 , 455, -1);
+    /* au premier lancement, la pos n'est pas connue (sauf si specifee
+       dans les options ) */
+    /*    if (pp->win_decor_xpos == -10000 && pp->win_decor_ypos == -10000) {
+    } else {
+      set_window_pos_hints(dock->display, pp->win, xpos, ypos);
+      }*/
+    set_window_class_hint(dock->display, pp->win, "wmcoincoin", "pinnipede_teletype");
+      
+    wm_hint = XAllocWMHints(); assert(wm_hint);
+    wm_hint->icon_pixmap = dock->wm_icon_pix;
+    wm_hint->icon_mask = dock->wm_icon_mask;
+    wm_hint->flags = IconPixmapHint | IconMaskHint;
+    XSetWMHints(dock->display, pp->win, wm_hint);
+    XFree(wm_hint);
+  }
+    
+  /* pour etre inform� de la fermeture de la fenetre demandee par le windowmanager */
+  {
+    Atom p[2]; p[0] = dock->atom_WM_DELETE_WINDOW; p[1] = dock->atom_WM_TAKE_FOCUS;
+    /*XSetWMProtocols(dock->display, pp->win, &dock->atom_WM_DELETE_WINDOW, 1);*/
+    XSetWMProtocols(dock->display, pp->win, p, 2);
+  }
+  /*
+    {
+    XWMHints *mwh = XAllocWMHints();
+    mwh->initial_state = WithdrawnState;
+    XSetWMHints(dock->display, pp->win, mwh);
+    }*/
+
+  pp_update_bg_pixmap(dock);
+
+  XSetWindowBackground(dock->display, pp->win, cccolor_pixel(pp->minib_color));
+  XMapRaised(dock->display, pp->win);
+
+
+  assert(pp->sc == NULL);
+
+  pp_scrollcoin_set(dock,1);
+
+  //  XMoveWindow(dock->display, pp->win, 100, 100);
+  pp->mapped = 1;
+  pp_update_content(dock, pp->colle_en_bas ? 
+		    get_last_id_filtered(boards, &pp->filter) : 
+		    pp->id_base, 0, 0, 1);
+    
+  pp->survol_hash = 0;
+  //XReparentWindow(dock->display, DOCK_WIN(dock), pp->win, 5, 5);
+}
+
+
+static board_msg_info*
+pp_find_message_at_xy(Dock *dock, int x, int y) {
+  Pinnipede *pp = dock->pinnipede;
+  board_msg_info *mi = NULL;
+  if (y >= pp->zmsg_y1 && y <= pp->zmsg_y2 && 
+      x >= pp->zmsg_x1 && x <= pp->zmsg_x2) {
+    int l;
+    for (l=0; l < pp->nb_lignes; l++) {
+      if (y >= LINEY0(l) && y <= LINEY1(l) && pp->lignes[l]) {
+	mi = boards_find_id(dock->sites->boards, pp->lignes[l]->parent->id);
+	return mi;
+      }
+    }
+  }
+  return NULL;
+}
+
+static PostWord *
+pp_get_pw_at_xy(Pinnipede *pp,int x, int y)
+{
+  PostWord *pw;
+  int l;
+  pw = NULL;
+  x -= pp->zmsg_x1;
+  if (y >= pp->zmsg_y1 && y <= pp->zmsg_y2) {
+    int trouve = 0;
+    for (l=0; l < pp->nb_lignes; l++) {
+      pw = pp->lignes[l];
+      
+      while (pw && pw->ligne == pp->lignes[l]->ligne) {
+	if (x >= pw->xpos && x < pw->xpos+pw->xwidth &&
+	    y >= LINEY0(l) && y <= LINEY1(l)) 
+	  {
+	    trouve = 1;
+	    break;
+	  }
+	pw = pw->next;
+      }
+      if (trouve) break;
+    }
+    if (trouve == 0) pw = NULL; /* raa le bug tout naze */
+  }
+  return pw;
+}
+
+/* affiche le texte en haut du pinnipede (dans le style tr�s d�pouill� des useragents) */
+void
+pp_popup_show_txt(Dock *dock, unsigned char *txt)
+{
+  Pinnipede *pp = dock->pinnipede;
+  int l,cnt;
+  CCFontId fn;
+  char *s;
+  int ry0, ry1;
+  int fn_h;
+  if (txt == NULL) return;
+  if (strlen(txt) == 0) return;
+
+  fn = pp->fn_bd;
+  fn_h = ccfont_height(pp->fn_bd); // ccfont_ascent(pp->fn_bd) + ccfont_descent(pp->fn_bd) + 1;
+  //XSetFont(dock->display, dock->NormalGC, fn->fid);
+  l = 0; s = txt;
+  while (*s) {
+    cnt = 0;
+    while (s[cnt] && s[cnt] != '\n') {
+      cnt++;
+      if (ccfont_text_width_utf8(fn, s, cnt) > pp->zmsg_w-16) {
+	cnt--; break;
+      }
+    }
+    XSetForeground(dock->display, dock->NormalGC, cccolor_pixel(pp->popup_bgcolor));
+    ry0 = (l == 0 ? 0 : (l+1)*fn_h); // - ccfont_ascent(fn));
+    ry1 = (l+1)*fn_h + fn_h; //ccfont_descent(fn) + (s[cnt]==0 ? 6 : 0);
+    XFillRectangle(dock->display, pp->win, dock->NormalGC, pp->zmsg_x1, ry0,
+		   pp->zmsg_w, ry1 - ry0+1);
+    if (s[cnt]==0) {
+      XSetForeground(dock->display, dock->NormalGC, BlackPixel(dock->display, dock->screennum));
+      XDrawLine(dock->display, pp->win, dock->NormalGC, pp->zmsg_x1, ry1, pp->zmsg_x1+pp->zmsg_w-1, ry1);
+    }
+    ccfont_draw_string_utf8(pp->fn_bd, pp->popup_fgcolor, pp->win, pp->zmsg_x1+8, (l+1)*fn_h,
+                        s, cnt);
+    s += cnt;
+    if (*s == '\n') s++;
+    if (*s) l++;
+  }
+}
+
+/* renvoie le nombre de references vers le message base_mi (sauf ipot) */
+/* to do: comptage inter-sites */
+static void
+pp_count_backrefs(Boards *b, board_msg_info *base_mi, int *nrep, int *nrep_bak)
+{
+  board_msg_info *mi;
+
+  *nrep = *nrep_bak = 0;
+  if (base_mi == NULL) return;
+
+  /* on parcourt tous les message post�rieurs � base_mi */
+  mi = b->first; //base_mi->next;
+  while (mi) {
+    int i;
+    /* on regarde toutes ses references */
+    for (i = 0; i < mi->nb_refs; i++) {
+      board_msg_info *ref_mi;
+      int j;
+
+      /* pour chaque ref, on regarde la liste (generalement de taille 1 ou 0) des messages point�s */
+      for (j = 0, ref_mi = mi->refs[i].mi; j < mi->refs[i].nbmi; j++, ref_mi=ref_mi->next) {
+	/* on notera qu'on fait bien ref_mi->next et pas ref_mi->g_next */
+	assert(ref_mi);
+	
+	/* si on pointe vers le bon */
+	if (ref_mi == base_mi) {
+	  /*
+	    printf("%s/%5d backref: %s/%5d [cnt=%d]\n", Prefs.site[base_mi->id.sid]->site_name, base_mi->id.lid,
+	    Prefs.site[mi->id.sid]->site_name, mi->id.lid,
+	    nb_backrefs+1);
+	  */
+	  (*nrep)++;
+          if (mi->in_boitakon) (*nrep_bak)++;
+	  break; /* si le message contient deux refs vers base_mi, on ne le compte qu'une fois */
+	}
+      }
+    }
+    mi = mi->g_next;
+  }
+  return;
+}
+
+
+
+
+/* celle la est tordue ...
+   il s'agit de verifier si on survole (avec la souris) une info interessante, 
+   et d'agir le cas echeant (de maniere un peu d�sordonn�e)
+
+   force_refresh : -1 => on n'appelle jamais pp_refresh
+                    0 => on appelle si il faut
+                   +1 => on appelle toujours
+*/
+void
+pp_check_survol(Dock *dock, PostWord *pw, int force_refresh)
+{
+  Pinnipede *pp = dock->pinnipede;
+  Boards *boards = dock->sites->boards;
+  char survol[1024];
+  char *p;
+  int survol_hash;
+  int is_a_ref = 0;
+
+  survol[0] = 0;
+  if (pw) {
+    if (pw->attr_s && (pw->attr & PWATTR_REF)==0) { /* pour les [url] */
+      strncpy(survol, pw->attr_s, 1024); survol[1023] = 0;
+      RSSBonusInfo *ri;
+      if ((ri=rss_find_from_link(boards, survol))) {
+        if (!id_type_eq(ri->id,pw->parent->id)) {
+          survol[0] = 0; is_a_ref = 1;
+        }
+      }
+    } else if (pw->attr & PWATTR_TSTAMP) {
+      board_msg_info *mi;
+      char blah[1024], snrep[1024];
+      char *s;
+      int blah_sz = 1024;
+
+      int nrep, nrep_bak;
+      KeyList *hk;
+      mi = boards_find_id(boards, pw->parent->id);
+
+      s = blah; s[0] = 0;
+      if (mi->is_my_message) {
+	snprintf(s, blah_sz, _("\n[you posted this message]")); blah_sz -= strlen(s); s += strlen(s);
+      }
+      if (mi->is_answer_to_me && blah_sz>30) {
+	snprintf(s, blah_sz, _("\n[this message answers to one of yours]")); blah_sz -= strlen(s); s += strlen(s);
+      }
+      hk = board_key_list_test_mi(boards, mi, Prefs.hilight_key_list);
+      if (hk && blah_sz > 60) {
+	snprintf(s, blah_sz, _("\nmessage 'boxed' because: ")); blah_sz -= strlen(s); s += strlen(s);
+	while (hk && blah_sz > 30) {
+	  snprintf(s, blah_sz, " {%s='%.20s'}", 
+		   key_list_type_name(hk->type), hk->key); blah_sz -= strlen(s); s += strlen(s);
+	  hk = board_key_list_test_mi(boards, mi, hk->next);
+	}
+      }
+      hk = board_key_list_test_mi(boards, mi, Prefs.plopify_key_list);
+      if (hk && blah_sz > 60) {
+	snprintf(s, blah_sz, _("\nmessage plopified (level %d) because: "), hk->num); blah_sz -= strlen(s); s += strlen(s);
+	while (hk && blah_sz > 30) {
+	  snprintf(s, blah_sz, " {%s='%.20s'}", 
+		   key_list_type_name(hk->type), hk->key); blah_sz -= strlen(s); s += strlen(s);
+	  hk = board_key_list_test_mi(boards, mi, hk->next);
+	}
+      } else if (mi->contagious_boitakon) {
+	snprintf(s, blah_sz, _("\nmessage plopified (level 3) because the boitakon is hungry"));
+	blah_sz -= strlen(s); s += strlen(s);
+      }
+      pp_count_backrefs(boards, mi, &nrep, &nrep_bak);
+
+      if (nrep_bak == 0) {
+        snprintf(snrep, 1024, "%d %s",nrep, (nrep > 1) ? _("answers") : _("answer"));
+      } else {
+        snprintf(snrep, 1024, _("%d %s (and %d plop%s from the boitakon)"),nrep-nrep_bak, (nrep-nrep_bak > 1) ? _("answers") : _("answer"), nrep_bak, nrep_bak > 1 ? "s" : "");
+      }
+      char *stime = strdup(asctime(localtime(&mi->timestamp)));
+      while (stime && stime[0] && stime[strlen(stime)-1] == '\n') stime[strlen(stime)-1] = 0;
+      snprintf(survol, 1024, "[%s] id=%d ua=%s\n%s%s\ntimestamp=(%s)", 
+	       Prefs.site[pw->parent->id.sid]->site_name,
+	       pw->parent->id.lid, 
+	       (mi ? mi->useragent : ""), 
+	       snrep, blah, stime);
+      free(stime);
+      is_a_ref = 1;
+    } else if (pw->attr & PWATTR_REF) {
+      is_a_ref = 1;
+    }
+  }
+  
+  survol_hash = 0;
+  if (is_a_ref == 0) {
+    p = survol;
+    while (*p) { survol_hash += (((unsigned)*p) * 253) + 23; p++; }
+  } else {
+    survol_hash = (int)pw; // pourquoi pas...
+  }
+  
+  //  survol_hash = (int)pw; // ca c'est pas bon, on fait trop de refresh
+
+  /* on evite de reafficher tant qu'on survolle le meme objet (pour eviter le clignotement) */
+  if (pp->survol_hash != survol_hash) {
+    if (force_refresh != -1 && (is_a_ref || strlen(survol) == 0 || force_refresh == +1)) {
+      pp_refresh(dock, pp->win, is_a_ref ? pw : NULL);
+    }
+    pp_popup_show_txt(dock, survol);
+    pp->survol_hash = survol_hash;
+  }
+}
+
+void
+pp_unmap(Dock *dock)
+{
+  Pinnipede *pp = dock->pinnipede;
+
+  pp_selection_unselect(pp);
+  pp_totoz_unmap(dock);
+
+  /* le pp_refresh a juste pour but de 'delocker' le PostVisual sauv� dans le cache
+     oui c'est de la bidouille qui sent les remugles naus�abonds */
+
+  /*  d'ailleurs je le vire, c'est incompatible avec l'update des prefs */
+  //  pp_refresh(dock, pp->win, NULL);
+
+  /* on sauve la position de la fenetre (en prenant en compte les decorations du WM ) */
+  get_window_pos_with_decor(dock->display, pp->win, &pp->win_decor_xpos, &pp->win_decor_ypos);
+
+  if (pp->lpix != None) XFreePixmap(dock->display, pp->lpix); 
+  pp->lpix = None;
+
+  if (dock->pp_win) {
+    XUnmapWindow(dock->display, pp->win);
+  } 
+  XDestroyWindow(dock->display, pp->win);
+  kb_release_input_context(KB_PINNIPEDE);
+  pp->win = None;
+
+  pp->mapped = 0;
+
+  pp_scrollcoin_set(dock,0);
+  if (pp->last_selected_text) { free(pp->last_selected_text); pp->last_selected_text = NULL; }
+
+  pp_pv_destroy(pp);
+}
+
+int pp_ismapped(Dock *dock) {
+  return dock->pinnipede->mapped;
+}
+
+
+void
+pp_balloon_help(Dock *dock, int x, int y)
+{
+  Pinnipede *pp = dock->pinnipede;
+
+  //  balloon_test(dock, x, y, pp->win_xpos, pp->win_ypos, 15000,
+  //	       0, 0, pp->win_width, pp->win_height,
+  balloon_show(dock, pp->win_real_xpos + x, pp->win_real_ypos + y, 40, 40, 
+	       _("<p align=center> Welcome to the <b><font color=#008000>Pinnipede Teletype</font></b></p>"
+		 "This window was specially designed by the greatest experts to offer you "
+		 "optimal mouling conditions.<br>"
+		 "Here is a summary of its functionalities:<br><br>"
+		 "<b>To scroll</b>, use the mouse wheel, or 'drag' "
+		 "while clicking with the middle button. "
+		 "Scrolling is automatic when a new message appears.<br><br>"
+		 "To bring the <b>button bar</b> or make it disappear, use the middle clic. "
+		 "<br><br>"
+		 "The available actions on the <b>clock</b> near each message are:<br>"
+		 "<font color=blue>Left Click</font><tab>: opens the palmipede editor, and inserts a reference to the message<br>"
+		 "If you click on an <b>[url]</b>, the result will be:<br>"
+		 "<font color=blue>Left Click</font><tab>: opens the url in the external browser (if it has been "
+		 "defined in the ~/.wmcoincoin/options file). <b>Warning</b>, even if precautions have been taken"
+		 "since the inominious wmcoincoin 2.0, this kind of things is generally considered as a security weakness...<br>"
+		 "<font color=blue>Middle Click</font><tab>: opens the url with the second browser (the http.browser2 option)<br>"
+		 "When the pointer is over a <b>reference to a previous post</b>, it will be underlined. If you click:<br>"
+		 "<font color=blue>Left Click</font><tab>: brings the referenced message<br>"
+		 "You can use the right clic everywhere to bring a popup menu, which gives your more choices, such as "
+		 "putting a message in the boitakon, plopifying, filtering, copying in clipboard etc.<br>"
+		 "Some basic filtering is available with the help of <font color=blue>Right Click</font> "
+		 "on a word, login, useragent... Use the blue button to cancel the filter.<br>"
+		 "If you want to emphasize the messages of a given user, or those containing a given word, use the "
+		 " emphasize entry of the contextual menu.<br>"
+		 "Someone is annoying you ? You have launched a troll that you don't control ? Then <b>plopify</b> the "
+		 "evil with a <font color=blue>Right Click/Plopify</font> (or put in boitakon) on his login/useragent. "
+		 "You can later remove the boitakonned message from the boitakon with a right clic on the left-most gray "
+		 "button.<br><br>"
+		 "You can take a 'shot' of the board (the so-called seafood tray), with <font color=blue>Ctrl+Middle Click</font><br><br>"
+		 "In order to understand the display of the <b>useragents</b> activated by the dark red button "
+		 "(about fifteen pixels on your left), you can see "
+		 "the <tt>~/.wmcoincoin/options</tt><br> file (hint: the button has 5 different positions)<br><br>"
+		 "The pinnipede teletype wishes you a nice mouling."), 500);
+}
+
+
+#define THREAD_FILTER_SZ_REALLOC 10
+
+/* pas glop */
+static void
+pp_thread_filter_add_refs(Boards *boards, struct _PinnipedeFilter *f, board_msg_info *base_mi)
+{
+  int i,j;
+  if (base_mi == NULL) return;
+
+  /* on inspecte toutes les references */
+  for (i = 0; i < base_mi->nb_refs; i++) {
+    board_msg_info *mi;
+    
+    mi = base_mi->refs[i].mi;
+
+    for (j = 0; j < base_mi->refs[i].nbmi; j++) {
+      /* realloc la liste si il faut */
+      if ((f->nid)%THREAD_FILTER_SZ_REALLOC == 0) {
+	f->id = (id_type*)realloc(f->id, (f->nid+THREAD_FILTER_SZ_REALLOC) * sizeof(id_type)); assert(f->id);
+      }
+      /* si la ref n'etait pas d�j� dans la liste, on l'ajoute */
+      if (pp_thread_filter_find_id(f, mi->id)==0) {
+	//myprintf("    ref(%d): ajout de %<YEL %d> <-- %<MAG %d>\n", f->nid, mi->id, base_mi->id);
+	f->id[f->nid++] = mi->id;
+	/* et on recurse ... */
+	pp_thread_filter_add_refs(boards, f, mi);
+      }
+      mi = mi->next; /* et pas g_next, car multi-ref sur un m�me site  */
+    }
+  }
+}
+
+/* rolala y'a des features qui font mal � la t�te */
+static void
+pp_thread_filter_add_backrefs(Boards *boards, struct _PinnipedeFilter *f, board_msg_info *base_mi)
+{
+  board_msg_info *mi;
+  
+  if (base_mi == NULL) return;
+
+  /* on parcourt tous les message post�rieurs � base_mi */
+  mi = base_mi->g_next;
+  while (mi) {
+    int i;
+    /* on regarde toutes ses references */
+    for (i = 0; i < mi->nb_refs; i++) {
+      board_msg_info *ref_mi;
+      int j;
+
+      /* pour chaque ref, on regarde la liste (generalement de taille 1 ou 0) des messages point�s */
+      for (j = 0, ref_mi = mi->refs[i].mi; j < mi->refs[i].nbmi; j++, ref_mi=ref_mi->next) {
+	assert(ref_mi);
+
+	/* si on pointe vers le bon */
+	if (ref_mi == base_mi) {
+	  /* realloc de la liste si necessaire */
+	  if ((f->nid)%THREAD_FILTER_SZ_REALLOC == 0) {
+	    f->id = (id_type*)realloc(f->id, (f->nid+THREAD_FILTER_SZ_REALLOC)*sizeof(id_type)); assert(f->id);
+	  }
+	  
+	  /* si le message n'a pas encore ete traite on l'ajoute */
+	  if (pp_thread_filter_find_id(f, mi->id)==0) {
+	    //myprintf("backref(%d): ajout de %<YEL %d> --> %<MAG %d>\n", f->nid, mi->id, base_mi->id);
+	    
+	    f->id[f->nid++] = mi->id;
+	    /* et hop �a recurse un coup */
+	    pp_thread_filter_add_backrefs(boards, f, mi);
+	  }
+	}
+      }
+    }
+    mi = mi->g_next;
+  }
+}
+
+void
+pp_set_thread_filter(Dock *dock, id_type base_id)
+{
+  Pinnipede *pp = dock->pinnipede;
+  Boards *boards = dock->sites->boards;
+
+  char fname[200];
+  board_msg_info *mi;
+
+  mi = boards_find_id(boards, base_id);
+  if (mi == NULL) return;
+
+  if (mi->hmsf[3] == 0) {
+    snprintf(fname, 200, "thread: %02d:%02d", mi->hmsf[0], mi->hmsf[1]);
+  } else {
+    snprintf(fname, 200, "thread: %02d:%02d:%02d", mi->hmsf[0], mi->hmsf[1], mi->hmsf[2]);
+  }
+
+  pp_unset_filter(&pp->filter);
+  pp->filter.filter_mode = 1;
+  pp->filter.filter_name = strdup(fname);
+
+  pp->filter.nid = 1;
+  pp->filter.id = (id_type*)calloc(THREAD_FILTER_SZ_REALLOC, sizeof(id_type)); assert(pp->filter.id);
+  pp->filter.id[0] = base_id;
+
+
+  pp_thread_filter_add_refs(boards, &pp->filter, mi);
+  pp_thread_filter_add_backrefs(boards, &pp->filter, mi);
+
+
+  BLAHBLAH(2,printf(_("Activating the filter [%s]\n"), pp->filter.filter_name));
+  pp_update_content(dock, id_type_invalid_id(), 0, 0, 1);
+  pp_refresh(dock, pp->win, NULL);
+}
+
+
+void
+pp_set_login_filter(Dock *dock, char *login)
+{
+  Pinnipede *pp = dock->pinnipede;
+
+  char fname[200];
+
+  snprintf(fname, 200, "login: <%s>", login);
+  pp_unset_filter(&pp->filter);
+  pp->filter.filter_mode = 1;
+  pp->filter.filter_name = strdup(fname);
+  pp->filter.login = strdup(login);
+
+  BLAHBLAH(2,printf(_("Activating the filter [%s]\n"), pp->filter.filter_name));
+  pp_update_content(dock, id_type_invalid_id(), 0, 0, 1);
+  pp_refresh(dock, pp->win, NULL);	  
+}
+
+void
+pp_set_ua_filter(Dock *dock, char *ua)
+{
+  Pinnipede *pp = dock->pinnipede;
+  char fname[200];
+
+  snprintf(fname, 200, "ua: [%.20s]", ua);
+  pp_unset_filter(&pp->filter);
+  pp->filter.filter_mode = 1;
+  pp->filter.filter_name = strdup(fname);
+  pp->filter.ua = strdup(ua);
+
+  BLAHBLAH(2,printf(_("Activating the filter [%s]\n"), pp->filter.filter_name));
+  pp_update_content(dock, id_type_invalid_id(), 0, 0, 1);
+  pp_refresh(dock, pp->win, NULL);
+}
+
+void
+pp_set_word_filter(Dock *dock, char *word)
+{
+  Pinnipede *pp = dock->pinnipede;
+  char fname[200];
+
+  snprintf(fname, 200, "mot: '%s'", word);
+  pp_unset_filter(&pp->filter);
+  pp->filter.filter_mode = 1;
+  pp->filter.filter_name = strdup(fname);
+  pp->filter.word = strdup(word);
+
+  BLAHBLAH(2,printf(_("Activating the filter [%s]\n"), pp->filter.filter_name));
+  pp_update_content(dock, id_type_invalid_id(), 0, 0, 1);
+  pp_refresh(dock, pp->win, NULL);	  
+}
+
+void
+pp_set_anything_filter(Dock *dock, char *word)
+{
+  Pinnipede *pp = dock->pinnipede;
+  char fname[200];
+  char *s = strdup(word); /* pour les cas o� word == filter.anything et unset_filter va le free-er */
+  snprintf(fname, 200, "isearch: '%s'", word);
+  pp_unset_filter(&pp->filter);
+  pp->filter.filter_mode = 1;
+  pp->filter.filter_name = strdup(fname);
+  pp->filter.anything = s;
+  BLAHBLAH(2,printf(_("Activating the filter [%s]\n"), pp->filter.filter_name));
+  pp_update_content(dock, id_type_invalid_id(), 0, 0, 1);
+  pp_refresh(dock, pp->win, NULL);	  
+}
+
+void pp_change_filter_mode(Dock *dock, int zero_or_one) {
+  Pinnipede *pp = dock->pinnipede;
+  pp->filter.filter_mode = zero_or_one;
+  /* reset du scroll (necessaire, faut etre que le post 'id_base' 
+     soit bien affich� par le filtre) */
+  /*if (pp->filter.filter_mode) pp->id_base = id_type_invalid_id(); 
+    pp_update_and_redraw(dock, pp->id_base, pp->decal_base,0,1);*/
+  pp_update_and_redraw(dock, get_last_id_filtered(dock->sites->boards, &pp->filter), 0,0,1);
+}
+
+int pp_get_filter_mode(Dock *dock) {
+  return dock->pinnipede->filter.filter_mode;
+}
+
+static void
+gogole_search(Dock *dock, int mx, int my, char *w, int quote_all, int browser_num)
+{
+  Pinnipede *pp = dock->pinnipede;
+
+  if (Prefs.gogole_search_url == NULL) return;
+  if (w) {
+    char *s, *s0;
+    char *ww, *ww0;
+    ww0 = str_preencode_for_http(w);
+    if (quote_all) {
+      ww = str_printf("%%22%s%%22",ww0); free(ww0);
+    } else ww = ww0;
+    if (strlen(ww)>512) ww[512] = 0; /* faut pas pousser grand m�re */
+    s0 = str_substitute(Prefs.gogole_search_url, "%22%s%22", ww);
+    s = str_substitute(s0, "%s", ww);
+    free(s0);
+    open_url(s, pp->win_real_xpos + mx-5, pp->win_real_ypos+my-10, browser_num);
+    free(s); free(ww); 
+  }
+}
+
+
+static void
+wikipedia_search(Dock *dock, int mx, int my, char *w, int quote_all, int browser_num)
+{
+  Pinnipede *pp = dock->pinnipede;
+
+  if (Prefs.wikipedia_search_url == NULL) return;
+  if (w) {
+    char *s, *s0;
+    char *ww, *ww0;
+    ww0 = str_preencode_for_http(w);
+    if (quote_all) {
+      ww = str_printf("%%22%s%%22",ww0); free(ww0);
+    } else ww = ww0;
+    if (strlen(ww)>512) ww[512] = 0; /* faut pas pousser grand m�re */
+    s0 = str_substitute(Prefs.wikipedia_search_url, "%22%s%22", ww);
+    s = str_substitute(s0, "%s", ww);
+    free(s0);
+    open_url(s, pp->win_real_xpos + mx-5, pp->win_real_ypos+my-10, browser_num);
+    free(s); free(ww); 
+  }
+}
+
+
+static char *str_simplif(char *s)
+{
+  char *p, *p2;
+  
+  /* simplification du mot */
+  p = s + strlen(s) -1;
+  while (p > s && !isalnum((unsigned char)*p)) p--;
+  //  if (p > s) *(p+1) = 0;
+  p2 = s;
+  while (p2 < p && !isalnum((unsigned char)*p2)) p2++;
+  if (p2 != p) {
+    *(p+1)=0;
+    return p2;
+  }
+  else return s;
+}
+
+void
+pp_handle_button3_press(Dock *dock, XButtonEvent *event) {
+  Pinnipede *pp = dock->pinnipede;
+  Boards *boards = dock->sites->boards;
+  char *descr = NULL;
+  char *txt = NULL;
+  PostWord *pw = NULL;
+  int mx, my, choice, cnt, redraw;
+  board_msg_info *mi = NULL;
+  KeyList *hk_plop = NULL, *hk_emph = NULL, *hk;
+  enum { WORD, UA_WITH_LOGIN, UA_NO_LOGIN, LOGIN, TSTAMP, THREAD, NOTHING } what_clicked;
+  int hk_what_clicked = -1, plop_lvl, emph_lvl;
+  enum { PUP_PLOPIF, PUP_SUPERPLOPIF, PUP_BOITAKON, PUP_HUNGRY_BOITAKON, 
+	 PUP_FILTER, PUP_GOGOLE, PUP_WIKIPEDIA, PUP_COPY_URL, PUP_COPY_UA, 
+         PUP_DO_TOTOZ, PUP_DO_TOTOZ_BOOKMARK, PUP_DO_TOTOZ_UNBOOKMARK, 
+	 PUP_EMPH0, PUP_EMPH1, PUP_EMPH2, PUP_EMPH3, PUP_EMPH4, PUP_TOGGLE_MINIB, PUP_SITE_CONFIG, PUP_TOGGLE_BIGORNO1, PUP_TOGGLE_BIGORNO2, 
+	 PUP_UNEMPH=10000, PUP_UNPLOP=20000
+	 };
+  char s_thread[20]; /* 'txt' peut pointer dessus */
+  char s_word[512];
+  char s_id[30];
+  plopup_unmap(dock);
+  mx = event->x; my = event->y;
+  what_clicked = NOTHING;
+  hk_what_clicked = -1;
+  if (pp->last_selected_text && strlen(pp->last_selected_text) < 512) {
+    snprintf(s_word, 512, "%s", pp->last_selected_text);
+    txt = s_word;
+    if (strlen(txt)) {
+      descr = str_printf("The selected <font color=blue>text</font> is '<font color=#800000>%s</font>'",
+			 txt);
+      what_clicked = WORD;
+      hk_what_clicked = HK_WORD;
+    }
+  } else {
+    pw = pp_get_pw_at_xy(pp, event->x, event->y);
+    if (pw && (pw->attr & PWATTR_TROLLSCORE)) {
+      what_clicked = THREAD;
+    } else if (mx < 20) { /* si on clique � gauche de l'horloge, on consid�re une action sur tout le
+			     thread (le pb est qu'il n'y a pas forcement de mot � cet endroit) */
+      pw = pp_get_pw_at_xy(pp, 30, my); /* le 20 est une ruse de chacal puant */
+      if (pw) what_clicked = THREAD;
+    }
+    if (what_clicked == THREAD) {
+      if (mi) {
+	descr = str_printf(_("The selected element is the <font color=blue>thread</font> '<font color=#800000>id=%d</font>'"), id_type_lid(mi->id));
+	snprintf(s_thread, 20, "%d", id_type_to_int(mi->id));
+	txt = s_thread;
+	hk_what_clicked = HK_THREAD;
+      } else {
+	what_clicked = NOTHING;
+      }
+    }
+    if (pw) {
+      mi = boards_find_id(boards, pw->parent->id);
+    } else mi = NULL;
+    if (pw && descr == NULL) {
+      if (pw->attr & PWATTR_NICK) {
+	descr = str_printf(_("The selected element is the <font color=blue>useragent</font> '<font color=#800000>%s</font>'"), pw->w);
+	txt = mi->useragent;
+	if (mi->login[0]) {
+	  what_clicked = UA_WITH_LOGIN;
+	  hk_what_clicked = HK_UA;
+	} else {
+	  what_clicked = UA_NO_LOGIN;
+	  hk_what_clicked = HK_UA_NOLOGIN;
+	}
+      } else if (pw->attr & PWATTR_LOGIN) {
+	descr = str_printf(_("The selected element is the <font color=blue>login</font> '<font color=#800000>%s</font>'"), pw->w);
+	txt = pw->w;
+	what_clicked = LOGIN;
+	hk_what_clicked = HK_LOGIN;
+      } else if (pw->attr & PWATTR_TSTAMP) {
+	snprintf(s_id, 30, "%d", id_type_to_int(pw->parent->id));
+	descr = str_printf(_("The selected element is the <font color=blue>message</font> #id=<font color=#800000>%d</font>"), id_type_lid(pw->parent->id));
+	txt = s_id;
+	what_clicked = TSTAMP;
+	hk_what_clicked = HK_ID;
+      } else if (pw && strlen(pw->w)) {
+	snprintf(s_word, 512, "%s", pw->w);
+	txt = str_simplif(s_word);
+	if (strlen(txt)) {
+	  descr = str_printf(_("The selected element is the <font color=blue>word</font> '<font color=#800000>%s</font>'"), txt);
+	  what_clicked = WORD;
+	  hk_what_clicked = HK_WORD;
+	}
+      }
+    }
+  }
+  
+  if (what_clicked != NOTHING) {
+    plopup_set_description(dock, descr);
+    plopup_pushentry(dock, _("<b>plop</b>ify it"), PUP_PLOPIF);
+    plopup_pushentry(dock, _("<b>superplop</b>ify it"), PUP_SUPERPLOPIF);
+    plopup_pushentry(dock, _("put in <b>boitakon</b>"), PUP_BOITAKON);
+    plopup_pushentry(dock, _("put in <i>hungry</i> <b>boitakon</b>"), PUP_HUNGRY_BOITAKON);
+  }
+
+  if (what_clicked != NOTHING) {
+    plopup_pushentry(dock, _("mark it (categ 0)"), PUP_EMPH0);
+    plopup_pushentry(dock, _("mark it (categ 1)"), PUP_EMPH1);
+    plopup_pushentry(dock, _("mark it (categ 2)"), PUP_EMPH2);
+    plopup_pushentry(dock, _("mark it (categ 3)"), PUP_EMPH3);
+    plopup_pushentry(dock, _("mark it (categ 4)"), PUP_EMPH4);
+    plopup_pushentry(dock, _("filter it"), PUP_FILTER);
+  }
+
+  if (what_clicked != NOTHING && strlen(txt) && Prefs.gogole_search_url) {
+    plopup_pushentry(dock, _("gogole search"), PUP_GOGOLE);
+  }
+
+  if (what_clicked != NOTHING && strlen(txt) && Prefs.wikipedia_search_url) {
+    plopup_pushentry(dock, _("wikipedia search"), PUP_WIKIPEDIA);
+  }
+
+  if (pw && (pw->attr & PWATTR_LNK)) {
+    if (pw->attr_s && strlen(pw->attr_s)) {
+      plopup_pushentry(dock, _("copy link in X clipboard"), PUP_COPY_URL);
+    }
+  }
+  if (pw && (pw->attr & (PWATTR_TSTAMP | PWATTR_NICK | PWATTR_LOGIN)) && mi) {
+    plopup_pushentry(dock, _("copy useragent in X clipboard"), PUP_COPY_UA);
+  }
+  if (pw && (pw->attr & PWATTR_TOTOZ)) {
+    plopup_pushentry(dock, _("Try to download the correspounding picture"), PUP_DO_TOTOZ);
+    plopup_pushentry(dock, _("Bookmark this picture"), PUP_DO_TOTOZ_BOOKMARK);
+    plopup_pushentry(dock, _("Remove this picture from bookmarks"), PUP_DO_TOTOZ_UNBOOKMARK);
+  }
+
+  plopup_pushsepar(dock);
+
+  if (mi == NULL) { /* on cherche qd m�me le message */
+    mi = pp_find_message_at_xy(dock, event->x, event->y);
+  }
+  
+  if (mi) {
+    hk_plop = board_key_list_get_mi_positive_list(boards, mi, Prefs.plopify_key_list, 1);
+    hk_emph = board_key_list_get_mi_positive_list(boards, mi, Prefs.hilight_key_list, 0);
+  }
+  
+  for (hk = hk_plop, cnt = 0; hk && cnt < 10; hk = hk->next, cnt++) {
+    char *splop[4] = {"plopify list", "superplopify list", "boitakon", "hungry boitakon"};    
+    char s[512];
+    snprintf(s, 512, _("remove %s:'<font color=blue>%.15s</font>' from %s"), key_list_type_name(hk->type), hk->key, splop[hk->num]);
+    plopup_pushentry(dock, s, PUP_UNPLOP + cnt);
+  }
+  plopup_pushsepar(dock);
+  for (hk = hk_emph, cnt = 0; hk && cnt < 10; hk = hk->next, cnt++) {
+    char s[512];
+    snprintf(s, 512, _("remove %s:'<font color=blue>%.15s</font> from hilight categ %d"), key_list_type_name(hk->type), hk->key, hk->num);
+    plopup_pushentry(dock, s, PUP_UNEMPH + cnt);
+  }
+
+  plopup_pushsepar(dock);
+  plopup_pushentry(dock, pp->use_minibar ? 
+		   _("hide the button bar / tabs bar") : 
+		   _("show the button bar / tabs bar"), PUP_TOGGLE_MINIB);
+
+  if (mi) {
+    plopup_pushentry(dock, _("Change colors for this site"), PUP_SITE_CONFIG);
+  }
+
+  if (Prefs.post_cmd[0]) {
+    if (!Prefs.post_cmd_enabled[0]) {
+      plopup_pushentry(dock, _("<b>enable</b> the bigornophone"), PUP_TOGGLE_BIGORNO1);
+    } else {
+      plopup_pushentry(dock, _("<b>disable</b> the bigornophone"), PUP_TOGGLE_BIGORNO1);
+    }
+  }
+  if (Prefs.post_cmd[1]) {
+    if (!Prefs.post_cmd_enabled[1]) {
+      plopup_pushentry(dock, _("<b>enable</b> the secondary bigornophone"), PUP_TOGGLE_BIGORNO2);
+    } else {
+      plopup_pushentry(dock, _("<b>disable</b> the secondary bigornophone"), PUP_TOGGLE_BIGORNO2);
+    }
+  }
+
+
+  plop_lvl = 3;
+  emph_lvl = 4;
+  redraw = 1;
+  switch ((choice = plopup_show_modal(dock, event->x_root, event->y_root))) {
+  case -1: redraw = 0; break;
+  case PUP_PLOPIF: plop_lvl--; 
+  case PUP_SUPERPLOPIF: plop_lvl--;
+  case PUP_BOITAKON: plop_lvl--;
+  case PUP_HUNGRY_BOITAKON: {
+    assert(hk_what_clicked>=0);
+    Prefs.plopify_key_list = key_list_swap(Prefs.plopify_key_list, txt, hk_what_clicked, plop_lvl);
+    if (plop_lvl >= 2) boards_update_boitakon(boards);
+  } break;
+  case PUP_EMPH0: emph_lvl--;
+  case PUP_EMPH1: emph_lvl--;
+  case PUP_EMPH2: emph_lvl--;
+  case PUP_EMPH3: emph_lvl--;
+  case PUP_EMPH4: {
+    assert(hk_what_clicked>=0);
+    Prefs.hilight_key_list = key_list_swap(Prefs.hilight_key_list, txt, hk_what_clicked, emph_lvl);
+  } break;
+  case PUP_FILTER: {
+    if (mi) {
+      switch (what_clicked) {
+      case WORD: pp_set_word_filter(dock, txt); break;
+      case UA_WITH_LOGIN:
+      case UA_NO_LOGIN: pp_set_ua_filter(dock, mi->useragent); break;
+      case LOGIN: pp_set_login_filter(dock, mi->login); break;
+      case THREAD: pp_set_thread_filter(dock, mi->id); break;
+      case TSTAMP: pp_set_thread_filter(dock, mi->id); break;
+      default: break;
+      }
+    }
+  } break;
+  case PUP_GOGOLE: {
+    gogole_search(dock, mx, my, txt, 1, 1);
+  } break;
+  case PUP_WIKIPEDIA: {
+    wikipedia_search(dock, mx, my, txt, 1, 1);
+  } break;
+  case PUP_COPY_URL: {
+    assert(pw);
+    editw_cb_copy(dock, pp->win, pw->attr_s, strlen(pw->attr_s));
+  } break;
+  case PUP_COPY_UA: {
+    assert(mi); assert(pw);
+    if (mi->useragent && strlen(mi->useragent)) {
+      editw_cb_copy(dock, pp->win, mi->useragent, strlen(mi->useragent));	  
+    }
+  } break;
+  case PUP_DO_TOTOZ: {
+    assert(pw);
+    pp_totoz_download(dock, pw->w);
+  } break;
+  case PUP_DO_TOTOZ_BOOKMARK:
+  case PUP_DO_TOTOZ_UNBOOKMARK: {
+    if (pw && strlen(pw->w)) {
+      totoz_bookmark_insert(dock, pw->w);
+      totoz_bookmark_save(dock, 1);
+      totoz_bookmark_save_html(dock);
+    }
+  } break;
+  case PUP_TOGGLE_MINIB: {
+    if (pp->use_minibar == 0) {
+      pp_minib_show(dock);
+    } else {
+      pp_minib_hide(dock);
+    }
+  } break;
+  case PUP_SITE_CONFIG: {
+    launch_wmccc(dock, "-site-colors", "-site", Prefs.site[id_type_sid(mi->id)]->site_name,NULL);
+  } break;
+  case PUP_TOGGLE_BIGORNO1: {
+    Prefs.post_cmd_enabled[0] = 1-Prefs.post_cmd_enabled[0];
+  } break;
+  case PUP_TOGGLE_BIGORNO2: {
+    Prefs.post_cmd_enabled[1] = 1-Prefs.post_cmd_enabled[1];
+  } break;
+  default: {
+    if (choice >= PUP_UNPLOP && choice <= PUP_UNPLOP+10) {
+      int updtbak = 0;
+      cnt = choice - PUP_UNPLOP;
+      for (hk = hk_plop; hk && cnt > 0; hk = hk->next, cnt--) {
+	/*plop*/
+      }
+      assert(hk);
+      //printf("plop remove '%s' %d\n", hk->key, hk->type);
+      if (hk->num >= 2) updtbak = 1;
+      Prefs.plopify_key_list = key_list_remove(Prefs.plopify_key_list, hk->key, hk->type);
+      if (updtbak) boards_update_boitakon(boards);
+    } else if (choice >= PUP_UNEMPH && choice <= PUP_UNEMPH+10) {
+      cnt = choice - PUP_UNEMPH;
+      for (hk = hk_emph; hk && cnt > 0; hk = hk->next, cnt--) {
+	/*plop*/
+      }
+      assert(hk);
+      //printf("hili remove '%s' %d\n", hk->key, hk->type);
+      Prefs.hilight_key_list = key_list_remove(Prefs.hilight_key_list,hk->key, hk->type);
+    }
+  } break;
+  }
+
+  if (descr) free(descr);
+  key_list_destroy(hk_plop); key_list_destroy(hk_emph);
+  if (redraw) {
+    /* force le rafraichissement complet */
+    pp_update_and_redraw(dock, pp->id_base, pp->decal_base,0,0);
+  }
+}
+
+static void
+pp_open_login_home_in_browser(Dock *dock, int sid UNUSED, int mx, int my, char *w, int browser_num) {
+  /*Pinnipede *pp = dock->pinnipede;
+  char *s;
+  assert(w);
+  assert(Prefs.site[sid]);
+  s = str_printf("http://%s:%d/%s~%s/", 
+		 Prefs.site[sid]->site_root, 
+		 Prefs.site[sid]->site_port, 
+		 Prefs.site[sid]->site_path, w);
+  open_url(s, pp->win_real_xpos + mx-5, pp->win_real_ypos+my-10, bnum);
+  free(s);*/
+  char *url = Prefs.site[sid]->backend_url;
+  SplittedURL su; 
+  if (url && split_url(url,&su) == 0) {
+    char s[500]; snprintf(s, 500, "\"%s\" site:%s", w, su.host);
+    gogole_search(dock, mx, my, s, 0, browser_num);
+  } else gogole_search(dock,mx,my,w, 1, browser_num);
+}
+
+
+static void 
+pp_open_url(Dock *dock, char *url, int mx, int my, int num) {
+  Pinnipede *pp = dock->pinnipede;
+  open_url(url, pp->win_real_xpos + mx-5, pp->win_real_ypos+my-10, num);
+  pp_visited_links_add(pp, url);
+  pp_update_and_redraw(dock, pp->id_base, pp->decal_base,0,1);
+}
+
+static void
+pp_open_palmi_for_reply(Dock *dock, PostWord *pw) {
+  char s_ts[300];
+  int is_rss = 0;
+  assert(pw->attr & PWATTR_TSTAMP);
+  s_ts[0] = 0;
+  is_rss = board_is_rss_feed(dock->sites->boards->btab[id_type_sid(pw->parent->id)]);
+  if (is_rss) {
+    RSSBonusInfo *ri = rss_find_from_id(dock->sites->boards, pw->parent->id);
+    if (ri) snprintf(s_ts, sizeof s_ts, "%s", ri->link);
+  }
+  if (s_ts[0] == 0) {
+    char s_subts[3];
+    char *pwstart = strchr(pw->w, '#'); if (!pwstart) pwstart = pw->w; else pwstart++;
+    s_subts[0] = s_subts[1] = s_subts[2] = 0;
+    switch(pw->parent->sub_tstamp) {
+    case -1: break;
+    case 0: s_subts[0] = '�'; break;
+    case 1: s_subts[0] = '�'; break;
+    case 2: s_subts[0] = '�'; break;
+    default: s_subts[0] = ':'; s_subts[1] = '1' + pw->parent->sub_tstamp;
+    }
+    snprintf(s_ts, 30, "%s%s", pw->w, s_subts);
+  }
+  if (editw_ismapped(dock->editw) == 0) {
+    char *username = Prefs.site[id_type_sid(pw->parent->id)]->user_name;
+    if (username) {
+      snprintf(dock->coin_coin_message, MESSAGE_MAXMAX_LEN, "%s %s ",
+               username, s_ts);
+    } else {
+      snprintf(dock->coin_coin_message, MESSAGE_MAXMAX_LEN, "%s ",
+               s_ts);
+    }
+    //	  strncpy(dock->coin_coin_message, pw->w, MESSAGE_MAX_LEN);
+    // strncat(dock->coin_coin_message, " ", MESSAGE_MAX_LEN);
+    dock->coin_coin_message[MESSAGE_MAXMAX_LEN] = 0;
+    editw_show(dock, is_rss ? NULL : Prefs.site[id_type_sid(pw->parent->id)], 0);
+    editw_move_end_of_line(dock->editw, 0);
+    editw_refresh(dock, dock->editw);
+  } else {
+    char s[300];
+    if (editw_get_site_id(dock) == id_type_sid(pw->parent->id) || is_rss) {
+      snprintf(s, sizeof s, "%s ", s_ts);
+    } else { 
+      snprintf(s, sizeof s, "%s@%s ", s_ts, Prefs.site[id_type_sid(pw->parent->id)]->site_name); 
+    }
+    editw_insert_string(dock->editw, s);
+    editw_refresh(dock, dock->editw);
+  }
+}
+
+void pp_show_message_from_id(Dock *dock, id_type id) {
+  Pinnipede *pp = dock->pinnipede;
+  pp_update_content(dock, id, 0, 0, 0);
+  pp_refresh(dock, pp->win, NULL);
+}
+static void
+pp_handle_left_clic(Dock *dock, int mx, int my)
+{
+  Pinnipede *pp = dock->pinnipede;
+  Boards *boards = dock->sites->boards;
+  PostWord *pw;
+
+  /* affichage/masquage du 'crochet' � gauche des messages mis en valeur */
+  if (mx < 5) {
+    pw = pp_get_pw_at_xy(pp, 20, my); /* le 20 est une ruse de chacal puant */
+    if (pw) {
+      int changed = 1;
+      if (pw->parent->is_my_message) {
+	/* d�sactiv� car inutile */
+	/* pp->hilight_my_message_mode = 1-pp->hilight_my_message_mode; */
+      } else if (pw->parent->is_answer_to_me) {
+	/* pareil */
+	/* pp->hilight_answer_to_me_mode = 1-pp->hilight_answer_to_me_mode; */
+      } else if (pw->parent->is_hilight_key) {
+	board_msg_info *mi;
+	KeyList *hk;
+	mi = boards_find_id(boards, pw->parent->id);
+	if (mi && (hk = board_key_list_test_mi(boards, mi, Prefs.hilight_key_list))) {
+	  Prefs.hilight_key_list = key_list_remove(Prefs.hilight_key_list, hk->key, hk->type);
+	}
+      } else changed = 0;
+      if (changed) {
+	/* force le rafraichissement complet */
+	pp_update_and_redraw(dock, pp->id_base, pp->decal_base,0,0);
+      }
+    }
+  }
+  
+  pw = pp_get_pw_at_xy(pp, mx, my);
+  if (pw) {
+    /* clic gauche sur une url , on affiche le truc dans le browser externe numero 1 */
+    if (pw->attr & PWATTR_LNK) {
+      if (strlen(pw->attr_s)) {
+	pp_open_url(dock, pw->attr_s, mx, my, 1);
+      }
+    } else if (pw->attr & PWATTR_TSTAMP) {
+      /* clic sur l'holorge -> ouverture du palmipede */
+      pp_open_palmi_for_reply(dock, pw);
+    } else if (pw->attr & PWATTR_REF) {
+      /* clic sur une reference, on va essayer de se d�placer pour afficher la ref en bas du
+	 pinnipede */
+      board_msg_info *mi;
+      int bidon;
+      int ref_num;
+
+      mi = check_for_horloge_ref(boards, pw->parent->id, pw->w, NULL, 0, &bidon, &ref_num); assert(bidon);
+
+
+
+      if (mi) {
+#ifdef BOULAI_MODE
+	PostWord *trouve;
+	int i;
+	/* si le message referenc� est d�j� affich�, on ne fait rien */
+	for (i=0, trouve=NULL; i < pp->nb_lignes; i++) {
+ 	  if (pp->lignes[i] && 
+	      pp->lignes[i]->parent->id == mi->id && 
+	      pp->lignes[i]->ligne == 0) trouve = pp->lignes[i];
+	}
+	if (trouve == NULL) {
+	  PostVisual *pv;
+	  /* c'est un peu lourd pour positionner le message juste en haut du pinnipede.. */
+	  pv = pp_pv_add(pp, mi->id);
+	  if (pv) {
+	    int ligne = pp->nb_lignes - pv->nblig; // - (my-LINEY0(0))/(LINEY0(1)-LINEY0(0));
+	    pp_update_content(dock, mi->id, ligne, 0, 0);
+	  }
+	  trouve = pp->lignes[0];
+	}
+	pp_refresh(dock, pp->win, trouve);
+#else
+	/* si la reference d�signe plusieurs post de la m�me heure ,
+	   on se d�place vers le dernier du bloc
+	*/
+	if (ref_num == -1) {
+	  while (mi->next && mi->next->timestamp == mi->timestamp) {
+	    mi = mi->next;
+	  }
+	}
+
+	if (!id_type_is_invalid(mi->id)) {
+	  int i;
+	  for (i=0; i < pp->nb_tabs; i++) {
+	    if (pp->tabs[i].site->prefs == Prefs.site[id_type_sid(mi->id)]) {
+	      if (pp->tabs[i].selected == 0) {
+		pp->tabs[i].selected = 1;
+		pp_tabs_set_visible_sites(pp);
+	      }
+	    }
+	  }
+	}
+        pp_show_message_from_id(dock, mi->id);
+#endif
+      }
+    } else if (pw->attr & PWATTR_LOGIN) {
+      pp_open_login_home_in_browser(dock, id_type_sid(pw->parent->id),mx, my, pw->w,1);
+    }
+  } /* if (pw) */  
+}
+
+/* gestion du relachement du bouton souris (si on n'est pas en train de 'tirer' la fenetre, 
+   et si on n'a pas cliqu� sur la barre de petits boutons */
+void 
+pp_handle_button_release(Dock *dock, XButtonEvent *event)
+{
+  Pinnipede *pp = dock->pinnipede;
+  Boards *boards = dock->sites->boards;
+  int mx,my;
+  static Time previous_clic = 0;
+  static int q = 1;
+
+  mx = event->x; my = event->y;
+  /* acceleration de la roulette */
+  if (event->time - previous_clic < 50) {
+    q = 4;
+    if (event->time - previous_clic < 20) {
+      q = 10;
+    }
+  } else q = 2;
+  //printf("t=%ld, pt=%ld, q=%d\n", event->time, previous_clic, q);
+  previous_clic = event->time;
+  
+  if (event->button == Button4) {
+    /* un coup de roulette */
+    pp_update_content(dock, pp->id_base, pp->decal_base-q,0,0);
+    pp_refresh(dock, pp->win, NULL);
+    //    printf("scroll up  : id=%d %d\n",pp->id_base, pp->decal_base);
+  } else if (event->button == Button5) {
+    
+    pp_update_content(dock, pp->id_base, pp->decal_base+q,0,0);
+    pp_refresh(dock, pp->win, NULL);
+    //printf("scroll down: id=%d %d\n",pp->id_base, pp->decal_base);
+  } else if (event->button == Button1) {
+    if (event->state & ShiftMask) {
+      // pp_handle_shift_clic(dock, &Prefs.hilight_key_list, mx, my, 0);
+    } else if (event->state & ControlMask) {
+      //      pp_handle_control_left_clic(dock, mx, my);
+    } else if (event->state & (Mod1Mask | Mod4Mask) ) { /* on est gentil, les deux marchent */
+      //      pp_handle_alt_clic(dock, event);
+    } else {
+      pp_handle_left_clic(dock, mx, my);
+    }
+  } else if (event->button == Button2) {
+    if ((event->state & (ControlMask|ShiftMask|Mod1Mask|Mod4Mask))==0) {
+      PostWord *pw;
+
+      pw = pp_get_pw_at_xy(pp, mx, my);
+      /* middle clic sur une horloge, on copie le contenu du message dans le clipboard */
+      if (pw && (pw->attr & PWATTR_TSTAMP)) {
+	board_msg_info *mi;
+	mi = boards_find_id(boards, pw->parent->id);
+	if (mi) {
+	  if (mi->msg && strlen(mi->msg)) {
+	    editw_cb_copy(dock, pp->win, mi->msg, strlen(mi->msg));
+	  }
+	}
+      } else if (pw && pw->attr & PWATTR_LNK) {
+	/* clic milieu sur une url , on affiche le truc dans le browser externe numero 2 */
+	if (strlen(pw->attr_s)) {
+	  pp_open_url(dock, pw->attr_s, mx, my,2);
+	}
+      } else if (pw && pw->attr & PWATTR_LOGIN) {
+	pp_open_login_home_in_browser(dock, id_type_sid(pw->parent->id), mx, my, pw->w,2);
+      } else {
+	if (pp->use_minibar == 0) {
+	  pp_minib_show(dock);
+	} else {
+	  pp_minib_hide(dock);
+	}    
+        pp_update_and_redraw(dock, pp->id_base, pp->decal_base,0,0);
+      }
+    } else if (event->state & (Mod1Mask|Mod4Mask)) { /* les 2 touches marchent */
+      // pp_handle_alt_clic(dock, event);
+    } else if (event->state & ControlMask) {
+      //int save_all = (event->state & ShiftMask) ? 1 : 0;
+      int use_js = (event->state & ShiftMask) ? 1 : 0;
+      /* Ctrl+Middle clic: Et un scrinechote, un ! */
+      pp_boardshot_kikoooo(dock, 0, 1, use_js);
+    }
+  }
+}
+
+int 
+flush_expose(Dock *dock, Window w) {
+  XEvent dummy;
+  int i=0;
+
+  while (XCheckTypedWindowEvent(dock->display, w, Expose, &dummy))
+    i++;
+  return i;
+}
+
+
+/* vilaine tentative pour 'flusher' les mouvements de souris cons�cutifs (cad 
+   ne se situant pas de part et d'autre d'un evenement du style mouse-clic)
+
+   hypoth�se: XCheckIfEvent parcourt la file depuis l'ev le + vieux vers le + r�cent
+   (�a semble naturel)
+
+   �a a l'air de bien marcher :)
+*/
+
+int fcmmp_state; /* Mal !! */
+Bool
+flush_consecutive_mouse_motions_predicate(Display *display UNUSED, XEvent *ev, XPointer pw)
+{
+  //  printf("-- test: ev->type = %d\n", ev->type);
+  if (fcmmp_state == 1) return False;
+  else if (ev->type == MotionNotify && ev->xmotion.window == *((Window*)pw)) return True;
+  else if (ev->type == ButtonPress || ev->type == ButtonRelease || ev->type == LeaveNotify || ev->type == EnterNotify) { fcmmp_state = 1; return False; }
+  return False;
+}
+
+XEvent *
+flush_consecutive_mouse_motions(Dock *dock, Window w, XEvent *ev_init) {
+  static XEvent evtmp, ev; /* static == c mal (pas reentrant) */
+  int cnt = 0;
+
+  //  printf("debut\n");
+  fcmmp_state = 0;
+  while (XCheckIfEvent(dock->display, &evtmp, flush_consecutive_mouse_motions_predicate, (XPointer)&w)) {
+    ev = evtmp; cnt++;
+    assert(ev.type == MotionNotify);
+    //    printf("** trouv�: x=%d, y=%d\n", ev.xmotion.x, ev.xmotion.y);
+    fcmmp_state = 0;
+  }
+  //  printf("fin\n");
+
+  if (cnt) return &ev; else return ev_init;
+}
+
+/* 
+   pour la selection (reperer quel mots sont � tel position, et quel caract�re pr�cisement.. )
+*/
+int
+pp_selection_find_pos(Dock *dock, PostWord *first_pw, int mouse_x, PostWord **sel_pw, int *sel_pw_char_num)
+{
+  Pinnipede *pp = dock->pinnipede;
+  PostWord *pw = first_pw;
+  int x_sel;
+  int x = mouse_x - pp->zmsg_x1;
+  if (sel_pw) *sel_pw = NULL;
+  if (sel_pw_char_num) *sel_pw_char_num = 0;
+  x_sel = 0;
+
+  if (first_pw == NULL) return 0;
+
+  /* sans commentaires c'est mieux */
+  while (pw && pw->ligne == first_pw->ligne) {
+    x_sel = (pw == first_pw) ? 0 : pw->xpos;
+    if (x < pw->xpos) 
+      break;
+    if (x < pw->xpos + pw->xwidth) {
+      int i, len;
+      CCFontId fn;
+
+      fn = pv_get_font(pp, pw->attr);
+      len = strlen(pw->w);
+      for (i = 1; i <= len; i++) {
+	int xx;
+	xx = pw->xpos+ccfont_text_width_utf8(fn, pw->w, i);
+	if (x < xx) {
+	  break;
+	}
+	x_sel = xx;
+      }
+      if (sel_pw_char_num) *sel_pw_char_num = i-1;
+      break;
+    }
+    if (pw->next==NULL || 
+	pw->next->ligne != first_pw->ligne || 
+	x < pw->next->xpos) {
+      x_sel = pw->xpos+pw->xwidth;
+      if (sel_pw_char_num) *sel_pw_char_num = strlen(pw->w);
+      break;
+    }
+    pw = pw->next;
+  }
+  if (sel_pw) *sel_pw = pw;
+  return x_sel;
+}
+
+/* affichage de la zone de selection (on ne r�affiche que ce qui est n�cessaire) */
+void
+pp_selection_refresh(Dock *dock)
+{
+  Pinnipede *pp = dock->pinnipede;
+
+  int l, l0, l1;
+  int mouse_x0, mouse_x1;
+
+
+
+  /* d�but de selection ? */
+  if (pp->lignes_sel == NULL) {
+    ALLOC_VEC(pp->lignes_sel, pp->nb_lignes, PinnipedeLignesSel);
+  }
+
+  l0 = pp->sel_anchor_y; l0 = MAX(l0, LINEY0(0)) - LINEY0(0);
+  l0 = l0 / (LINEY0(1)-LINEY0(0));
+  l0 = MIN(l0, pp->nb_lignes-1);
+  
+
+  l1 = pp->sel_head_y; l1 = MAX(l1, LINEY0(0)) - LINEY0(0);
+  l1 = l1 / pp->fn_h;//(LINEY0(1)-LINEY0(0));
+  l1 = MIN(l1, pp->nb_lignes-1);
+  
+  if (l1 < l0) {
+    pp->sel_l0 = l1; mouse_x0 = pp->sel_head_x;
+    pp->sel_l1 = l0; mouse_x1 = pp->sel_anchor_x;
+  } else if (l0 < l1) {
+    pp->sel_l0 = l0; mouse_x0 = pp->sel_anchor_x;
+    pp->sel_l1 = l1; mouse_x1 = pp->sel_head_x;
+  } else {
+    pp->sel_l0 = pp->sel_l1 = l0;
+    mouse_x0 = MIN(pp->sel_anchor_x, pp->sel_head_x);
+    mouse_x1 = MAX(pp->sel_anchor_x, pp->sel_head_x);
+  }
+
+  BLAHBLAH(2,myprintf("%<YEL selection refresh: [%d:%d] -- [%d:%d] l0=%d, l1=%d>\n", 
+		      pp->sel_anchor_x, pp->sel_anchor_y, pp->sel_head_x, pp->sel_head_y,pp->sel_l0,pp->sel_l1));
+  
+  for (l=0; l < pp->nb_lignes; l++) {
+    int sel_x0, sel_x1;
+    PostWord *first, *last;
+    int first_pos, last_pos;
+
+    sel_x0 = sel_x1 = 0;
+    first_pos = last_pos = 0;
+    first = last = NULL;
+
+    if (l>=pp->sel_l0 && l<=pp->sel_l1 && pp->lignes[l]) {
+      first = pp->lignes[l];
+      sel_x0 = 0; //first->xpos;
+      last = first; 
+      while (last->next && last->next->ligne == last->ligne) last = last->next;
+      sel_x1 = last->xpos+last->xwidth;
+      first_pos = 0;
+      last_pos = strlen(last->w);
+    }
+    if (l==pp->sel_l0) {
+      sel_x0 = pp_selection_find_pos(dock, pp->lignes[l], mouse_x0, &first, &first_pos);
+    }
+    if (l==pp->sel_l1) {
+      sel_x1 = pp_selection_find_pos(dock, pp->lignes[l], mouse_x1, &last, &last_pos);
+    }
+
+    /* marque les lignes qui �taient selectionnes pour qu'elles soient redessinn�es */
+    if (pp->lignes_sel[l].x0 != sel_x0 || pp->lignes_sel[l].x1 != sel_x1) {
+      pp->lignes_sel[l].trashed = 1;
+      pp->lignes_sel[l].x0 = sel_x0;              pp->lignes_sel[l].x1 = sel_x1;
+      pp->lignes_sel[l].first_pw = first;         pp->lignes_sel[l].last_pw = last;
+      pp->lignes_sel[l].first_pw_pos = first_pos; pp->lignes_sel[l].last_pw_pos = last_pos;
+    } else {
+      pp->lignes_sel[l].trashed = 0;
+    }
+    BLAHBLAH(3,printf("l=%2d, %d first=%s [%d], last=%s [%d] x0=%d, x1=%d\n", l, 
+		      pp->lignes_sel[l].trashed, first ? first->w : NULL, first_pos,
+		      last ? last->w : NULL, last_pos, 
+		      pp->lignes_sel[l].x0, pp->lignes_sel[l].x1 = sel_x1));
+  }
+  for (l=0; l < pp->nb_lignes; l++) {
+
+    if (pp->lignes_sel[l].trashed) {
+      unsigned long bgpixel = cccolor_pixel(pp->win_bgcolor[pp->active_tab->site->site_id]);
+      if (pp->lignes[l]) { bgpixel = cccolor_pixel(pp->win_bgcolor[id_type_sid(pp->lignes[l]->parent->id)]); }
+    
+      pp_draw_line(dock, pp->lpix, pp->lignes[l], bgpixel, 
+		   &pp->lignes_sel[l], pp->transparency_mode, LINEY0(l));
+      XCopyArea(dock->display, pp->lpix, pp->win, dock->NormalGC, 0, 0, 
+		pp->zmsg_w, pp->fn_h, pp->zmsg_x1, LINEY0(l));
+    }
+  }
+}
+
+
+/* copie la zone selectionn�e dans un buffer et renvoie la
+   taille de cette zone (on l'appelle une premiere fois pour connaitre la taille,
+   puis une autre pour faire la copie effective)
+*/
+int
+pp_selection_copy(Dock *dock, char *buff)
+{
+  Pinnipede *pp = dock->pinnipede;
+  int l, nc;
+
+  
+  if (pp->lignes_sel == NULL) return 0;
+
+  nc = 0;
+  for (l=pp->sel_l0; l <= pp->sel_l1; l++) {
+    PostWord *pw;
+    /*    printf("first=%d, last=%d\n", pp->lignes_sel[l].first_pw_pos, pp->lignes_sel[l].last_pw_pos); */
+    pw = pp->lignes_sel[l].first_pw;
+    while (pw) {
+      int i, i0, i1;
+      i0 = 0; i1 = strlen(pw->w);
+      if (pw == pp->lignes_sel[l].first_pw) {
+	i0 = pp->lignes_sel[l].first_pw_pos;
+      } 
+      if (pw == pp->lignes_sel[l].last_pw) {
+	i1 = pp->lignes_sel[l].last_pw_pos;
+      }
+      if (pw != pp->lignes_sel[l].first_pw && (pw->attr & PWATTR_HAS_INITIAL_SPACE)) {
+	if (buff) buff[nc] = ' ';
+	nc++;
+      }
+      for (i=i0; i < i1; i++) {
+	if (buff) buff[nc] = pw->w[i];
+	nc++;
+      }
+      if (pw == pp->lignes_sel[l].last_pw) break;
+      pw = pw->next;
+    }
+    if (l < pp->sel_l1 && nc) {
+      if (buff) buff[nc] = (pw == NULL || pw->next == NULL) ? '\n' : ' ';
+      nc++;
+    }
+  }
+  if (buff) buff[nc] = 0;
+  nc++;
+  return nc;
+}
+
+void
+kbnav_move(Dock *dock, int dir) {
+  Pinnipede *pp = dock->pinnipede;
+  Boards *boards = dock->sites->boards;
+  PostVisual *pv = NULL;
+  id_type id = pp->kbnav_current_id;
+  int restart = 0;
+  PostWord *refpw = NULL;
+  if (!pp->lignes) return;
+  while (pv == NULL) {
+    int i;
+    for (i=0; i < pp->nb_lignes && pv == 0; ++i) {
+      if (pp->lignes[i] && id_type_eq(pp->lignes[i]->parent->id,id)) { 
+        pv = pp->lignes[i]->parent; 
+      }
+    }
+    if (pv == NULL && restart == 0) {
+      restart = 1;
+      id = pp->id_base;
+    } else break;
+  }
+
+  if (pv == NULL) return;
+  if (restart) {
+    pp->kbnav_current_tstamp = pp_pv_count_horloges(pv)-1;
+  } else {
+    int pv_nb_clock = pp_pv_count_horloges(pv);
+    if (dir == -1) {
+      if (pp->kbnav_current_tstamp > 0) {
+        pp->kbnav_current_tstamp = MIN(pp->kbnav_current_tstamp-1, pv_nb_clock-1);
+      } else {
+        id = get_prev_id_filtered(boards,id,NULL,&pp->filter);
+        pp->kbnav_current_tstamp = 10000;
+      }
+    } else if (dir == +1) {
+      if (pp->kbnav_current_tstamp < pv_nb_clock-1) {
+        pp->kbnav_current_tstamp++;
+      } else {
+        id = get_next_id_filtered(boards,id,NULL,&pp->filter);
+        pp->kbnav_current_tstamp = -1;
+      }
+    }
+  }
+  pp->kbnav_current_id = id;
+  
+  if (!id_type_is_invalid(id)) {
+    int lbefore = 0, lafter = 0, i;
+    for (i=0; i < pp->nb_lignes; ++i) {
+      if (pp->lignes[i] && pp->lignes[i]->parent && id_type_eq(pp->lignes[i]->parent->id, id)) {
+        if (lbefore == 0)
+          lbefore = i;
+        lafter = pp->nb_lignes - i;
+      }
+    }
+    /*printf("dir=%d, lbefore = %d, lafter = %d, nb_lignes=%d\n", dir,lbefore, lafter, pp->nb_lignes);*/
+    if (!restart && lafter < pp->nb_lignes/4 && dir > 0)
+      pp_update_content(dock, pp->kbnav_current_id, pp->nb_lignes/2,0,0);
+    else if (!restart && lbefore < pp->nb_lignes/4 && dir < 0)
+      pp_update_content(dock, pp->kbnav_current_id, MIN(10,pp->nb_lignes/4),0,0);
+    else
+      pp_update_content(dock, pp->id_base, pp->decal_base,0,0);
+    pv = pp_find_pv(pp,pp->kbnav_current_id);
+    if (pv) {
+      int pv_nb_clock = pp_pv_count_horloges(pv);
+      if (pv_nb_clock == 0) pp->kbnav_current_tstamp = -1;
+      else pp->kbnav_current_tstamp = MAX(0,MIN(pp->kbnav_current_tstamp, pv_nb_clock-1));
+      refpw = pp_pv_get_nth_horloge(pv, pp->kbnav_current_tstamp+1);
+      /*    if (refpw) refpw->attr |= PWATTR_TMP_EMPH;
+            pw = pv->first;
+            while (pw && (pw->attr & PWATTR_TSTAMP)==0) pw = pw->next;
+            if (pw) pw->attr |= PWATTR_TMP_EMPH;*/
+    }
+    pp_refresh(dock, pp->win, refpw);
+    {
+      PostWord *pwts = 0;
+      if (pv) { 
+        PostWord *pw = pv->first;
+        while (pw) {
+          if ((pw->attr & PWATTR_TSTAMP)) { pwts = pw;  break; }
+          pw = pw->next;
+        }
+      }
+      pp_check_survol(dock,pwts,-1);
+    }
+  }
+}
+
+
+static void switch_search_mode(Dock *dock) {
+  Pinnipede *pp = dock->pinnipede;
+  static char *old_s = 0;
+  if (pp->filter.filter_mode) { 
+    if (pp->filter.anything && strlen(pp->filter.anything))
+      pp->filter.filter_mode = 0; 
+    else pp_set_anything_filter(dock, old_s ? old_s : "");
+  }
+  else { 
+    if (pp->filter.anything) { if (old_s) free(old_s); old_s = strdup(pp->filter.anything); }
+    pp_set_anything_filter(dock, ""); 
+  }
+  pp_update_content(dock, id_type_invalid_id(), 0, 0, 1);
+  pp_refresh(dock, pp->win, NULL);
+}
+
+static void pp_update_viewed_messages(Dock *dock, int x, int y) {
+  Pinnipede *pp = dock->pinnipede;
+  Boards *boards = dock->sites->boards;
+  int l;
+  if (x >= pp->zmsg_x1 && x <= pp->zmsg_x2) {    
+    for (l=0; l < pp->nb_lignes; l++) {
+      if (y > LINEY0(l) && y <= LINEY1(l)) {
+        PostWord *pw = pp->lignes[l];
+        if (pw && pw->parent) {
+          int sid = id_type_sid(pw->parent->id);
+          if (sid >= 0 && boards->btab[sid]) 
+            board_set_viewed(boards->btab[sid], id_type_lid(pw->parent->id));
+        }
+      }
+    }
+  }
+}
+
+#define FORWARD_KEY XSendEvent(dock->display, dock->rootwin, True, KeyPressMask, event); 
+
+/* /!\ spaghettis */
+int
+pp_handle_keypress(Dock *dock, XEvent *event)
+{
+  Pinnipede *pp = dock->pinnipede;
+  Boards *boards = dock->sites->boards;
+  int ret = 0;
+
+  /*if ((event->xkey.state & 0xdf60) || // c'�tait 0xdfe0 avant xfree 4.3 :-/ altgr est devenu "iso-levl3-shift" 
+      (kb_state()->input_context && XFilterEvent(event, None))) {
+    //printf("forward key: \n");
+    FORWARD_KEY;
+    return 1;
+  }
+  */
+#ifdef OLD_KBCOINCOIN
+  kb_lookup_string(dock, &event->xkey);
+#else 
+  //kb_xim_lookup_key(&event->xkey, KB_PINNIPEDE);
+#endif
+  /*printf("klen=%2d %08x %c state=%08x buff=%02x%02x%02x%02x\n", 
+         kb_state()->klen, (int)kb_state()->ksym, (int)kb_state()->ksym, event->xkey.state,
+         kb_state()->buff[0],kb_state()->buff[1],kb_state()->buff[2],kb_state()->buff[3]);*/
+  if (event->xkey.state & Mod1Mask) {
+    /* ALT-TOUCHE */
+  } else if (event->xkey.state & ControlMask) {
+    /* CTRL-TOUCHE */
+    switch (kb_state()->ksym) {
+    case ' ': { /* ctrl-espace : rafraichit tous les sites */
+      Site *site;
+      for (site = dock->sites->list; site; site = site->next) {
+        if (site->prefs->check_board) {
+          ccqueue_push_board_update(site->site_id);
+          site->board->board_refresh_decnt = site->board->board_refresh_delay;
+        }
+      }
+      ret++;
+    } break;
+    /* "ctrl-F" : active/desactive le filtre */
+    case 'F':
+    case 'f': if (!editw_ismapped(dock->editw)) {
+      pp->filter.filter_mode = 1-pp->filter.filter_mode;
+      pp_update_content(dock, pp->id_base, 0,0,0);
+      pp_refresh(dock, pp->win, NULL);
+    } break;
+    /* ctrl-s : mode recherche -- emule le isearch-mode de emacs */
+    case 'S':
+    case 's': if (event->xkey.window == pp->win && !editw_ismapped(dock->editw)) { 
+      switch_search_mode(dock);
+      ret++;
+    } break;
+    case 'Z':
+    case 'z': {
+      //flag_discretion_request = +1; ret++;
+    } break;
+    /* CTRL-ENTER : ouvre le palmi pour r�pondre au message affich� en bas du pinni */
+    case XK_Return:
+    case XK_KP_Enter: {
+      PostWord *pwts = NULL;
+      PostVisual *pv;
+      if ((pv = pp_find_pv(pp, pp->kbnav_current_id))) {
+        PostWord *pw = pv->first;
+        while (pw) {
+          if ((pw->attr & PWATTR_TSTAMP)) { pwts = pw;  break; }
+          pw = pw->next;
+        }
+      }
+      if (pwts == NULL && pp->lignes) {
+        int i=pp->nb_lignes-1;
+        /* :(================ */
+        while (i>=0 && !pwts) {
+          if (pp->lignes[i]) {          
+            PostWord *pw = pp->lignes[i];
+            while (pw) {
+              if ((pw->attr & PWATTR_TSTAMP)) { pwts = pw;  break; }
+              pw = pw->next;
+            }
+          }
+          i--;
+        }
+      }
+      if (pwts)
+        pp_open_palmi_for_reply(dock,pwts);
+      ret++;
+    } break;
+    case XK_KP_Up:
+    case XK_Up: {
+      kbnav_move(dock,-1);
+      ret++;
+    } break;
+    case XK_KP_Down:
+    case XK_Down: {
+      kbnav_move(dock,+1);
+      ret++;
+    } break;
+    }
+  } else if (pp->filter.filter_mode && pp->filter.anything && !editw_ismapped(dock->editw)) {
+    /* TOUCHE NORMALE EN MODE RECHERCHE */
+    int c = 0;
+    //fprintf(stderr, "recherche : kb_state()->ksym = %04x (%c), klen=%04x, buff=%02x%02x%02x%02x\n", kb_state()->ksym, kb_state()->ksym, klen, buff[0],buff[1],buff[2],buff[3]);
+    if (kb_state()->ksym >= ' ' && kb_state()->ksym < 255) { c = kb_state()->ksym; }
+    else if (kb_state()->ksym >= XK_KP_0 && kb_state()->ksym <= XK_KP_9) { c = '0' + kb_state()->ksym - XK_KP_0; }
+    else {
+      switch (kb_state()->ksym) {
+      case XK_KP_Decimal: c = '.'; break;
+      case XK_KP_Subtract: c = '-'; break;
+      case XK_KP_Add: c = '+'; break;
+      case XK_KP_Divide: c = '/'; break;
+      case XK_KP_Multiply: c = '*'; break;
+      case XK_BackSpace: c = -2; break;
+      case XK_Return:
+      case XK_KP_Enter:
+      case XK_KP_Up:
+      case XK_Up:
+      case XK_KP_Down:
+      case XK_Down:
+      case XK_KP_Left:
+      case XK_Left:
+      case XK_KP_Right:
+      case XK_Right:
+      case XK_KP_Page_Up:
+      case XK_Page_Up:
+      case XK_KP_Page_Down:
+      case XK_Page_Down:
+      case XK_KP_Home:
+      case XK_Home:
+      case XK_KP_End:
+      case XK_End:
+      case XK_Tab:
+      case XK_Escape: c = -1; break; /* pffff liste a la con */
+      }
+    }
+    if (c > 0) {
+      char *s = str_printf("%s%c", pp->filter.anything, c);
+      pp_set_anything_filter(dock, s);
+      free(s);
+    } else if (c == -2) {
+      char *s = strdup(pp->filter.anything);
+      if (s[0]) { s[strlen(s)-1] = 0; }
+      pp_set_anything_filter(dock, s);
+      free(s);
+    } else if (c == -1) { 
+      pp->filter.filter_mode = 0;
+      pp_update_content(dock, id_type_invalid_id(), 0, 0, 1);
+      pp_refresh(dock, pp->win, NULL);
+    }
+    ret++;
+  } else {
+    //kb_lookup_mb_string(dock, &event->xkey);
+    //printf("(BIS) klen=%2d %08x %c\n", kb_state()->klen, kb_state()->ksym, kb_state()->ksym);
+    /* TOUCHE NORMALE */
+    switch (kb_state()->ksym) {
+      /* fleche droite: active le tab de droite */
+    case XK_KP_Left:
+    case XK_Left: if (!editw_ismapped(dock->editw)) {
+      if (event->xkey.window == pp->win) {
+        pp_change_active_tab(dock,-1);
+        ret++;
+      }
+    } break;
+    /* fleche gauche: active le tabs de gauche */
+    case XK_KP_Right:
+    case XK_Right: if (!editw_ismapped(dock->editw)) {
+      if (event->xkey.window == pp->win) {
+        pp_change_active_tab(dock,+1);
+        ret++;
+      }
+    } break;
+    /* "tab" : switch entre un seul tab et tous les tabs simultan�s */
+    case XK_Tab: if (!editw_ismapped(dock->editw)) {
+        pp_tabs_switch_all_selected(pp); pp_tabs_changed(dock);
+    } break;
+    /* "R" : active/desactive l'autorefresh */
+    case 'R':
+    case 'r': {
+      if (event->xkey.window == pp->win && !editw_ismapped(dock->editw)) {
+        if (pp->active_tab) {
+          pp->active_tab->site->board->auto_refresh = 1-pp->active_tab->site->board->auto_refresh;
+          pp_tabs_refresh(dock);
+          ret++;
+        }
+      }
+    } break;
+    case '/':  if (event->xkey.window == pp->win && !editw_ismapped(dock->editw) && !(pp->filter.filter_mode && pp->filter.anything)) { 
+      switch_search_mode(dock);
+      pp_popup_show_txt(dock, "vi sux!!!");
+      ret++;
+    } break;
+    case ' ': {
+      if (event->xkey.window == pp->win && !editw_ismapped(dock->editw)) {
+        if (pp->active_tab) {
+          ccqueue_push_board_update(pp->active_tab->site->site_id);
+          pp->active_tab->site->board->board_refresh_decnt = pp->active_tab->site->board->board_refresh_delay;
+          ret++;
+        }
+      }
+    } break;
+    case XK_Return:
+    case XK_KP_Enter: if (!editw_ismapped(dock->editw)) {
+      if (editw_check_corse(dock, event->xkey.keycode)) {
+        editw_show(dock, pp->active_tab ? pp->active_tab->site->prefs : 0, 0);
+      }
+      ret++;
+    } break;
+    case XK_KP_Up:
+    case XK_Up: if (!editw_ismapped(dock->editw)) {
+      pp_update_content(dock, pp->id_base, pp->decal_base-1,0,0);
+      pp_refresh(dock, pp->win, NULL);
+      ret++;
+    } break;
+    case XK_KP_Down:
+    case XK_Down: if (!editw_ismapped(dock->editw)) {
+      pp_update_content(dock, pp->id_base, pp->decal_base+1,0,0);
+      pp_refresh(dock, pp->win, NULL);
+      ret++;
+    } break;
+    case XK_KP_Page_Up:
+    case XK_Page_Up: if (!editw_ismapped(dock->editw)) {
+      pp_update_content(dock, pp->id_base, pp->decal_base-pp->nb_lignes,0,0);
+      pp_refresh(dock, pp->win, NULL);
+      ret++;
+    } break;
+    case XK_KP_Page_Down:
+    case XK_Page_Down: if (!editw_ismapped(dock->editw)) {
+      pp_update_content(dock, pp->id_base, pp->decal_base+pp->nb_lignes,0,0);
+      pp_refresh(dock, pp->win, NULL);
+      ret++;
+    } break;
+    case XK_KP_Home:
+    case XK_Home: if (!editw_ismapped(dock->editw)) {
+      pp_update_content(dock, get_nth_id_filtered(boards, &pp->filter, 0), 0,0,0);
+      pp_refresh(dock, pp->win, NULL);
+      ret++;
+    } break;
+    case XK_KP_End:
+    case XK_End: if (!editw_ismapped(dock->editw)) {
+      pp_update_content(dock, get_last_id_filtered(boards, &pp->filter), 0,0,0);
+      pp_refresh(dock, pp->win, NULL);
+      ret++;
+    } break;
+    case XK_Escape: if (!editw_ismapped(dock->editw)) {
+      flag_cancel_task = 1;
+      ret++;
+    } break;
+    case '1':
+    case '2':
+    case '3':
+    case '4':
+    case '5':
+    case '6':
+    case '7':
+    case '8':
+    case '9': if (!editw_ismapped(dock->editw)) {
+      int c = kb_state()->ksym - '1';
+      if (c < pp->nb_tabs) {
+        pp_tabs_cliquouille(pp, pp->tabs+c, PPT_MAY_SET_MAIN_TAB); pp_tabs_changed(dock);
+      }
+      ret++;
+    } break;
+    default: {
+      ret = 0;
+    } break;
+    }
+  }
+  return ret;
+}
+
+int
+pp_handle_keyrelease(Dock *dock, XEvent *event)
+{
+  dock = 0; event = 0;
+  return 0;
+}
+
+int
+pp_dispatch_event(Dock *dock, XEvent *event)
+{
+  Pinnipede *pp = dock->pinnipede;
+
+  static int old_mouse_x = -1, old_mouse_y = -1;
+  static int mouse_button_press_x = -1, mouse_button_press_y = -1;
+  
+  static int dragging = 0;
+  static Time time_drag = 0;
+
+  if (pp_totoz_dispatch_event(dock,event)) return 1;
+  if (event->xany.window == None || event->xany.window != pp->win) return 0;
+
+  /* le pinnipede ne fait RIEN quand la tribune est en cours de mise � jour ... */
+  /*if (flag_updating_board) {
+    printf("%s et merde .. event type %d pendant que flag_updating_board = %d\n", ctime(time(NULL)), event->type, flag_updating_board);
+    dump_backtrace();
+    return 0;
+  }
+  */
+  switch (event->type) {
+  case DestroyNotify: 
+    {
+      //      printf("destroy?\n");
+    } break;
+  case ButtonPress:
+    {     
+      pp_selection_unselect(pp);
+      if (pp_widgets_handle_button_press(dock, &event->xbutton)) {
+      } else {
+	mouse_button_press_x = old_mouse_x = event->xbutton.x;
+	mouse_button_press_y = old_mouse_y = event->xbutton.y;
+	dragging = 0;
+	time_drag = event->xbutton.time;
+	if (event->xbutton.button == Button3
+	    && (event->xbutton.state & (ShiftMask | ControlMask)) == 0) {
+	  pp_handle_button3_press(dock, &event->xbutton);
+	}
+      }
+    } break;
+  case ButtonRelease:
+    {
+      old_mouse_x = event->xbutton.x;
+      old_mouse_y = event->xbutton.y;
+
+      if (pp->lignes_sel) {
+	int blen;
+	
+	blen = pp_selection_copy(dock, NULL);
+	if (blen) {
+	  if (pp->last_selected_text) { free(pp->last_selected_text); pp->last_selected_text=NULL;}	  	  
+	  pp->last_selected_text = malloc(blen); assert(pp->last_selected_text);
+	  pp_selection_copy(dock, pp->last_selected_text);
+	  editw_cb_copy(dock, pp->win, pp->last_selected_text, blen-1);
+	  pp->time_sel = time(NULL);
+	}
+      } else {
+	if (pp_widgets_handle_button_release(dock, &event->xbutton)) {
+	  //printf("plop\n");
+	} else if (dragging == 0) {
+	  pp_handle_button_release(dock, &event->xbutton);
+	}
+      }
+      dragging = 0;
+      time_drag = event->xbutton.time;
+    } break;
+  case MotionNotify:
+    {
+      event = flush_consecutive_mouse_motions(dock, pp->win, event);
+
+      if (pp_widgets_handle_motion(dock, &event->xmotion)) {
+	/* plop */
+      } else if (event->xmotion.state & Button1Mask && 
+	  SQR(mouse_button_press_x - event->xbutton.x)+
+	  SQR(mouse_button_press_y - event->xbutton.y) >= 6) {
+
+	pp->time_sel = time(NULL);
+	if (pp->lignes_sel == NULL) {
+	  pp->sel_anchor_x = old_mouse_x; pp->sel_anchor_y = old_mouse_y;
+	  pp_refresh(dock, pp->win, NULL);
+	}
+	pp->sel_head_x = event->xmotion.x; pp->sel_head_y = event->xmotion.y;
+	pp_selection_refresh(dock);
+      } else if ((event->xmotion.state & Button2Mask)==Button2Mask) {
+	int decal_y;
+	decal_y = event->xmotion.y - old_mouse_y;
+	decal_y /= 8;
+	if (decal_y && (event->xmotion.time-time_drag)>25) {
+	  dragging = 1;
+	  //	  printf("move (%ld) %ld!\n", event->xmotion.time, time_drag);
+	  pp_update_content(dock, pp->id_base, pp->decal_base-decal_y,0,0);
+	  pp_refresh(dock, pp->win, NULL);
+	  old_mouse_x = event->xmotion.x;
+	  old_mouse_y = event->xmotion.y;
+	  time_drag = event->xmotion.time;
+	}
+      } else {
+        PostWord *pw = pp_get_pw_at_xy(dock->pinnipede, event->xmotion.x, event->xmotion.y);
+	pp_check_survol(dock, pw, 0);
+        pp_check_totoz(dock, pw, event->xmotion.x, event->xmotion.y);/*event->xmotion.x_root, event->xmotion.y_root);*/
+	old_mouse_x = event->xmotion.x;
+	old_mouse_y = event->xmotion.y;
+        pp_update_viewed_messages(dock, event->xmotion.x, event->xmotion.y);
+      }
+    } break;
+  case ConfigureNotify:
+    {
+      XWindowAttributes wa;
+      Window child;
+      int dim_changed = 0;
+
+      
+      //printf("ConfigureNotify: w<-%d, h<-%d\n", event->xconfigure.width, event->xconfigure.height);
+
+      XGetWindowAttributes(dock->display, pp->win, &wa);
+      
+      //      printf("expose: width = %d (%d), height=%d (%d)\n", 
+      //	     wa.width,pp->win_width,wa.height,pp->win_height);
+      get_window_pos_with_decor(dock->display, pp->win, &pp->win_decor_xpos, &pp->win_decor_ypos);
+      
+      XTranslateCoordinates(dock->display, pp->win, dock->rootwin, 
+      			    0/*wa.x*/, 0/*wa.y*/, &pp->win_real_xpos, &pp->win_real_ypos, &child);
+      
+      //      printf(" -> xpos=%d, ypos=%d [%d %d]\n", pp->win_real_xpos,pp->win_real_ypos, wa.x, wa.y);
+      dim_changed = (event->xconfigure.width != pp->win_width || event->xconfigure.height != pp->win_height);
+      if (dim_changed || pp->transparency_mode) {
+	pp->win_width = MAX(event->xconfigure.width,80);
+	pp->win_height = MAX(event->xconfigure.height,80);
+	
+	/* eh oui, faut pas oublier �a.... */
+	if (Prefs.use_fake_real_transparency == 0)
+          pp_update_bg_pixmap(dock);
+	pp_update_and_redraw(dock, pp->id_base, pp->decal_base, 0,1);
+      }
+    } break;
+  case EnterNotify:
+    {
+    } break;
+  case LeaveNotify:
+    {
+      pp->survol_tab = NULL;
+    } break;
+  case Expose:
+    {
+      static int zx0, zy0, zx1, zy1, zinit = 0;
+      int x0, y0, x1, y1;
+
+      x0 = event->xexpose.x;            y0 = event->xexpose.y;
+      x1 = x0 + event->xexpose.width-1; y1 = y0 + event->xexpose.height -1;
+      if (zinit == 0) {
+	zx0 = x0; zy0 = y0; zx1 = x1; zy1 = y1;
+      } else {
+	zx0 = MIN(zx0, x0); zx1=MAX(zx1, x1);
+	zy0 = MIN(zy0, y0); zy1=MAX(zy1, y1);
+      }
+
+      /*printf("expose_event: x=%d, y=%d, w=%d, h=%d cnt=%d --> z=[%d:%d]x[%d:%d]\n", 
+	event->xexpose.x, event->xexpose.y, event->xexpose.width, event->xexpose.height, event->xexpose.count,
+	zx0, zx1, zy0, zy1);
+      */
+      if (event->xexpose.count == 0) {
+        //printf("REFRESH!\n");
+	//pp_refresh(dock, pp->win, NULL);
+        pp->flag_pp_refresh_request = 1;
+	flush_expose(dock, pp->win);
+      }
+    } break;
+  case MapNotify:
+    {
+    } break;
+  case SelectionRequest: 
+    {
+      editw_cb_handle_selectionrequest(dock, &(event->xselectionrequest));
+    } break;
+  case ClientMessage:
+    {
+      if (event->xclient.message_type == dock->atom_WM_PROTOCOLS
+	  && event->xclient.format == 32 
+	  && (Atom)event->xclient.data.l[0] == dock->atom_WM_DELETE_WINDOW) {
+	pp_unmap(dock);
+      }
+    } break;
+  }
+  return 1;
+}
+
+void pp_unset_kbnav(Dock *dock) {
+  dock->pinnipede->kbnav_current_id = id_type_invalid_id();
+  dock->pinnipede->kbnav_current_tstamp = -1;
+}
+
+Window pp_get_win(Dock *dock) {
+  return dock->pinnipede->win;
+}
+
+void
+pp_set_board_updated(Dock *dock)
+{
+  dock->pinnipede->flag_board_updated = 1;
+}
+
+/* sauvegarde de la position et des dimensions du pinni 
+   (appel� par wmcc_save_state de wmcoincoin.c) 
+ */
+void
+pp_save_state(Dock *dock, FILE *f) {
+  Pinnipede *pp = dock->pinnipede;
+  int i;
+  fprintf(f, "%d %d %d %d %d\n", 
+	  pp->mapped,
+	  pp->win_decor_xpos, pp->win_decor_ypos, 
+	  pp->win_width, pp->win_height);
+
+  fprintf(f, "LINKS %d\n", pp->nb_visited_links);
+  for (i=0; i < pp->nb_visited_links; i++)
+    fprintf(f, "%d\n", pp->visited_links[i]);
+  pp_tabs_save_state(dock,f);
+}
+
+
+void
+pp_restore_state(Dock *dock, FILE *f) {
+  Pinnipede *pp = dock->pinnipede;
+  int mapped, win_xpos, win_ypos, win_width, win_height;
+  int nlnk;
+
+  if (fscanf(f, "%d %d %d %d %d\n", 
+	     &mapped,
+	     &win_xpos, &win_ypos, 
+	     &win_width, &win_height) == 5) {
+
+    /* on v�rifie qu'on n'a pas sp�cifi� de pr�ferences dans le fichier d'options */
+    if (Prefs.pp_xpos == -10000 && Prefs.pp_ypos == -10000) {
+      if (win_xpos != -10000) {
+	pp->win_decor_xpos = MAX(MIN(win_xpos,3000),-20);
+	pp->win_decor_ypos = MAX(MIN(win_ypos,3000),-20);
+	pp->win_width = MAX(MIN(win_width,3000),50);
+	pp->win_height = MAX(MIN(win_height,3000),50);
+      }
+      pp_widgets_set_pos(dock);
+      //      if (pp->use_minibar)
+      //	pp_minib_initialize(pp);
+    }
+
+    if (fscanf(f, "LINKS %d\n", &nlnk)==1 && nlnk >= 0) {
+      int i;
+      pp->nb_visited_links = nlnk;
+      for (i=0; i < pp->nb_visited_links; i++) {
+	fscanf(f, "%d\n", &pp->visited_links[i]);
+      }
+    }
+    pp_tabs_restore_state(dock,f);
+  }  
+}
diff --git a/src/pinnipede.h b/src/pinnipede.h
new file mode 100644
index 0000000..043c065
--- /dev/null
+++ b/src/pinnipede.h
@@ -0,0 +1,302 @@
+#ifndef _PINNIPEDE_H
+#define _PINNIPEDE_H
+
+#include <libintl.h>
+#define _(String) gettext (String)
+
+#include "coincoin.h"
+#include "board_util.h"
+#include "time.h"
+#include "scrollcoin.h"
+#include "coin_xutil.h"
+#include "fontcoincoin.h"
+
+/* chuis con, les bitfields c pas pour les chiens */
+#define PWATTR_BD 1
+#define PWATTR_IT 2
+#define PWATTR_U  4
+#define PWATTR_S  8
+#define PWATTR_LNK 16
+#define PWATTR_TSTAMP 32
+//#define PWATTR_UA 64
+#define PWATTR_NICK 128
+#define PWATTR_REF 256 /* reference vers un autre post */
+#define PWATTR_TMP_EMPH 512
+#define PWATTR_HAS_INITIAL_SPACE 1024 /* indique si un espace doit etre insere entre ce mot et le
+			     suivant (utilise par justif */
+#define PWATTR_TROLLSCORE 2048
+#define PWATTR_LOGIN 4096
+#define PWATTR_TT  8192
+#define PWATTR_VISITED  (1<<14)
+#define PWATTR_TOTOZ_UNKNOWN (1<<15) /* maaairde le short est plein � ras bord */
+#define PWATTR_TOTOZ_DOWNLOADING (1<<16)
+#define PWATTR_TOTOZ_NOTFOUND (1<<17)
+#define PWATTR_TOTOZ_FOUND (1<<18)
+#define PWATTR_TOTOZ (PWATTR_TOTOZ_UNKNOWN|PWATTR_TOTOZ_DOWNLOADING|PWATTR_TOTOZ_NOTFOUND|PWATTR_TOTOZ_FOUND)
+
+
+#define PP_TOTOZ_STATUS_UNKNOWN 0
+#define PP_TOTOZ_STATUS_DOWNLOADING 1
+#define PP_TOTOZ_STATUS_NOTFOUND 2
+#define PP_TOTOZ_STATUS_FOUND 3
+
+typedef struct _PostVisual PostVisual;
+typedef struct _PostWord PostWord;
+
+/* une liste de mots avec leurs attributs */
+struct _PostWord {
+  unsigned char *w; /* non malloc�, stocke dans la m�me zone que cette structure */
+  unsigned char *attr_s;
+  unsigned int attr;
+  short xpos, xwidth; /* boite englobante */
+  short xdraw;        /* le x pass� a xft */
+  short ligne;
+  struct _PostWord *next;
+  struct _PostVisual *parent;
+};
+
+/* liste chain�e de posts */
+struct _PostVisual {
+  id_type id;         // message id + site id
+  PostWord *first; /* la liste des mots */
+  time_t tstamp;
+  signed char sub_tstamp; /* sous numerotation quand plusieurs posts ont le m�me timestamp */
+  int nblig BITFIELD(12); // nombre de lignes necessaire pour afficher ce message
+  int ref_cnt BITFIELD(9); // compteur de references
+
+  int is_my_message BITFIELD(1);
+  int is_answer_to_me BITFIELD(1);
+  int is_hilight_key BITFIELD(4);
+  int is_skipped_id BITFIELD(1); /* non nul si le message (id-1) n'existe pas */
+  int is_plopified BITFIELD(3);
+  /* non nul si le message a �t� plopifi�
+			  =1, le message apparait en gris, tags html enleves
+			  =2, le message est plopifi� (mots remplac�s par plop, grouik..)
+			  =3, le message est superplopifi� (message remplac� par 'plop')
+			*/
+  struct _PostVisual *next;
+};
+
+struct _PinnipedeFilter {
+  int filter_mode;
+  char *filter_name; /* contient le 'nom' du filtre) 
+		      */
+  char *ua;
+  char *login;
+  char *word;
+  //  int hms[3]; /* filtre sur les ref au msg post� � l'heure indiqu�e dans hms */
+  id_type *id; int nid; /* liste des id des messages affich�s dans le filtre de threads */
+  char *anything; /* filtres sur les ua, mots et logins (activ� par ctrl-s dans le pinni) */
+  int filter_boitakon;
+  char visible_sites[MAX_SITES]; /* indique les sites affich�s
+				    en simultan� (maj d'apr�s l'�tat des tabs du pinni) 
+				    (ce filtre est tjs activ�, il ne d�pend pas de filter_mode)
+				 */
+};
+
+typedef struct _PinnipedeLignesSel {
+  int x0, x1;
+  int trashed;
+  PostWord *first_pw;
+  PostWord *last_pw;
+  int first_pw_pos, last_pw_pos;
+} PinnipedeLignesSel;
+
+typedef struct _PPMinib {
+#define NB_MINIB 11
+#define MINIB_H 12
+  //#define MINIB_FN_W 6
+#define MINIB_Y0 (pp->win_height - MINIB_H)
+  enum { HELP, SCROLLBAR, BALLTRAP, /*REFRESH_TRIBUNE, REFRESH_NEWS,*/ UA, /* SECOND, TSCORE, FORTUNE, */ FILTER, PLOPIFY, TRANSPARENT, PREFS, MB_RSS, MB_BOARDS, CANCEL } type;
+  int x, y, w, h;
+  int clicked;
+} PPMinib;
+  
+#define PPT_BASE_H 12
+#define PPT_MAX_H 24 /* hauteur max d'un tab .. pp->lpix est suffisament haut */
+
+/* renvoye par pp_tabs_at_xy */
+typedef enum { PPT_MAY_SET_MAIN_TAB, PPT_MAY_UNSELECT_TAB, 
+               PPT_NORMAL_ACTION } ppt_survol_actions;
+
+typedef struct _PinnipedeTab {
+  Site *site;
+  char *site_name; /* utilise pour retrouver le site pendant le rebuild */
+  int selected, was_selected;
+  int x,y,w,h;
+  int clicked;
+  int clign_decnt;
+} PinnipedeTab;
+
+struct pp_totoz;
+
+struct _Pinnipede {
+  Window win;
+  CCColorId win_bgcolor[MAX_SITES], timestamp_color[MAX_SITES], useragent_color[MAX_SITES], login_color[MAX_SITES], 
+    lnk_color[MAX_SITES], visited_lnk_color[MAX_SITES], txt_color[MAX_SITES], 
+    trollscore_color[MAX_SITES], popup_fgcolor, plopify_color, 
+    totoz_unknown_color, totoz_downloading_color, totoz_found_color, minib_dark_color,
+    emph_color, popup_bgcolor, sel_bgcolor,
+    hilight_my_msg_color,hilight_answer_my_msg_color,hilight_keyword_color[NB_PP_KEYWORD_CATEG],    
+    minib_color, minib_msgcnt_color, 
+    minib_updlcnt_color, progress_bar_color;
+  int mapped;
+  int win_width, win_height, win_decor_xpos, win_decor_ypos, win_real_xpos, win_real_ypos;
+
+  int zmsg_y1, zmsg_y2, zmsg_h, zmsg_x1, zmsg_x2, zmsg_w; /* zone d'affichage des messages */
+  CCFontId fn_base, fn_it, fn_bd, fn_itbd, fn_mono;
+  CCFontId fn_minib;
+  int fn_base_space_w;
+  CCColorId ccc_black;
+  int fn_h;
+  //  Pixmap minipix;
+
+  PostVisual *pv;
+
+  int nb_lignes;
+  PostWord **lignes;
+
+  ScrollCoin *sc;
+
+  PinnipedeLignesSel *lignes_sel; /* utilis� uniquement pendant les selections */
+  int sel_anchor_x, sel_anchor_y;
+  int sel_head_x, sel_head_y;
+  int sel_l0, sel_l1;
+  time_t time_sel; /* pour la deselection automatique quand il est *vraiment* temps de rafraichir le pinnipede */
+
+  char *last_selected_text; /* stockage temporaire � usage interne au pinnipede */
+
+  id_type id_base;
+  int decal_base;
+  id_type last_post_id; /* utilise pour savoir si la tribune a ete mise a jour.. */
+
+  int colle_en_bas; /* pour savoir si on scrolle lors de nouveaux messages */
+
+  int flag_pp_update_request; /* si non nul, on fait pp_pv_destroy + pp_update_content(last_id_filtered) + pp_refresh
+                                 des que possible */
+
+  int flag_pp_refresh_request;
+
+  int non_filtered_message_count; /* ~= count_all_id_filtered(boards, &pp->filter)
+                                     maj par pp_scrollcoin_update_bounds (meme qd le scrollcoin est cach�),
+                                     �a n'est pas un truc fiable a 100% */
+
+  id_type kbnav_current_id;
+  int kbnav_current_tstamp; /* navigation au clavier : indique le message actuellement selectionn�, et le num�ro de l'horloge dans ce message qui est actuellement activ�e */
+
+  //  int html_mode;
+  int nick_mode; /* 0 : n'affiche rien, 
+		    1:  affiche les useragent raccourcis, 
+		    2: affiche les logins, 
+		    3: affiche les deux, 
+		    4: affiche useragent ou login */
+  int show_sec_mode; /* supprime les secondes sur les posts ou c'est possible */
+  int trollscore_mode;
+  int survol_hash; /* pour determiner (a peu pres) si on affcihe une nouvelle info de survol... (apprixmatif...) */
+  int disable_plopify;
+
+  int hilight_my_message_mode;
+  int hilight_answer_to_me_mode;
+  int hilight_key_mode;
+
+  
+  volatile int flag_board_updated;
+  int lpix_h0; /* hauteur de lpix reservee pour les operations diverses (en
+                  general c'est la taille totale de lpix, sauf si un bg_pixmap
+                  est utilis� et il est alors sauve en dessous) 
+                  
+                  ah ben merde c'etait juste marque en dessous..
+               */
+  Pixmap lpix; /* stocke aussi le bg_pixmap (apr�s les lpix_h0 premieres
+                  lignes) */
+
+  struct _PinnipedeFilter filter;
+
+  int transparency_mode;
+  //  int selection_mode; /* non nul quand on est en train de selectionner du texte � copier dans le clipboard (en dragant avec la souris) */
+
+  int use_minibar; /* les miniboutons sont-ils affich�s ? */
+  PPMinib mb[NB_MINIB];
+  int minib_pressed; /* numero du minibouton enfonce, -1 si aucun */
+  int mb_min_width; /* largeur minimale demand�e par la minibar
+		       (permet aux tabs de se placer avec la minibar, ou au-dessus) */
+  int mb_buttonbar_width; /* largeur du bloc de boutons */
+  int mb_x0;  /* position x de la minibar (non nul qd les tabs sont au m�me niveau, a gauche) */
+
+  enum {PPT_UP, PPT_DOWN, PPT_LEFT, PPT_RIGHT} tabs_pos; /* position des tabs */
+  int nb_tabs; /* == nb de sites avec une tribune */
+  PinnipedeTab *tabs; /* tableau de tabs (une par site avec tribune) */
+  PinnipedeTab *active_tab;  
+  PinnipedeTab *survol_tab; ppt_survol_actions survol_tab_part;
+  int tabs_x0, tabs_y0, tabs_w, tabs_h;
+
+#define MAX_VISITED_LINKS 200
+  int visited_links[MAX_VISITED_LINKS]; /* hash des urls deja visit�es */
+  int nb_visited_links;
+
+  struct pp_totoz *totoz;  
+  Pixmap miniduck_pixmap;
+};
+
+int filter_msg_info(const board_msg_info *mi, const struct _PinnipedeFilter *filter);
+int count_all_id_filtered(Boards *boards, struct _PinnipedeFilter *filter);
+id_type get_first_id_filtered(Boards *boards, struct _PinnipedeFilter *filter);
+id_type get_next_id_filtered(Boards *boards, id_type id, board_msg_info **nmi, struct _PinnipedeFilter *filter);
+id_type get_nth_id_filtered(Boards *boards, struct _PinnipedeFilter *filter, int n);
+id_type get_last_id_filtered(Boards *boards, struct _PinnipedeFilter *filter);
+void pp_selection_unselect(Pinnipede *pp);
+void pp_balloon_help(Dock *dock, int x, int y);
+void pp_pv_destroy(Pinnipede *pp);
+PostVisual *pp_pv_add(Pinnipede *pp, Boards *boards, id_type id);
+void pp_refresh(Dock *dock, Drawable d, PostWord *pw_ref);
+void pp_popup_show_txt(Dock *dock, unsigned char *txt);
+void pp_change_transparency_mode(Dock *dock, int on_off);
+void pp_update_bg_pixmap(Dock *dock);
+unsigned long pp_get_win_bgcolor(Dock *dock);
+void pp_clear_win_area(Dock *dock, int x, int y, int w, int h);
+//void pp_minib_initialize(Pinnipede *pp);
+void pp_minib_refresh(Dock *dock);
+void pp_minib_show(Dock *dock);
+void pp_minib_hide(Dock *dock);
+void pp_tabs_build(Dock *dock);
+void pp_tabs_rebuild(Dock *dock);
+//void pp_tabs_set_position(Pinnipede *pp);
+void pp_tabs_destroy(Pinnipede *pp);
+void pp_tabs_save_state(Dock *dock, FILE *f);
+void pp_tabs_restore_state(Dock *dock, FILE *f);
+void pp_tabs_refresh(Dock *dock);
+void pp_tabs_set_visible_sites(Pinnipede *pp);
+void pp_tabs_cliquouille(Pinnipede *pp, PinnipedeTab *pt, ppt_survol_actions where);
+void pp_tabs_switch_all_selected(Pinnipede *pp);
+void pp_tabs_changed(Dock *dock);
+void pp_change_active_tab(Dock *dock, int dir);
+void pp_scrollcoin_update_bounds(Dock *dock);
+void pp_scrollcoin_set(Dock *dock, int show_sc);
+void pp_widgets_set_pos(Dock *dock);
+void pp_widgets_refresh(Dock *dock);
+int  pp_widgets_handle_button_press(Dock *dock, XButtonEvent *ev);
+int  pp_widgets_handle_button_release(Dock *dock, XButtonEvent *event);
+int  pp_widgets_handle_motion(Dock *dock, XMotionEvent *event);
+
+void pp_update_content(Dock *dock, id_type id_base, int decal, int adjust, int update_scrollbar_bounds);
+void pp_update_and_redraw(Dock *dock, id_type id_base, int decal, int adjust, int update_scrollbar_bounds);
+
+int pp_boardshot_kikoooo(Dock *dock, int save_all, int overwrite, int use_js);
+
+/* quelques fonctions de pp_totoz sont declarees dans coincoin.h */
+void pp_totoz_build(Dock *dock);
+void pp_totoz_rebuild(Dock *dock);
+void pp_totoz_destroy(Dock *dock);
+void pp_totoz_unmap(Dock *dock);
+int pp_totoz_img_status(Pinnipede *pp, char *imgname);
+//int pp_totoz_update_status_all(Dock *dock);
+void pp_check_totoz(Dock *dock, PostWord *pw, int x_root, int y_root);
+int  pp_totoz_dispatch_event(Dock *dock, XEvent *event);
+void pp_totoz_download(Dock *dock, unsigned char *imgname);
+//void pp_totoz_get_image(Dock *dock, unsigned char *imgname);
+/* macros pour le calcul des differentes positions d'affichage des lignes */
+#define LINEY0(l) (pp->zmsg_y2 - (pp->nb_lignes-l)*pp->fn_h-(pp->zmsg_h - pp->nb_lignes*pp->fn_h)/2)
+#define LINEY1(l) (LINEY0(l)+pp->fn_h-1)
+#define LINEBASE(l) (LINEY0(l) + pp->fn_base->ascent)
+
+#endif
diff --git a/src/pinnipede_pdfm.c b/src/pinnipede_pdfm.c
new file mode 100644
index 0000000..3379763
--- /dev/null
+++ b/src/pinnipede_pdfm.c
@@ -0,0 +1,342 @@
+/*
+  pdfm c'est pas une insulte, �a veut dire plateau de fruits de mer
+  rcsid=$Id: pinnipede_pdfm.c,v 1.2 2002/10/05 18:08:14 pouaite Exp $
+*/
+
+#include "pinnipede.h"
+
+/* --------------------------- section plateau de fruit de mer, veuillez insulter lordOric 
+   pour tous les bugs li�s � cette partie ;) ---------------------------------------------
+
+   Nouveau ! maintenant on peut aussi insulter Shift !
+*/
+
+/* 23/03/2002 pitit patch pour prot�ger les > et < pour le validator */
+static char *
+pp_boardshot_encode( const char *chaine )
+{
+  char *tmp;
+  char *retour;
+
+  const char *key[] = { "<", ">", "&" };
+  const char *subst[] = { "<", ">", "&" };
+  const char *key2[] = { "\t<", "\t>" };
+  const char *subst2[] = { "<", ">" };
+  
+  if (chaine == NULL) return NULL;
+
+  /* Passage des <> en < et > */
+  tmp = str_multi_substitute( chaine, key, subst, 3 );
+  
+  /* Restauration des balises '<' et '>' pr�c�d�s d'une tabulation (cad ceux qui sont
+     d'authentiques tags */
+  retour = str_multi_substitute( tmp, key2, subst2, 2 );
+  free(tmp);
+  return retour;
+}
+
+static char *make_sid(board_msg_info *mi)
+{
+  static char s[40];
+  snprintf(s, 40, "%s%X", Prefs.site[id_type_sid(mi->id)]->site_name, id_type_lid(mi->id));
+  return s;
+}
+
+/* --------- patch de lordOric, aka "plateau de fruits de mer" ------------*/
+/* Scrinchote d'un message */
+static int 
+pp_boardshot_save_msg(Boards *boards, board_msg_info *mi, FILE *file, int use_js)
+{
+  char time[10];
+  
+  char *tmp;
+  char *site_name = Prefs.site[id_type_sid(mi->id)]->site_name; 
+
+  
+  assert(file); assert(mi);
+	
+  snprintf(time, 10, "%02d:%02d:%02d",mi->hmsf[0], mi->hmsf[1], mi->hmsf[2]);
+	
+  if (use_js == 0) {
+    fprintf(file, "<tr class=\"%s-msg\">", site_name);
+  } else {
+    fprintf(file, "<tr class=\"%s-msg\" id=\"%s\">", site_name, make_sid(mi));
+  }
+  if (mi->troll_score) {
+    fprintf(file, "<td class=\"trollscore\">%d</td>\n", mi->troll_score);
+  } else {
+    fprintf( file, "<td></td>\n");
+  }
+
+  tmp = pp_boardshot_encode( mi->useragent );
+  fprintf(file,"<td class=\"hour\" title=\"<%s> %s\">  %s</td>\n", site_name,tmp, time);	 
+  free (tmp);
+	
+  if ( mi->login && strlen(mi->login)) {
+    tmp = pp_boardshot_encode( mi->login );
+    fprintf(file,"<td class=\"login\">%s</td>\n", tmp);
+    free(tmp);
+  } else {
+    char *p;
+    p = mi->miniua.name;
+    tmp = pp_boardshot_encode(p);
+    fprintf( file, "<td class=\"miniua\">%.12s</td>\n", tmp);
+    free(tmp);
+  }
+	
+  {
+    const unsigned char *p, *np;
+    fprintf( file,"<td>");
+    p = mi->msg;
+    while (p) {
+      unsigned char s[768], attr_s[768];
+      int has_initial_space, is_ref;
+      board_msg_info *ref_mi;
+      if (board_get_tok(&p,&np,s,768, &has_initial_space) == NULL) { break; }
+      ref_mi = check_for_horloge_ref(boards, mi->id, s,attr_s, 768, &is_ref, NULL);
+      if (has_initial_space) fprintf(file, " ");
+      if (is_ref) {
+	if (use_js == 0 || ref_mi == NULL) {
+	  fprintf(file, "<span style=\"color:blue;\">%s</span>",s);
+	} else {
+	  fprintf(file, "<a onMouseOver=\"h('%s');\" onMouseOut=\"u('%s','#%06x');\" href=\"\">%s</a>",
+		  make_sid(ref_mi), make_sid(ref_mi), Prefs.site[id_type_sid(ref_mi->id)]->pp_bgcolor, s);
+	}
+      } else {
+	tmp = pp_boardshot_encode(s);
+	fprintf(file, "%s", tmp); 
+	free(tmp);
+      }
+      p = np;
+    }
+    fprintf( file,"</td></tr>\n");
+  }
+
+  
+  return 0;
+}
+
+
+
+/* Tribuneshot CSS : La feuille de style du chouette plateau de fruits de mer ;) */
+/* ndpouaite: pour tout reclamation, taper sur monsieur CapsLock (aka shift) */
+int
+pp_boardshot_css_file(const char *cssfname) 
+{
+  FILE *file;
+  int j;
+
+  /*
+  file = fopen( cssfname, "r");
+  file_exist = (file!=NULL);
+  if ( file_exist ) fclose( file ); 
+  */  
+  file = fopen(cssfname, "w");
+  if ( ! file ) {
+    printf(_("Error while opening %s\n"), cssfname);
+    return -1;
+  }
+
+
+  // Pas de d�coration pour les liens
+  fprintf( file, "a {\n text-decoration:none;\n }\n\n");
+  fprintf( file, "A:HOVER {\n" /* piqu� sur la homep de pycc ! */
+	  "text-decoration: underline overline;\n"
+	  "background-color: #fcfcda;\n"
+	  "color: #1010da;\n}\n");
+  // Titres de niveau 2 centr�s
+  fprintf( file, "h2 {\n text-align : center;\n }\n\n");
+
+  // Tableau sans marge, ni bord et prenant toute la largeur
+  fprintf( file, "table {\n border:none;\n"
+		  	"width:100%%;\n"
+			"padding:0px;\n"
+			"margin:0px;\n"
+			"border-spacing:0px;\n"
+	   "}\n\n" );
+  
+  // On boucle sur les sites pour cr��s les propri�t�s CSS
+  for (j = 0; j < MAX_SITES; j++) {
+    char *site_name = NULL;
+    if (Prefs.site[j] == NULL) continue;
+    site_name = Prefs.site[j]->site_name;
+
+    // Propri�t�s des message
+    fprintf( file, ".%s-msg {\n", site_name);
+    fprintf( file, "	background : #%06x; \n", Prefs.site[j]->pp_bgcolor); 
+    fprintf( file, "	color : #%06x; \n", Prefs.site[j]->pp_fgcolor.opaque); 
+    fprintf( file, "    vertical-align: top; \n");
+    fprintf( file, "} \n\n");
+    
+    // Propri�t� des liens sous la souris
+    fprintf( file, ".%s-msg a:hover {\n", site_name);
+    fprintf( file, "	color: #%06x; \n",  Prefs.site[j]->pp_url_color.opaque); 
+    fprintf(file, "} \n\n");
+    
+    // Propri�t�s des liens visit�s
+    fprintf( file, ".%s-msg a:visited {\n", site_name);
+    fprintf( file, "	color: #%06x; \n",  Prefs.site[j]->pp_visited_url_color.opaque); 
+    fprintf(file, "} \n\n");
+    
+    // Propri�t�s des liens normaux
+    fprintf( file, ".%s-msg a:link {\n", site_name);
+    fprintf( file, "	color: #%06x; \n",  Prefs.site[j]->pp_url_color.opaque); 
+    fprintf(file, "} \n\n");
+    
+    // Propri�t� des textes barr�s
+    //    fprintf( file, ".%s-msg s {\n", site_name);
+    //    fprintf( file, "	color: #%06x; \n",  Prefs.site[j]->pp_strike_color.opaque); 
+    //    fprintf(file, "} \n\n");
+    
+    // Propri�t� de l'ua
+    fprintf( file, ".%s-msg .ua {\n", site_name);
+    fprintf( file, "	color : #%06x; \n", Prefs.site[j]->pp_useragent_color.opaque); 	fprintf(file, "} \n\n");
+    
+    // Propri�t�s des scores au trolloscope
+    fprintf( file, ".%s-msg .trollscore {\n", site_name);
+    fprintf( file, "	color : #%06x; \n", Prefs.site[j]->pp_trollscore_color.opaque); 
+    fprintf( file, "	font-weight : bold; \n");
+    fprintf(file, "} \n\n");
+    
+    // Propri�t� des horloges
+    fprintf( file, ".%s-msg .hour {\n", site_name);
+    fprintf( file, "	color : #%06x; \n", Prefs.site[j]->pp_tstamp_color.opaque); 	
+    fprintf(file, "} \n\n");
+    
+    // Propri�t� des logins
+    fprintf( file, ".%s-msg .login {\n", site_name);
+    fprintf( file, "	color : #%06x; \n", Prefs.site[j]->pp_login_color.opaque); 
+    fprintf( file, "	font-weight : bold;\n"); 
+    fprintf( file, "	text-align : center;\n"); 
+    fprintf(file, "} \n\n");
+
+    // Propri�t� des miniua
+    fprintf( file, ".%s-msg .miniua {\n", site_name);
+    fprintf( file, "	color : #%06x; \n", Prefs.site[j]->pp_useragent_color.opaque); 
+    fprintf( file, "	text-align : center;\n"); 
+    fprintf(file, "} \n\n");
+  }
+  
+  fclose( file);
+  return 0;
+}
+
+
+/* Tribuneshot : un chouette plateau de fruits de mer ;) */
+int
+pp_boardshot_kikoooo(Dock *dock, int save_all, int overwrite, int use_js) 
+{
+  Pinnipede *pp = dock->pinnipede;
+  Boards *boards = dock->sites->boards;
+  char *file_name;
+  FILE *file;
+  time_t time_shot;
+  int file_exist,j;
+  board_msg_info *msg;
+  char *cssfname, *shortcssfname;
+
+  file_name = str_substitute(Prefs.board_scrinechote, "~", getenv("HOME"));
+  if (strlen(file_name)==0) return 1;
+  file = fopen( file_name, "r");
+  file_exist = (file!=NULL);
+  if ( file_exist ) fclose( file ); 
+  
+
+  file = fopen( file_name, overwrite ? "w" : "a");
+  if ( ! file ) {
+    char errmsg[512];
+    snprintf(errmsg, 512, _("Error while opening %s\n"), file_name);
+    msgbox_show(dock, errmsg);
+    free(file_name);
+    return -1;
+  }
+
+  cssfname = strdup(file_name);
+  {
+    char *tmp;
+    char *p = cssfname + strlen(cssfname)-1;
+    while (p > cssfname && *p != '.' && *p != '/') p--;
+    if (*p == '.') *p = 0;
+    tmp = str_printf("%s.css", cssfname); free(cssfname);
+    cssfname = tmp;
+  }
+  shortcssfname = strdup(cssfname);
+  {
+    char *pp;
+    char *p = shortcssfname + strlen(shortcssfname)-1;
+    while (p > shortcssfname && (*p == '/')) p--;
+    pp = p;
+    while (p > shortcssfname && *p != '/') p--;
+    if (*p == '/') p++;
+    if (strlen(p)) {
+      *(pp+1) = 0;
+      pp = shortcssfname;
+      shortcssfname = strdup(p); free(pp);
+    }
+  }
+
+  if (!file_exist || overwrite) {
+    fprintf(file, 
+	    "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"
+	    "<html><head><title>Scrinechote tribune</title>"
+	    "<link rel=\"stylesheet\" type=\"text/css\" href=\"%s\" >"
+	    "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-15\">"
+	    "</head>", shortcssfname);
+    fprintf(file, "<body>\n");
+    if (use_js) { /* g honte */
+      fprintf(file,
+	      "<script language=\"JavaScript\" type=\"text/javascript\">\n"
+	      "function h(id) {\n"
+	      "document.getElementById(id).style.background=\"#%06x\";\n}\n"
+	      "function u(id,c)\n{"
+	      "document.getElementById(id).style.background=c;\n}\n"
+	      "</script>\n", Prefs.pp_emph_color.opaque);
+    }
+  }
+  
+  time( &time_shot );
+  fprintf( file, "<br><br><center><h2> *** Scrinechote - %s *** </h2></center><br>", ctime( &time_shot ) );
+  // L�gende des couleurs
+  for (j = 0; j < MAX_SITES; j++) {
+    if (Prefs.site[j] && Prefs.site[j]->check_board) {
+      char *site_name = Prefs.site[j]->site_name;
+      int i, in_tabs = 0;
+      for (i=0; i < pp->nb_tabs; i++) 
+	if (pp->tabs[i].site->prefs == Prefs.site[j])
+	  in_tabs = pp->tabs[i].selected;
+      if (save_all || in_tabs)
+	fprintf( file, "<span class=\"%s-msg\"> %s </span>", site_name, site_name);
+    }
+  }
+  fprintf( file, "<table>");
+  
+  if (save_all) {
+    msg = boards->first;
+  } else {
+    id_type id = get_first_id_filtered(boards, &pp->filter);
+    msg = boards_find_id(boards, id);
+  }
+  while ( msg ) {
+    pp_boardshot_save_msg(boards, msg, file, use_js);
+    if (save_all) { 
+      msg = msg->g_next;
+    } else {
+      get_next_id_filtered(boards, msg->id, &msg, &pp->filter);
+    }
+  }
+  
+  fprintf( file, "</table><br>\n");
+  fclose( file);
+  
+  {
+    char infomsg[512];
+    snprintf(infomsg,512,"Scrinechote of the board (%s and %s) saved at %s", file_name, cssfname, ctime(&time_shot));
+    msgbox_show(dock, infomsg);
+  }
+  // NEWSHIFT On cr�� le css
+  pp_boardshot_css_file(cssfname);
+
+  free(file_name);
+  free(cssfname);
+  return 0;
+}
diff --git a/src/pinnipede_totoz.c b/src/pinnipede_totoz.c
new file mode 100644
index 0000000..c639189
--- /dev/null
+++ b/src/pinnipede_totoz.c
@@ -0,0 +1,526 @@
+#include <signal.h>
+#include <stdio.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+
+#include "pinnipede.h"
+#include "coincoin.h"
+#include <X11/extensions/shape.h>
+
+typedef struct pp_totoz_img {
+  int hash;
+  int status; /* status: 0 = new, 1 = d/l en cours, 2 = notfound, 3 = found */
+  char *name, *mime, *realname;
+  int w,h;
+} pp_totoz_img;
+
+struct pp_totoz {
+  Window win, subwin;
+  int survol_hash;
+  pid_t animate_pid;
+
+  int nb_img, max_img;
+  struct pp_totoz_img *img;
+};
+
+volatile int pp_totoz_state_cnt = 0; /* increment� a chaque changement d'�tat d'une image */
+
+static pp_totoz_img*
+pp_totoz_find_img_(Pinnipede *pp, int hash, int *found, const char *name) {
+  int i0, i1;
+  *found = 0;
+  if (pp->totoz->nb_img == 0) return pp->totoz->img;
+  i0 = 0; i1 = pp->totoz->nb_img-1;
+  if (hash < pp->totoz->img[i0].hash) return pp->totoz->img+i0;
+  if (hash > pp->totoz->img[i1].hash) return pp->totoz->img+i1+1;
+  while (hash > pp->totoz->img[i0].hash) {
+    int i2 = (i0+i1)/2;
+    if (hash < pp->totoz->img[i2].hash) i1 = i2-1; 
+    else if (hash > pp->totoz->img[i2].hash) i0 = i2+1;
+    else {i0 = i2; break; }
+  }
+
+  /* on gere les collisions a la truelle */
+  while (i0 > 0 && pp->totoz->img[i0-1].hash == hash) --i0;
+  int i;
+  for (i = i0; (hash == pp->totoz->img[i].hash) && i < pp->totoz->nb_img; ++i) {
+    if (strcmp(name, pp->totoz->img[i].name) == 0) {
+      i0 = i; *found = 1;
+    }
+  }
+
+  i = i0 + (hash <= pp->totoz->img[i0].hash?0:1);
+  return pp->totoz->img + i;
+}
+
+/*
+  status: 0 = new, 1 = d/l en cours, 2 = notfound, 3 = found
+*/
+pp_totoz_img*
+pp_totoz_register_img(Pinnipede *pp, char *imgname, int status) {
+  int hash = str_hache(imgname, strlen(imgname));
+  pp_totoz_img *img;
+  int found;
+  img = pp_totoz_find_img_(pp,hash,&found,imgname);
+  if (found) {
+    /*if (strcmp(imgname, img->name) != 0) {
+      BLAHBLAH(0,printf("ouiiiin collision de hache tout pourri: '%s' = '%s' -> "
+                        "taper sur l'auteur pour qu'il cherche une vrai fonction de hachage\n", imgname, img->name));
+                        }
+                        PLUS POSSIOBLE.
+    */
+    assert(strcmp(imgname, img->name) == 0); 
+    assert(img - pp->totoz->img < pp->totoz->nb_img);
+
+    if (img->status != status) pp_totoz_state_cnt++;
+    img->status = status;
+  } else {
+    int imgi = img - pp->totoz->img;
+    if (++pp->totoz->nb_img > pp->totoz->max_img) {
+      pp->totoz->max_img += 20;
+      pp->totoz->img = realloc(pp->totoz->img, pp->totoz->max_img * sizeof(struct pp_totoz_img)); assert(pp->totoz->img);
+      img = pp->totoz->img + imgi;
+    }
+    memmove(img+1,img, (pp->totoz->nb_img-1 - imgi) * sizeof(struct pp_totoz_img));
+    img->hash = hash;
+    img->status = status;
+    img->name = strdup(imgname);
+    img->realname = 0;
+    img->mime = 0;
+    img->w = img->h = 0;
+    pp_totoz_state_cnt++;
+
+    BLAHBLAH(1, myprintf("new image registered: '%<YEL %s>'\n", imgname));
+    unsigned i, cavachier = 0; 
+    for (i=0; i < pp->totoz->nb_img; ++i) {
+      //printf(" %c %08x %s\n", (i == imgi) ? '!' : ' ', pp->totoz->img[i].hash, pp->totoz->img[i].name);
+      if (i != imgi && strcmp(imgname, pp->totoz->img[i].name)==0) {
+        cavachier = 1;
+      }
+    }
+    if (cavachier) { printf("ca va chier\n"); assert(0); }
+  }
+  if (img > pp->totoz->img) assert(img->hash >= (img-1)->hash);
+  if (img < pp->totoz->img+pp->totoz->nb_img-1) assert(img->hash <= (img+1)->hash);
+  return img;
+}
+
+int
+pp_totoz_img_status(Pinnipede *pp, char *imgname) {
+  int hash = str_hache(imgname, strlen(imgname));
+  pp_totoz_img *img;
+  int found;
+  img = pp_totoz_find_img_(pp,hash,&found, imgname);
+
+  //printf("pp_totoz_img_status '%s' : %d %d/%d\n",imgname, found, img - pp->totoz->img, pp->totoz->nb_img);
+  if (found) { return img->status; }
+  else { pp_totoz_register_img(pp, imgname, PP_TOTOZ_STATUS_UNKNOWN); return PP_TOTOZ_STATUS_UNKNOWN; }
+}
+
+void
+pp_totoz_unmap(Dock *dock) {
+  Pinnipede *pp = dock->pinnipede;
+  if (pp->totoz->win != None) {
+    XDestroyWindow(dock->display, pp->totoz->win);
+    pp->totoz->win = None;
+  }
+  if (pp->totoz->animate_pid) {
+    kill(pp->totoz->animate_pid, SIGKILL); /* animate est une grosse bouse pas capable de mourir comme un grand quand 
+                                             sa fenetre est d�truite. Je suis d��u d��u. C'est pourquoi il se prend 
+                                             un gros SIGKILL dans la face. Dis bonjour au ramasse-zombie
+                                          */
+    pp->totoz->animate_pid = 0;
+  }
+}
+
+void
+pp_totoz_build(Dock *dock) {
+  ALLOC_OBJ(dock->pinnipede->totoz, struct pp_totoz);
+  dock->pinnipede->totoz->img = 0;
+  pp_totoz_rebuild(dock);
+}
+
+void
+pp_totoz_rebuild(Dock *dock) {
+  Pinnipede *pp = dock->pinnipede;
+  assert(pp->totoz);
+  pp_totoz_unmap(dock);
+  pp->totoz->win = None;
+  pp->totoz->survol_hash = -42;
+  pp->totoz->animate_pid = 0;
+  if (pp->totoz->img) {
+    int i;
+    for (i = 0; i < pp->totoz->nb_img; ++i) FREE_STRING(pp->totoz->img[i].name);
+    free(pp->totoz->img);
+  }
+  pp->totoz->nb_img = 0;
+  pp->totoz->max_img = 20;
+  ALLOC_VEC(pp->totoz->img, pp->totoz->max_img, struct pp_totoz_img);
+}
+
+void
+pp_totoz_destroy(Dock *dock) {
+  Pinnipede *pp = dock->pinnipede;
+  pp_totoz_unmap(dock);
+  if (pp->totoz) {
+    free(pp->totoz); pp->totoz = NULL;
+  }
+}
+
+static void
+pp_totoz_show(Dock *dock, int x_, int y_, int w, int h) {
+  Pinnipede *pp = dock->pinnipede;
+  XSetWindowAttributes wa;
+  int x,y;
+  pp_totoz_unmap(dock);
+
+  x = MAX(x_ - w/2, 0);
+  y = y_ - h - 20; /* dessus */
+  if (y < 0) y = y_ + 20; /* dessous */
+  if (y+h > pp->win_height) { /* � gauche ? */
+    y = MAX(y_ - h/2, 0);
+    x = x_ - w - 20;
+    if (x < 0) x = x_ + 20;
+    if (x+w > pp->win_width) { x = 0; }
+  }
+
+  pp->totoz->win = XCreateSimpleWindow (dock->display, pp->win, /*RootWindow(dock->display,dock->screennum), */
+                                       x, y, w+4, h+4, 0,
+                                       IRGB2PIXEL(0xffffff), IRGB2PIXEL(0xff0000));
+  pp->totoz->subwin = XCreateSimpleWindow (dock->display, pp->totoz->win,
+                                           2, 2, w, h, 0,
+                                           IRGB2PIXEL(0xffffff), IRGB2PIXEL(0xffffff));
+  wa.event_mask =
+    ButtonPressMask | 
+    ButtonReleaseMask | 
+    ExposureMask;
+  wa.override_redirect = False /*True*/ ;
+  wa.save_under = True;
+  XChangeWindowAttributes (dock->display, pp->totoz->win,
+			   CWSaveUnder | CWEventMask | CWOverrideRedirect, &wa);
+  /*XSetTransientForHint(dock->display, pp->totoz->win, pp->win);
+  set_borderless_window_hints(dock->display, pp->totoz->win);
+  set_window_class_hint(dock->display, pp->totoz->win, "wmcoincoin", "totoz");
+  set_window_pos_hints(dock->display, pp->totoz->win, x, y);
+  XSetWindowBorderWidth(dock->display, pp->totoz->win, 0);*/
+
+  
+  {
+    Pixmap shape_mask = XCreatePixmap(dock->display, dock->rootwin, w+4, h+4, 1);
+    GC monoGC = XCreateGC(dock->display, shape_mask, 0, NULL);
+    XSetForeground(dock->display, monoGC, 0); 
+    XFillRectangle(dock->display, shape_mask, monoGC, 0, 0, w+4, h+4);
+    XSetForeground(dock->display, monoGC, 1); 
+    XFillRectangle(dock->display, shape_mask, monoGC, 2, 2, w, h);
+    XDrawLine(dock->display, shape_mask, monoGC, w, 0, w+3, 0);
+    XDrawLine(dock->display, shape_mask, monoGC, w+3, 0, w+3, 4);
+    XDrawLine(dock->display, shape_mask, monoGC, 0, 0, 4, 0);
+    XDrawLine(dock->display, shape_mask, monoGC, 0, 0, 0, 4);
+    XDrawLine(dock->display, shape_mask, monoGC, 0, h, 0, h+3);
+    XDrawLine(dock->display, shape_mask, monoGC, 0, h+3, 4, h+3);
+    XDrawLine(dock->display, shape_mask, monoGC, w+3, h, w+3, h+3);
+    XDrawLine(dock->display, shape_mask, monoGC, w, h+3, w+3, h+3);
+    XShapeCombineMask(dock->display, pp->totoz->win, ShapeBounding, 0, 0, shape_mask,
+                      ShapeSet);
+    XFreePixmap(dock->display, shape_mask);
+    XFreeGC(dock->display, monoGC);
+  }
+
+  XMapRaised(dock->display, pp->totoz->win);
+  XMapWindow(dock->display, pp->totoz->subwin);
+  XSync(dock->display, False);
+}
+
+int 
+pp_totoz_dispatch_event(Dock *dock, XEvent *event)
+{
+  Pinnipede *pp = dock->pinnipede;
+  if (pp->totoz->win != None && event->xany.window == pp->totoz->win) {
+    switch (event->type) {
+      //    case ButtonPress:
+    case ButtonRelease:
+      {
+	pp_totoz_unmap(dock);
+      } break;
+    }
+    return 1;
+  }
+  return 0;
+}
+
+/*
+  entree: "[:totoz plop]"
+  sortie: "totoz%20plop"
+*/
+char *
+pp_totoz_realfname(unsigned char *name, int with_path) {
+  int i;
+  unsigned char *realname;
+  unsigned char *s = strdup(name);
+  assert(s);
+  assert(s[0] == '[' && s[1] == ':' && s[strlen(name)-1] == ']');
+  s[strlen(s)-1] = 0;
+  for (i=0; s[i]; ++i) if (s[i] < ' ') s[i] = ' ';
+  realname = http_url_encode(s+2,0);  assert(realname);
+  free(s);
+  if (with_path) {
+    s = realname;
+    realname = str_printf("%s/.wmcoincoin/totoz/%s.desc", getenv("HOME"), s); free(s);
+  }
+  return realname;
+}
+
+static pp_totoz_img*
+pp_totoz_update_status(Dock *dock, char *imgname) {
+  Pinnipede *pp = dock->pinnipede;
+  int status,tw,th;
+  char s[512],  mimetype[100], realname[512];
+  pp_totoz_img *img = NULL;
+
+  
+  if (pp_totoz_img_status(pp, imgname) == PP_TOTOZ_STATUS_DOWNLOADING) {
+    img = pp_totoz_register_img(pp,imgname,PP_TOTOZ_STATUS_DOWNLOADING);
+  }
+  else {
+    char *fname = pp_totoz_realfname(imgname, 1);
+    FILE *f = fopen(fname, "rt");
+        
+    /* record de concentration de gotos ! */
+    if (f == NULL) { 
+      status = pp_totoz_img_status(pp, imgname); //PP_TOTOZ_STATUS_UNKNOWN;
+    } else if (fgets(s, 512,f) == NULL) { 
+      printf("pp_totoz_update_status: uuurg?\n");
+      status = PP_TOTOZ_STATUS_NOTFOUND;
+    } else if (strncmp(s, "NOTFOUND", 8) == 0) {
+      status = PP_TOTOZ_STATUS_NOTFOUND;
+    } else if (sscanf(s, " %511s %dx%d %99s", realname, &tw, &th, mimetype) != 4) {
+      printf("pp_totoz_update_status: %s %s grunt?\n", imgname, realname);
+      status = PP_TOTOZ_STATUS_NOTFOUND;    
+    } else {
+      status = PP_TOTOZ_STATUS_FOUND;
+    }
+    if (f) fclose(f);
+    img = pp_totoz_register_img(pp,imgname,status);
+    if (status == PP_TOTOZ_STATUS_FOUND) {
+      img->w = tw; img->h = th;
+      ASSIGN_STRING_VAL(img->mime, mimetype);
+      ASSIGN_STRING_VAL(img->realname, realname);
+    }
+    free(fname);
+  }
+  return img;
+}
+
+static void
+pp_totoz_update_status_all(Dock *dock) {
+  Pinnipede *pp = dock->pinnipede;
+  int i;
+  for (i = 0; i < pp->totoz->nb_img; ++i) {
+    /*if (pp->totoz->img[i].status == PP_TOTOZ_STATUS_DOWNLOADING) {
+      //pp_totoz_update_status(dock, pp->totoz->img[i].name);
+      cnt++;
+    } else */
+    if (Prefs.board_auto_dl_pictures && pp->totoz->img[i].status == PP_TOTOZ_STATUS_UNKNOWN) {
+      pp_totoz_update_status(dock, pp->totoz->img[i].name);
+      if (pp->totoz->img[i].status == PP_TOTOZ_STATUS_UNKNOWN) pp_totoz_download(dock, pp->totoz->img[i].name);
+    }
+  }
+}
+
+void
+pp_totoz_check_updates(Dock *dock) {
+  Pinnipede *pp = dock->pinnipede;
+  if (pp_ismapped(dock)) {
+    static int saved_pp_totoz_state_cnt = 0;
+    pp_totoz_update_status_all(dock);
+    //printf("pp_totoz_check_updates : pp_totoz_state_cnt = %d\n", pp_totoz_state_cnt);
+    if (pp_totoz_state_cnt != saved_pp_totoz_state_cnt) {
+      //printf("pp_totoz_check_updates : pp_totoz_state_cnt = %d - > pp_update_request\n", pp_totoz_state_cnt);
+      //pp->flag_pp_update_request = 1;
+      pp_pv_destroy(pp); 
+      pp_update_content(dock, pp->id_base, pp->decal_base,0,0);
+      pp_refresh(dock, pp->win, NULL);
+    }
+    saved_pp_totoz_state_cnt = pp_totoz_state_cnt;
+  }
+}
+
+static void
+pp_totoz_request(Dock *dock, char *imgname, int x, int y) {
+  Pinnipede *pp = dock->pinnipede;
+  char *urlencod_img = pp_totoz_realfname(imgname, 0);
+  char info[1024];
+
+  int old_status = pp_totoz_img_status(pp, imgname);
+  pp_totoz_img *img = pp_totoz_update_status(dock,imgname); assert(img);  
+  switch (img->status) {
+  case PP_TOTOZ_STATUS_UNKNOWN: 
+    snprintf(info,1024, "This picture [%s] has not been downloaded, use the popup menu (right clic) "
+             "to get it (and wait a little..)", urlencod_img);
+    break;
+  case PP_TOTOZ_STATUS_DOWNLOADING:
+    snprintf(info,1024, "The marmotte is downloading the picture [%s], be patient", urlencod_img);
+    break;
+  case PP_TOTOZ_STATUS_NOTFOUND:
+    snprintf(info,1024, "desolai but according to [~/.wmcoincoin/totoz/%s.desc] this picture does "
+             "not exist (like the cabale)", urlencod_img);
+    break;
+  case PP_TOTOZ_STATUS_FOUND:
+    snprintf(info,1024, "%s [%s], size %dx%d", img->realname, img->mime, img->w,img->h);
+    break;
+  default:
+    snprintf(info,1024, "%s BUUUUUUUUUUUUGGG !!!", urlencod_img);
+    break;
+  }
+  if (old_status != img->status) { /* pour permettre le changement d'apparence */
+    pp_pv_destroy(pp); 
+    pp_update_content(dock, pp->id_base, pp->decal_base,0,0);
+    pp_refresh(dock, pp->win, NULL);
+  }
+  pp_popup_show_txt(dock, info);
+  if (img->status == PP_TOTOZ_STATUS_FOUND) {
+    pp_totoz_show(dock, x, y, img->w, img->h);
+    /* rajouter un check anti-fork bomb */
+    switch ((pp->totoz->animate_pid = fork())) {
+    case -1: /* arrrrg */
+      fprintf(stderr, _("Fork failed...(%s)\n"), strerror(errno)); pp->totoz->animate_pid = 0; break;
+    case 0: {
+      char *swin = str_printf("0x%08lx",(unsigned long)pp->totoz->subwin);
+      char *sfile= str_printf("%s/.wmcoincoin/totoz/%s",getenv("HOME"),img->realname); 
+      int ret;
+      assert(sfile); assert(swin);
+      sfile = shell_quote(sfile); assert(sfile);  /* et une deuxi�me couche, a priori parfaitement inutile */
+      //    int ret = execlp("/usr/bin/animate", "/usr/bin/animate", "-virtual-pixel", "Constant", "-background", "white", "-window", swin, sfile, NULL, NULL);
+      /*
+        if (use_gifview) {
+        BLAHBLAH(0,myprintf("exec gifview +e -a --bg white -w %s %<YEL %s>\n", swin, sfile));
+        ret = execlp("/usr/bin/gifview", "/usr/bin/gifview", "+e", "-a", "--bg", "white", "-w", swin, sfile, NULL, NULL);
+        } else {
+        BLAHBLAH(0,myprintf("exec animate -window %s %<YEL %s>\n", swin, sfile));
+        ret = execlp("/usr/bin/animate", "/usr/bin/animate", 
+        "-background", "white", "-window", swin, sfile, NULL, NULL);
+        }
+      */
+      BLAHBLAH(1,myprintf("exec wmcoincoin_player %<YEL %s> %s\n", sfile, swin));
+      ret = execlp("wmcoincoin_player", "wmcoincoin_player", sfile, swin, NULL, NULL);
+      if( ret==-1 ) {
+        fprintf(stderr, _("Exec failed...(%s)\n"), strerror(errno));
+      }
+      exit(ret);
+    } break;
+    default:
+      break;
+    }
+  }
+  free(urlencod_img);
+}
+
+void
+pp_check_totoz(Dock *dock, PostWord *pw, int x_root, int y_root) {
+  Pinnipede *pp = dock->pinnipede;
+  int survol_hash = 0;
+  if (pw) survol_hash = str_hache(pw->w,50);
+  /*if (pw && (pw->attr & PWATTR_TOTOZ))
+    printf("%s : %d %d %08lx\n", pw->w, pp->totoz->survol_hash, pp->survol_hash, pp->totoz->win);*/
+  if (pp->totoz->survol_hash != survol_hash) {
+    if (pp->totoz->win != None) {
+      pp_totoz_unmap(dock); pp->totoz->survol_hash = 0;
+    }
+    if (pw && (pw->attr & PWATTR_TOTOZ)) {
+      pp_totoz_request(dock, pw->w, x_root, y_root);
+    }
+  }
+  pp->totoz->survol_hash = survol_hash;
+}
+
+/*void
+pp_totoz_download(Dock *dock, unsigned char *imgname) {
+  char *realname = pp_totoz_realfname(imgname,0);
+  char *cmd = NULL;
+  pp_totoz_register_img(dock->pinnipede, imgname, PP_TOTOZ_STATUS_DOWNLOADING);
+  //cmd = str_printf("%s/wmcoincoin/wmcc/scripts/wmcoincoin-totoz-get %s&", getenv("HOME"), realname);
+  cmd = str_printf("wmcoincoin-totoz-get %s&",realname);
+  BLAHBLAH(0, myprintf("Trying to get a new picture [%s] ! executing '%<GRN %s>'\n", realname, cmd));
+  system(cmd);
+  free(cmd);
+  free(realname);
+}*/
+
+void
+pp_totoz_download(Dock *dock, unsigned char *imgname) {  
+  pp_totoz_register_img(dock->pinnipede, imgname, PP_TOTOZ_STATUS_DOWNLOADING);
+  ccqueue_push_smiley_dl(imgname);
+  BLAHBLAH(0, myprintf("Download of picture %<MAG %s> queued!\n", imgname));
+}
+
+/* appele depuis ccqueue_loop */
+void
+pp_totoz_get_image(Dock *dock, unsigned char *imgname) {
+  Pinnipede *pp = dock->pinnipede;
+  HttpRequest r;
+  char *imgurl=NULL, *pathimg=NULL, *pathdesc=NULL, *cmd;
+  int is_found=0, i=0, lu;
+  static char siteroot[]="http://totoz.eu"; //modif par pierre80 suite a modif sur toz.eu
+  static char *extlist[]={"gif", "png", NULL};
+  static char *mimelist[]={"image/gif", "image/png", NULL};
+  char buf[1500];
+  FILE *f;
+
+  //printf("pp_totoz_get_image(%s) : status = %d\n", imgname, pp_totoz_img_status(pp,imgname));
+
+  char *imgfname = pp_totoz_realfname(imgname,0);  
+  pathdesc = str_printf("%s/.wmcoincoin/totoz/%s.desc", getenv("HOME"), imgfname);
+  while( !is_found && extlist[i] ) {
+    imgurl = str_printf("%s/%s.%s", siteroot, imgfname, extlist[i]);
+    wmcc_init_http_request(&r, dock->sites->list->prefs, imgurl);
+    /* Triton> Et hop, on supporte le header Accept: image/gif pour les images \o/ */
+    r.accept = strdup(mimelist[i]);
+    http_request_send(&r);
+
+    //printf("pp_totoz_get_image(%s,%s) : status = %d\n", imgname, extlist[i], pp_totoz_img_status(pp,imgname));
+    
+    if (http_is_ok(&r)) {
+      is_found = 1;
+      pathimg  = str_printf("%s/.wmcoincoin/totoz/%s.%s", getenv("HOME"), imgfname, extlist[i]);
+      wmcc_log_http_request(dock->sites->list, &r);
+      
+      f = fopen(pathimg, "w");
+      if (f == NULL) {
+        char *ptotoz = str_printf("%s/.wmcoincoin/totoz", getenv("HOME")); mkdir(ptotoz, -1);
+        f = fopen(pathimg, "w");
+      }
+      if (f == NULL) {
+        myfprintf(stderr, "pp_totoz_get_image : Impossible d'ouvrir/creer %s : %s\n", pathimg, strerror(errno));
+        pp_totoz_register_img(dock->pinnipede, imgname, PP_TOTOZ_STATUS_NOTFOUND);
+      } else {
+        while( (lu = http_read(&r, buf, 1500)) > 0 && !r.telnet.error && !ferror(f) )
+          fwrite(buf, lu, 1, f);        
+        if ( r.telnet.error || ferror(f) ) {
+          fclose(f);
+          myfprintf(stderr, "Erreur lors du telechargement du fichier %s\n", pathimg);
+          pp_totoz_register_img(dock->pinnipede, imgname, PP_TOTOZ_STATUS_NOTFOUND);
+        } else {
+          fclose(f);
+          cmd = str_printf("echo \"%s.%s\" `wmcoincoin_player -i \"%s\"` \"%s\" > \"%s\"", imgfname, extlist[i], pathimg, mimelist[i], pathdesc);
+          system(cmd);
+          free(cmd);
+          pp_totoz_register_img(dock->pinnipede, imgname, PP_TOTOZ_STATUS_FOUND);
+          pp_totoz_update_status(dock, imgname);
+        }
+      }
+      FREE_STRING(pathimg);
+      //printf("pp_totoz_get_image(%s,%s) / http_is_ok : status = %d\n", imgname, extlist[i], pp_totoz_img_status(pp,imgname));
+
+    } else pp_totoz_register_img(dock->pinnipede, imgname, PP_TOTOZ_STATUS_NOTFOUND);
+    printf("pp_totoz_get_image(%s,%s) / http_is_not_ok : status = %d\n", imgname, extlist[i], pp_totoz_img_status(pp,imgname));
+    http_request_close(&r);
+    i++;
+    free(imgurl);
+  }
+  if (pp_totoz_img_status(pp, imgname) == PP_TOTOZ_STATUS_NOTFOUND) {
+    printf("writing NOTFOUND to %s\n", pathdesc);
+    f = fopen(pathdesc, "w"); if (f) { fprintf(f, "NOTFOUND\n"); fclose(f); }
+  }
+  FREE_STRING(pathdesc);
+  free(imgfname);
+}
diff --git a/src/pinnipede_widgets.c b/src/pinnipede_widgets.c
new file mode 100644
index 0000000..a6ad163
--- /dev/null
+++ b/src/pinnipede_widgets.c
@@ -0,0 +1,1772 @@
+#include "pinnipede.h"
+#include "site.h"
+#include "dock.h"
+
+static char *dl_info_site = NULL;
+static char *dl_info_what = NULL;
+
+void pp_set_download_info(char *site, char *what) {
+  if (dl_info_site) { free(dl_info_site); dl_info_site = NULL; }
+  if (dl_info_what) { free(dl_info_what); dl_info_what = NULL; }
+  dl_info_site = site ? strdup(site) : NULL;
+  dl_info_what = what ? strdup(what) : NULL;
+}
+
+/* --------------------------- gestion des tabs ------------------- */
+/* a appeler apres update fortune et modif minib*/
+static void
+pp_tabs_set_pos_vert(Pinnipede *pp) {
+  int cnt, rest = 0;
+
+  assert(pp->nb_tabs);
+
+  pp->zmsg_y1 = 0; pp->zmsg_y2 = pp->win_height - 1 - (pp->use_minibar ? MINIB_H : 0);
+  pp->zmsg_h = pp->zmsg_y2-pp->zmsg_y1+1;
+
+  int tab_h = (pp->zmsg_h - (Prefs.auto_swallow ? 70 : 0))/pp->nb_tabs;
+  tab_h = MIN(PPT_MAX_H,MAX(PPT_BASE_H,tab_h));
+
+  if (Prefs.auto_swallow == 0 && tab_h < PPT_MAX_H) {
+    rest = pp->zmsg_h - pp->nb_tabs*tab_h + 1;
+    if (rest > pp->nb_tabs) rest = 0;
+  }
+
+  if (pp->tabs_pos == PPT_LEFT) {
+    pp->zmsg_x1 = pp->tabs_w; 
+    pp->tabs_x0 = 0; 
+  } else {
+    pp->zmsg_x1 = 0;
+    pp->zmsg_x2 = pp->win_width - pp->tabs_w - 1 - (pp->sc ? SC_W : 0);
+    pp->tabs_x0 = pp->win_width - pp->tabs_w;
+  }
+  pp->zmsg_w = pp->zmsg_x2 - pp->zmsg_x1 + 1;
+
+  pp->mb_x0 = 0; // la minibar a toute la place
+
+  if (pp->nb_tabs == 0 || pp->use_minibar == 0) return;
+  
+  pp->tabs_w = 80;
+  pp->tabs_y0 = pp->win_height  - (pp->use_minibar ? MINIB_H : 0) - tab_h - (rest ? 1 : 0);
+  pp->tabs_h = 0;
+  for (cnt = 0; cnt < pp->nb_tabs; cnt++) {
+    PinnipedeTab *pt = &pp->tabs[cnt];
+    pt->x = pp->tabs_x0;
+    pt->y = pp->tabs_y0;
+    pt->w = pp->tabs_w;
+    pt->h = tab_h + (rest ? 1 : 0); if (rest > 0) --rest;
+    pp->tabs_y0 -= pt->h; pp->tabs_h += pt->h;
+  }
+  pp->tabs_y0 += tab_h;
+}
+
+static void
+pp_tabs_set_pos_horiz(Pinnipede *pp)
+{
+  int cnt;
+  
+  int tab_max_w,tab_min_w, tab_w, tabs_min_w=-1, tabs_max_w=-1, tabs_w=-1;
+  int x,y;
+
+  pp->zmsg_y1 = 0;
+  pp->zmsg_y2 = pp->win_height - 1 - (pp->use_minibar ? MINIB_H : 0);
+  pp->zmsg_h = pp->zmsg_y2-pp->zmsg_y1+1;
+  pp->zmsg_x1 = 0; 
+  // pp->zmsg_x2 = pp->win_width - 1;  gere par la scrollcoin
+  pp->zmsg_w = pp->zmsg_x2-pp->zmsg_x1+1;
+  
+
+  if (pp->nb_tabs == 0 || pp->use_minibar == 0) return;
+
+  tab_min_w = 40;
+  tab_max_w = 100;
+  tabs_min_w = pp->nb_tabs * tab_min_w;
+  tabs_max_w = pp->nb_tabs * tab_max_w;
+  tab_w = MIN(MAX(pp->win_width / pp->nb_tabs, tab_min_w), tab_max_w);
+  tabs_w = pp->nb_tabs * tab_w;
+
+  pp->mb_x0 = 0;
+  
+  x = 0;
+  if (pp->tabs_pos == PPT_DOWN) {
+    y = pp->win_height - PPT_BASE_H;
+    
+    if (pp->use_minibar && tabs_min_w + pp->mb_min_width > pp->win_width) {
+      y -= MINIB_H;
+      tabs_w = pp->win_width+1;
+    } else {
+      /* "reduction" de la largeur pour loger dans la minibar */
+      tab_w = MIN((pp->win_width - pp->mb_min_width) / pp->nb_tabs, tab_max_w);
+      tabs_w = pp->nb_tabs * tab_w;
+      pp->mb_x0 = tabs_w;
+    }
+    pp->zmsg_y2 = y-1;
+  } else {
+    y = 0;
+    pp->zmsg_y1 += PPT_BASE_H;
+  }
+
+  for (cnt = 0; cnt < pp->nb_tabs; cnt++) {
+    PinnipedeTab *pt = &pp->tabs[cnt];
+    pt->x = (cnt * tabs_w) / pp->nb_tabs;
+    pt->y = y;
+    pt->w = ((cnt+1) * tabs_w) / pp->nb_tabs - x;
+    pt->h = PPT_BASE_H;
+    x += pt->w;
+  }
+  pp->tabs_w = MIN(x, pp->win_width);
+  pp->tabs_x0 = 0; 
+  pp->tabs_y0 = y;
+  pp->tabs_h = PPT_BASE_H; 
+  pp->zmsg_h = pp->zmsg_y2-pp->zmsg_y1+1;
+}
+
+static void
+pp_tabs_set_pos(Pinnipede *pp) {
+  if (pp->use_minibar) {
+    if (pp->tabs_pos == PPT_LEFT || pp->tabs_pos == PPT_RIGHT)
+      pp_tabs_set_pos_vert(pp);
+    else 
+      pp_tabs_set_pos_horiz(pp);
+  } else {
+    pp->zmsg_y1 = 0;
+    pp->zmsg_y2 = pp->win_height - 1;
+    pp->zmsg_h = pp->zmsg_y2-pp->zmsg_y1+1;
+    pp->zmsg_x1 = 0; 
+    pp->tabs_w = 0;
+// pp->zmsg_x2 = pp->win_width - 1;  gere par la scrollcoin
+    pp->zmsg_w = pp->zmsg_x2-pp->zmsg_x1+1;
+  }
+}
+
+void
+pp_tabs_set_visible_sites(Pinnipede *pp) {
+  int i;
+  for (i=0; i < MAX_SITES; i++) pp->filter.visible_sites[i] = 0;
+  for (i=0; i < pp->nb_tabs; i++) {
+    pp->filter.visible_sites[pp->tabs[i].site->site_id] = pp->tabs[i].selected; 
+  }
+}
+
+void
+pp_tabs_set_tmp_one_visible_site(Pinnipede *pp, int sid) {
+  int i;
+  for (i=0; i < MAX_SITES; i++) pp->filter.visible_sites[i] = 0;
+  pp->filter.visible_sites[sid] = 1;
+}
+
+static void
+pp_tabs_save_selected(Pinnipede *pp) {
+  int i;
+  for (i=0; i < pp->nb_tabs; i++) pp->tabs[i].was_selected = pp->tabs[i].selected;
+}
+
+static void
+pp_tabs_restore_selected(Pinnipede *pp) {
+  int i;
+  for (i=0; i < pp->nb_tabs; i++) pp->tabs[i].selected = pp->tabs[i].was_selected;
+}
+
+static void
+pp_tabs_swap_selected(Pinnipede *pp) {
+  int i;
+  for (i=0; i < pp->nb_tabs; i++) { 
+    int tmp = pp->tabs[i].was_selected;
+    pp->tabs[i].was_selected = pp->tabs[i].selected;
+    pp->tabs[i].selected = tmp;;
+  }
+}
+
+static void
+pp_tabs_select_only_one(Pinnipede *pp, PinnipedeTab *pt) {
+  int i;
+  for (i=0; i < pp->nb_tabs; i++) pp->tabs[i].selected = (&pp->tabs[i] == pt) ? 1 : 0;
+}
+
+
+static int
+pp_tabs_nb_selected(Pinnipede *pp) {
+  int cnt = 0, i;
+  for (i=0; i < pp->nb_tabs; i++) if (pp->tabs[i].selected) ++cnt;
+  return cnt;
+}
+
+static void
+pp_tabs_check_active(Pinnipede *pp) {
+  int i;
+  if (pp->active_tab == NULL || pp->active_tab->selected == 0) {
+    pp->active_tab = NULL;
+    for (i=0; i < pp->nb_tabs; i++)
+      if (pp->tabs[i].selected && pp->tabs[i].site->board->auto_refresh) { 
+        pp->active_tab = pp->tabs+i; break; 
+      }
+    if (pp->active_tab == NULL)
+      for (i=0; i < pp->nb_tabs; i++)
+        if (pp->tabs[i].selected) {
+          pp->active_tab = pp->tabs+i; break; 
+        }
+    if (pp->active_tab == NULL && pp->nb_tabs > 0) {
+      pp->active_tab = &pp->tabs[0]; pp->tabs[0].selected = 1;
+    }
+    assert(pp->active_tab);
+  }
+}
+
+Site *
+pp_tabs_get_main_site(Dock *dock)
+{
+  Pinnipede *pp = dock->pinnipede;
+  if (pp->active_tab) {
+    return pp->active_tab->site;
+  } else return NULL;
+}
+
+void
+pp_tabs_save_state(Dock *dock, FILE *f) 
+{
+  Pinnipede *pp = dock->pinnipede;
+  int i;
+  fprintf(f, "TABS-STATE:%d\n", pp->nb_tabs);
+  for (i=0; i < pp->nb_tabs; ++i) {
+    fprintf(f, "TAB:%s\nactive=%d:refresh=%d\n", pp->tabs[i].site->prefs->site_name,
+            pp->tabs[i].selected + (pp->tabs+i == pp->active_tab ? 1 : 0),
+            pp->tabs[i].site->board->auto_refresh);
+  } 
+}
+
+void
+pp_tabs_restore_state(Dock *dock, FILE *f)
+{
+  Pinnipede *pp = dock->pinnipede;
+  int nb, i, j;
+  if (fscanf(f, "TABS-STATE:%d\n", &nb) == 1 && nb < 2000) {
+    for (i=0; i < nb; ++i) {
+      char *s = str_fget_line(f); str_trim(s);
+      if (str_startswith(s, "TAB:")) {
+        char *sname = s+4;
+        int act, ref;
+        if (fscanf(f, "active=%d:refresh=%d\n", &act, &ref) == 2) {
+          //printf("pp_tabs_restore_state: got site '%s' act=%d ref=%d\n", sname, act, ref);
+          Site *s = sl_find_site_by_name(dock->sites, sname);
+          if (s && s->board) {
+            s->board->auto_refresh = ref;
+            for (j=0; j < pp->nb_tabs; j++) {
+              if (s == pp->tabs[j].site) {
+                //printf("pp_tabs_restore_state: restoring %s\n", sname);
+                pp->tabs[j].selected = pp->tabs[j].was_selected = act ? 1 : 0;
+                if (act > 1) pp->active_tab = pp->tabs+j;
+              }
+            }
+          }
+        }
+      } //else         printf("fin du fichier ? %d '%s'\n", strlen(s), s);
+
+      free(s);
+    }
+  } else {
+    printf("pp_tabs_restore_state : failed\n"); 
+    for (i=0; i < 10; ++i) printf("%s\n",str_fget_line(f));
+    //exit(1);
+  }
+  pp_tabs_check_active(pp);
+  pp_tabs_set_visible_sites(pp);
+}
+
+/* a appeler apres update fortune */
+void
+pp_tabs_build(Dock *dock) {
+  Pinnipede *pp = dock->pinnipede;
+  Site *s;
+  PinnipedeTab *pt;
+
+  pp->tabs_pos = Prefs.pp_tabs_pos;
+  pp->nb_tabs = 0; 
+  for (s = dock->sites->list; s; s = s->next) {
+    if (s->board) {
+      pp->nb_tabs++;
+    }
+  }
+
+  pp->active_tab = NULL;
+  ALLOC_VEC(pp->tabs, pp->nb_tabs, PinnipedeTab);
+  for (s = dock->sites->list, pt = pp->tabs; s; s = s->next) {
+    if (s->board) {
+      pt->site = s;
+      pt->site_name = strdup(s->prefs->site_name);
+      if (s->board->auto_refresh && pp->active_tab == NULL) {
+        pt->selected = 1; pp->active_tab = pt;
+      } else pt->selected = 0;
+      pt->was_selected = pt->selected;
+      pt->clicked = 0;
+      pt->clign_decnt = 0;
+      pt++;
+    }
+  }
+  if (pp->active_tab == 0) { 
+    pp->active_tab = &pp->tabs[0]; pp->tabs[0].selected = pp->tabs[0].was_selected = 1; 
+  }
+  pp->survol_tab = NULL;
+  pp_tabs_set_pos(pp);
+  pp_tabs_set_visible_sites(pp);
+}
+
+static void
+pp_tabs_destroy_(PinnipedeTab **ptab, int *pnb) {
+  int i;
+  for (i=0; i < *pnb; i++) { free((*ptab)[i].site_name); }
+  if (*ptab) {
+    free(*ptab); *ptab = NULL; 
+  }
+  *pnb = 0;
+}
+
+void pp_tabs_destroy(Pinnipede *pp) {
+  pp_tabs_destroy_(&pp->tabs, &pp->nb_tabs);
+  pp->active_tab = NULL;
+}  
+
+void pp_tabs_rebuild(Dock *dock) {
+  Pinnipede *pp = dock->pinnipede;
+  PinnipedeTab *old_tabs = pp->tabs;
+  char *old_active_tab = pp->active_tab ? pp->active_tab->site_name : NULL;
+  int old_nb_tabs = pp->nb_tabs, i;
+  pp_tabs_build(dock);
+  for (i = 0; i < pp->nb_tabs; ++i) {
+    int j;
+    for (j = 0; j < old_nb_tabs; ++j) {
+      if (strcmp(pp->tabs[i].site_name, old_tabs[j].site_name) == 0) {
+        pp->tabs[i].selected = old_tabs[j].selected;
+        pp->tabs[i].was_selected = old_tabs[j].was_selected;
+      }
+      if (old_active_tab && strcmp(pp->tabs[i].site_name, old_active_tab) == 0) pp->active_tab = pp->tabs + i;
+    }
+  }
+  pp_tabs_destroy_(&old_tabs, &old_nb_tabs);
+  pp_tabs_set_visible_sites(pp);
+}
+
+
+int pp_tabs_is_site_visible(Dock *dock, Site *s) {
+  Pinnipede *pp = dock->pinnipede;
+  int i;
+  for (i=0; i < pp->nb_tabs; i++) {
+    if (pp->tabs[i].site == s && pp->tabs[i].selected) {
+      return 1;
+    }
+  }
+  return 0;
+}
+
+void
+pp_tabs_set_flag_answer_to_me(Dock *dock, Site *s)
+{
+  Pinnipede *pp = dock->pinnipede;
+  int i;
+  for (i=0; i < pp->nb_tabs; i++) {
+    if (pp->tabs[i].site == s) {
+      pp->tabs[i].clign_decnt = wmcc_tic_cnt;
+    }
+  }
+}
+
+
+static unsigned long 
+pp_tabs_bg_pixel_of_tab(Dock *dock, PinnipedeTab *pt) {
+  Pinnipede *pp = dock->pinnipede;
+  if (Prefs.pp_use_colored_tabs && pt->selected)
+    return cccolor_pixel(pp->win_bgcolor[pt->site->site_id]);
+  else
+    return cccolor_pixel(pp->minib_color);
+}
+
+static XPoint * get_grip(int *nb_points, int which) {
+  static XPoint *pts[2] = { NULL, NULL };
+  static int cnt = 0;
+  const char *grip[] = {"0001000000",
+                        "0001100000",
+                        "0001110000",
+                        "1111111000",
+                        "1111111100",
+                        "1111111110",
+                        "1111111111",
+                        "1111111110",
+                        "1111111100",
+                        "1111111000",
+                        "0001110000",
+                        "0001100000",
+                        "0001000000"};
+  if (pts[which] == NULL) {
+    int nx = strlen(grip[0]); 
+    int ny = sizeof grip / sizeof(char*);
+    int i,j, pi, pj;
+    cnt = 0;
+    for (i = 0; i < nx; ++i) 
+      for (j = 0; j < ny; ++j) 
+        if (grip[j][i] == '1') ++cnt;
+    ALLOC_VEC(pts[which], cnt+1, XPoint);
+    /* pour le CoordModePrevious -- man XDrawPoints */
+    pi = nx/2; pj = ny/2;
+    pts[which][0].x = pi; pts[which][0].y = pj;
+    cnt = 1;
+    for (i = 0; i < nx; ++i) 
+      for (j = 0; j < ny; ++j) 
+        if (grip[j][i] == '1') { 
+          if (which == 0) {
+            /* a gauche */
+            pts[which][cnt].x = i-pi; pts[which][cnt].y = j-pj; 
+          } else if (which == 1) {
+            /* a droite */
+            pts[which][cnt].x = pi-i; pts[which][cnt].y = j-pj; 
+          }
+          pi = i; pj = j;
+          ++cnt;
+        }
+  }
+  *nb_points = cnt;
+  return pts[which];
+}
+
+
+static void pp_tabs_draw_one_tab(Dock *dock, PinnipedeTab *pt, Drawable drawable, int d_x, int d_y)
+{
+  Pinnipede *pp = dock->pinnipede;
+  int w = pt->w, h=pt->h;
+  unsigned long bar_pixel = cccolor_pixel(pp->progress_bar_color), bgpixel;
+  Board *board = pt->site->board;
+  int fn_h = ccfont_height(pp->fn_minib);
+  int draw_grip = 0; /*  draw_grip : la fleche bleu.  < 0 -> � gauche, > 0 -> � droite*/
+
+  if (pt == pp->survol_tab && Prefs.pp_use_classical_tabs == 0) {
+    if (pp->survol_tab_part == PPT_MAY_SET_MAIN_TAB) draw_grip = -1;
+    else if (pp->survol_tab_part == PPT_MAY_UNSELECT_TAB) draw_grip = +1;
+  }
+  bgpixel = pp_tabs_bg_pixel_of_tab(dock,pt);
+
+  if (pt->clign_decnt) {
+    int decnt = wmcc_tic_cnt - pt->clign_decnt;
+    float c = (decnt % 50)/(70.0);
+    int b = 255*c + (bgpixel & 0x0000ff)*(1-c);
+    int r = ((bgpixel & 0xff0000)>>16)*(1-c); 
+    int g = ((bgpixel & 0x00ff00)>>8)*(1-c);
+    
+    if (decnt > FLAMOMETRE_TRIB_DUREE*(1000/WMCC_TIMER_DELAY_MS)) pt->clign_decnt = 0;
+    r = MIN(r,255);
+    g = MIN(g,255);
+    b = MIN(b,255);
+    XSetForeground(dock->display, dock->NormalGC, RGB2PIXEL(r,g,b));
+    XFillRectangle(dock->display, drawable, dock->NormalGC, 
+		   d_x, d_y+1, w-1, h-1);
+  } else { //if (Prefs.pp_use_colored_tabs) {
+    XSetForeground(dock->display, dock->NormalGC, bgpixel);    
+    XFillRectangle(dock->display, drawable, dock->NormalGC, 
+                   d_x, d_y+1, w-1, h-1);
+  }
+
+  if (pt->site->board->auto_refresh) {
+    XSetForeground(dock->display, dock->NormalGC, 
+                   cccolor_pixel(pp->minib_dark_color));
+    XDrawLine(dock->display, drawable, dock->NormalGC, d_x+w-6, d_y+h-5, d_x+w-2, d_y+h-1);
+    XDrawLine(dock->display, drawable, dock->NormalGC, d_x+w-6, d_y+h-1, d_x+w-2, d_y+h-5);
+  }
+  
+  XSetForeground(dock->display, dock->NormalGC, bar_pixel);
+  if (board->board_refresh_delay > 0 && board->auto_refresh) {
+    int zw = ((w-7)*MIN(board->board_refresh_delay - board->board_refresh_decnt,board->board_refresh_delay))/board->board_refresh_delay;
+    zw = (w-7 - zw);
+    //	printf("zw=%d %d %d %d\n",zw,board->board_refresh_cnt,board->board_refresh_delay, pt->w);
+    if (zw > 0) {
+      XFillRectangle(dock->display, drawable, dock->NormalGC, d_x, d_y+h-4, zw, 4);
+    }
+  }
+
+  /* les petites coches rouges */
+  if (pt->site->http_recent_error_cnt) {
+    int x0 = d_x+3;
+    int j;
+    XSetForeground(dock->display, dock->NormalGC, 
+                   pt->selected ? 
+                   IRGB2PIXEL(0xf04040) : IRGB2PIXEL(0xd0a0a0));
+    for (j=0; j < 4; ++j)
+      XDrawLine(dock->display, drawable, dock->NormalGC, 
+                d_x,d_y+h-1-j,d_x+3-j,d_y+h-1-j);
+    for (j=1; j < pt->site->http_recent_error_cnt && x0+10 < d_x+w; ++j) {
+      XDrawLine(dock->display, drawable, dock->NormalGC, 
+                x0,d_y+h-4,x0+3,d_y+h-1);
+      XDrawLine(dock->display, drawable, dock->NormalGC, 
+                x0+1,d_y+h-4,x0+4,d_y+h-1);
+      x0 += 4;
+    }
+  }
+
+  if (draw_grip) {
+    int nb_pts;
+    XPoint *gpts;
+    if (draw_grip < 0) {
+      gpts = get_grip(&nb_pts, 0);
+      gpts[0].x = d_x + 6;
+    } else {
+      gpts = get_grip(&nb_pts, 1);
+      gpts[0].x = d_x + pt->w - 8;
+    }
+    gpts[0].y = d_y + pt->h/2;
+    XSetForeground(dock->display, dock->NormalGC, IRGB2PIXEL(0x106fe5));
+    XDrawPoints(dock->display,  drawable, dock->NormalGC, gpts, nb_pts, CoordModePrevious);
+  }
+  {
+    char *t; 
+    int tw, tx, ty, tlen, clen;
+    CCColorId fgcolor = (bgpixel != 0L ? dock->gray_colors[3] : dock->gray_colors[8]);
+    int main_site = 0;
+    int cnt_new_msg = 0, cnt_unviewed_msg = 0;
+    int maxw = pt->w - (draw_grip ? 10 : 0), base_x = d_x + (draw_grip < 0 ? 10 : 0);
+    char scnt[10];
+    int cw, cx, cy;
+    int count_below_title = (pt->h >= fn_h*2 ? 1 : 0);
+    if (ccqueue_find(Q_BOARD_UPDATE, pt->site->site_id)) {
+      int l = ABS((wmcc_tic_cnt % 23) - 11);//*10;
+      t = ((wmcc_tic_cnt % 180) < 30) ? pt->site->prefs->site_name : "-queued-";
+      fgcolor = dock->gray_colors[l];//0x303030 + (l<<16) + (l<<8) + l;
+    } else {
+      t = pt->site->prefs->site_name;
+      if (pt == pp->active_tab) main_site = 1;
+      if (!pt->selected) fgcolor = dock->gray_colors[9];//pixel = 0x909090;
+      cnt_new_msg =  board->nb_msg_at_last_check;
+      cnt_unviewed_msg = board->nb_msg_since_last_viewed;
+    }
+    //tlen = MIN((int)strlen(t), maxw / MINIB_FN_W);
+    //tw = tlen * MINIB_FN_W;
+    
+    tlen = ccfont_text_within_width8(pp->fn_minib, t, -1, maxw, &tw);
+    if (cnt_new_msg && wmcc_tic_cnt - board->wmcc_tic_cnt_last_check < 50) {
+      snprintf(scnt, 10, "+%d", cnt_new_msg);
+      clen = ccfont_text_within_width8(pp->fn_minib, scnt, -1, (count_below_title ? maxw : maxw - tw) - 2, &cw);
+      /*clen = MIN((int)strlen(scnt), 
+                 count_below_title ? (maxw - 2)/MINIB_FN_W : (maxw - tw-2)/MINIB_FN_W);
+                 cw = clen * MINIB_FN_W;*/
+    } else if (cnt_unviewed_msg) {
+      snprintf(scnt, 10, "%d", cnt_unviewed_msg); //new_msg);
+      clen = ccfont_text_within_width8(pp->fn_minib, scnt, -1, (count_below_title ? maxw : maxw - tw) - 2, &cw);
+      /*clen = MIN((int)strlen(scnt), 
+                 count_below_title ? (maxw - 2)/MINIB_FN_W : (maxw - tw-2)/MINIB_FN_W);
+                 cw = clen * MINIB_FN_W;*/
+    } else { cw = 0; clen = 0; }
+    
+    /* position du titre et du compteur */
+    ty = d_y + ccfont_ascent(pp->fn_minib) + 1 + pt->clicked*2;
+    if (pt->h <= 12) ty--;
+    if (!count_below_title) {
+      tx = base_x + MAX((maxw - tw - cw - 2)/2,0);
+      cx = tx + tw + 4; 
+      cy = ty;
+    } else {
+      tx = base_x + MAX((maxw - tw - 2)/2,0);
+      cx = base_x + MAX((maxw - cw - 2)/2,0);
+      cy = ty + fn_h;
+      if (cw == 0) { // recentrage du titre
+        ty = d_y + (pt->h + fn_h)/2 - 2 + pt->clicked*2; 
+      }
+    }
+    if (!pt->selected) {
+      XSetForeground(dock->display, dock->NormalGC, cccolor_pixel(fgcolor));
+    } else {
+      XSetForeground(dock->display, dock->NormalGC, cccolor_pixel(fgcolor));
+      if (main_site && tlen && pp->tabs_pos != PPT_UP && pp->tabs_pos != PPT_DOWN) {
+        //XSetForeground(dock->display, dock->NormalGC, IRGB2PIXEL(fgpixel));//IRGB2PIXEL(0x80ff80));
+        //XDrawString(dock->display, drawable, dock->NormalGC, tx+1, ty+1, t, tlen);
+        XDrawLine(dock->display, drawable, dock->NormalGC, tx-1, ty+1, tx+tw, ty+1);
+      }
+    }
+    //printf("t = %s, tw=%d tlen=%d tx=%d ww=%d\n", t, tw, tlen, tx, ccfont_text_width8(pp->fn_minib, t, -1));
+    ccfont_draw_string8(pp->fn_minib, fgcolor, drawable, tx, ty, t, tlen); /* COUL */
+    //XDrawString(dock->display, drawable, dock->NormalGC, tx, ty, t, strlen(t));
+    if (cw && clen) {
+      //XSetForeground(dock->display, dock->NormalGC, IRGB2PIXEL(pt->selected ? 0x000080 : 0x8080a0)); /* COUL */
+    ccfont_draw_string8(pp->fn_minib, dock->blue_color, drawable, cx, cy, scnt, clen);
+    //XDrawString(dock->display, drawable, dock->NormalGC, cx, cy, scnt, clen);
+    }
+  }
+}
+
+void
+pp_tabs_refresh(Dock *dock)
+{
+  Pinnipede *pp = dock->pinnipede;
+  if (pp->nb_tabs == 0) return;
+  //XSetFont(dock->display, dock->NormalGC, pp->fn_minib->fid);
+
+  /* dessin general */
+  //  XSetForeground(dock->display, dock->NormalGC, pp->minib_pixel);
+
+  /* dessin des lignes */
+  if (pp->tabs_pos == PPT_DOWN || pp->tabs_pos == PPT_UP) {
+    int y1, y2,i;
+    y1 = 0; y2 = pp->tabs[0].h - 1;
+    if (pp->tabs_pos == PPT_UP) {
+      int tmp = y1; y1 = y2; y2 = tmp; 
+    }
+
+
+    /* efface toute la ligne */
+    XSetForeground(dock->display, dock->NormalGC, cccolor_pixel(pp->minib_color));
+    XFillRectangle(dock->display, pp->lpix, dock->NormalGC, 
+		   0, 0, pp->win_width, pp->fn_h);
+
+    /* dessine la ligne du haut */
+    XSetForeground(dock->display, dock->NormalGC, cccolor_pixel(pp->minib_dark_color));
+    XDrawLine(dock->display, pp->lpix, dock->NormalGC, 0, y1, pp->tabs_w, y1); 
+
+
+    for (i=0; i < pp->nb_tabs; i++) {
+      PinnipedeTab *pt = &pp->tabs[i];
+      /* le separateur � droite */
+      XSetForeground(dock->display, dock->NormalGC, cccolor_pixel(pp->minib_dark_color));
+      XDrawLine(dock->display, pp->lpix, dock->NormalGC, pt->x+pt->w-1, 
+                0, pt->x+pt->w-1, pt->h-1);
+
+      pp_tabs_draw_one_tab(dock, pt, pp->lpix, pt->x, 0);
+    }
+
+    /* "ouvre" le tab active */
+    XSetForeground(dock->display, dock->NormalGC, pp_tabs_bg_pixel_of_tab(dock,pp->active_tab));
+    XDrawLine(dock->display, pp->lpix, dock->NormalGC, 
+              pp->active_tab->x-1, y1, pp->active_tab->x + pp->active_tab->w-1, y1);
+
+    /* et hop */
+    XCopyArea(dock->display, pp->lpix, pp->win, dock->NormalGC,
+              0,0,pp->tabs_w, pp->tabs[0].h, pp->tabs[0].x,pp->tabs[0].y);
+  } else {
+    int i;
+    /* efface toute la ligne */
+    XSetForeground(dock->display, dock->NormalGC, cccolor_pixel(pp->minib_color));
+    XFillRectangle(dock->display, pp->lpix, dock->NormalGC, 
+                   0, 0, pp->tabs[0].w, pp->tabs[0].h);
+    for (i=0; i < pp->nb_tabs; i++) {
+      PinnipedeTab *pt = &pp->tabs[i];
+      PinnipedeTab *npt = (i<pp->nb_tabs-1) ? &pp->tabs[i+1] : NULL;
+      int xbord = (pp->tabs_pos == PPT_LEFT ?  pt->x+pt->w-1 : pt->x);
+      //int dx = (pp->tabs_pos == PPT_LEFT ? -1 : +1);
+      /* le contenu */
+      pp_tabs_draw_one_tab(dock, &pp->tabs[i], pp->lpix, 0, 0);
+
+      /* le separateur � droite */
+      XSetForeground(dock->display, dock->NormalGC, pt != pp->active_tab ?
+                     cccolor_pixel(pp->minib_dark_color) : pp_tabs_bg_pixel_of_tab(dock,pt));
+      XDrawLine(dock->display, pp->lpix, dock->NormalGC, xbord, 
+                0, xbord, pt->h);
+
+      /* le point en haut � droite si le prochain tab est le principal
+         pour l'effet "vaguement arondi" */
+      if (npt == pp->active_tab) { 
+        XSetForeground(dock->display, dock->NormalGC, pp_tabs_bg_pixel_of_tab(dock,npt));
+        XDrawPoint(dock->display, pp->lpix, dock->NormalGC, xbord, 0);
+      }
+
+      /* la ligne du haut */
+      if (pt == pp->active_tab || npt == NULL || npt == pp->active_tab) {
+        XSetForeground(dock->display, dock->NormalGC, cccolor_pixel(pp->minib_dark_color));
+      } else if (!pt->selected && !npt->selected) {
+        XSetForeground(dock->display, dock->NormalGC, IRGB2PIXEL(0xC0C0C0));
+      } else {
+        XSetForeground(dock->display, dock->NormalGC, cccolor_pixel(pp->minib_dark_color));
+      }
+      XDrawLine(dock->display, pp->lpix, dock->NormalGC, 0, 0, pt->w-2, 0);
+      /* la ligne a gauche pour le tab principal */
+      /*      if (pt == pp->active_tab) {
+        XDrawLine(dock->display, pp->lpix, dock->NormalGC, pt->x, 0, pt->x, pt->h-1);
+        XDrawLine(dock->display, pp->lpix, dock->NormalGC, pt->x, pt->h-1, pt->w-2, pt->h-1);
+        XSetForeground(dock->display, dock->NormalGC, IRGB2PIXEL(0xC0C0C0));
+        XDrawLine(dock->display, pp->lpix, dock->NormalGC, pt->x, 1, pt->w-2, 1);
+        }*/
+
+      XCopyArea(dock->display, pp->lpix, pp->win, dock->NormalGC,
+                0,0,pp->tabs[i].w, pp->tabs[i].h, pp->tabs[i].x + (pp->tabs_pos == PPT_RIGHT ? 1 : 0),pp->tabs[i].y);
+    }
+  }
+
+  //  printf("tabs_w = %d, mb_w = %d\n", pp->tabs_width, pp->mb_buttonbar_width);
+}
+
+static PinnipedeTab *
+pp_tabs_at_xy(Dock *dock, int x, int y, ppt_survol_actions *pi) {
+  Pinnipede *pp = dock->pinnipede;
+  int i;
+  if (pi) *pi = PPT_NORMAL_ACTION;
+  for (i=0; i < pp->nb_tabs; i++) {
+    PinnipedeTab *pt = &pp->tabs[i];
+    if (x >= pt->x && y >= pt->y && 
+	x <= pt->x + pt->w-1 && 
+	y <= pt->y + pt->h-1) {
+      if (pi) {
+        if (x - pt->x <= pt->w/4/* && pt != pp->active_tab*/) *pi = PPT_MAY_SET_MAIN_TAB;
+        else if (pt->x + pt->w - x <= pt->w/4 && pt->selected/* && pt != pp->active_tab*/) *pi = PPT_MAY_UNSELECT_TAB;
+      }
+      return pt;
+    }
+  }
+  return NULL;
+}
+
+static PinnipedeTab *
+pp_tabs_pressed_tab(Dock *dock)
+{
+  Pinnipede *pp = dock->pinnipede;
+  int i;
+
+  for (i=0; i < pp->nb_tabs; i++) {
+    if (pp->tabs[i].clicked)
+      return &pp->tabs[i];
+  }
+  return NULL;
+}
+
+static void pp_tabs_handle_motion(Dock *dock, XMotionEvent *ev) {
+  Pinnipede *pp = dock->pinnipede;
+  PinnipedeTab *pt;
+  int refresh = 0;
+  ppt_survol_actions survol_part;
+  //static int flag = 0;
+  pt = pp_tabs_at_xy(dock, ev->x, ev->y, &survol_part);
+  /*if (pt && (ev->state & ShiftMask)) {
+      if (flag != pt->site->site_id+1) { flag = pt->site->site_id + 1; refresh = 1; }
+    pp_tabs_set_tmp_one_visible_site(pp,pt->site->site_id);
+  } else if (flag) {
+    pp_tabs_set_visible_sites(pp);
+    flag = 0; refresh = 1;
+    } */
+  /* affichage des fleches bleues */
+  if (pt != pp->survol_tab || survol_part != pp->survol_tab_part) {
+    pp->survol_tab = pt; 
+    pp->survol_tab_part = survol_part;
+    pp_widgets_refresh(dock);
+    refresh = 1;
+  }
+  /*if (refresh) {
+    pp_update_and_redraw(dock,get_last_id_filtered(dock->sites->boards, &pp->filter), 100,0,1);
+    }*/
+}
+
+static int
+pp_tabs_handle_button_press(Dock *dock, XButtonEvent *ev) {
+  //  Pinnipede *pp = dock->pinnipede;
+  PinnipedeTab *pt;
+  pt = pp_tabs_at_xy(dock, ev->x, ev->y, NULL);
+  if (pt) {
+    pt->clicked = 1;
+    pp_minib_refresh(dock);
+    return 1;
+  } else return 0;
+}
+
+
+void pp_tabs_switch_all_selected(Pinnipede *pp) {
+  int i;
+  if (pp_tabs_nb_selected(pp) == 1) {
+    pp_tabs_save_selected(pp);
+    for (i=0; i < pp->nb_tabs; i++) pp->tabs[i].selected = 1;
+  } else {
+    pp_tabs_save_selected(pp);
+    for (i=0; i < pp->nb_tabs; i++) pp->tabs[i].selected = (i == pp->active_tab - pp->tabs) ? 1 : 0;
+  }
+}
+
+/* effectue la rotation bizarre 1 tabs actif/tous les tabs/etc */
+void pp_tabs_cliquouille(Pinnipede *pp, PinnipedeTab *pt, ppt_survol_actions survol_part) {
+  int i, nb_selected = pp_tabs_nb_selected(pp);
+  //printf("cliquouille %d, selected = %d, nb_sel=%d, part=%d\n", pt - pp->tabs, pt->selected, nb_selected, survol_part);
+  if (Prefs.pp_use_classical_tabs) {
+    pp->active_tab = pt;
+    for (i=0; i < pp->nb_tabs; i++) 
+      pp->tabs[i].selected = (pp->tabs+i == pt);
+  } else if (survol_part == PPT_MAY_UNSELECT_TAB) {
+    if (pt->selected && nb_selected > 1) { pt->selected = 0; pp_tabs_save_selected(pp); }
+    else if (nb_selected == 1) pp_tabs_swap_selected(pp);
+    else { pt->selected = 1; pp_tabs_save_selected(pp); }
+  } else if (survol_part == PPT_MAY_SET_MAIN_TAB) {
+    if (pt == pp->active_tab && nb_selected == 1) { pp_tabs_restore_selected(pp); }
+    else { 
+      //if (nb_selected > 1 || !pt->selected) pp_tabs_save_selected(pp);
+      for (i=0; i < pp->nb_tabs; i++) {
+        pp->tabs[i].selected = (pp->tabs+i == pt);
+      }
+      pp->active_tab = pt;
+    }
+  } else {
+    if (!pt->selected) { pt->selected = 1; pp_tabs_save_selected(pp); }
+    else if (pt != pp->active_tab) { pp->active_tab = pt; pp_tabs_save_selected(pp); }
+    else { if (nb_selected == 1) pp_tabs_restore_selected(pp); else pp_tabs_select_only_one(pp,pp->active_tab); }
+  }
+  pp_tabs_check_active(pp);
+}
+
+static int
+pp_tabs_handle_button_release(Dock *dock, XButtonEvent *event)
+{
+  Pinnipede *pp = dock->pinnipede;
+  PinnipedeTab *pt;
+  int i,ret = 0, need_refresh=0;
+  ppt_survol_actions survol_part;
+  pt = pp_tabs_at_xy(dock, event->x, event->y, &survol_part);
+  if (pt && pt->clicked == 1) {
+    Board *board = pt->site->board;
+    if (event->button == Button1) {
+      if ((event->state & (ControlMask | ShiftMask)) == 0 ) {
+        pp_tabs_cliquouille(pp,pt,survol_part);
+#if 0
+        /*	if (event->x > pt->x + pt->w - 6 && event->y > pt->y + pt->h - 6) {
+	  board->auto_refresh = 1-board->auto_refresh;
+          } else {*/
+	  /* clic 'classique sur une tab */
+        //printf("clic : %d, %d , tab = %d,%d\n", event->x , event->y, pt->x, pt->y);
+        if (Prefs.pp_use_classical_tabs || survol_part == PPT_MAY_SET_MAIN_TAB) {
+          pp->active_tab = pt;
+          for (i=0; i < pp->nb_tabs; i++) 
+            pp->tabs[i].selected = (pp->tabs+i == pt);
+          
+        } else if (survol_part == PPT_MAY_UNSELECT_TAB) {
+          assert(pp->active_tab != pt);
+          pt->selected = 0;
+        } else {	  /* clic plus tordu */
+          pp_tabs_cliquouille(pp, pt);
+        }
+          /*	}*/
+      } else if ((event->state & (ControlMask))) { /* ctrl-left clic */
+	if (pt->selected) {
+	  if (pt == pp->active_tab) {
+	    for (i=0; i < pp->nb_tabs; ++i)
+	      if (pt != pp->tabs+i && pp->tabs[i].selected) { pp->active_tab = pp->tabs+i; break; }
+	  }
+	  if (pt != pp->active_tab) pt->selected = 0;
+	} else {
+	  pt->selected = 1;
+	}
+#endif
+      } else { /* shift-left clic */
+        board->auto_refresh = 1-board->auto_refresh;
+      }
+    } else if (event->button == Button2) {
+      ccqueue_push_board_update(pt->site->site_id);
+      pt->site->board->board_refresh_decnt = pt->site->board->board_refresh_delay;
+    } else if (event->button == Button3) {
+      //if (pt->selected == 0) pt->selected = 1;
+      if (editw_ismapped(dock->editw) == 0) {
+	editw_show(dock, pt->site->prefs, 0);
+      } else editw_change_current_site(dock, pt->site->site_id);
+    }
+    pp_tabs_changed(dock);
+    ret = 1;
+  }
+  for (i=0; i < pp->nb_tabs; i++) {
+    if (pp->tabs[i].clicked) need_refresh = 1;
+    pp->tabs[i].clicked = 0;
+  }
+
+  if (need_refresh) pp_tabs_refresh(dock);
+  return ret;
+}
+
+void pp_tabs_changed(Dock *dock) {
+  Pinnipede *pp = dock->pinnipede;
+  if (pp->active_tab) {
+    pp_tabs_set_visible_sites(pp);
+    pp->flag_pp_update_request = 1;
+    if (pp_tabs_nb_selected(pp) == 1)
+      board_set_viewed(pp->active_tab->site->board, pp->active_tab->site->board->last_post_id);
+  }  
+}
+
+void
+pp_change_active_tab(Dock *dock, int dir) {
+  Pinnipede *pp = dock->pinnipede;
+  if (pp->active_tab) {
+    pp->active_tab+=dir;
+    if (pp->active_tab >= pp->tabs + pp->nb_tabs) pp->active_tab = pp->tabs;    
+    else if (pp->active_tab < pp->tabs) pp->active_tab = pp->tabs + pp->nb_tabs -1;
+  } else pp->active_tab = pp->tabs;
+  pp_tabs_select_only_one(pp, pp->active_tab);
+  pp_tabs_changed(dock);
+}
+
+
+
+/* ------------------- gestion de la barre de boutons -------------------------- */
+static void
+pp_minib_set_pos(Pinnipede *pp)
+{
+  int i;
+
+  int x;
+
+  x = pp->win_width; //(pp->sc ? SC_W : 0);
+  i = 0;
+  pp->mb[i].type = HELP;            pp->mb[i].w = SC_W-1; x -= pp->mb[i].w; pp->mb[i].x = x; i++;
+  pp->mb[i].type = SCROLLBAR;       pp->mb[i].w = 12; x -= pp->mb[i].w; pp->mb[i].x = x; i++;
+  pp->mb[i].type = BALLTRAP;        pp->mb[i].w = 22; x -= pp->mb[i].w; pp->mb[i].x = x; i++;
+  pp->mb[i].type = TRANSPARENT;     pp->mb[i].w = 12; x -= pp->mb[i].w; pp->mb[i].x = x; i++;
+  pp->mb[i].type = UA;              pp->mb[i].w = 12; x -= pp->mb[i].w; pp->mb[i].x = x; i++;
+  // pp->mb[i].type = SECOND;          pp->mb[i].w = 12; x -= pp->mb[i].w; pp->mb[i].x = x; i++;
+  //  pp->mb[i].type = TSCORE;          pp->mb[i].w = 12; x -= pp->mb[i].w; pp->mb[i].x = x; i++;
+  //pp->mb[i].type = FORTUNE;         pp->mb[i].w = 12; x -= pp->mb[i].w; pp->mb[i].x = x; i++;
+  pp->mb[i].type = FILTER;          pp->mb[i].w = 12; x -= pp->mb[i].w; pp->mb[i].x = x; i++;
+  pp->mb[i].type = PLOPIFY;         pp->mb[i].w = 12; x -= pp->mb[i].w; pp->mb[i].x = x; i++;
+  pp->mb[i].type = PREFS;           pp->mb[i].w = 40; x -= pp->mb[i].w; pp->mb[i].x = x; i++;
+  pp->mb[i].type = MB_RSS;          pp->mb[i].w = 40; x -= pp->mb[i].w; pp->mb[i].x = x; i++;
+  pp->mb[i].type = MB_BOARDS;       pp->mb[i].w = 40; x -= pp->mb[i].w; pp->mb[i].x = x; i++;
+  pp->mb[i].type = CANCEL;          pp->mb[i].w = 12; x -= pp->mb[i].w; pp->mb[i].x = x; i++;
+
+  //  pp->mb[i].type = REFRESH_NEWS;    pp->mb[i].w = 60; x -= pp->mb[i].w; pp->mb[i].x = x; i++;
+  //  pp->mb[i].type = REFRESH_TRIBUNE; pp->mb[i].w = 60; x -= pp->mb[i].w; pp->mb[i].x = x; i++;
+  pp->mb_buttonbar_width = pp->win_width - x;
+
+  assert(i == NB_MINIB);
+
+  for (i=0; i < NB_MINIB; i++) {
+    pp->mb[i].clicked = 0;
+    pp->mb[i].y = pp->win_height - MINIB_H;
+    pp->mb[i].h = MINIB_H;
+  }
+  pp->mb_min_width = MIN(pp->win_width, 230 + pp->mb_buttonbar_width);
+}
+
+
+/* a nice piece of shit, if i can say */
+void
+pp_minib_refresh(Dock *dock)
+{
+  Pinnipede *pp = dock->pinnipede;
+  Boards *boards = dock->sites->boards;
+  SitePrefs *main_prefs; 
+  Site *main_site;
+  int i,x,y;
+
+  int x_minib;
+
+  main_prefs = pp->active_tab->site->prefs;
+  main_site = pp->active_tab->site;
+
+  if (pp->use_minibar == 0) return;
+
+  /* dessin general */
+  XSetForeground(dock->display, dock->NormalGC, cccolor_pixel(pp->minib_color));
+  XFillRectangle(dock->display, pp->lpix, dock->NormalGC, 0, 1, pp->win_width, MINIB_H-1);
+  XSetForeground(dock->display, dock->NormalGC, cccolor_pixel(pp->minib_dark_color));
+  XDrawLine(dock->display, pp->lpix, dock->NormalGC, 0, 0, pp->win_width, 0);
+
+  x_minib = pp->mb[0].x;
+  for (i=0; i < NB_MINIB; i++) x_minib = MIN(x_minib, pp->mb[i].x);
+
+  //XSetFont(dock->display, dock->NormalGC, pp->fn_minib->fid);
+  if (pp->filter.filter_mode) {
+    char s_filtre[70];
+    
+    if (pp->filter.filter_name) {
+      snprintf(s_filtre, 60, "%.40s [match:%d msg]", 
+	       pp->filter.filter_name, count_all_id_filtered(boards, &pp->filter));
+    } else {
+      snprintf(s_filtre, 60, _("FILTER UNDEFINED"));
+    }
+    ccfont_draw_string8(pp->fn_minib, pp->minib_dark_color, pp->lpix, 5+pp->mb_x0, ccfont_ascent(pp->fn_minib), s_filtre, strlen(s_filtre));
+    //XSetForeground(dock->display, dock->NormalGC, cccolor_pixel(pp->minib_dark_color));
+    //XDrawString(dock->display, pp->lpix, dock->NormalGC, 5+pp->mb_x0, pp->fn_minib->ascent+2, s_filtre, strlen(s_filtre));
+  } else {
+    /* affichage d'infos diverses */
+
+    char s_site[20], s_what[60], s_http_stats[40], s_msg_cnt[30];
+    int x, w;
+    s_site[0] = 0; s_what[0] = 0; s_msg_cnt[0] = 0;
+    if (dl_info_site) snprintf(s_site, sizeof s_site, "[%s]", dl_info_site);
+    if (dl_info_what) snprintf(s_what, sizeof s_what, "[%s] (ESC to cancel)", dl_info_what);
+
+    snprintf(s_http_stats, sizeof s_http_stats, "UP:%d, DL:%d", global_http_upload_cnt, global_http_download_cnt);
+    snprintf(s_msg_cnt, sizeof s_msg_cnt, "%d msg", pp->non_filtered_message_count);
+    
+    x = 5+pp->mb_x0;
+    w = ccfont_text_width8(pp->fn_minib, s_site, -1); //w = MINIB_FN_W*strlen(s_site);
+    if (x+w < x_minib && w) {
+      ccfont_draw_string8(pp->fn_minib, dock->blue_color, pp->lpix, x, (ccfont_ascent(pp->fn_minib)), s_site, strlen(s_site));
+      x += w + 6;
+    }
+
+    w = ccfont_text_width8(pp->fn_minib, s_what, -1); //MINIB_FN_W*strlen(s_what);
+    if (x+w < x_minib && w) {
+      ccfont_draw_string8(pp->fn_minib, dock->blue_color, pp->lpix, x, (ccfont_ascent(pp->fn_minib)), s_what, strlen(s_what));
+      x += w + 6;
+    }
+
+    XSetForeground(dock->display, dock->NormalGC, BlackPixel(dock->display, dock->screennum));
+
+    if (strlen(s_http_stats)) {
+      w = ccfont_text_width8(pp->fn_minib, s_http_stats, -1);
+      if (x+w < x_minib) {
+        ccfont_draw_string8(pp->fn_minib, pp->minib_dark_color, pp->lpix, x, (ccfont_ascent(pp->fn_minib)), s_http_stats, strlen(s_http_stats));
+        x += w + 6;
+      }
+    }
+    if (strlen(s_msg_cnt)) {
+      w = ccfont_text_width8(pp->fn_minib, s_msg_cnt, -1);
+      if (x+w < x_minib) {
+        ccfont_draw_string8(pp->fn_minib, pp->minib_dark_color, pp->lpix, x, (ccfont_ascent(pp->fn_minib)), s_msg_cnt, strlen(s_msg_cnt));
+      }
+    }
+  }
+
+  /* dessin des boutons */
+  for (i=0;i < NB_MINIB; i++) {
+    int xc;
+
+    x = pp->mb[i].x;
+    xc = x + pp->mb[i].w / 2;
+    y = 1;
+
+    XSetForeground(dock->display, dock->NormalGC, cccolor_pixel(pp->minib_dark_color));
+
+    if (pp->mb[i].type != CANCEL || dl_info_site)
+      XDrawRectangle(dock->display, pp->lpix, dock->NormalGC, x, 0, pp->mb[i].w, pp->mb[i].h);
+
+
+/*     if (pp->mb[i].clicked && pp->mb[i].type != REFRESH_TRIBUNE && pp->mb[i].type != REFRESH_NEWS) { */
+    XSetForeground(dock->display, dock->NormalGC, cccolor_pixel(pp->minib_color));
+      XFillRectangle(dock->display, pp->lpix, dock->NormalGC, x+1, 1, pp->mb[i].w-2, pp->mb[i].h-2);
+/*     }     */
+    switch (pp->mb[i].type) {
+      case SCROLLBAR:
+        {
+          XSetForeground(dock->display, dock->NormalGC, cccolor_pixel(pp->minib_dark_color));
+          XDrawLine(dock->display, pp->lpix, dock->NormalGC, xc, 2, xc, pp->mb[i].h-2);
+          XDrawLine(dock->display, pp->lpix, dock->NormalGC, xc-1, 3, xc-1, pp->mb[i].h-3);
+          XDrawLine(dock->display, pp->lpix, dock->NormalGC, xc-2, 4, xc-2, pp->mb[i].h-4);
+          XDrawLine(dock->display, pp->lpix, dock->NormalGC, xc+1, 3, xc+1, pp->mb[i].h-3);
+          XDrawLine(dock->display, pp->lpix, dock->NormalGC, xc+2, 4, xc+2, pp->mb[i].h-4);
+        } break;
+      case BALLTRAP: 
+        {
+          XCopyArea(dock->display, pp->miniduck_pixmap, pp->lpix, dock->NormalGC, (Prefs.hunt_opened ? 0 : 19), 0, 19, 11, x+2, 2);
+        } break;
+      case TRANSPARENT:
+        {
+          int j;
+          for (j=0; j < 7; j++) {
+            XSetForeground(dock->display, dock->NormalGC, RGB2PIXEL((j*40),(6-j)*30,0));
+            XDrawLine(dock->display, pp->lpix, dock->NormalGC, xc+j-3, 3, xc+j-3, pp->mb[i].h-3);
+          }
+        } break;
+      case MB_RSS:
+      case MB_BOARDS:
+        {
+          char *s = (i == MB_RSS ? "feeds" : "boards");
+          int w = ccfont_text_width8(pp->fn_minib, s, -1);
+          //XSetForeground(dock->display, dock->NormalGC, IRGB2PIXEL(0x303030)); 
+          //XDrawString(dock->display, pp->lpix, dock->NormalGC, xc-(MINIB_FN_W*strlen(s))/2, pp->fn_minib->ascent+2, s, strlen(s));
+          ccfont_draw_string8(pp->fn_minib, dock->gray_colors[3], pp->lpix, xc-w/2, ccfont_ascent(pp->fn_minib), s, -1);
+        } break;
+      case PREFS:
+        {
+          char *s;
+          CCColorId cid;
+          if (ccqueue_find(Q_PREFS_UPDATE, -1) == NULL) {
+            s = "wmc�";
+            //XSetForeground(dock->display, dock->NormalGC, IRGB2PIXEL(0x303030)); /* COUL */
+            cid = dock->gray_colors[3];
+          } else {
+            if ((wmcc_tic_cnt % 24) < 12) s = "updt!";
+            else s = "wait";
+            //XSetForeground(dock->display, dock->NormalGC, IRGB2PIXEL(0xff3000 + (wmcc_tic_cnt & 0xff))); /* COUL */
+            cid = dock->gray_colors[3 + (wmcc_tic_cnt/16)%12];
+          }
+          //XDrawString(dock->display, pp->lpix, dock->NormalGC, xc-(MINIB_FN_W*strlen(s))/2, pp->fn_minib->ascent+2, s, strlen(s));
+          int w = ccfont_text_width8(pp->fn_minib, s, -1);
+          ccfont_draw_string8(pp->fn_minib, cid, pp->lpix, xc-w/2, ccfont_ascent(pp->fn_minib), s, -1);
+        } break;
+        
+      case HELP:
+        {
+          //XSetForeground(dock->display, dock->NormalGC, IRGB2PIXEL(0x303030)); /* COUL */
+          //XDrawString(dock->display, pp->lpix, dock->NormalGC, xc-MINIB_FN_W/2+1, pp->fn_minib->ascent+1, "?", 1);
+          char *s = "?";
+          int w = ccfont_text_width8(pp->fn_minib, s, -1);
+          ccfont_draw_string8(pp->fn_minib, dock->gray_colors[3], pp->lpix, xc-w/2, ccfont_ascent(pp->fn_minib), s, -1);
+        } break;
+        /*
+          case SECOND:
+          {
+          int rx, rw, ry, rh;
+          
+          rx = x + 3; ry  = y+2; rw = pp->mb[i].w-6; rh = pp->mb[i].h-6;
+          XSetForeground(dock->display, dock->NormalGC, pp->timestamp_pixel[main_site->site_id]);
+          
+          if (pp->show_sec_mode == 0) {
+	  XFillRectangle(dock->display, pp->lpix, dock->NormalGC, rx, ry, rw+1, rh+1);
+          } else {
+	  XDrawRectangle(dock->display, pp->lpix, dock->NormalGC, rx, ry, rw, rh);
+          }
+          } break;
+          case TSCORE:
+          {
+	int rx, rw, ry, rh;
+
+	rx = x + 3; ry  = y+2; rw = pp->mb[i].w-6; rh = pp->mb[i].h-6;
+	XSetForeground(dock->display, dock->NormalGC, pp->trollscore_pixel[main_site->site_id]);
+	
+	if (pp->trollscore_mode) {
+	  XFillRectangle(dock->display, pp->lpix, dock->NormalGC, rx, ry, rw+1, rh+1);
+	} else {
+	  XDrawRectangle(dock->display, pp->lpix, dock->NormalGC, rx, ry, rw, rh);
+	}
+      } break;
+      */
+      /*case FORTUNE:
+      {
+	int rx, rw, ry, rh;
+
+	rx = x + 3; ry  = y+2; rw = pp->mb[i].w-6; rh = pp->mb[i].h-6;
+	XSetForeground(dock->display, dock->NormalGC, IRGB2PIXEL(0x8f8060));
+	
+	if (pp->fortune_mode) {
+	  XFillRectangle(dock->display, pp->lpix, dock->NormalGC, rx, ry, rw+1, rh+1);
+	} else {
+	  XDrawRectangle(dock->display, pp->lpix, dock->NormalGC, rx, ry, rw, rh);
+	}
+      } break;
+      */
+      case FILTER:
+        {
+          int rx, rw, ry, rh;
+          
+          rx = x + 3; ry  = y+2; rw = pp->mb[i].w-6; rh = pp->mb[i].h-6;
+          XSetForeground(dock->display, dock->NormalGC, cccolor_pixel(pp->lnk_color[main_site->site_id]));
+          
+          if (pp->filter.filter_mode) {
+            XFillRectangle(dock->display, pp->lpix, dock->NormalGC, rx, ry, rw+1, rh+1);
+          } else {
+            XDrawRectangle(dock->display, pp->lpix, dock->NormalGC, rx, ry, rw, rh);
+          }
+        } break;
+      case PLOPIFY:
+        {
+          int rx, rw, ry, rh;
+          
+          rx = x + 3; ry  = y+2; rw = pp->mb[i].w-6; rh = pp->mb[i].h-6;
+          XSetForeground(dock->display, dock->NormalGC, cccolor_pixel(pp->plopify_color));
+          
+          if (pp->disable_plopify) {
+            XFillRectangle(dock->display, pp->lpix, dock->NormalGC, rx, ry, rw+1, rh+1);
+          } else {
+            XDrawRectangle(dock->display, pp->lpix, dock->NormalGC, rx, ry, rw, rh);
+          }
+        } break;
+      case UA:
+        {
+          int rx, rw, ry, rh;
+          
+          rx = x + 3; ry  = y+2; rw = pp->mb[i].w-6; rh = pp->mb[i].h-6;
+          XSetForeground(dock->display, dock->NormalGC, cccolor_pixel(pp->useragent_color[main_site->site_id]));
+          
+          XDrawRectangle(dock->display, pp->lpix, dock->NormalGC, rx, ry, rw, rh);
+          if (pp->nick_mode == 3) {
+            XFillRectangle(dock->display, pp->lpix, dock->NormalGC, rx, ry, rw, rh);
+          } else if (pp->nick_mode == 1) {
+            XFillRectangle(dock->display, pp->lpix, dock->NormalGC, rx,ry,xc-rx+1,rh);
+          } else if (pp->nick_mode == 2) {
+            XFillRectangle(dock->display, pp->lpix, dock->NormalGC, xc,ry,xc-rx+1,rh);
+          } else if (pp->nick_mode == 4) {
+            XDrawLine(dock->display, pp->lpix, dock->NormalGC, xc, ry, xc, ry+rh-1);
+          }
+        } break;
+      case CANCEL:
+        if (dl_info_site) {
+          int rx, rw, ry, rh;
+          rx = x + 3; ry  = y+2; rw = pp->mb[i].w-5; rh = pp->mb[i].h-5;
+          XSetForeground(dock->display, dock->NormalGC, IRGB2PIXEL(0x8080ff));
+          if (flag_cancel_task == 0) {
+            XFillRectangle(dock->display, pp->lpix, dock->NormalGC, rx, ry, rw, rh);
+            XSetForeground(dock->display, dock->NormalGC, IRGB2PIXEL(0xb0b0ff));
+            XDrawLine(dock->display, pp->lpix, dock->NormalGC, rx + (wmcc_tic_cnt/5)%rw, ry,
+                      rx + (wmcc_tic_cnt/5)%rw, ry+rh-1);
+            XDrawLine(dock->display, pp->lpix, dock->NormalGC, rx, ry + (wmcc_tic_cnt/5)%rh, 
+                      rx+rw-1, ry + (wmcc_tic_cnt/5)%rh);
+          } else {
+            XDrawLine(dock->display, pp->lpix, dock->NormalGC, 
+                      x+1,y+1,x+pp->mb[i].w-2, y+pp->mb[i].h-2);
+            XDrawLine(dock->display, pp->lpix, dock->NormalGC, 
+                      x+1,y+pp->mb[i].h-2,x+pp->mb[i].w-2, y+1);
+          }
+        } break;
+      default:
+        abort(); break;
+    }
+  }
+
+  /* et hop */
+  XCopyArea(dock->display, pp->lpix, pp->win, dock->NormalGC,
+	    pp->mb_x0,0,pp->win_width - pp->mb_x0, MINIB_H, 
+	    pp->mb_x0, MINIB_Y0);
+
+}
+
+
+static PPMinib *
+pp_minib_get_button(Dock *dock, int x, int y)
+{
+  Pinnipede *pp = dock->pinnipede;
+  int i;
+
+  for (i=0; i < NB_MINIB; i++) {
+    if (x >= pp->mb[i].x && x < pp->mb[i].x+pp->mb[i].w && 
+	y >= pp->mb[i].y && y < pp->mb[i].y+pp->mb[i].h) {
+      if (pp->mb[i].type != CANCEL || dl_info_site)
+	return &pp->mb[i];
+    }
+  }
+  return NULL;
+}
+
+static PPMinib *
+pp_minib_pressed_button(Dock *dock)
+{
+  Pinnipede *pp = dock->pinnipede;
+  int i;
+
+  for (i=0; i < NB_MINIB; i++) {
+    if (pp->mb[i].clicked)
+      if (pp->mb[i].type != CANCEL || dl_info_site)
+	return &pp->mb[i];
+  }
+  return NULL;
+}
+
+void
+pp_minib_show(Dock *dock) 
+{
+  Pinnipede *pp = dock->pinnipede;
+  pp->use_minibar = 1;
+  pp_tabs_set_pos(pp);
+}
+
+void 
+pp_minib_hide(Dock *dock) 
+{
+  Pinnipede *pp = dock->pinnipede;
+  pp->use_minibar = 0;
+  pp_tabs_set_pos(pp);
+}
+
+
+
+static int
+pp_minib_handle_button_press(Dock *dock, XButtonEvent *ev) {
+  Pinnipede *pp = dock->pinnipede;
+  PPMinib *mb;
+  mb = pp_minib_get_button(dock, ev->x, ev->y);
+  if (mb && ev->button == Button1) {
+    mb->clicked = 1;
+    pp_minib_refresh(dock);
+    return 1;
+  } if (mb && ev->button == Button3) {
+    /* menu popup contenant la liste des mots plop */
+    if (mb->type == PLOPIFY && Prefs.plopify_key_list) {
+      KeyList *hk;
+      int cnt;
+      plopup_unmap(dock);
+      for (hk = Prefs.plopify_key_list, cnt=0; hk && cnt < 30; hk = hk->next, cnt++) {
+	char *splop[4] = {"plopify list", "superplopify list", "boitakon", "hungry boitakon"};    
+	char s[512];
+	//	if (hk->type != HK_
+	snprintf(s, 512, _("remove %s:'<font color=blue>%.15s</font>' from %s"), key_list_type_name(hk->type), hk->key, splop[hk->num]);
+	plopup_pushentry(dock, s, cnt);	
+      }
+      cnt = plopup_show_modal(dock, ev->x_root, ev->y_root);
+      if (cnt >= 0) {
+	for (hk = Prefs.plopify_key_list; hk && cnt > 0; hk = hk->next, cnt--) {
+	  /* plop*/
+	}
+	assert(hk);
+	Prefs.plopify_key_list = key_list_remove(Prefs.plopify_key_list, hk->key, hk->type);
+	boards_update_boitakon(dock->sites->boards);        
+	/* force le rafraichissement complet */
+	pp_update_and_redraw(dock, pp->id_base, pp->decal_base,0,0);
+      }
+    }
+    return 1;
+  } else return 0;
+}
+
+
+static int
+pp_minib_handle_button_release(Dock *dock, XButtonEvent *event)
+{
+  Pinnipede *pp = dock->pinnipede;
+
+  PPMinib *mb;
+  int i, need_refresh, ret = 0;
+
+  //SitePrefs *main_prefs = pp->active_tab->site->prefs;
+
+  pp_selection_unselect(pp);
+  if (event->button != Button1) return 0; /* anti boulay du genre shift qui donne de grands coup de roulette (== button4/5) sur le bouton wmccc */
+
+  mb = pp_minib_get_button(dock, event->x, event->y);
+  if (event->type == ButtonRelease  && mb && mb->clicked == 1) {
+    switch (mb->type) {
+      
+/*     case REFRESH_TRIBUNE: */
+/*       { */
+/* 	dock->board_update_request = 1; pp_minib_refresh(dock); */
+/*       } break; */
+
+/*     case REFRESH_NEWS: */
+/*       { */
+/* 	dock->news_update_request = 1; pp_minib_refresh(dock); */
+/*       } break; */
+      
+      case HELP:
+        {
+          pp_minib_refresh(dock);
+          pp_balloon_help(dock, mb->x-20, mb->y-20);
+        } break;
+      case UA:
+        {
+          pp->nick_mode = (pp->nick_mode + 1) % 5;
+          pp_update_and_redraw(dock, pp->id_base, pp->decal_base,0,1);
+        } break;
+      case FILTER:
+        {
+          pp_change_filter_mode(dock, 1 - pp_get_filter_mode(dock));
+        } break;
+      case PLOPIFY:
+        {
+          pp->disable_plopify = (1-pp->disable_plopify);
+          pp->filter.filter_boitakon = 1-pp->disable_plopify;
+          pp_update_and_redraw(dock, pp->id_base, pp->decal_base,0,1);
+        } break;
+      case SCROLLBAR:
+        {
+          pp_scrollcoin_set(dock,pp->sc == NULL);
+          pp_update_and_redraw(dock, pp->id_base, pp->decal_base,0,1);
+        } break;
+      case BALLTRAP:
+        {
+          Prefs.hunt_opened = 1 - Prefs.hunt_opened;
+        } break;
+      case TRANSPARENT:
+        {
+          if (Prefs.use_fake_real_transparency) {
+            pp_unmap(dock); XFlush(dock->display); 
+            usleep(300000); /* pour laisser le temps aux autres applis de se refresher
+                               on atteint des sommets de laideur
+                               pas sur que c'�tait une bonne id�e cette option use_fake_real_transparency
+                            */
+          }
+          pp_change_transparency_mode(dock, 1-pp->transparency_mode);
+          if (Prefs.use_fake_real_transparency) 
+            pp_show(dock);
+          else {
+            pp_update_bg_pixmap(dock);
+          }
+          pp_refresh(dock, pp->win, NULL);
+        } break;
+      case MB_RSS:
+      case MB_BOARDS:
+        {
+          int i, feed_cnt = 0, board_cnt = 0, feed_selected_cnt = 0, board_selected_cnt = 0;
+          for (i = 0; i < pp->nb_tabs; ++i) {
+            if (board_is_rss_feed(pp->tabs[i].site->board)) {
+              feed_cnt++; if (pp->tabs[i].selected) feed_selected_cnt++;
+            }
+            if (board_is_regular_board(pp->tabs[i].site->board)) {
+              board_cnt++; if (pp->tabs[i].selected) board_selected_cnt++;
+            }
+          }
+          if ((feed_cnt == 0 && mb->type == MB_RSS) ||
+              (board_cnt == 0 && mb->type == MB_BOARDS))
+            break;
+          if ((mb->type == MB_BOARDS && board_cnt == board_selected_cnt && feed_selected_cnt == 0) ||
+              (mb->type == MB_RSS && feed_cnt == feed_selected_cnt && board_selected_cnt == 0)) {
+            pp_tabs_restore_selected(pp);pp_tabs_check_active(pp);
+          } else {
+            pp_tabs_save_selected(pp);
+            pp->active_tab = NULL;
+            for (i = 0; i < pp->nb_tabs; ++i) {
+              if (mb->type == MB_RSS) {
+                pp->tabs[i].selected =  board_is_rss_feed(pp->tabs[i].site->board) ? 1 : 0;
+              } else pp->tabs[i].selected =  board_is_regular_board(pp->tabs[i].site->board) ? 1 : 0;
+              //if (mb->type == MB_BOARDS) pp->tabs[i].selected = 1 - pp->tabs[i].selected;
+              if (pp->tabs[i].selected && !pp->active_tab) pp->active_tab = pp->tabs+i;
+            }
+            if (pp->active_tab == NULL) {
+              pp->active_tab = pp->tabs; pp->tabs[0].selected = 1;
+            }
+          }
+          pp_tabs_changed(dock);
+        } break;
+      case PREFS:
+        {
+          launch_wmccc(dock, NULL);
+        } break;
+      case CANCEL:
+        {
+          flag_cancel_task = 1;
+        } break;
+      default:
+        assert(0); 
+    }
+    ret = 1;
+  }
+  for (i=0, need_refresh=0; i < NB_MINIB; i++) {
+    if (pp->mb[i].clicked) {
+      pp->mb[i].clicked = 0; need_refresh++;
+    }
+  }
+  if (need_refresh) { pp_minib_refresh(dock); }
+  return ret;
+}
+
+
+
+
+/* ---------------------- gestion des fortunes ------------------- */
+
+/* redessine la fortune */
+#if 0
+void
+pp_refresh_fortune(Dock *dock, Drawable d)
+{
+  Pinnipede *pp = dock->pinnipede;
+  Pixmap fpix;
+
+  if (pp->fortune_h > 0) {
+    int x;
+    assert(pp->fortune_h < 10000); /* tout de meme */
+
+    fpix = XCreatePixmap(dock->display, pp->win, pp->win_width, pp->fortune_h, 
+			 DefaultDepth(dock->display,dock->screennum));
+    XSetForeground(dock->display, dock->NormalGC, IRGB2PIXEL(Prefs.pp_fortune_bgcolor));
+    XFillRectangle(dock->display, fpix, dock->NormalGC, 0, 0, pp->win_width, pp->fortune_h);
+
+    assert(!picohtml_isempty(pp->ph_fortune));
+
+    x = (pp->win_width - pp->fortune_w)/2;
+    picohtml_render(dock, pp->ph_fortune, fpix, dock->NormalGC, x, 0);
+    XCopyArea(dock->display, fpix, d, dock->NormalGC, 0, 0, pp->win_width, pp->fortune_h-1, 0, 0);
+    XFreePixmap(dock->display, fpix);
+    XSetForeground(dock->display, dock->NormalGC, RGB2PIXEL(100,100,100));
+
+    XDrawLine(dock->display, d, dock->NormalGC, 0, pp->fortune_h-1, pp->win_width - (pp->sc ? SC_W : 0), pp->fortune_h-1);
+  } else { /* nettoyage ligne du haut */
+    assert(LINEY0(0)>0);
+    pp_clear_win_area(dock, 0, 0, pp->win_width, pp->zmsg_y1-1);
+    pp_clear_win_area(dock, 0, pp->zmsg_y1-1, pp->win_width- (pp->sc ? SC_W : 0), 1);
+    /*
+    pp_clear_win_area(dock, 0, 0, pp->win_width- (pp->sc ? SC_W : 0), LINEY0(0));
+    if (pp->sc) {
+      pp_clear_win_area(dock, pp->win_width-SC_W, 0, SC_W, pp->zmsg_y1-2);
+    }
+    */
+  }
+}
+
+/* a appeler quand la fortune est chang�e */
+void
+pp_update_fortune(Dock *dock)
+{
+  Pinnipede *pp = dock->pinnipede;
+  Site *s;
+  int nb_fortunes = 0, fortune_num;
+  static char *fortune = NULL;
+  static int wmcc_tic_cnt_last_chg = 0;
+
+  if (flag_updating_comments) return;
+  if (fortune == NULL || (wmcc_tic_cnt - wmcc_tic_cnt_last_chg) > 45*(1000/WMCC_TIMER_DELAY_MS)) {
+    for (s = dock->sites->list; s; s = s->next)
+      nb_fortunes += (s->fortune && strlen(s->fortune)) ? 1 : 0;
+    if (nb_fortunes > 0) {
+      fortune_num = (rand() % nb_fortunes) + 1;
+      for (s = dock->sites->list; s; s = s->next) {
+	fortune_num -= (s->fortune  && strlen(s->fortune)) ? 1 : 0;
+	if (fortune_num == 0) break;
+      }
+    }
+    if (s && s->fortune) {
+      //      printf("choosing fortune of %s: '%s'\n", s->prefs->site_name, fortune);
+      if (fortune) free(fortune);
+      fortune = strdup(s->fortune);
+      wmcc_tic_cnt_last_chg = wmcc_tic_cnt;
+    }
+  }
+  if (!picohtml_isempty(pp->ph_fortune)) {
+    picohtml_freetxt(pp->ph_fortune);
+  }
+  pp->fortune_h = 0; /* quand pp->fortune_h != 0 => il y a une fortune � afficher */
+  pp->fortune_w = 0;
+
+  if (pp->fortune_mode) {
+    if (fortune == NULL) fortune = strdup(_("<folop> I have a 61MB file in /proc, is it normal ?<br>"));
+    picohtml_parse(dock, pp->ph_fortune, fortune, pp->win_width - 6);
+    picohtml_gettxtextent(pp->ph_fortune, &pp->fortune_w, &pp->fortune_h);
+    if (!picohtml_isempty(pp->ph_fortune)) { /* on s'arr�te si la fortune est vide (s == "" par ex..)
+						(�a peut arriver et �a declenche le assert(!isempty) de refresh_fortune) */
+      pp->fortune_h += 3; 
+      pp->fortune_h = MIN(pp->fortune_h, pp->win_height/2); /* faut pas exagerer */
+    }
+  }
+}
+#endif
+static const char *backend_flavour_name(backend_flavour_enum f) {
+  switch (f) {
+    case BACKEND_FLAVOUR_UNENCODED: return "raw tags";
+    case BACKEND_FLAVOUR_ENCODED: return "htmlentitized tags";
+    case BACKEND_FLAVOUR_NO_PANTS: return "no pants";
+  }
+  assert(0); return NULL;
+}
+
+void
+pp_check_balloons(Dock *dock, int x, int y)
+{
+  Pinnipede *pp = dock->pinnipede;
+  int i;
+
+  if (pp->use_minibar) {
+    for (i=0; i < NB_MINIB; i++) {
+      char *msg = NULL;
+      switch (pp->mb[i].type) {
+      case HELP: msg = _("Bring some help"); break;
+      case SCROLLBAR: msg = _("Bring/hide the scrollcoin"); break;
+        case BALLTRAP: msg = _("Enable/disable the balltrap<br>(note that you can also kill "
+                               "all flying ducks with a right clic on the upper part of the dock applet<br>"
+                               "You can also use the wmccc to disable duck hunt on some sites (for example"
+                               "<font color=blue><tt>woof.lu</tt></font>, since the webserver does not enjoy receiving hundreds of <tt>pan!pan!</tt>"
+                               "in the same second)"); break;
+      case TRANSPARENT: msg = _("Activate/deactivate the pseudo-transparency (may not work)."); break;
+      case UA: msg = _("Change the display mode of the logins/useragents (5 different modes)"); break;
+	//      case SECOND: msg = _("Bring/hide the seconds (when there are less than two messages in the same minute)"); break;
+	//      case TSCORE: msg = _("Bring/hide the troll score (the numbers on the left of some messages)"); break;
+        //case FORTUNE: msg = _("Bring/hide the fortune (if appropriate)"); break;
+      case FILTER: msg = _("Activate/deactivate the <b>filter</b>. To filter the messages, do a <font color=#0000ff>Right clic</font> on a word/login/useragent or a clock (to display a thread). You can also use  <font color=#0000ff>CTRL-S</font> to perform incremental search on the board content. To remove the filter, just click here"); break;
+      case PLOPIFY: msg = _("Change the plopification type (beware, you will also see the messages in the boitakon!). <p> To plopify a message, <font color=#0000ff>Right click</font> on a word/login/useragent/clock (or the zone on the left of the clock to plopify a thread). To unplopify (or let someone out of the boitakon), just click on the same place OR right clic on this button and you will have a list of boitakoned elements.<br>"); break;
+      case MB_RSS: msg = _("show only RSS feeds in the pinnipede"); break;
+      case MB_BOARDS: msg = _("show only regular boards in the pinnipede"); break;
+      case PREFS: msg = _("Launch wmccc (wmcoincoin configuration)"); break;
+/*       case REFRESH_NEWS: msg = _("Click here to force the refresh of the news, messages, fortune and XP"); break; */
+/*       case REFRESH_TRIBUNE: msg = _("Click here to force the refresh of the board"); break; */
+      case CANCEL: msg = _("clic here to cancel the current download"); break;
+      default: assert(0);
+      }
+      balloon_test(dock, x, y, pp->win_real_xpos, pp->win_real_ypos-15, 0, 
+		   pp->mb[i].x, MINIB_Y0, 
+		   pp->mb[i].w, MINIB_H, msg);
+    }
+    for (i=0; i < pp->nb_tabs; ++i) {
+      if (balloon_test_nomsg(dock, x, y, 0, 
+                             pp->tabs[i].x, pp->tabs[i].y,
+                             pp->tabs[i].w, pp->tabs[i].h)) {
+        Site *s = pp->tabs[i].site;
+        Board *board = pp->tabs[i].site->board;
+        char *msg;
+        if (board_is_rss_feed(board)) {
+          msg = str_printf("RSS Feed: <b>%s</b><br>",
+                           board->rss_title ? board->rss_title : s->prefs->site_name);
+        } else {
+          msg = str_printf("Regular board: <b>%s</b>"
+                           "time shift: <font color=blue>%+02d:%02d:%02d</font><br><br>", 
+                           s->prefs->site_name,
+                           (int)(board->time_shift/3600), 
+                           (int)((abs(board->time_shift)/60)%60), 
+                           (int)(abs(board->time_shift)%60));
+        }
+        msg = str_cat_printf(msg, "backend: <font color=blue>%s</font><br>"
+                             "   (flavour=<font color=blue>%s</font>, "
+                             "quality = <font color=blue>%1.1f</font>, "
+                             "ping=<font color=blue>%4.0fms</font>) <br>"
+                             "auto_refresh: %s (use ctrl-clic to switch)<br>"
+                             "refresh frequency: <font color=blue>%d</font> sec<br>",
+                             s->prefs->backend_url, 
+                             backend_flavour_name(s->prefs->backend_flavour), 
+                             http_stats_site_quality(s), s->http_ping_stat*1000.,
+                             board->auto_refresh ? "<font color=blue>yes</font>" : "<font color=red>no</font><br>",
+                             board->board_refresh_delay / (1000/WMCC_TIMER_DELAY_MS));
+        if (!str_is_empty(s->prefs->post_url)) {
+          msg = str_cat_printf(msg, "post: <font color=blue>%s</font> ; <font color=blue>%s</font><br>",
+                               s->prefs->post_url, s->prefs->post_template);
+        } else msg = str_cat_printf(msg, "this board is <font color=blue>read-only</font><br>");
+        if (!str_is_empty(s->prefs->user_cookie)) {
+          msg = str_cat_printf(msg, "cookie: <font color=blue>%.20s%s</font><br>", s->prefs->user_cookie, (strlen(s->prefs->user_cookie)>20) ? "(...)" : "");
+        }
+        balloon_test(dock, x, y, pp->win_real_xpos, pp->win_real_ypos-10, 0, 
+                     pp->tabs[i].x, pp->tabs[i].y,
+                     pp->tabs[i].w, pp->tabs[i].h, msg);
+        free(msg);
+      }
+    }
+  }
+}
+
+/* ---------------------------------------- scrollcoin ----------------------- */
+
+/* lecture de la scrollbar, avec un refresh legerement differ� pour �viter de trop charger... */
+void
+pp_check_scroll_pos(Dock *dock)
+{
+  Pinnipede *pp = dock->pinnipede;
+  Boards *boards = dock->sites->boards;
+  
+  static int refresh_requested = 0;
+  static int refresh_nb_delayed = 0;
+  int new_pos;
+ 
+  if (pp->sc == NULL) return;
+  if (scrollcoin_read_requested_pos(pp->sc, &new_pos)) {
+    id_type id;
+    /* petit bricolage pas beau pour que �a affiche completement le premier post: 
+       update_content rescrollera juste ce qu'il faut */
+    if (new_pos == scrollcoin_get_vmin(pp->sc)) new_pos--;
+
+    id = get_nth_id_filtered(boards, &pp->filter, new_pos);
+    //    myprintf("scroll pos = %<MAG %d>, --> id_base = %d\n", new_pos, id);
+    
+
+    pp_update_content(dock, id, 0,0,0);
+    refresh_requested = 2;
+  }
+  if (refresh_requested == 1 || refresh_nb_delayed >= 0) {
+    pp_refresh(dock, pp->win, NULL);
+    refresh_nb_delayed = 0; 
+    refresh_requested = 0;
+  } else if (refresh_requested > 0) {
+    refresh_requested--; refresh_nb_delayed++;
+  }
+}
+
+/* positionnenement de la scrollbar */
+/*static void
+pp_scrollcoin_move_resize(Dock *dock)
+{
+  Pinnipede *pp = dock->pinnipede;
+  scrollcoin_resize(pp->sc, pp->win_width - SC_W+1, pp->zmsg_y1-1, pp->zmsg_h+2);
+}
+*/
+
+/* mise a jour de l'existence + position de la scrollcoin
+   + mise � jour de pp->zmsg_x2 & pp->zmsg_w */
+void pp_scrollcoin_set(Dock *dock, int show_sc) {
+  Pinnipede *pp = dock->pinnipede;
+  int width =  pp->win_width - (pp->tabs_pos == PPT_RIGHT ? pp->tabs_w : 0);
+  if (!show_sc) {
+    if (pp->sc) scrollcoin_destroy(pp->sc); pp->sc = NULL;
+    pp->zmsg_x2 = width - 1;
+  } else {
+    pp->zmsg_x2 = width - SC_W;
+    if (!pp->sc)  
+      pp->sc = scrollcoin_create(1,1,1,pp->zmsg_x2+1, pp->zmsg_y1-1, pp->zmsg_h+2, pp->transparency_mode);
+    else scrollcoin_resize(pp->sc, pp->zmsg_x2+1, pp->zmsg_y1-1, pp->zmsg_h+2);
+    pp->zmsg_x2 = width - SC_W;
+  }
+  pp->zmsg_w = pp->zmsg_x2 - pp->zmsg_x1 + 1;
+}
+
+/*
+  �a tient du vilain bricolage.. mais bon: la scrollbar doit connaitre ses bornes
+  le chiffre qu'elle renvoie correspond � l'id du message affich� sur la derni�re ligne du pinnipede
+  
+  le probl�me est alors la borne vmin: c'est l'id du dernier message de la premi�re page,
+  ce qui demande un certain nombre de manip pour le determiner
+
+  (si scroll_coin avait travaill� par ligne plutot que par id, �a aurait �t� encore pire)
+*/
+
+void
+pp_scrollcoin_update_bounds(Dock *dock)
+{
+  Pinnipede *pp = dock->pinnipede;
+  Boards *boards = dock->sites->boards;
+  int lcnt;
+  int vmin, vmax;
+  board_msg_info *mi;
+
+  vmax = count_all_id_filtered(boards, &pp->filter);
+  pp->non_filtered_message_count = vmax;
+
+  if (pp->sc == NULL) return;
+  
+  //  myprintf("%<YEL pp_scrollcoin_update_bounds>\n");
+  vmin = 0;
+  lcnt = 0;
+
+  mi = boards->first;
+  while (lcnt < pp->nb_lignes && mi) {
+    if (filter_msg_info(mi,&pp->filter)) {
+      PostVisual *pv;
+      pv = pp_pv_add(pp, boards, mi->id); 
+      if (pv) { lcnt += pv->nblig; vmin++; }
+    }
+    mi = mi->g_next;
+  }
+  scrollcoin_setbounds(pp->sc, vmin, vmax);
+  pp_scrollcoin_set(dock, 1);
+}
+
+/* ---------------------- fonctions qui regroupent tout ------------------*/
+
+void
+pp_widgets_set_pos(Dock *dock)
+{
+  Pinnipede *pp = dock->pinnipede;
+  pp_minib_set_pos(pp);
+  pp_tabs_set_pos(pp);
+  pp_scrollcoin_set(dock, pp->sc != NULL);
+  if (pp->tabs_pos == PPT_LEFT || pp->tabs_pos == PPT_RIGHT)
+    sw_layout_dockapps(dock, pp->tabs_x0, 0, pp->tabs_x0 + pp->tabs_w-1, pp->tabs_y0-1);
+  else if (pp->tabs_pos == PPT_DOWN)
+    sw_layout_dockapps(dock, -2, -2, 62, 62);
+  else sw_layout_dockapps(dock, -2, pp->tabs_y0, 62, pp->tabs_y0+62);
+}
+
+void
+pp_widgets_refresh(Dock *dock)
+{
+  Pinnipede *pp = dock->pinnipede;
+  if (pp->use_minibar) {
+    pp_tabs_refresh(dock);
+    pp_minib_refresh(dock);
+  }
+  if (pp->sc) { scrollcoin_refresh(pp->sc, pp->win, 1); }
+  sw_redraw(dock);
+}
+
+int
+pp_widgets_handle_button_press(Dock *dock, XButtonEvent *event)
+{
+  Pinnipede *pp = dock->pinnipede;
+  if (pp->sc && scrollcoin_handle_button_press(pp->sc, event, pp->win))
+    return 1;
+  else if (pp->use_minibar) {  
+    if (pp_minib_handle_button_press(dock,event)) return 1;
+    else if (pp_tabs_handle_button_press(dock,event)) return 1;
+  }
+  return 0;
+}
+
+int
+pp_widgets_handle_button_release(Dock *dock, XButtonEvent *event)
+{
+  Pinnipede *pp = dock->pinnipede;
+  if (pp->sc && scrollcoin_handle_button_release(pp->sc, event, pp->win)) {
+    pp_check_scroll_pos(dock); return 1;
+  } else if (pp->use_minibar) {
+    if (pp_minib_handle_button_release(dock,event)) { return 1;}
+    else if (pp_tabs_handle_button_release(dock,event)) { return 1; }
+  }
+  return 0;
+}
+
+int 
+pp_widgets_handle_motion(Dock *dock, XMotionEvent *event)
+{
+  Pinnipede *pp = dock->pinnipede;
+  pp_tabs_handle_motion(dock,event);
+  if (pp->sc && scrollcoin_handle_motion(pp->sc, event, pp->win)) {
+    pp_check_scroll_pos(dock); return 1;
+  } else if (pp_minib_pressed_button(dock)) {
+	/* ben oui, on s'en fout */
+    return 1;
+  } else if (pp_tabs_pressed_tab(dock)) {
+    return 1;
+  } return 0;
+}
diff --git a/src/plopup.c b/src/plopup.c
new file mode 100644
index 0000000..126451a
--- /dev/null
+++ b/src/plopup.c
@@ -0,0 +1,318 @@
+#include "coincoin.h"
+#include "dock.h"
+#include "coin_xutil.h"
+
+typedef struct _Plopup_entry {
+  int  id;
+  PicoHtml *ph;
+  struct _Plopup_entry *next;
+  int ph_width, ph_height;
+  int x, y, w, h;
+  int is_separ;
+} Plopup_entry;
+
+struct _Plopup {
+  Plopup_entry *first;
+  Window win;
+  Pixmap pix;
+  Plopup_entry *active_entry;
+  plopup_callback_t callback;
+  int win_width, win_height, win_xpos, win_ypos;
+  char *descr;
+  int descr_width, descr_height;
+  unsigned long bgpixel, lightpixel, darkpixel;
+};
+
+void
+plopup_build(Dock *dock)
+{
+  Plopup *pup;
+  ALLOC_OBJ(pup, Plopup);
+  pup->first = NULL;
+  pup->win = None;
+  pup->pix = None;
+  dock->plopup = pup;
+  pup->bgpixel = IRGB2PIXEL(0xa0a0a0);
+  pup->lightpixel = IRGB2PIXEL(lighten_color(0xa0a0a0, 1.2));
+  pup->darkpixel = IRGB2PIXEL(lighten_color(0xa0a0a0, .6));
+  pup->descr = NULL;
+}
+
+
+static void 
+plopup_push(Plopup *pup, Plopup_entry *n)
+{
+  Plopup_entry *e;
+  
+  for (e = pup->first; e; e = e->next) {
+    if (e->next == NULL) break;
+  }
+  if (e) {
+    e->next = n;
+  } else {
+    pup->first = n;
+  }
+}
+
+void
+plopup_pushentry(Dock *dock, char *txt, int id)
+{
+  Plopup *pup = dock->plopup;
+  Plopup_entry *n;
+  assert(pup->win == None);
+  
+  ALLOC_OBJ(n, Plopup_entry);
+
+  n->id = id;
+  n->next = NULL;
+  n->is_separ = 0;
+  n->ph = picohtml_create(dock, Prefs.balloon_fn_family, Prefs.balloon_fn_size, 0);
+  picohtml_set_parag_skip(n->ph, 1.0);
+  picohtml_set_line_skip(n->ph, 1.0);
+  picohtml_set_parag_indent(n->ph, 0);
+  picohtml_set_tabul_skip(n->ph, 10);
+  picohtml_parse(n->ph, txt, 300);
+  picohtml_gettxtextent(n->ph, &n->ph_width, &n->ph_height);
+  plopup_push(pup, n);
+}
+
+void
+plopup_pushsepar(Dock *dock)
+{
+  Plopup *pup = dock->plopup;
+  Plopup_entry *n;
+
+  for (n = pup->first; n && n->next; n = n->next) /*plop*/ ;
+  if (n==NULL || n->is_separ) return;
+
+  ALLOC_OBJ(n, Plopup_entry);
+
+  n->id = -1;
+  n->next = NULL;
+  n->is_separ = 1;
+  n->ph = NULL;
+  n->ph_width  = 0;
+  n->ph_height = 6;
+  plopup_push(pup, n);
+}
+
+void
+plopup_set_description(Dock *dock, char *txt) {
+  Plopup *pup = dock->plopup;
+  assert(pup->win == None);
+  pup->descr = strdup(txt);
+}
+
+void
+plopup_show(Dock *dock, int winx, int winy, plopup_callback_t cback)
+{
+  Plopup *pup = dock->plopup;
+  Plopup_entry *e;
+  XSetWindowAttributes wa;
+  int y;
+  int xiscrnum = 0;
+  int scrw, scrh, scrx, scry;
+  PicoHtml *ph_descr = NULL;
+
+  assert(pup->win == None);
+  if (pup->first == NULL) return;
+
+  pup->callback = cback;
+
+  xiscrnum = MAX(dock_find_xiscreen_num(dock, winx, winy), 0);
+
+  pup->win_xpos = winx;
+  pup->win_ypos = winy;
+  pup->win_width = 0;
+  pup->win_height = 0;
+  for (e = pup->first; e; e = e->next) {
+    pup->win_width = MAX(pup->win_width, e->ph_width);
+    pup->win_height += e->ph_height;
+  }
+
+  pup->descr_width = pup->win_width;
+  pup->descr_height = 0;
+  if (pup->descr) {
+    ph_descr = picohtml_create(dock, Prefs.balloon_fn_family, Prefs.balloon_fn_size, 0);
+    picohtml_parse(ph_descr, pup->descr, pup->win_width);
+    picohtml_gettxtextent(ph_descr, &pup->descr_width, &pup->descr_height);
+  }
+
+  pup->win_width += 8;
+  pup->win_height += 7;
+
+  pup->win_height += pup->descr_height;
+  pup->win_ypos -= pup->descr_height;
+
+  scrw = dock->xiscreen[xiscrnum].width; //WidthOfScreen(XScreenOfDisplay(dock->display, dock->screennum));
+  scrh = dock->xiscreen[xiscrnum].height; //HeightOfScreen(XScreenOfDisplay(dock->display, dock->screennum));
+  scrx = dock->xiscreen[xiscrnum].x_org;
+  scry = dock->xiscreen[xiscrnum].y_org;
+  if (pup->win_xpos < scrx) pup->win_xpos = scrx;
+  if (pup->win_ypos < scry) pup->win_ypos = scry;
+  if (pup->win_xpos + pup->win_width > scrx + scrw) pup->win_xpos = scrx + scrw - pup->win_width;
+  if (pup->win_ypos + pup->win_height > scry + scrh) pup->win_ypos = scry + scrh - pup->win_height;
+
+  pup->active_entry = NULL;
+  pup->win = XCreateSimpleWindow (dock->display, RootWindow(dock->display,dock->screennum), 
+				  0, 0, pup->win_width, pup->win_height, 0,
+				  BlackPixel(dock->display, dock->screennum),
+				  pup->bgpixel);
+  wa.event_mask = ExposureMask | PointerMotionMask | EnterWindowMask | LeaveWindowMask;
+  wa.override_redirect = True ;
+  wa.save_under = True;
+  XChangeWindowAttributes (dock->display, pup->win, CWSaveUnder | CWEventMask | CWOverrideRedirect, &wa);
+  pup->pix = XCreatePixmap(dock->display, pup->win, pup->win_width, pup->win_height,
+			   DefaultDepth(dock->display,dock->screennum));
+  XSetForeground(dock->display, dock->NormalGC, pup->bgpixel);
+  XFillRectangle(dock->display, pup->pix, dock->NormalGC, 0, 0, pup->win_width, pup->win_height);
+  XSetForeground(dock->display, dock->NormalGC, pup->lightpixel);
+  XDrawLine(dock->display, pup->pix, dock->NormalGC, 0, 0, pup->win_width-1, 0);
+  XDrawLine(dock->display, pup->pix, dock->NormalGC, 0, 0, 0, pup->win_height-1);
+  XSetForeground(dock->display, dock->NormalGC, pup->darkpixel);
+  XDrawLine(dock->display, pup->pix, dock->NormalGC, pup->win_width-1, 0, pup->win_width-1, pup->win_height-1);
+  XDrawLine(dock->display, pup->pix, dock->NormalGC, 0, pup->win_height-1, pup->win_width-1, pup->win_height-1);
+
+  if (ph_descr) {
+    picohtml_render(ph_descr, pup->pix, 4, 0);
+  }
+  for (y = 1+pup->descr_height, e = pup->first; e; e = e->next) {
+    e->y = y+2;
+    e->x = 4;
+    e->w = pup->win_width - 8;
+    e->h = e->ph_height;
+    if (e->is_separ == 0) {
+      picohtml_render(e->ph, pup->pix, 4, y);
+    }
+    if (e->is_separ || (e == pup->first && ph_descr)) {
+      int Y = y;
+      if (e->is_separ == 0) Y = y-2; 
+      XSetForeground(dock->display, dock->NormalGC, pup->lightpixel);
+      XDrawLine(dock->display, pup->pix, dock->NormalGC, 
+		1, Y+3, pup->win_width-2, Y+3);
+      XSetForeground(dock->display, dock->NormalGC, pup->darkpixel);
+      XDrawLine(dock->display, pup->pix, dock->NormalGC, 
+		1, Y+4, pup->win_width-2, Y+4);
+    }
+    y += e->ph_height;
+  }
+  XSetWindowBackgroundPixmap(dock->display, pup->win, pup->pix);
+  XMoveWindow(dock->display, pup->win, pup->win_xpos, pup->win_ypos);
+  XMapRaised(dock->display, pup->win);
+  if (ph_descr)
+    picohtml_destroy(ph_descr);
+}
+
+static Plopup_entry *
+get_entry(Dock *dock, int x, int y)
+{
+  Plopup *pup = dock->plopup;
+  Plopup_entry *e;
+  if (x < 1 || x > pup->win_width-1) return NULL;
+  if (y < 1 || y > pup->win_height-1) return NULL;
+  for (e = pup->first; e; e = e->next) {
+    if (x >= e->x && x <= e->x + e->w &&
+	y >= e->y && y <= e->y + e->h) {
+      return e->is_separ ? NULL : e;
+    }
+  }
+  return NULL;
+}
+
+static void
+plopup_refresh(Dock *dock, int x, int y)
+{
+  Plopup *pup = dock->plopup;
+  Plopup_entry *e;
+
+  e = get_entry(dock, x, y);
+  if (e != pup->active_entry) {
+    pup->active_entry = e;
+    XClearArea(dock->display, pup->win, 0, 0, pup->win_width, pup->win_height, False);
+    if (pup->active_entry) {
+      int x1,y1,x2,y2;
+      x1 = 1; x2 = pup->win_width-2;
+      y1 = pup->active_entry->y; 
+      y2 = pup->active_entry->y + pup->active_entry->h;
+      XSetForeground(dock->display, dock->NormalGC, pup->lightpixel);
+      XDrawLine(dock->display, pup->win, dock->NormalGC, x1, y1, x2, y1);
+      XDrawLine(dock->display, pup->win, dock->NormalGC, x1, y1, x1, y2);
+      XSetForeground(dock->display, dock->NormalGC, pup->darkpixel);
+      XDrawLine(dock->display, pup->win, dock->NormalGC, x1, y2, x2, y2);
+      XDrawLine(dock->display, pup->win, dock->NormalGC, x2, y1, x2, y2);
+    }
+  }
+}
+
+int
+plopup_ismapped(Dock *dock)
+{
+  return (dock->plopup->win != None);
+}
+
+void
+plopup_unmap(Dock *dock)
+{
+  Plopup *pup = dock->plopup;
+  Plopup_entry *e, *e_next;
+  if (pup->win == None) {
+    assert(pup->pix == None); return;
+  }
+  XFreePixmap(dock->display, pup->pix);
+  XDestroyWindow(dock->display, pup->win);
+  pup->active_entry = NULL;
+  for (e = pup->first; e; e = e_next) {
+    e_next = e->next;
+    if (e->ph)
+      picohtml_destroy(e->ph);
+    free(e);
+  }
+  if (pup->descr) free(pup->descr);
+  pup->descr = NULL;
+  pup->first = NULL;
+  pup->callback = NULL;
+  pup->win = None;
+  pup->pix = None;
+}
+
+void 
+plopup_dispatch_event(Dock *dock, XEvent *event)
+{
+  Plopup *pup = dock->plopup;
+
+  if (pup->win) {
+    switch (event->type) {
+    case MotionNotify: 
+      {
+	plopup_refresh(dock, event->xmotion.x_root-pup->win_xpos, event->xmotion.y_root-pup->win_ypos);
+      } break;
+      //    case ButtonPress:
+    case ButtonRelease:
+      {
+	if (pup->callback) {
+	  pup->callback(pup->active_entry ? pup->active_entry->id : -1);
+	} else printf("buuuug plopup!!\n");
+	plopup_unmap(dock);
+      } break;
+    }
+  }
+}
+
+static int plopup_show_modal_id = -1;
+
+void
+plopup_show_modal_callback(int id) {
+  plopup_show_modal_id = id;
+}
+
+int
+plopup_show_modal(Dock *dock, int x, int y)
+{
+  XEvent event;
+  plopup_show(dock,x,y, plopup_show_modal_callback);
+  while (plopup_ismapped(dock)) {
+    XNextEvent(dock->display, &event);
+    plopup_dispatch_event(dock, &event);
+  }
+  return plopup_show_modal_id;
+}
diff --git a/src/prefs.c b/src/prefs.c
new file mode 100644
index 0000000..a1cd1da
--- /dev/null
+++ b/src/prefs.c
@@ -0,0 +1,1751 @@
+#define PREFS_C
+#include <errno.h>
+#include "config.h"
+#include "prefs.h"
+#include "coin_util.h"
+#include "myprintf.h"
+#include <sys/utsname.h> /* pour la fonction uname */
+
+#ifndef WMCCC
+#include <libintl.h>
+#define _(String) gettext (String)
+#else
+#define _(String) (String)
+#endif
+
+#define BICOLOR_SET(x,a,b) { x.opaque = a; x.transp = b; }
+#define FONTSTYLE_SET(fs,u,i,b,tt) { (fs).underlined = u; (fs).slanted = i; (fs).bold = b; (fs).teletype = tt; }
+
+struct {
+  char site_url[500];
+  char path_tribune_add[500];
+  char path_tribune_backend[500];
+  int backend_type;
+} ObsoleteFeatures;
+
+void update_prefs_from_obsolete_features(SitePrefs *sp) {
+  char *site_url, *path_tribune_backend, *path_tribune_add;
+  site_url = ObsoleteFeatures.site_url[0] ? ObsoleteFeatures.site_url : strdup("http://linuxfr.org");
+  path_tribune_backend = ObsoleteFeatures.path_tribune_backend[0] ? ObsoleteFeatures.path_tribune_backend : "board/index.xml";
+  path_tribune_add = ObsoleteFeatures.path_tribune_add[0] ? ObsoleteFeatures.path_tribune_add : "board";
+  while (site_url[strlen(site_url)-1] == '/') site_url[strlen(site_url)-1] = 0;
+  while (path_tribune_backend[0] == '/') path_tribune_backend++;
+  while (path_tribune_add[0] == '/') path_tribune_add++;
+  ASSIGN_STRING_VAL(sp->backend_url, str_printf("%s/%s", site_url, path_tribune_backend));
+  ASSIGN_STRING_VAL(sp->post_url, str_printf("%s/%s", site_url, path_tribune_add));
+  switch (ObsoleteFeatures.backend_type) {
+    case 1 : sp->backend_flavour = BACKEND_FLAVOUR_UNENCODED; break;
+    case 2 : sp->backend_flavour = BACKEND_FLAVOUR_ENCODED; break;
+    case 3 : sp->backend_flavour = BACKEND_FLAVOUR_NO_PANTS; break;
+  }
+}
+
+/* construit le useragent par d�faut */
+const char *
+coincoin_default_useragent_template()
+{
+  return "wmCoinCoin/$v (palmipede; $s $r $m)";
+}
+
+void
+coincoin_default_useragent(char *s, int sz)
+{
+  struct utsname utsn;
+  
+  if (uname(&utsn) != -1) {
+    snprintf(s, sz, "wmCoinCoin/" VERSION " (palmipede; %s %s %s)",
+	     utsn.sysname, utsn.release, utsn.machine);
+  } else {
+    snprintf(s, sz, "wmCoinCoin/" VERSION " (palmipede; ?)");
+  }
+}
+
+
+/*
+  lecture d'une option (qui peut �tre multi-ligne, si celles ci se terminent par le caract�re '\')
+  remplit le nom de l'option, ainsi que son argument (concat�n� si il est multiligne)
+
+  en cas d'erreur, le message est renvoy�
+ */
+static char *
+read_option_line(FILE *f, int *lcnt, char **opt_name, char **opt_arg)
+{
+  int i;
+  char *s,*p;
+  int multiline_opt;
+
+  assert(*opt_name == NULL); 
+  assert(*opt_arg == NULL); 
+
+  /* lecture en sautant tous les commentaires */
+  do {
+    s = str_fget_line(f); str_trim(s); (*lcnt)++;
+    if (s[0] == '#' ||
+	(s[0] == 0 && !feof(f))) { FREE_STRING(s); }
+  } while (s == NULL && !feof(f));
+  
+  if (s == NULL || s[0]==0) { FREE_STRING(s); return NULL; } /* fin du fichier */
+  
+  /* il faut commencer par lire le nom de l'option */
+  p = strchr(s, ':');
+  if (p == NULL || p == s) { 
+    FREE_STRING(s); 
+    return str_printf(_("[line %d] unable to find an option name"), *lcnt); 
+  }
+  *p = 0; p++;
+  *opt_name = strdup(s);
+  if (strlen(p)) { 
+    str_trim(p); 
+  } else {
+    FREE_STRING(s); 
+    return str_printf(_("[line %d] missing value for option '%s'"), *lcnt, *opt_name); 
+  }
+  
+  /* a ce p pointe vers la valeur de l'option */
+  do {
+    char *old_opt_arg;
+    multiline_opt = 0;
+    i = strlen(p);
+    if (i && p[i-1] == '\\') { p[i-1] = 0; str_trim(p); multiline_opt = 1; }
+
+    old_opt_arg = *opt_arg;
+    if (old_opt_arg) {
+      *opt_arg = str_printf("%s%s", *opt_arg, p); FREE_STRING(old_opt_arg);
+    } else {
+      *opt_arg = strdup(p);
+    }
+    FREE_STRING(s);
+
+    if (multiline_opt) {
+      s = str_fget_line(f); str_trim(s); (*lcnt)++;
+    }
+    p = s;
+  } while (multiline_opt && s);
+  return NULL;
+}
+
+/* c tout con */
+static int
+option_get_bool_val(const char *optarg) {
+  if (optarg==NULL || optarg[0]==0) return 1;
+  else if (strcmp(optarg, "1")==0) return 1;
+  else if (strcasecmp(optarg, "on")==0) return 1;
+  else if (strcasecmp(optarg, "yes")==0) return 1;
+  else if (strcasecmp(optarg, "true")==0) return 1;
+  else if (strcmp(optarg, "0")==0) return 0;
+  else if (strcasecmp(optarg, "off")==0) return 0;
+  else if (strcasecmp(optarg, "no")==0) return 0;
+  else if (strcasecmp(optarg, "false")==0) return 0;
+  else return -1;
+}
+
+/* lit une valeur de position du genre 'x:y' */
+static char *
+option_get_xypos_val(const char  *_optarg, 
+		     const char  *optname,
+		     int *xpos, int *ypos)
+{
+  char *s;
+  char *optarg;
+  optarg = strdup(_optarg);
+  if ((s = strchr(optarg, ':')) != NULL) {
+    *s = 0;
+    *xpos = atoi(optarg);
+    *ypos = atoi(s+1);
+    free(optarg);
+    return NULL;
+  } else {
+    free(optarg);
+    return str_printf(_("Invalid option '%s', we were waiting for 2 numbers x and y with a x:y format"), optname);
+  }
+}
+
+static char *
+option_get_font_style(const char  *_optarg, 
+		      const char  *optname, FontStyle *fs) 
+{
+  const char *s = _optarg;
+  fs->underlined = fs->slanted = fs->bold = fs->teletype = 0;
+  while (s && *s) {
+    switch (*s) {
+    case 'u':
+    case 'U':
+      fs->underlined = 1; break;
+    case 'i':
+    case 'I':
+      fs->slanted = 1; break;
+    case 'b':
+    case 'B':
+      fs->bold = 1; break;
+    case 't':
+    case 'T':
+      fs->teletype = 1; break;      
+    default:
+      if (!(*s > 0 && *s < ' ') && *s != '.') {
+	return str_printf(_("wrong style for option %s"), optname);
+      } break;
+    }
+    ++s;
+  }
+  return NULL;
+}
+
+/* special pour l'option de transparence */
+static char *
+option_get_transp_val(const char *arg, const char * opt_name,TransparencyInfo *ti) {
+  if (strcasecmp(arg, "full")==0) {
+    ti->type = FULL_TRANSPARENCY;
+  } else if (strncasecmp(arg, "shading",7)==0) {
+    ti->type = SHADING;
+    if (sscanf(arg+7, "%d %d", &ti->shade.luminosite, &ti->shade.assombrissement) != 2 || 
+	ti->shade.luminosite < 0 || ti->shade.luminosite > ti->shade.assombrissement ||
+	ti->shade.assombrissement > 100) {
+      return str_printf(_("Invalid option '%s': the shading is defined with 2 values x and y comprised "
+			"between 0 and 100, with x < y (the greater x, the lighter will be the display, "
+			"the smaller y, the more attenuated will be the colours."), opt_name);
+    }
+  } else if (strncasecmp(arg, "tinting",7)==0) {
+    ti->type = TINTING;
+    if (sscanf(arg+7, "%x %x", &ti->tint.black, &ti->tint.white) != 2) {
+      if (ti->tint.white > 0xffffff || ti->tint.black > 0xffffff) {
+	return str_printf(_("Invalid option '%s': you have to specify two RGB colours corresponding the white and the black"), opt_name);
+      }
+    }
+  } else {
+    return str_printf(_("Invalid option '%s': you have to first specify the type of transparency: FULL, SHADING or TINTING"), opt_name);
+  }
+  return NULL;
+}
+
+static void
+option_set_useragent(const char *optarg,
+                     SitePrefs *p, int verbatim)
+{
+  if (optarg == NULL) p->user_agent[0] = 0;
+  else {
+    struct utsname utsn;
+    char *ua = NULL;
+    const char *keys[] = {"$v", "$u", "$s", "$r", "$m"};
+    const char *subs[] = {VERSION,"", ""  , ""  , ""};
+
+
+    //    ua = str_substitute(optarg, "$v", VERSION);
+    if (p->user_name) {
+      subs[1] = p->user_name;
+    } else {
+      subs[1] = "[!palmipede.user_name!]";
+    }
+    if (uname(&utsn) != -1) {
+      subs[2] = utsn.sysname;
+      subs[3] = utsn.release;
+      subs[4] = utsn.machine;
+    }
+    if (verbatim == 0) {
+      ua = str_multi_substitute(optarg, keys, subs, 5);
+      strncpy(p->user_agent,ua,USERAGENT_MAXMAX_LEN);
+      free(ua);
+    } else {
+      strncpy(p->user_agent,optarg,USERAGENT_MAXMAX_LEN);
+    }
+    p->user_agent[USERAGENT_MAXMAX_LEN] = 0;
+  }
+}
+
+/* lecture du nom du site (avec le port) */
+char*
+option_backend_url(const char  *optarg,
+                   SitePrefs *prefs)
+{
+  SplittedURL su;
+  assert(optarg);
+  FREE_STRING(prefs->backend_url);
+  prefs->backend_url = str_dup_unquoted(optarg);
+  if (split_url(prefs->backend_url,&su) != 0) {
+    return str_printf("invalid URL: '%s'", optarg);
+  }
+  if (su.type != HTTP_URL && su.type != FILE_URL && 
+      (prefs->backend_type == BACKEND_TYPE_BOARD || prefs->backend_type == BACKEND_TYPE_RSS)) {
+    return str_printf("this kind of URL not allowed here: '%s' (expected http:// or file://)", optarg);
+  }
+  if (su.type != POP3_URL && su.type != APOP_URL && prefs->backend_type == BACKEND_TYPE_POP) {
+    return str_printf("this kind of URL not allowed here: '%s' (expected pop3://)", optarg);
+  }
+  return NULL;
+}
+
+char*
+option_post_url(const char  *optarg,
+                SitePrefs *prefs)
+{
+  SplittedURL su;
+  assert(optarg);
+  FREE_STRING(prefs->post_url);
+  prefs->post_url = str_dup_unquoted(optarg);
+  if (split_url(prefs->post_url, &su) || su.type != HTTP_URL) {
+    return str_printf("invalid POST URL: '%s'", optarg);
+  }
+  if (prefs->backend_type == BACKEND_TYPE_POP) {
+    return str_printf("pop accounts are read-only..");
+  }
+  return NULL;
+}
+
+static void
+option_set_proxy(const char  *optarg,
+                 SitePrefs *p)
+{
+  char *s, *S;
+  
+  if (p->proxy_name) free(p->proxy_name); 
+  if (optarg == NULL || strlen(optarg) == 0) {
+    fprintf(stderr, _("Deactivating the proxy"));
+    p->proxy_name = NULL;
+  } else {
+    S = strdup(optarg);
+    if ((s = strchr(S, ':')) != NULL) {
+      *s = 0;
+      p->proxy_name = strdup(S);
+      p->proxy_port = atoi(s+1); assert(p->proxy_port>0);
+    } else {
+      p->proxy_name = strdup(S);	  
+    }
+    /*
+    if (Prefs.verbosity >= 1) myprintf("PROXY: %<YEL %s>:%<GRN %d>\n", 
+				       p->proxy_name, 
+				       p->proxy_port);
+    */
+    free(S);
+  }
+}
+
+static char*
+option_browser(const char *optarg,const char *optname,
+	       GeneralPrefs *p, int browser_num)
+{
+  int i, pc;
+  char *s;
+  char **bcmd = NULL;
+  int ok = 0;
+
+  if (browser_num == 1) bcmd = &p->browser_cmd; else bcmd = &p->browser2_cmd;
+  if (*bcmd) free(*bcmd);
+  *bcmd = strdup(optarg); assert(*bcmd);
+  s = *bcmd; assert(s);
+  i = 0; pc = 0;
+  /* verifie que la seule occurence de '%' est bien suivie d'un 's' */
+  while (s[i]) {
+    if (pc == '%') {
+      if (s[i] != 's') {
+	ok = 0; break;
+      } else ok++;
+    }
+    pc = s[i]; i++;
+  }
+  if (ok != 1) {
+    return str_printf(_("[%s option] there must be one and only one "
+		      "'%%' character, and it must be followed by an 's' (it will be "
+		      "replaced by the URL)"), optname);
+  }
+  if (strstr(s, "'%s'")) {
+    myfprintf(stderr, "%s : %<YEL warning>: '%%s' == Bad, %%s == Good (all the URLs are escaped)\n", optarg);
+  }
+  return NULL;
+}
+
+char *
+option_http_cookie(SitePrefs *sp, char *arg) {
+  char *old = sp->user_cookie;
+  unsigned char *src, *dest;
+  if (strchr(arg, '=')==NULL) return strdup("you forgot the cookie name (session_id ? or what). Now you have to put the cookie name with its value");
+  COND_FREE(old);
+  /* copie du cookie en virant les espaces superflus (et surtout DANJEREU) */
+  sp->user_cookie = malloc(strlen(arg)+1);
+  dest = sp->user_cookie;
+  for (src = arg; *src; src++) {
+    if (*src > ' ') { *dest = *src; dest++; }
+  }
+  *dest = 0;
+  return NULL;
+}
+
+void
+destroy_string_list(char ***list, int *nb_elt) {
+  int i;
+  if (*list) { 
+    for (i=0; i < *nb_elt; i++) 
+      free((*list)[i]); 
+    free(*list); *list = NULL; 
+  }
+}
+
+/* lecture d'une liste de chaines, s�par�es par des virgules 
+   les doubles quotes " dans la chaine doivent �tre slash�es
+*/
+char*
+option_get_string_list(unsigned char *optarg, char *optname, char ***list, int *nb_elt)
+{ 
+  int pass, cnt;
+  char mot[1024];
+
+  destroy_string_list(list, nb_elt);
+  for (pass = 0; pass < 2; pass++) {
+    unsigned char *s;
+
+    s = optarg;
+    cnt = 0;
+    do {
+      int i;
+      if (s != optarg) {
+	if (*s != ',') goto erreur;
+	s++;
+      }
+      while (*s && *s <= ' ') s++;
+      if (*s != '"') goto erreur;
+      s++;
+      i = 0;
+      while (*s && i < 1023) {
+	if (*s == '\\' && *(s+1) == '"') {
+	  s++;
+	} else if (*s == '"') {
+	  break;
+	}
+	mot[i++] = *s; s++;
+      }
+      mot[i++] = 0;
+      if (*s != '"') goto erreur;
+      s++;
+      while (*s && *s <= ' ') s++;
+
+      if (pass == 1) {
+	(*list)[cnt] = strdup(mot);
+      }
+      cnt++;
+    } while (*s);
+    if (pass == 0) {
+      *nb_elt = cnt;
+      if (cnt == 0) {
+	*list = NULL;
+      } else {
+	*list = calloc(cnt, sizeof(char*));
+      }
+    }
+  }
+
+  return NULL;
+ erreur:
+  if (*list) {   destroy_string_list(list, nb_elt); }
+  return str_printf(_("Error for option '%s': a list of words between quotes, separated by commas, is expected."), optname);
+}
+
+/* comme string_list, mais avec des attributs sp�cifiques optionnels */
+char*
+option_get_key_list(unsigned char *optarg, char *optname, KeyList **pfirst, int nummin, int nummax)
+{
+  int cnt;
+  char mot[1024];
+  unsigned char *s;
+
+  KeyList *first = *pfirst;
+
+  first = key_list_clear_from_prefs(first);
+  s = optarg;
+  cnt = 0;
+  do {
+    KeyListType t;
+    int i,num;
+    if (s != optarg) {
+      if (*s != ',') goto erreur;
+      s++;
+    }
+    while (*s && *s <= ' ') s++;
+    
+    t = HK_WORD;
+    if (strncasecmp(s, "ua:", 3) == 0) { t = HK_UA; s+= 3; }
+    if (strncasecmp(s, "login:", 6) == 0) { t = HK_LOGIN; s+= 6; }
+    if (strncasecmp(s, "word:", 5) == 0) { t = HK_WORD; s+=5; }
+    if (strncasecmp(s, "id:", 3) == 0) { t = HK_ID; s+= 3; }
+    if (strncasecmp(s, "thread:", 7) == 0) { t = HK_THREAD; s+= 7; }
+    if (strncasecmp(s, "ua_nologin:", 11) == 0) { t = HK_UA_NOLOGIN; s+= 11; }
+
+    num = nummin;
+    if (*s >= '0' && *s <= '9') { 
+      num = atoi(s); while (*s >= '0' && *s <= '9') s++; if (*s != ':') goto erreur; s++;
+    }
+    if (num < nummin || num > nummax) {
+      return str_printf(_("Invalid argument for option '%s', word %d, the value of the numerical argument (%d) must "
+			"be chosen between %d and %d"), optname, cnt, num, nummin, nummax);
+    }
+
+    if (*s != '"') goto erreur;
+    s++;
+    i = 0;
+    while (*s && i < 1023) {
+      if (*s == '\\' && *(s+1) == '"') {
+	s++;
+      } else if (*s == '"') {
+	break;
+      }
+      mot[i++] = *s; s++;
+    }
+    mot[i++] = 0;
+    if (*s != '"') goto erreur;
+    s++;
+    while (*s && *s <= ' ') s++;
+
+    
+    first = key_list_add(first, mot, t, num, 1);
+    cnt++;
+  } while (*s);
+  *pfirst = first;
+  return NULL;
+  
+ erreur:
+  return str_printf(_("Invalid argument for option '%s', word %d: you have to specify a list of [UA|LOGIN|ID|etc]:[NUM:]\"a word\" separated with commas\n"), optname, cnt);
+}
+
+char *
+string_to_miniuarule(unsigned char *str, MiniUARule *r) {
+  int cnt;
+  char mot[1024];
+  unsigned char *s, *s_tok;
+  int rule_section = 1;
+
+  r->rgx = NULL;
+  r->s_rgx = NULL;
+  r->site_name = NULL;
+  r->user_login = NULL;
+  r->rua = NULL;
+  r->color = -1;
+  r->symb = -1;
+  r->ua_terminal = 0;
+  r->color_terminal = 0;
+  r->symb_terminal = 0;
+  r->next = NULL;
+  s = str; s_tok = s;
+  cnt = 0;
+  do {
+    enum { MATCH_UA, MATCH_LOGIN, MATCH_SITE, REPL_UA, REPL_COL, REPL_SYMB, TOKERR } tok_type;
+    int separ_ok = 0;
+    int i;
+    s_tok = s; /* juste pour pouvoir signaler sur que element s'est produit l'erreur */
+    if (strncmp(s, "=>", 2) == 0 && rule_section == 1) { separ_ok = 1; rule_section = 0; s += 2; }
+    else if (s == str) separ_ok = 1;
+    else if (*s == ',') { separ_ok = 1; s++; }
+    else goto erreur;
+
+    while (*s && *s <= ' ') s++;
+    
+    tok_type = TOKERR;
+    if (rule_section) {
+      if (strncasecmp(s, "ua:", 3) == 0) { tok_type = MATCH_UA; s+= 3; }
+      if (strncasecmp(s, "login:", 6) == 0) { tok_type = MATCH_LOGIN; s+= 6; }
+      if (strncasecmp(s, "site:", 5) == 0) { tok_type = MATCH_SITE; s+= 5; }
+    } else {
+      if (strncasecmp(s, "color=" , 6) == 0) { tok_type = REPL_COL; s+= 6; }
+      if (strncasecmp(s, "color:=", 7) == 0) { tok_type = REPL_COL; s+= 7; r->color_terminal = 1; }
+      if (strncasecmp(s, "ua="    , 3) == 0) { tok_type = REPL_UA; s+= 3; }
+      if (strncasecmp(s, "ua:="   , 4) == 0) { tok_type = REPL_UA; s+= 4; r->ua_terminal = 1; }
+      if (strncasecmp(s, "symb="  , 5) == 0) { tok_type = REPL_SYMB; s+= 5; }
+      if (strncasecmp(s, "symb:=" , 6) == 0) { tok_type = REPL_SYMB; s+= 6; r->symb_terminal = 1; }
+    }
+
+    if (tok_type == TOKERR) goto erreur;
+    if (*s != '"') goto erreur;
+    s++;
+    i = 0;
+    while (*s && i < 1023) {
+      if (*s == '\\' && *(s+1) == '"') {
+	s++;
+      } else if (*s == '"') {
+	break;
+      }
+      mot[i++] = *s; s++;
+    }
+    mot[i++] = 0;
+    if (*s != '"') goto erreur;
+    s++;
+    while (*s && *s <= ' ') s++;
+
+    switch (tok_type) {
+    case MATCH_UA: 
+      {
+	int err;
+	if (r->rgx) goto erreur;
+	r->s_rgx = strdup(mot);
+	ALLOC_OBJ(r->rgx,regex_t);
+	err = regcomp(r->rgx, mot, REG_EXTENDED);
+	if (err != 0) {
+	  char *errmsg;
+	  int regex_errbuffsz;
+	  char *regex_errbuf;
+	  
+	  /* cf man regex */
+	  regex_errbuffsz = regerror(err, r->rgx, 0, 0);
+	  regex_errbuf = calloc(regex_errbuffsz+1, sizeof(char));
+	  regerror(err, r->rgx, regex_errbuf, regex_errbuffsz);
+	  
+	  errmsg = str_printf(_("miniuarule: '%s' is a wrong regexp: %s"), mot, regex_errbuf);
+	  free(regex_errbuf);
+	  return errmsg;
+	}
+      } break;
+    case MATCH_SITE:
+      {
+	if (r->site_name) goto erreur;
+	r->site_name = strdup(mot);
+      } break;
+    case MATCH_LOGIN:
+      {
+	if (r->user_login) goto erreur;
+	r->user_login = strdup(mot);
+      } break;
+    case REPL_UA:
+      {
+	if (r->rua) goto erreur;
+	r->rua = strdup(mot);
+      } break;
+    case REPL_COL:
+      {
+	if (r->color >= 0) goto erreur;
+	if (sscanf(mot, "#%06x", &r->color) != 1) goto erreur;
+      } break;
+    case REPL_SYMB:
+      {
+	int symb;
+	if (r->symb >= 0) goto erreur;
+	for (symb=0; symb < NB_SYMBOLES; symb++) {
+	  if (strcasecmp(mot, symboles[symb].name) == 0) break;
+	}
+	if (symb == NB_SYMBOLES) goto erreur;
+	r->symb = symb;
+      } break;
+    default:
+      assert(0);
+    }
+    cnt++;
+  } while (*s);
+  return NULL;
+
+ erreur:
+  return str_printf(_("Invalid argument for miniuarule here: '%.20s'\n"), s_tok);
+}
+
+/*
+  encore plus compliqu�e ;) on reprends la precedente et on la bidouille 
+*/
+char*
+option_miniua_rule(unsigned char *optarg, MiniUARules *rules)
+{
+  MiniUARule *r, *pr;
+
+  /* on insere � la fin de la liste pour respecter l'ordre des regles
+     (pt1 j'ai mis longtemps � comprendre pour ces *** de regex marchaient bizarrement)
+  */
+  ALLOC_OBJ(r, MiniUARule); r->next = NULL;
+  pr = rules->first;
+  if (pr) {
+    while (pr->next) pr = pr->next;
+    pr->next = r;
+  } else rules->first = r;
+  return string_to_miniuarule(optarg, r);
+}
+
+/* lecture des options de remplacement d'url
+   (au format: 
+       pinnipede.url_replace: "yahoo" => "[YAHOO]" )
+*/
+char *
+option_get_url_remplacement(const unsigned char *arg, URLReplacements *urlr) {
+  URLReplacement *ur;
+  const unsigned char *s, *p;
+
+  ALLOC_OBJ(ur, URLReplacement);
+  ur->key = NULL;
+  ur->repl = NULL;
+  ur->next = NULL;
+  s = arg;
+  while (*s && *s <= ' ') s++;
+  if (*s != '"') goto erreur;
+  s++;
+  p = s;
+  while (*p && *p != '"') p++;
+  if (*p != '"') goto erreur;
+
+  ur->key = malloc(p - s + 1);
+  strncpy(ur->key, s, p-s); ur->key[p-s] = 0;
+
+  s = p+1;
+  while (*s && *s <= ' ') s++;
+  if (*s++ != '=') goto erreur;
+  if (*s++ != '>') goto erreur;
+  while (*s && *s <= ' ') s++;
+
+  if (*s != '"') goto erreur;
+  s++;
+  p = s;
+  while (*p && *p != '"') p++;
+  if (*p != '"') goto erreur;
+
+  ur->repl = malloc(p - s + 1);
+  strncpy(ur->repl, s, p-s); ur->repl[p-s] = 0;
+  s = p+1;
+  while (*s && *s <= ' ') s++;
+  if (*s != 0) goto erreur;
+
+  /* insere en respectant l'ordre */
+  ur->next = NULL;
+  if (urlr->first == NULL) urlr->first = ur;
+  else {
+    URLReplacement *c_ur;
+    for (c_ur = urlr->first; c_ur->next; c_ur = c_ur->next) ;
+    c_ur->next = ur;
+  }
+
+  str_tolower(ur->key);
+  return NULL;
+ erreur:
+  FREE_STRING(ur->key);
+  FREE_STRING(ur->repl);
+  free(ur);
+  return str_printf(_("Invalid argument for option 'pinnipede.url_replace' here: '%.20s'\n"), arg);
+}
+
+/* remplit la structure des prefs de site avec les valeurs par d�faut */
+void
+wmcc_site_prefs_set_default(SitePrefs *p, int verbatim) {
+  assert(p);
+  memset(p, 0, sizeof(SitePrefs));
+  p->board_check_delay = 30; /* 2 fois par minute */
+  p->board_max_msg = 300;
+  p->board_wiki_emulation = NULL;
+  if (p->user_agent) free(p->user_agent); 
+  p->user_agent = malloc(USERAGENT_MAXMAX_LEN+1);
+  if (!verbatim) {
+    coincoin_default_useragent(p->user_agent, USERAGENT_MAXMAX_LEN+1);
+  } else strcpy(p->user_agent, coincoin_default_useragent_template());
+  p->user_name = NULL;
+  p->palmi_msg_max_len = 255;
+  p->palmi_ua_max_len = 60;
+  p->use_if_modified_since = 1;
+  p->proxy_auth_user = NULL;
+  p->proxy_auth_pass = NULL;
+  p->proxy_name = NULL;
+  p->proxy_port = 1080;/* meme valeur par defaut que curl ... */
+  p->proxy_nocache = 0;
+  ASSIGN_STRING_VAL(p->backend_url, "http://linuxfr.org/board/index.xml");
+  p->backend_type = BACKEND_TYPE_BOARD;
+  p->backend_flavour = BACKEND_FLAVOUR_UNENCODED; /* style 'moderne' par d�faut */
+  ASSIGN_STRING_VAL(p->post_url, "");//board/add.php3");
+  ASSIGN_STRING_VAL(p->post_template, "message=%s");
+  p->user_cookie = NULL; 
+  p->user_login = NULL;
+  p->pop3_user = NULL;
+  p->pop3_pass = NULL;
+  p->rss_ignore_description = 0;
+  p->pp_bgcolor = 0xdae6e6;
+  BICOLOR_SET(p->pp_fgcolor,0x303030,0xd0d0d0);
+  BICOLOR_SET(p->pp_tstamp_color,0x004000, 0xffff80);
+  BICOLOR_SET(p->pp_useragent_color, 0x800000, 0xa0ffa0);
+  BICOLOR_SET(p->pp_login_color, 0xff0000, 0xc0ffc0);
+  BICOLOR_SET(p->pp_url_color, 0x0050ff, 0x80f0ff);
+  BICOLOR_SET(p->pp_visited_url_color, 0x800080, 0x800080);
+  BICOLOR_SET(p->pp_trollscore_color, 0xff0000, 0xffff00);
+  BICOLOR_SET(p->pp_strike_color,0x800000,0x800000);
+  FONTSTYLE_SET(p->pp_clock_style, 0,0,0,0);
+  FONTSTYLE_SET(p->pp_login_style, 0,0,0,0);
+  FONTSTYLE_SET(p->pp_ua_style, 0,1,0,0);
+  p->locale = locFR;
+  p->site_name = NULL;
+  p->all_names = NULL;
+  p->nb_names = 0;
+  /*  ASSIGN_STRING_VAL(p->site_name, "linuxfr");
+      ASSIGN_STRING_VAL(p->all_names, "linuxfr");*/
+  p->time_difference = 0;
+  p->mark_id_gaps = 1;
+  p->check_board = 1;
+  p->hunt_opened_on_site = 1;
+  //p->board_auto_refresh = 1;
+}
+
+void
+wmcc_site_prefs_copy(SitePrefs *sp, const SitePrefs *src) {
+  int i;
+  assert(sp); assert(src);
+
+#define SPSTRDUP(x) if (src->x) { sp->x = strdup(src->x); assert(sp->x); }
+
+  /* NE JAMAIS FAIRE DE FREE SUR LES CHAINES DE sp !!!
+     BORDAILE ! sp est d'abord memcopi� de src pour eviter la 
+     copie de tous les membres */
+
+  *sp = *src; /* splaoutch */
+  SPSTRDUP(board_wiki_emulation);
+  sp->user_agent = malloc(USERAGENT_MAXMAX_LEN+1);
+  assert(strlen(src->user_agent) <= USERAGENT_MAXMAX_LEN);
+
+  strcpy(sp->user_agent, src->user_agent);
+  SPSTRDUP(user_name);
+  SPSTRDUP(proxy_auth_user);
+  SPSTRDUP(proxy_auth_pass);
+  SPSTRDUP(proxy_name);
+
+  SPSTRDUP(backend_url);
+  SPSTRDUP(post_url);
+  SPSTRDUP(post_template);
+  SPSTRDUP(user_cookie);
+  SPSTRDUP(user_login);
+  SPSTRDUP(pop3_user);
+  SPSTRDUP(pop3_pass);
+  if (src->nb_names>0) {
+    ALLOC_VEC(sp->all_names, src->nb_names, char *);
+    for (i=0; i < src->nb_names; i++) sp->all_names[i] = strdup(src->all_names[i]);
+    sp->site_name = sp->all_names[0];
+  }
+}
+
+void
+wmcc_site_prefs_destroy(SitePrefs *p)
+{
+  FREE_STRING(p->user_agent);
+  FREE_STRING(p->board_wiki_emulation);
+  FREE_STRING(p->backend_url);
+  FREE_STRING(p->proxy_auth_user); 
+  FREE_STRING(p->proxy_auth_pass); 
+  FREE_STRING(p->proxy_name); 
+  FREE_STRING(p->post_template);
+  FREE_STRING(p->post_url);
+  FREE_STRING(p->user_cookie);
+  FREE_STRING(p->user_login);
+  FREE_STRING(p->pop3_user);
+  FREE_STRING(p->pop3_pass);
+  FREE_STRING(p->user_name);
+  /*  FREE_STRING(p->site_name); NON ! c'est detruit dans all_names */
+  destroy_string_list(&p->all_names, &p->nb_names);
+}
+
+/* remplit la structure des prefs generales avec les valeurs par d�faut */
+void
+wmcc_prefs_set_default(GeneralPrefs *p) {
+  int i;
+  assert(p);
+
+  p->max_refresh_delay = 30;   /* 30 minutes entre deux refresh au max */
+  p->switch_off_coincoin_delay = 24*60; /* au bout d'un jour d'inactivit�, le coincoin passe en horloge et arr�te les refresh */
+  p->debug = 0;
+  p->verbosity = 0;
+  p->verbosity_underpants = 1;
+  p->verbosity_http = 1;
+  ASSIGN_STRING_VAL(p->font_encoding, "iso8859-1");
+  ASSIGN_STRING_VAL(p->coin_coin_message, _("coin ! coin !"));
+  p->dock_bgcolor = (255L<<16) + (193L<<8) + 44; /* un joli jaune (je trouve) (NDKad : y'a que toi)*/
+  p->dock_fgcolor = 0x000000;
+  p->dock_bgpixmap = NULL;
+  p->dock_skin_pixmap = NULL;
+  p->http_timeout = 20;
+  p->http_inet_ip_version = 0;
+  p->use_balloons = 1;
+  ASSIGN_STRING_VAL(p->balloon_fn_family, "sans");
+  p->balloon_fn_size = 10;
+  p->use_iconwin = 1; /* style windowmaker par defaut */
+  p->auto_swallow = 1;
+  p->draw_border = 0; /* idem */
+  p->palmipede_override_redirect = 1;
+  p->palmipede_enable_scroll_wheel_for_boulets = 0;
+  p->dock_xpos = p->dock_ypos = 0;
+  p->start_in_boss_mode = 0;
+
+  p->default_trollo_speed = 4;
+  p->browser_cmd = NULL;
+  p->browser2_cmd = NULL;
+  ASSIGN_STRING_VAL(p->gogole_search_url, "http://www.google.fr/search?q=%s");
+  ASSIGN_STRING_VAL(p->wikipedia_search_url, "http://fr.wikipedia.org/wiki/Special:Search?search=%s&go=Go");
+  p->enable_troll_detector = 1;
+  p->board_auto_dl_pictures = 0;
+  p->board_enable_hfr_pictures = 0;
+
+  p->disable_xft_antialiasing = 0;
+  ASSIGN_STRING_VAL(p->pp_fn_family, "sans");
+  p->pp_fn_size = 12;
+  p->pp_start_in_transparency_mode = 0;
+  p->use_fake_real_transparency = 0;
+  p->pp_transparency.type = SHADING;
+  p->pp_transparency.shade.luminosite = 20; 
+  p->pp_transparency.shade.assombrissement = 70;
+
+  BICOLOR_SET(p->pp_emph_color, 0xffffff, 0x00a080);
+  BICOLOR_SET(p->pp_sel_bgcolor, 0xffd700, 0x008080);
+  BICOLOR_SET(p->pp_popup_fgcolor, 0x000050, 0x000050);
+  BICOLOR_SET(p->pp_popup_bgcolor, 0xc0d0d0, 0xc0d0d0);
+  BICOLOR_SET(p->pp_my_msg_color, 0xf07000, 0xf07000);
+  BICOLOR_SET(p->pp_answer_my_msg_color, 0xe0b080, 0xe0b080);
+  BICOLOR_SET(p->pp_keyword_color[0], 0x008080, 0x00ffff);
+  BICOLOR_SET(p->pp_keyword_color[1], 0xff0080, 0x40a0c0);
+  BICOLOR_SET(p->pp_keyword_color[2], 0x800080, 0xffff00);
+  BICOLOR_SET(p->pp_keyword_color[3], 0x00ff80, 0x808000);
+  BICOLOR_SET(p->pp_keyword_color[4], 0x008000, 0x808080);
+  BICOLOR_SET(p->pp_plopify_color,0xa0a0a0, 0x808080);
+  BICOLOR_SET(p->pp_buttonbar_bgcolor,0xcdcdcd,0xcdcdcd);
+  BICOLOR_SET(p->pp_buttonbar_fgcolor,0x606060,0x606060);
+  BICOLOR_SET(p->pp_buttonbar_msgcnt_color, 0x7070af, 0x7070af);
+  BICOLOR_SET(p->pp_buttonbar_updlcnt_color, 0x7070af, 0x7070af);
+  BICOLOR_SET(p->pp_buttonbar_progressbar_color, 0x65bc7b, 0x65bc7b);
+  
+  BICOLOR_SET(p->sc_bg_color, 0xcdcdcd, 0xcdcdcd);
+  BICOLOR_SET(p->sc_bg_light_color, 0xffffff, 0xffffff);
+  BICOLOR_SET(p->sc_bg_dark_color, 0x626262, 0x626262);
+  BICOLOR_SET(p->sc_arrow_normal_color, 0x0000ff, 0x00ff00);
+  BICOLOR_SET(p->sc_arrow_emphasized_color, 0x9c99cd, 0x99cd99);
+  BICOLOR_SET(p->sc_bar_color, 0x9c99cd, 0x99cd99);
+  BICOLOR_SET(p->sc_bar_light_color, 0xcdceff, 0xceffce);
+  BICOLOR_SET(p->sc_bar_dark_color, 0x62659c, 0x649c64);
+
+  key_list_destroy(p->hilight_key_list); p->hilight_key_list = NULL;
+  key_list_destroy(p->plopify_key_list); p->plopify_key_list = NULL;
+  option_get_string_list("\"plop\",\"grouik\",\"gruiiik\",\"glop\",\"buurp\","
+			 "\"miaou\",\"sluurpe\",\"c��oot\",\"pika\",\"pikaaaa\",\"ka-pika\","
+			 "\"chuuu\",\"prout\",\"uuuurg\",\"blob\",\"ploop\",\"pl0p\",\"c0in\","
+			 "\"pouet\",\"coin!\",\"flebelebelblbll\",\"blop\",\"gloup\"",
+			 "", &p->plop_words, &p->nb_plop_words);
+  p->hungry_boitakon = 0;
+  p->pp_xpos = -10000;
+  p->pp_ypos = -10000;
+  p->pp_width = 300;
+  p->pp_height = 455;
+  p->pp_minibar_on = 1;
+  p->pp_show_sec_mode = 1;
+  p->pp_html_mode = 1;
+  p->pp_nick_mode = 4;
+  p->pp_trollscore_mode = 1;           
+  p->pp_use_classical_tabs = 0;
+  p->pp_use_colored_tabs = 1;
+  p->pp_tabs_pos = 2; /* a gauche */
+  
+  p->ew_do_spell = 0;                  /*Ca fonctionne (?)
+					 donc je l'active par defaut
+				       */
+  ASSIGN_STRING_VAL(p->ew_spell_cmd, "ispell");  /*ispell par defaut car present 
+						   partout 
+						 */
+  ASSIGN_STRING_VAL(p->ew_spell_dict, "french"); /* risque mais soyons chauvin */
+  
+  for (i=0; i < NB_BIGORNO; ++i) {
+    p->post_cmd[i] = NULL; p->post_cmd_enabled[i] = 1;
+  }
+  ASSIGN_STRING_VAL(p->board_scrinechote, "~/wmcc_board_shot.html");  
+  p->pinnipede_open_on_start = 1;
+  
+  p->miniuarules.first = NULL;
+  p->url_repl.first = NULL;
+
+  p->hunt_opened = 1;
+  p->hunt_max_duck = 8;
+
+  p->nb_sites = 0;
+  { 
+    int i;
+    for (i=0; i < MAX_SITES; i++) {
+      if (p->site[i]) {
+	wmcc_site_prefs_destroy(p->site[i]); free(p->site[i]);
+      }
+      p->site[i] = NULL;
+    }
+  }
+}
+
+void miniuarule_clear(MiniUARule *r) {
+  FREE_STRING(r->site_name);
+  FREE_STRING(r->user_login);
+  FREE_STRING(r->rua);
+  FREE_STRING(r->s_rgx);
+  if (r->rgx) regfree(r->rgx); 
+  r->rgx = NULL;
+}
+
+void
+miniuarules_destroy(MiniUARules *urs, MiniUARule *ur)
+{
+  MiniUARule *r, *r_prev = NULL;
+  for (r = urs->first; r; r = r->next) {
+    if (r == ur) break;
+    r_prev = r;
+  }
+  assert(r);
+  if (r_prev) {
+    r_prev->next = r->next;
+  } else {
+    urs->first = r->next;
+  }
+  miniuarule_clear(r);
+  free(r);
+}
+
+/* libere la m�moire allou�e par les champs de la structure, *mais* pas la structure elle-m�me */
+void
+wmcc_prefs_destroy(GeneralPrefs *p)
+{
+  int i;
+  FREE_STRING(p->font_encoding);
+  FREE_STRING(p->coin_coin_message);
+  FREE_STRING(p->balloon_fn_family);
+  FREE_STRING(p->dock_bgpixmap);
+  FREE_STRING(p->dock_skin_pixmap);
+  FREE_STRING(p->browser_cmd);
+  FREE_STRING(p->browser2_cmd);
+  FREE_STRING(p->pp_fn_family);
+  key_list_destroy(p->hilight_key_list); p->hilight_key_list = NULL;
+  key_list_destroy(p->plopify_key_list); p->plopify_key_list = NULL;
+  for (i=0; i < (int)p->nb_plop_words; i++) FREE_STRING(p->plop_words[i]);
+  FREE_STRING(p->plop_words);
+  FREE_STRING(p->ew_spell_cmd);
+  FREE_STRING(p->ew_spell_dict);
+  for (i=0; i < NB_BIGORNO; ++i) {
+    FREE_STRING(p->post_cmd[i]);
+  }
+  FREE_STRING(p->board_scrinechote);
+  FREE_STRING(p->gogole_search_url);
+  FREE_STRING(p->wikipedia_search_url);
+  for (i=0; i < p->nb_sites; i++) { 
+    assert(p->site[i]);
+    wmcc_site_prefs_destroy(p->site[i]); free(p->site[i]); p->site[i] = NULL; 
+  }
+  p->nb_sites = 0;
+  while (p->miniuarules.first) {
+    miniuarules_destroy(&p->miniuarules, p->miniuarules.first);
+  }
+
+  {
+    URLReplacement *ur, *ur_next;
+    for (ur = p->url_repl.first; ur; ur = ur_next) {
+      FREE_STRING(ur->key);
+      FREE_STRING(ur->repl);
+      ur_next = ur->next; 
+      free(ur);
+    }
+    p->url_repl.first = NULL;
+  }
+}
+
+int
+wmcc_prefs_find_site_id(GeneralPrefs *p, const char *name)
+{
+  int i;
+  for (i=0; i < MAX_SITES; i++) {
+    if (p->site[i] && strcmp(p->site[i]->all_names[0], name)==0) 
+      return i;
+  }
+  return -1;
+}
+
+SitePrefs *
+wmcc_prefs_find_site(GeneralPrefs *p, const char *name)
+{
+  int i = wmcc_prefs_find_site_id(p,name);
+  return i >= 0 ? p->site[i] : NULL;
+}
+
+
+/* read a filename (interpreting the '~' chararacter) */
+void
+option_get_filename(char *arg, char **fname) {
+  assert(arg); assert(*fname == NULL);
+  if (*arg == '~') {
+    *fname = str_printf("%s%s", getenv("HOME"), arg+1);
+  } else {
+    *fname = strdup(arg);
+  }
+  assert(*fname);
+}
+
+char*
+wmcc_prefs_add_site(GeneralPrefs *p, SitePrefs *global_sp, char *arg, backend_type_enum btype)
+{
+  SitePrefs *sp;
+  char *err;
+  p->nb_sites++; 
+  sp = calloc(1, sizeof(SitePrefs));
+  p->site[p->nb_sites-1] = sp;
+  wmcc_site_prefs_copy(sp, global_sp);
+  sp->backend_type = btype;
+  if ((err = option_get_string_list(arg, wmcc_options_strings[OBSOLETE_OPT_site], &sp->all_names, &sp->nb_names))) return err;
+  assert(sp->all_names);
+  if (btype == BACKEND_TYPE_RSS || btype == BACKEND_TYPE_POP) {
+    if (btype == BACKEND_TYPE_RSS)
+      sp->backend_flavour = BACKEND_FLAVOUR_ENCODED;
+    else sp->backend_flavour = BACKEND_FLAVOUR_UNENCODED;
+    sp->board_check_delay = 600;
+  }
+  
+  sp->site_name = sp->all_names[0];
+  if (wmcc_prefs_find_site(p, sp->site_name) != sp) {
+    return str_printf("Duplicated site_name: a site named '%s' already exists!", sp->site_name);
+  }
+  return NULL;
+}
+
+/* les macros c'est sale mais c'est j'aime �a */
+#define CHECK_INTEGER_ARG(bmin,bmax,i) { i=atoi(arg); if (i<(bmin) || ((bmax)>(bmin) && i > (bmax))) { return str_printf(_("Invalid value for option '%s' (must be between %d and %d)"), opt_name, (bmin), (bmax)==0 ? 10000000 : (bmax)); } }
+
+#define CHECK_BOOL_ARG(x) { x = option_get_bool_val(arg); if (x < 0) return str_printf(_("Invalid value for option '%s': must be a value of type on/off, 1/0, true/false or yes/no"), opt_name); }
+#define CHECK_BOOLNOT_ARG(x) { CHECK_BOOL_ARG(x); x = !x ; }
+
+#define CHECK_COLOR_ARG(x) { if (sscanf(arg, "%x", &x)!=1) return str_printf(_("Invalid value for option '%s': must be a hexadecimal RGB color, with the RRGGBB format"), opt_name); if (strchr(arg, ' ')) return str_printf(_("Error, the '%s' option only accepts one colour value"), opt_name); }
+
+#define CHECK_XYPOS_ARG(xpos,ypos) { char *err=option_get_xypos_val(arg,opt_name,&xpos,&ypos); if (err) return err; }
+
+#define CHECK_BICOLOR_ARG(x) { if (sscanf(arg, "%x %x", &x.opaque, &x.transp)<1) return str_printf(_("Invalid value for option '%s': must be a hexadecimal RGB colour, with the RRGGBB format (optionally followed by a second colour for the transparency mode)"), opt_name); }
+
+#define CHECK_TRANSP_ARG(x) { char *err=option_get_transp_val(arg,opt_name,&x); if (err) return err; }
+
+#define CHECK_KEY_LIST(x,_min,_max) { char *err=option_get_key_list(arg,opt_name,&x,_min,_max); if (err) return err; }
+
+#define CHECK_FILENAME_ARG(x) { FREE_STRING(x); option_get_filename(arg, &x); }
+
+#define CHECK_FONTSTYLE_ARG(x) { char *err = option_get_font_style(arg,opt_name,&x); if (err) return err; }
+
+/* assigne une option dans les preferences, renvoie un message d'erreur si y'a un pb */
+char *
+wmcc_prefs_validate_option(GeneralPrefs *p, SitePrefs *sp, SitePrefs *global_sp, wmcc_options_id opt_num, unsigned char *arg, int verbatim)
+{
+  char *opt_name;
+  assert(opt_num < NB_WMCC_OPTIONS);
+  opt_name = wmcc_options_strings[opt_num];
+  switch (opt_num) {
+    case OPTS_check_board: {
+      CHECK_BOOL_ARG(sp->check_board);
+    } break; 
+    case OBSOLETE_OPTSG_http_path_myposts:
+    case OBSOLETE_OPT_news_font_family:
+    case OBSOLETE_OPT_news_font_size:
+    case OBSOLETE_OPTSG_check_news:
+    case OBSOLETE_OPTSG_check_comments:
+    case OBSOLETE_OPTSG_news_delay:
+    case OBSOLETE_OPTSG_news_max_age:
+    case OBSOLETE_OPTSG_http_path_end_news_url:
+    case OBSOLETE_OPTSG_http_path_news_backend:
+    case OBSOLETE_OPT_pinnipede_fortune_font_size:
+    case OBSOLETE_OPT_pinnipede_show_fortune:
+    case OBSOLETE_OPTSG_board_auto_refresh: { 
+    } break;
+    case OPT_verbosity_underpants: {
+      CHECK_INTEGER_ARG(0,10, p->verbosity_underpants);
+    } break;  
+    case OPT_verbosity_http: {
+      CHECK_INTEGER_ARG(0,10, p->verbosity_http);
+    } break;
+    case OPT_font_encoding: { 
+      ASSIGN_STRING_VAL(p->font_encoding,arg); 
+    } break; 
+    case OPTSG_tribune_delay: {
+      CHECK_INTEGER_ARG(10,10000, sp->board_check_delay); 
+    } break;
+    case OPT_tribunenews_max_refresh_delay: {
+      CHECK_INTEGER_ARG(0,0, p->max_refresh_delay);
+    } break; 
+    case OPT_tribunenews_switch_off_coincoin_delay: {
+      CHECK_INTEGER_ARG(0,0, p->switch_off_coincoin_delay);
+    } break; 
+    case OPTSG_tribune_max_messages: {
+      CHECK_INTEGER_ARG(1,0, sp->board_max_msg);
+    } break; 
+    case OPT_tribune_troll_detector: {
+      CHECK_BOOL_ARG(p->enable_troll_detector);
+    } break;
+    case OPT_board_auto_dl_pictures: {
+      CHECK_BOOL_ARG(p->board_auto_dl_pictures);
+    } break;
+    case OPT_board_enable_hfr_pictures: {
+      CHECK_BOOL_ARG(p->board_enable_hfr_pictures);
+    } break;
+    case OPT_balltrap_enable: {
+      CHECK_BOOL_ARG(p->hunt_opened);
+    } break;
+    case OPT_balltrap_max_ducks: {
+      CHECK_INTEGER_ARG(0, 1000, p->hunt_max_duck);
+    } break;
+    case OPTS_balltrap_enable: {
+      CHECK_BOOL_ARG(sp->hunt_opened_on_site);
+    } break;
+    case OPT_tribune_post_cmd: {
+      ASSIGN_STRING_VAL(p->post_cmd[0], arg);
+    } break; 
+    case OPT_tribune_post_cmd_enabled: {
+      CHECK_BOOL_ARG(p->post_cmd_enabled[0]);
+    } break;
+    case OPT_tribune_post_cmd2: {
+      ASSIGN_STRING_VAL(p->post_cmd[1], arg);
+    } break;
+    case OPT_tribune_post_cmd2_enabled: {
+      CHECK_BOOL_ARG(p->post_cmd_enabled[1]);
+    } break;
+    case OPTSG_tribune_wiki_emulation: {
+      ASSIGN_STRING_VAL(sp->board_wiki_emulation, arg);
+    } break; 
+    case OPT_tribune_archive: {
+      CHECK_FILENAME_ARG(p->board_scrinechote);
+    } break; 
+    case OPT_dock_bg_color: {
+      CHECK_COLOR_ARG(p->dock_bgcolor);
+    } break; 
+    case OPT_dock_bg_pixmap: {
+      CHECK_FILENAME_ARG(p->dock_bgpixmap);
+    } break; 
+    case OPT_dock_skin_pixmap: {
+      CHECK_FILENAME_ARG(p->dock_skin_pixmap);
+    } break; 
+    case OPT_dock_fg_color: {
+      CHECK_COLOR_ARG(p->dock_fgcolor);
+    } break; 
+    case OPT_dock_draw_border: {
+      CHECK_BOOL_ARG(p->draw_border);
+    } break; 
+    case OPT_dock_iconwin: {
+      CHECK_BOOL_ARG(p->use_iconwin);
+    } break; 
+    case OPT_dock_auto_swallow: {
+      CHECK_BOOL_ARG(p->auto_swallow);
+    } break; 
+    case OPT_palmipede_override_wmanager: { 
+      CHECK_BOOL_ARG(p->palmipede_override_redirect);
+    } break;
+    case OPT_palmipede_enable_scroll_wheel_for_boulets: {
+      CHECK_BOOL_ARG(p->palmipede_enable_scroll_wheel_for_boulets);
+    } break;
+    case OPT_dock_use_balloons: {
+      CHECK_BOOL_ARG(p->use_balloons);
+    } break; 
+    case OPT_dock_balloons_font_family: {
+      ASSIGN_STRING_VAL(p->balloon_fn_family, arg); 
+    } break; 
+    case OPT_dock_balloons_font_size: {
+      CHECK_INTEGER_ARG(1,100, p->balloon_fn_size);
+    } break; 
+    case OPT_dock_pos: {
+      CHECK_XYPOS_ARG(p->dock_xpos, p->dock_ypos);
+    } break; 
+    case OPT_dock_start_in_boss_mode: {
+      CHECK_BOOL_ARG(p->start_in_boss_mode);
+    } break; 
+    case OPTSG_rss_ignore_description: {
+      CHECK_BOOL_ARG(sp->rss_ignore_description);
+    } break;
+    case OPTSG_palmipede_username: {
+      ASSIGN_STRING_VAL(sp->user_name, arg);
+    } break; 
+    case OPTSG_palmipede_msg_max_length: {
+      CHECK_INTEGER_ARG(64, MESSAGE_MAXMAX_LEN, sp->palmi_msg_max_len);
+    } break; 
+    case OPTSG_palmipede_useragent_max_length: {
+      CHECK_INTEGER_ARG(20, USERAGENT_MAXMAX_LEN, sp->palmi_ua_max_len);
+    } break; 
+    case OPTSG_palmipede_userlogin: {
+      ASSIGN_STRING_VAL(sp->user_login, arg);
+    } break; 
+    case OPTSG_palmipede_useragent: {
+      option_set_useragent(arg, sp, verbatim);
+    } break; 
+    case OPT_palmipede_default_message: {
+      ASSIGN_STRING_VAL(p->coin_coin_message, arg); 
+    } break; 
+    case OBSOLETE_OPTSG_tribune_backend_type: 
+    case OBSOLETE_OPTSG_backend_type: {
+      CHECK_INTEGER_ARG(1,3, ObsoleteFeatures.backend_type);
+    } break;
+    case OPTSG_backend_flavour: {
+      CHECK_INTEGER_ARG(1,3, sp->backend_flavour);
+    } break;
+    case OBSOLETE_OPTSG_http_site_url: {
+      strcpy(ObsoleteFeatures.site_url, arg);
+      update_prefs_from_obsolete_features(sp);
+      /*ASSIGN_STRING_VAL(sp->backend_url, arg);
+        strcpy(obsolete_last_site_root, arg); obsolete_last_site_root[511] = 0;*/
+    } break; 
+    case OBSOLETE_OPTSG_http_path_tribune_backend: {
+      strcpy(ObsoleteFeatures.path_tribune_backend, arg);
+      update_prefs_from_obsolete_features(sp);
+      //sp->backend_url = str_cat_printf(sp->backend_url, "/%s", arg);
+    } break; 
+    case OBSOLETE_OPTSG_http_path_tribune_add: {
+      strcpy(ObsoleteFeatures.path_tribune_add, arg);
+      update_prefs_from_obsolete_features(sp);
+      //FREE_STRING(sp->post_url);
+      //sp->post_url = str_printf("%s/%s", obsolete_last_site_root, arg);
+    } break; 
+    case OPTSG_backend_url: {
+      char *err = option_backend_url(arg, sp);
+      if (err) return err;
+    } break;
+    case OPTSG_post_url: {
+      char *err = option_post_url(arg, sp);
+      if (err) return err;
+    } break;
+    case OBSOLETE_OPTSG_http_board_post: 
+    case OPTSG_post_template: {
+      ASSIGN_STRING_VAL(sp->post_template, arg); 
+      if (!strstr(sp->post_template, "%s")) {
+        return strdup("you forgot the %s in the board_post option");
+      }
+    } break; 
+    case OBSOLETE_OPTS_http_cookie: {
+      char *err = option_http_cookie(sp, arg);
+      if (err) return err;
+    } break; 
+    case OPTSG_http_proxy: {
+      option_set_proxy(arg, sp);
+    } break; 
+    case OPTSG_http_proxy_auth: {
+      char *s = strchr(arg, ':');
+      if (s) {
+        *s = 0;
+        ASSIGN_STRING_VAL(sp->proxy_auth_user, arg); 
+        ASSIGN_STRING_VAL(sp->proxy_auth_pass, s+1);
+      } else {
+        return strdup("invalid proxy user:pass setting (user name and "
+                      "password should be separated by ':')");
+      } 
+    } break; 
+    case OPTSG_http_proxy_use_nocache: {
+      CHECK_BOOL_ARG(sp->proxy_nocache);
+    } break; 
+    case OPTSG_http_use_if_modified_since: {
+      CHECK_BOOL_ARG(sp->use_if_modified_since);
+    } break; 
+    case OPT_http_browser: {
+      option_browser(arg, opt_name, p, 1);
+    } break; 
+    case OPT_http_browser2: {
+      option_browser(arg, opt_name, p, 2);
+    } break; 
+    case OPT_http_gogole_search_url: {
+      ASSIGN_STRING_VAL(p->gogole_search_url, arg);
+    } break;
+    case OPT_http_wikipedia_search_url: {
+      ASSIGN_STRING_VAL(p->wikipedia_search_url, arg);
+    } break;
+    case OPT_http_timeout: {
+      CHECK_INTEGER_ARG(20,600, p->http_timeout);
+    } break;
+    case OPT_http_inet_ip_version: {
+      CHECK_INTEGER_ARG(0,10, p->http_inet_ip_version);
+    } break;
+    case OPT_dock_disable_xft_antialiasing: {
+      CHECK_BOOL_ARG(p->disable_xft_antialiasing);
+    } break;
+    case OPT_pinnipede_font_family: {
+      ASSIGN_STRING_VAL(p->pp_fn_family, arg); 
+    } break; 
+    case OPT_pinnipede_font_size: {
+      CHECK_INTEGER_ARG(1,0, p->pp_fn_size);
+    } break; 
+    case OPTSG_pinnipede_bg_color: {
+      CHECK_COLOR_ARG(sp->pp_bgcolor);
+    } break; 
+    case OPT_pinnipede_start_in_transparency_mode: {
+      CHECK_BOOL_ARG(p->pp_start_in_transparency_mode);
+    } break;
+    case OPT_pinnipede_use_fake_real_transparency: {
+      CHECK_BOOL_ARG(p->use_fake_real_transparency);
+    } break;
+    case OPT_pinnipede_transparency: {
+      CHECK_TRANSP_ARG(p->pp_transparency);
+    } break;
+    case OPTSG_pinnipede_fg_color: {
+      CHECK_BICOLOR_ARG(sp->pp_fgcolor);
+    } break; 
+    case OPTSG_pinnipede_clock_color: {
+      CHECK_BICOLOR_ARG(sp->pp_tstamp_color);
+    } break; 
+    case OPTSG_pinnipede_useragent_color: {
+      CHECK_BICOLOR_ARG(sp->pp_useragent_color);
+    } break; 
+    case OPTSG_pinnipede_login_color: {
+      CHECK_BICOLOR_ARG(sp->pp_login_color);
+    } break; 
+    case OPTSG_pinnipede_url_color: {
+      CHECK_BICOLOR_ARG(sp->pp_url_color);
+    } break; 
+    case OPTSG_pinnipede_visited_url_color: {
+      CHECK_BICOLOR_ARG(sp->pp_visited_url_color);
+    } break; 
+    case OPTSG_pinnipede_trollscore_color: {
+      CHECK_BICOLOR_ARG(sp->pp_trollscore_color);
+    } break; 
+    case OPTSG_pinnipede_strike_color: {
+      CHECK_BICOLOR_ARG(sp->pp_strike_color);
+    } break; 
+    case OPTSG_pinnipede_clock_style: {
+      CHECK_FONTSTYLE_ARG(sp->pp_clock_style);
+    } break;
+    case OPTSG_pinnipede_login_style: {
+      CHECK_FONTSTYLE_ARG(sp->pp_login_style);
+    } break;
+    case OPTSG_pinnipede_useragent_style: {
+      CHECK_FONTSTYLE_ARG(sp->pp_ua_style);
+    } break;
+    case OPT_pinnipede_emph_color: {
+      CHECK_BICOLOR_ARG(p->pp_emph_color);
+    } break; 
+    case OPT_pinnipede_sel_bgcolor: {
+      CHECK_BICOLOR_ARG(p->pp_sel_bgcolor);
+    } break; 
+    case OPT_pinnipede_popup_bgcolor: {
+      CHECK_BICOLOR_ARG(p->pp_popup_bgcolor);
+    } break; 
+    case OPT_pinnipede_popup_fgcolor: {
+      CHECK_BICOLOR_ARG(p->pp_popup_fgcolor);
+    } break; 
+    case OPT_pinnipede_buttonbar_bgcolor: {
+      CHECK_BICOLOR_ARG(p->pp_buttonbar_bgcolor);
+    } break; 
+    case OPT_pinnipede_buttonbar_fgcolor: {
+      CHECK_BICOLOR_ARG(p->pp_buttonbar_fgcolor);
+    } break; 
+    case OPT_pinnipede_buttonbar_msgcnt_color: {
+      CHECK_BICOLOR_ARG(p->pp_buttonbar_msgcnt_color);
+    } break; 
+    case OPT_pinnipede_buttonbar_updlcnt_color: {
+      CHECK_BICOLOR_ARG(p->pp_buttonbar_updlcnt_color);
+    } break; 
+    case OPT_pinnipede_buttonbar_progressbar_color: {
+      CHECK_BICOLOR_ARG(p->pp_buttonbar_progressbar_color);
+    } break; 
+    case OPT_pinnipede_hilight_my_msg_color: {
+      CHECK_BICOLOR_ARG(p->pp_my_msg_color);
+    } break; 
+    case OPT_pinnipede_hilight_answer_my_msg_color: {
+      CHECK_BICOLOR_ARG(p->pp_answer_my_msg_color);
+    } break; 
+    case OPT_pinnipede_hilight_keyword_color0: {
+      CHECK_BICOLOR_ARG(p->pp_keyword_color[0]);
+    } break; 
+    case OPT_pinnipede_hilight_keyword_color1: {
+      CHECK_BICOLOR_ARG(p->pp_keyword_color[1]);
+    } break; 
+    case OPT_pinnipede_hilight_keyword_color2: {
+      CHECK_BICOLOR_ARG(p->pp_keyword_color[2]);
+    } break; 
+    case OPT_pinnipede_hilight_keyword_color3: {
+      CHECK_BICOLOR_ARG(p->pp_keyword_color[3]);
+    } break; 
+    case OPT_pinnipede_hilight_keyword_color4: {
+      CHECK_BICOLOR_ARG(p->pp_keyword_color[4]);
+    } break; 
+    case OPT_pinnipede_plopify_color: {
+      CHECK_BICOLOR_ARG(p->pp_plopify_color);
+    } break; 
+    case OPT_pinnipede_location: {
+      CHECK_XYPOS_ARG(p->pp_xpos, p->pp_ypos);
+    } break; 
+    case OPT_pinnipede_dimensions: {
+      CHECK_XYPOS_ARG(p->pp_width, p->pp_height);
+    } break; 
+    case OPT_pinnipede_buttons: {
+      CHECK_BOOL_ARG(p->pp_minibar_on);
+    } break; 
+    case OPT_pinnipede_show_tags: {
+      CHECK_BOOL_ARG(p->pp_html_mode);
+    } break; 
+    case OPT_pinnipede_show_seconds: {
+      CHECK_BOOL_ARG(p->pp_show_sec_mode);
+    } break; 
+    case OPT_pinnipede_nick_mode: {
+      CHECK_INTEGER_ARG(0,4, p->pp_nick_mode);
+    } break; 
+    case OPT_pinnipede_show_troll_score: {
+      CHECK_BOOL_ARG(p->pp_trollscore_mode);
+    } break; 
+    case OPT_pinnipede_use_classical_tabs: {
+      CHECK_BOOL_ARG(p->pp_use_classical_tabs);
+    } break; 
+    case OPT_pinnipede_use_colored_tabs: {
+      CHECK_BOOL_ARG(p->pp_use_colored_tabs);
+    } break; 
+    case OPT_pinnipede_tabs_position: {
+      CHECK_INTEGER_ARG(1, 3, p->pp_tabs_pos);
+    } break;
+    case OPT_pinnipede_plop_keywords: {
+      CHECK_KEY_LIST(p->plopify_key_list,0,3);
+    } break; 
+    case OPT_pinnipede_hilight_keywords: {
+      CHECK_KEY_LIST(p->hilight_key_list,0,4);
+    } break; 
+    case OPT_pinnipede_plop_words: {
+      char *err = option_get_string_list(arg, opt_name,  &p->plop_words, &p->nb_plop_words);
+      if (err) return err;
+    } break; 
+    case OPT_pinnipede_url_replace: {
+      char *err = option_get_url_remplacement(arg, &p->url_repl);
+      if (err) return err;
+    } break; 
+    case OPTSG_pinnipede_mark_id_gaps: {
+      CHECK_BOOL_ARG(sp->mark_id_gaps);
+    } break; 
+    case OPT_pinnipede_hungry_boitakon: {
+      CHECK_BOOL_ARG(p->hungry_boitakon);
+    } break;
+    case OPTSG_locale: {
+      if (strcasecmp(arg, "fr")==0) sp->locale = locFR;
+      else sp->locale = locEN;
+    } break; 
+    case OPTSG_pinnipede_use_AM_PM: {
+      CHECK_BOOL_ARG(sp->use_AM_PM);
+    } break;
+    case OPT_scrollcoin_bg_color: {
+      CHECK_BICOLOR_ARG(p->sc_bg_color);
+    } break; 
+    case OPT_scrollcoin_bg_light_color:  {
+      CHECK_BICOLOR_ARG(p->sc_bg_light_color);
+    } break; 
+    case OPT_scrollcoin_bg_dark_color:  {
+      CHECK_BICOLOR_ARG(p->sc_bg_dark_color);
+    } break; 
+    case OPT_scrollcoin_arrow_normal_color: {
+      CHECK_BICOLOR_ARG(p->sc_arrow_normal_color);
+    } break; 
+    case OPT_scrollcoin_arrow_emphasized_color: {
+      CHECK_BICOLOR_ARG(p->sc_arrow_emphasized_color);
+    } break; 
+    case OPT_scrollcoin_bar_color:   {
+      CHECK_BICOLOR_ARG(p->sc_bar_color);
+    } break; 
+    case OPT_scrollcoin_bar_light_color: {
+      CHECK_BICOLOR_ARG(p->sc_bar_light_color);
+    } break; 
+    case OPT_scrollcoin_bar_dark_color: {
+      CHECK_BICOLOR_ARG(p->sc_bar_dark_color);
+    } break; 
+    case OPT_rss_site:
+    case OPT_pop_site:
+    case OPT_board_site:
+    case OBSOLETE_OPT_site: {
+      if (p->nb_sites >= MAX_SITES-1) {
+        printf("Too much sites (MAX_SITES = %d), ignoring option 'site: %s'\n", MAX_SITES, arg); 
+      } else {
+        char *err;
+        backend_type_enum bt = BACKEND_TYPE_BOARD;
+        if (opt_num == OPT_rss_site) bt = BACKEND_TYPE_RSS;
+        else if (opt_num == OPT_pop_site) bt = BACKEND_TYPE_POP;
+        if ((err = wmcc_prefs_add_site(p, global_sp, arg, bt))) return err;
+        ObsoleteFeatures.site_url[0] = ObsoleteFeatures.path_tribune_add[0] = ObsoleteFeatures.path_tribune_backend[0] = 0;
+        ObsoleteFeatures.backend_type = 1;
+      }
+    } break;
+    case OPT_pinnipede_auto_open: {
+      CHECK_BOOL_ARG(p->pinnipede_open_on_start);
+    } break;
+    case OPT_spell_enable: {
+      CHECK_BOOL_ARG(p->ew_do_spell);
+    } break; 
+    case OPT_spell_cmd: {
+      ASSIGN_STRING_VAL(p->ew_spell_cmd, arg); 
+    } break; 
+    case OPT_spell_dict: {
+      ASSIGN_STRING_VAL(p->ew_spell_dict, arg); 
+    } break;   
+    case OPT_board_miniua_rule: {
+      char *err;
+      if ((err = option_miniua_rule(arg, &p->miniuarules))) return err;
+    } break;
+    default: {
+      printf(_("Watch out darling, it's gonnah cut\n")); 
+      printf(_("the option '%s' is valid but not handled, WHAT A SHAME"), opt_name);
+      assert(2+2==5); /* trop gros, passera pas */
+    }
+  }
+  return NULL;
+}
+
+/* lecture (recursive) du fichier d'option */
+static int
+wmcc_prefs_read_options_recurs(GeneralPrefs *p, SitePrefs *global_sp, const char *_filename, 
+			       int lvl, char **err_str, int verbatim)
+{
+  int lcnt;
+  char *opt_name = NULL, *opt_arg = NULL;
+  char *error = NULL, *filename = NULL;
+  FILE *f;
+
+  assert(global_sp);
+
+  if (lvl > 10) {
+    *err_str = str_printf(_("I think you're totally dumb with the includes of option files (infinite recursion ?)\n"));
+    return 1;
+  }
+
+  /* verif du nom de fichier */
+  if (_filename == NULL) {
+    *err_str = str_printf(_("You didn't tell me of any filename\n"));
+    return 1;
+  } else if (_filename[0] != '/' && _filename[0] != '.') {
+    filename = str_printf("%s/.wmcoincoin/%s", getenv("HOME"), _filename);
+  } else filename = strdup(_filename);
+
+
+  /* ouverture */
+  f = fopen(filename, "rt");
+  if (f == NULL) {
+    if (lvl != 1) {
+      *err_str = str_printf(_("Unable to open file '%s' for reading [%s]\n"), filename, strerror(errno));
+    } else {
+      *err_str = str_printf(_("Unable to open file '%s' for reading\n"), filename);
+    }
+    free(filename);
+    return 1;
+  }
+
+  /* lecture */
+  lcnt = 0;
+
+  do {    
+    error = read_option_line(f, &lcnt, &opt_name, &opt_arg); if (error) goto ouille;
+    if (opt_name) {
+      char *s;
+      wmcc_options_id i;
+      SitePrefs *sp;
+      int bestmatch;
+
+      if (opt_name[0] == '.') {
+	s = opt_name + 1;
+	if (p->nb_sites > 0) {
+	  sp = p->site[p->nb_sites-1];
+	} else {
+	  error = str_printf(_("line %d: attempt to use a site pref before any 'site:' option has been used\n"), lcnt); goto ouille; 
+	}
+      } else {
+	s = opt_name;
+	sp = global_sp;
+      }
+
+      bestmatch = -1;
+      for (i=0; i < NB_WMCC_OPTIONS; i++) {
+	if (wmcc_options_strings[i][0] == '.' || wmcc_options_strings[i][0] == '!') {
+          if (strcasecmp(wmcc_options_strings[i]+1, s) == 0)
+            if (opt_name[0] == '.' || bestmatch < 0)
+              bestmatch = i;
+	} else {
+          if (strcasecmp(wmcc_options_strings[i], opt_name)==0) bestmatch = i;
+	}
+      }
+      if (bestmatch >= 0) {
+        i = bestmatch;
+        if (opt_name[0] != '.' && wmcc_options_strings[i][0] == '.') {
+          error = str_printf(_("line %d: option '%s' is a site option\n"), lcnt, opt_name); 
+          goto ouille;
+        }
+        if (opt_name[0] == '.' && wmcc_options_strings[i][0] != '.' && wmcc_options_strings[i][0] != '!') {
+          error = str_printf(_("line %d: option '%s' can't be used as a site option\n"), lcnt, opt_name);
+          goto ouille;
+        }
+        error = wmcc_prefs_validate_option(p, sp, global_sp, i, opt_arg, verbatim);
+        if (error) goto ouille;
+      } else {
+	if (strcasecmp(opt_name, "include") == 0) {
+	  if (wmcc_prefs_read_options_recurs(p, global_sp, opt_arg, lvl+1, err_str, verbatim)) {
+	    error = str_printf(_(" [line %d] %s\n"), lcnt, *err_str);
+	    free(*err_str); *err_str = NULL;
+	    goto ouille;
+	  }
+	} else {
+	  error = str_printf(_("[line %d] unknown option '%s'"), lcnt, opt_name);
+	  goto ouille;
+	}
+      }
+    }
+    FREE_STRING(opt_name); FREE_STRING(opt_arg);
+  } while (!feof(f));
+  fclose(f);
+  free(filename);
+  return 0;
+
+ ouille:
+  FREE_STRING(opt_name); FREE_STRING(opt_arg);
+  fclose(f);
+  *err_str = str_printf(" [%s] %s\n", filename, error);
+  free(error); free(filename);
+  return 1;
+}
+
+char *
+wmcc_prefs_read_options_auth(GeneralPrefs *p, const char *basefname) {
+  char *fname = (basefname[0] != '/' && basefname[0] != '.') ?
+    str_printf("%s/.wmcoincoin/%s.auth", getenv("HOME"), basefname) :
+    str_printf("%s.auth", basefname);
+  FILE *f = fopen(fname, "r");  
+  char *err = NULL;
+  regex_t re_cookies;
+  regex_t re_pop3;
+  assert(regcomp(&re_cookies, "\"(.+)\" +cookie: *\"(.*)\"",
+                 REG_EXTENDED | REG_ICASE) == 0);
+  assert(regcomp(&re_pop3,    "\"([^\"]+)\" *user: *\"([^\"]+)\" *pass: *\"([^\"]+)\"", 
+                 REG_EXTENDED | REG_ICASE) == 0);
+  if (f) {
+    regmatch_t match[50];
+    char *s;
+    SitePrefs *sp;
+    do {
+      s = str_fget_line(f); str_trim(s);
+      if (s && *s && s[0] != '#') {
+        if (regexec(&re_cookies, s, 50, match, 0) == 0) {
+          s[match[1].rm_eo] = 0; char *site_name = s+match[1].rm_so;
+          s[match[2].rm_eo] = 0; char *cookie = s+match[2].rm_so;
+          //printf("cookie '%s' '%s'\n", site_name, cookie);
+          sp = wmcc_prefs_find_site(p, site_name);
+          if (sp) {
+            err = option_http_cookie(sp, cookie);
+          } else {
+            printf("warning: site '%s' is not listed in %s\n", site_name, basefname);
+          }
+        } else if (regexec(&re_pop3, s, 50, match, 0) == 0) {
+          s[match[1].rm_eo] = 0; char *site_name = s+match[1].rm_so;
+          s[match[2].rm_eo] = 0; char *user = s+match[2].rm_so;
+          s[match[3].rm_eo] = 0; char *pass = s+match[3].rm_so;
+          //printf("pop3: site '%s' '%s' '%s'\n", site_name, user, pass);
+          sp = wmcc_prefs_find_site(p, site_name);
+          if (sp) {
+            sp->pop3_user = strdup(user);
+            sp->pop3_pass = strdup(pass);
+          } else {
+            printf("warning: site '%s' is not listed in %s\n", site_name, basefname);
+          }
+        } else {
+          printf("unmatched line: %.12s...\n", s);
+          exit(1);
+        }
+      }
+      FREE_STRING(s);
+    } while (!feof(f) && err == NULL);
+  } else {
+    fprintf(stderr, "could not open %s : %s\n", fname, strerror(errno));
+  }
+  FREE_STRING(fname);
+  regfree(&re_pop3);
+  regfree(&re_cookies);
+  return err;
+}
+
+/* lecture d'un fichier d'options, renvoie un message d'erreur si y'a un pb */
+char *
+wmcc_prefs_read_options(GeneralPrefs *p, const char *filename, int verbatim)
+{
+  char *error = NULL;
+  SitePrefs global_sp;
+
+  wmcc_site_prefs_set_default(&global_sp, verbatim);
+  wmcc_prefs_read_options_recurs(p, &global_sp, filename, 1, &error, verbatim);
+
+  if (p->nb_sites == 0) {
+    myfprintf(stderr, _("\n\n%<YEL oooooooh !!! you didn't define at least *ONE* site>, you bad boy.\ni do it for you, but this is the last time\n plz %<MAG use wmccc to add new sites>\n\n"));
+    wmcc_prefs_add_site(p, &global_sp, "\"linuxfr\"", BACKEND_TYPE_BOARD);
+    p->site[0]->backend_flavour = BACKEND_FLAVOUR_ENCODED;
+    ASSIGN_STRING_VAL(p->site[0]->post_url, "http://linuxfr.org/board/add.html");
+    ASSIGN_STRING_VAL(p->site[0]->post_template, "message=%s&section=1");
+    wmcc_prefs_add_site(p, &global_sp, "\"news\"", BACKEND_TYPE_RSS);
+    ASSIGN_STRING_VAL(p->site[1]->backend_url, "http://linuxfr.org/backend.rss");
+    p->site[1]->pp_bgcolor = 0xe7d74c;
+    wmcc_prefs_add_site(p, &global_sp, "\"journaux\"", BACKEND_TYPE_RSS);
+    ASSIGN_STRING_VAL(p->site[2]->backend_url, "http://linuxfr.org/backend-journaux.rss");
+    p->site[2]->pp_bgcolor = 0xd8ac85;
+  }
+  if (error == NULL) error = wmcc_prefs_read_options_auth(p,filename);
+  wmcc_site_prefs_destroy(&global_sp);
+  return error;
+}
diff --git a/src/prefs.h b/src/prefs.h
new file mode 100644
index 0000000..57a7b16
--- /dev/null
+++ b/src/prefs.h
@@ -0,0 +1,399 @@
+#ifndef __PREFS_H
+#define __PREFS_H
+#include <string.h>
+
+#ifndef __CYGWIN__
+#include <sys/types.h> /* obligatoire pour regex.h sous bsd 
+			  mais pas compatible avec les winsock ..
+			*/
+#else
+#include <sys/types.h>
+#include <cygwin/types.h>
+#endif
+#include <regex.h>
+#include "options_list.h" /* liste des noms des options */
+#include "keylist.h"
+
+#define COND_FREE(x) { if (x) free(x); x = NULL; }
+
+/* valeur absolument maximale de la longueur d'un message envoy�
+   (selon les prefs par sites, des valeurs inf�rieure sont fix�es */
+#define MESSAGE_MAXMAX_LEN 1024
+#define USERAGENT_MAXMAX_LEN 200
+
+/* deux type de transparence: 
+ - shading : le fond est obscurci (0=>transparence totale, 100=>opacit�(noir) compl�te)
+ - teinte  : le noir devient tint_black, le blanc prend la couleur tint_white,
+             et les couleurs d'intensit� interm�diaires sont interpol�es entre ces deux valeurs (activ� si shade == -1)
+*/
+typedef struct {
+  enum {FULL_TRANSPARENCY, SHADING, TINTING} type;
+  struct {
+    unsigned white, black;
+  } tint;
+  struct {
+    int luminosite, assombrissement;
+  } shade;
+} TransparencyInfo;
+
+/*
+  pour stocker deux couleurs (une pour le mode normal, ou pour le mode transparent)
+*/
+typedef struct {
+  unsigned opaque;
+  unsigned transp;
+} BiColor;
+
+/*
+  les regles de marquage visuel des messages (pour le trolloscope et les ua raccourcis du pinni)
+*/
+typedef struct _MiniUARule {
+  char     *site_name;   /* si non-nul, doit matcher le site du message */
+  char     *user_login;  /* si non-nul, doit matcher le login du posteur */
+  char     *s_rgx;       /* la description originale de la regex */
+  regex_t  *rgx;         /* si non-nul, l'ua doit matcher la regexp */
+  char     *rua;         /* si non-nul, indique l'ua raccourcie de remplacement (peut
+			    avoir des \1, \2 etc pour faire des truc avec rgx) */
+  int      color;        /* si positif, indique la couleur impos�e dans le trolloscope */
+  int      symb;         /* si positif, indique la forme impos�e dans le trolloscope */
+  int      ua_terminal:1;     /* si c'est une regle terminale pour l'ua */
+  int      color_terminal:1;  /* si c'est une regle terminale pour la couleur */
+  int      symb_terminal:1;   /* si c'est une regle terminale pour le symbole */
+  struct _MiniUARule *next;
+} MiniUARule;
+
+typedef struct _MiniUARules {
+  MiniUARule *first;
+} MiniUARules;
+
+typedef struct _URLReplacement {
+  char *key;
+  char *repl;
+  struct _URLReplacement *next;
+} URLReplacement;
+
+typedef struct _URLReplacements {
+  URLReplacement *first;
+} URLReplacements;
+
+
+#define NB_PP_KEYWORD_CATEG 5
+
+
+
+typedef struct _FontStyle {
+  int underlined;
+  int slanted;
+  int bold;
+  int teletype;
+} FontStyle;
+
+/* les preferences sont stockees dans ces structures */
+
+typedef enum { BACKEND_FLAVOUR_ENCODED=1, BACKEND_FLAVOUR_UNENCODED, BACKEND_FLAVOUR_NO_PANTS }
+  backend_flavour_enum;
+
+typedef enum { BACKEND_TYPE_BOARD, BACKEND_TYPE_RSS, BACKEND_TYPE_POP }
+  backend_type_enum;
+
+typedef struct _SitePrefs {
+  /* delai (en sec) et assez approximatif entre deux verif de la tribune */
+  int board_check_delay;
+  backend_type_enum backend_type;
+  backend_flavour_enum backend_flavour; /* pour gerer les variations saisonni�res du format de backend..
+                                           peut prendre 3 valeurs: 
+                                           1: les tags apparaissent sous la forme '<b>'
+                                           2: les tags sont du type '<b;&gt'
+                                           3: le backend est en vrac, on a les deux types de tags :-/ 
+                                        */
+  char *backend_url;
+
+  /* nb max de messages conserves en memoire */
+  int board_max_msg;
+  char *board_wiki_emulation; /* non nul => �mulation des wiki-urls */
+
+  /* user_agent (defaut: wmCoinCoin) */
+  char *user_agent;
+  char *proxy_auth_user; /* default: NULL */
+  char *proxy_auth_pass; /* default: NULL */
+  char *proxy_name; /* default: NULL */
+  int   proxy_port; /* default: 1080 */
+
+  /* indique si on veut utiliser un nom d'utilisateur (genre 'mmu>' ) */
+  char *user_name;
+
+  /* lg max des messages / useragents */
+  int palmi_msg_max_len;
+  int palmi_ua_max_len;
+
+  char *post_url;    /* "board/add.php3" */
+  char *post_template; /* ce qu'on envoie pour le post (le %s est remplac� par le message) */
+  char *user_cookie;
+  char *user_login; /* le login (optionnel, peut etre NULL), utilis� pour la reconnaissance des messages que vous avez post� */
+
+  char *pop3_user, *pop3_pass;
+
+  int rss_ignore_description; /* pour les feeds RSS dont le champ descriptions est rempli de pub */
+  /* quelques couleurs qui d�pendent du site visit� */
+  BiColor pp_fgcolor, pp_tstamp_color, pp_useragent_color, 
+    pp_login_color, pp_url_color, pp_visited_url_color, pp_strike_color, pp_trollscore_color;
+  unsigned pp_bgcolor;
+  FontStyle pp_clock_style, pp_ua_style, pp_login_style;
+  int proxy_nocache; /* desactive le cache du proxy lors des requetes */
+  int use_if_modified_since; /* utilisation de l'entete http 'If-Modified-Since' */
+  enum { locEN=0, locFR=1 } locale; /* "localisation" du site (pour quelques mots-clefs + probl�mes d'horloges AM/PM) */
+  int use_AM_PM;
+  char **all_names; /* liste des noms possibles du site (tous les alias) */
+  int  nb_names;
+  char *site_name; /* le nom court du site (premier argument de l'option 'site:'),
+		      le pointeur pointe sur all_names[0] */
+  long time_difference; /* decalage horaire du site */
+  int mark_id_gaps; /* la ligne rouge pointill�e */
+  int check_board;
+  int hunt_opened_on_site;
+} SitePrefs;
+
+#define MAX_SITES 126 /* au-dela, faut vraiment songer � consulter */
+#define NB_BIGORNO 2
+typedef struct _GeneralPrefs{
+  /* en cas d'inactivit� les delais vont �tre progressivement augment�s
+     max_refresh_delay est leur valeur maximale (en minutes) (0 => ralentissement d�sactiv�) */
+  int max_refresh_delay;
+  /* de plus au bout d'un certain nombre de minutes, le coincoin cessera toute activit�
+     et passera en mode horloge */
+  int switch_off_coincoin_delay;
+
+  char *font_encoding; /* 'iso8859-1' ou mieux, 'iso8859-15' */
+
+  /* message par defaut poste sur la tribune */
+  char *coin_coin_message;
+
+  /* pour mise au point ... */
+  int debug;
+  int verbosity; /* 1, 2 ou 3 voire plus */
+  int verbosity_underpants; /* 0 par d�faut, fixe le niveau a partir duquel le coincoin r�le sur les pb de slip */
+  int verbosity_http; /* 1 par defaut, niveau g�n�ral de verbosit� pour http */
+  int http_timeout; /* en secondes */
+  int http_inet_ip_version; /* 4 => IPV4 only, 6 => IPV6 only, autre => n'importe lequel */
+  char *gogole_search_url;
+  char *wikipedia_search_url;
+
+
+  /* pour savoir si on utilise l'icone (style windowmaker) ou bien la fenetre (style swallow kde) */
+  int use_iconwin; 
+
+  /* indique si la bordure est a la charge du windowmanager (ie si le WM a un dock:
+     WMaker, KDE..) ou si wmcoincoin doit dessiner lui meme sa bordure */
+  int draw_border;
+
+  int auto_swallow; /* tres experimental */
+  
+  int palmipede_override_redirect;
+  int palmipede_enable_scroll_wheel_for_boulets;
+
+  int use_balloons;
+  char *balloon_fn_family;
+  int balloon_fn_size;
+  int dock_xpos, dock_ypos;
+  int start_in_boss_mode; /* demarrage en mode horloge */
+  int dock_bgcolor, dock_fgcolor;
+  char *dock_bgpixmap; /* nom du fichier xpm de fond (c)(tm)(r)kadreg :) */
+  char *dock_skin_pixmap;
+
+  
+
+  int default_trollo_speed; /* vitesse du trolloscope par defaut */
+
+  char *browser_cmd; /* commande pour afficher une url dans un browser (le %s sera remplace par l'url) */
+  char *browser2_cmd; /* le browser alternative (lanc� par un clic milieu au lieu d'un clic gauche) */
+  int disable_xft_antialiasing;
+  char *pp_fn_family; /* defaut : 'helvetica' */
+  int pp_fn_size;
+  int pp_start_in_transparency_mode;
+  TransparencyInfo pp_transparency;
+
+  int use_fake_real_transparency;
+
+  /* options totozeuses */
+  int board_auto_dl_pictures;
+  int board_enable_hfr_pictures;
+
+  BiColor sc_bg_color, sc_bg_light_color, sc_bg_dark_color, 
+    sc_arrow_normal_color, sc_arrow_emphasized_color,
+    sc_bar_color, sc_bar_light_color, sc_bar_dark_color;
+
+  BiColor  pp_emph_color, 
+    pp_sel_bgcolor, pp_popup_fgcolor, pp_popup_bgcolor,
+    pp_my_msg_color, pp_answer_my_msg_color, 
+    pp_keyword_color[NB_PP_KEYWORD_CATEG], pp_plopify_color,
+    pp_buttonbar_bgcolor, pp_buttonbar_fgcolor,
+    pp_buttonbar_msgcnt_color, pp_buttonbar_updlcnt_color,
+    pp_buttonbar_progressbar_color;
+  int pp_xpos, pp_ypos, pp_width, pp_height, pp_minibar_on;
+  int pp_show_sec_mode, pp_html_mode, pp_nick_mode, pp_trollscore_mode;
+  int pp_tabs_pos; /* 1 -> bas, 2-> gauche */
+  int enable_troll_detector;
+  int pp_use_classical_tabs;
+  int pp_use_colored_tabs;
+  /* preferences pour le spelchecker */
+  int ew_do_spell;
+  char* ew_spell_cmd;
+  char* ew_spell_dict;
+  char *post_cmd[NB_BIGORNO]; /* commande ex�cut�e apr�s chaque nouveau post lu ($m=message, $l=login, $t=timestamp, $u=ua, $i=id, $s=troll_score) */
+  int post_cmd_enabled[NB_BIGORNO];
+  /* Nom du fichier de scrinechote */
+  char* board_scrinechote;
+
+  KeyList *hilight_key_list; /* liste des mots clef declenchant la mise en valeur du post dans le pinnipede 
+				attention c'est Mal, mais c'est le pinnipede qui ecrit dans cette liste..
+			     */
+  KeyList *plopify_key_list; /* version plopesque du kill-file, m�me remarque qu'au dessus */
+  char **plop_words;
+  unsigned nb_plop_words;
+  
+  int hungry_boitakon; /* la boitakon a tr�s faim, elle bouffe tous ceux qui lui causent 
+			  (m�me si ils s'adressent aussi � un autre)
+		       */
+
+  int pinnipede_open_on_start; /* on d�cide que le pinnipede s'ouvre comme un grand tout seul quand on lance le coincoin */
+
+  MiniUARules miniuarules;
+
+  URLReplacements url_repl;
+
+  int nb_sites;
+  SitePrefs *site[MAX_SITES];
+
+  int hunt_opened;   /* la chasse est ouverte ? */
+  int hunt_max_duck; /* y'a des quotas sur le canard d'elevage ? */
+} GeneralPrefs;
+
+
+/* et attention, on peut faire de l'antialiasing (hum..)
+   # -> le pixel est �clairci (rgb*5/4)
+   X -> le pixel est a la couleur complete
+   x -> divise le rgb par 2
+   : -> divise par 3
+   . -> divise par 4
+   c'est-y-pas cool ?
+*/
+#define NB_SYMBOLES 16
+typedef struct _SymboleDef {
+  char *s[5];
+  char *name;
+} SymboleDef;
+
+#ifndef GLOBALS_HERE
+extern SymboleDef symboles[NB_SYMBOLES];
+#else
+SymboleDef symboles[NB_SYMBOLES] = {{{"     ",
+				      "     ",
+				      "     ",
+				      "     ",
+				      "     "},"ignore"},
+				    {{"xxxxX",
+				      "xXXX#",
+				      "xXXX#",
+				      "xXXX#",
+				      "X####"},"square"},
+				    {{"  x  ",
+				      " :X: ",
+				      " XXX ",
+				      ":XXX:",
+				      "XXXXX"},"dtri"},
+				    {{"XXXXX",
+				      ":XXX:",
+				      " XXX ",
+				      " :X: ",
+				      "  x  "},"tri"},
+				    {{"X:   ",
+				      "XXX: ",
+				      "XXXXX",
+				      "XXX: ",
+				      "X:   "},"ltri"},
+				    {{"   :X",
+				      " :XXX",
+				      "XXXXX",
+				      " :XXX",
+				      "   XX"},"rtri"},
+				    {{"x    ",
+				      "xX   ",
+				      "xXX  ",
+				      "xXXX ",
+				      "X####"},"ldtri"},
+				    {{"    X",
+				      "   x#",
+				      "  xX#",
+				      " xXX#",
+				      "X####"},"rdtri"},
+				    {{"xxxxX",
+				      "xXX# ",
+				      "xX#  ",
+				      "x#   ",
+				      "X    "},"lutri"},
+				    {{"xxxxX",
+				      " XXX#",
+				      "  XX#",
+				      "   X#",
+				      "    X"},"rutri"},
+				    {{" ::: ",
+				      ":X##X",
+				      ":# :#",
+				      ":#::#",
+				      " X##."},"circ"},
+				    {{"   :X",
+				      "  :X#",
+				      " :X# ",
+				      ":X#  ",
+				      "X#   "},"antislash"},
+				    {{"Xx   ",
+				      "xXx  ",
+				      " xXx ",
+				      "  xXx",
+				      "   xX"},"slash"}
+,				    {{"X. .X",
+				      ".X.X.",
+				      " .X. ",
+				      ".X.X.",
+				      "X. .X"},"cross"},
+
+				    {{"  X  ",
+				      "  X  ",
+				      "XXXXX",
+				      "  X  ",
+				      "  X  "},"plus"},
+				    {{"  x  ",
+				      " xXX ",
+				      "xXXX#",
+				      " XX# ",
+				      "  #  "}, "diamond"}};
+#endif
+
+
+
+#define FREE_STRING(x) { if (x) { free(x); x = NULL; }}
+#define ASSIGN_STRING_VAL(x,v) { if ((void*)x != (void*)v) { FREE_STRING(x); x = strdup(v); assert(x); } }
+const char *coincoin_default_useragent_template();
+void coincoin_default_useragent(char *s, int sz);
+char *string_to_miniuarule(unsigned char *str, MiniUARule *r);
+void miniuarule_clear(MiniUARule *r);
+void miniuarules_destroy(MiniUARules *urs, MiniUARule *ur);
+
+/* remplit la structure avec les valeurs par d�faut des preferences */
+void wmcc_prefs_set_default(GeneralPrefs *p);
+/* libere la m�moire allou�e par les champs de la structure, *mais* pas la structure elle-m�me */
+void wmcc_prefs_destroy(GeneralPrefs *p);
+/* assigne une option dans les preferences, renvoie un message d'erreur si y'a un pb */
+char *
+wmcc_prefs_validate_option(GeneralPrefs *p, SitePrefs *sp, SitePrefs *global_sp, 
+			   wmcc_options_id opt_num, unsigned char *arg, int verbatim);
+/* lecture d'un fichier d'options, renvoie un message d'erreur si y'a un pb */
+char *wmcc_prefs_read_options(GeneralPrefs *p, const char *filename, int verbatim);
+char *wmcc_prefs_read_options_auth(GeneralPrefs *p, const char *basefname);
+int wmcc_prefs_find_site_id(GeneralPrefs *p, const char *name);
+SitePrefs * wmcc_prefs_find_site(GeneralPrefs *p, const char *name);
+void wmcc_site_prefs_set_default(SitePrefs *p, int verbatim);
+void wmcc_site_prefs_destroy(SitePrefs *p);
+void wmcc_site_prefs_copy(SitePrefs *sp, const SitePrefs *src);
+void option_site_root (const char  *optarg, SitePrefs *prefs, int verbatim);
+#endif
diff --git a/src/prefs_gestion.c b/src/prefs_gestion.c
new file mode 100644
index 0000000..5060844
--- /dev/null
+++ b/src/prefs_gestion.c
@@ -0,0 +1,817 @@
+#ifdef __CYGWIN__
+#include <getopt.h>
+#endif
+#include <sys/stat.h>
+#include "coincoin.h"
+#include "spell_coin.h"
+#include "site.h"
+#include "dock.h"
+
+#include <libintl.h>
+#define _(String) gettext (String)
+
+#define TEST_CMDLINE_OPT(optid) { \
+  char *errmsg = wmcc_prefs_validate_option(&Prefs,NULL, NULL, optid,optarg,0); \
+  if (errmsg) { myprintf(_("Erreur pour l'option de la ligne de commande '%<GRN -%c>'\n: %s\n"),optc,errmsg); \
+  exit(1); } }
+
+static void
+wmcc_prefs_from_cmdline(int argc, char **argv, GeneralPrefs *The_Prefs)
+{
+  int optc;
+
+  /* tant que le 'kicker' de KDE ne sera pas capable de sauvegarder
+     les options de ligne de commande d'une session a l'autre... */
+  if (strstr(argv[0], "wmcoincoin-kde")) {
+    myprintf(_("You invoqued wmcoincoin-kde : %<YEL anti KDE-bug mode activated>\n"));
+    The_Prefs->use_iconwin = 0;
+  }
+
+  while ((optc = getopt(argc, argv, "hd:D:f:F:u:m:v:p:b:g::P:A:wBHx:r:s:C:X:c:o:Wl:L:")) !=-1) {
+    switch (optc) {
+    case 'h':
+      {
+	myprintf(_("Home page: %<BLU http:/hules.free.fr/wmcoincoin>\n"));
+
+	myprintf(_("Dock applet pour WindowMaker -- affiche les news de %<GRN D>%<CYA a>%<GRN L>%<CYA inux>%<GRN F>%<CYA rench>%<GRN P>%<CYA age> (%<BLU http://linuxfr.org>)\n"));
+	myprintf(_("OPTIONS (la plupart de ces options peuvent etre activees dans le\n"
+		 " fichier '%<YEL ~/.wmcoincoin/options>'):\n"));
+	myprintf(_(" %<GRN -h>\t\t: mouaif...\n"));
+	//	myprintf(_(" %<GRN -d> %<CYA n>\t\t: fixe le delai entre deux checks de la tribune a %<CYA n> secondes (defaut %<grn %d>)\n"), The_Prefs->tribune_check_delay);
+	//	myprintf(_(" %<GRN -D> %<CYA n>\t\t: fixe le delai entre deux checks des news a %<CYA n> secondes (default %<grn %d>)\n"), The_Prefs->news_check_delay);
+	//	myprintf(_(" %<GRN -u> %<CYA ua>\t\t: change le user-agent\n"));
+	//	myprintf(_(" %<GRN -P> %<CYA proxy:port>\t: utilise un proxy\n"));
+	//	myprintf(_(" %<GRN -A> %<CYA username:password>: authentification pour le proxy, si necessaire\n"));
+	myprintf(_(" %<GRN -m> %<CYA msg>\t\t: change le message poste sur la tribune (defaut: '%<grn %s>')\n"), The_Prefs->coin_coin_message);
+	myprintf(_(" %<GRN -v> %<CYA n>\t\t: verbosite (defaut %<grn %d>) ,%<CYA n>=0,1,2,3\n"), The_Prefs->verbosity);
+	//	myprintf(_(" %<GRN -p> %<CYA n>\t\t: ne s'interesse qu'aux news postees il y a moins de %<CYA n> jours\n"
+	//		 "\t\t (defaut: %<grn %d> jours)\n"), The_Prefs->news_max_nb_days);
+	myprintf(_(" %<GRN -b> %<CYA hexcoul>\t: couleur de fond, en RGB hexa (par defaut: %<grn %06x>, un magnifique(!) jaune)\n"), The_Prefs->dock_bgcolor);
+	myprintf(_(" %<GRN -c> %<CYA hexcoul>\t: couleur du texte de l'applet, en RGB hexa (par defaut: %<grn %06x>)\n"), The_Prefs->dock_fgcolor);
+	myprintf(_(" %<GRN -X> %<CYA file.xpm>\t: Fichier pixmap a mettre en fond du dock (fichier.xpm de 64x64)\n"));
+	myprintf(_(" %<GRN -w> \t\t: utilise le mode windowed plutot que le mode icone\n"));
+	myprintf(_("\t\tcette option est necessaire pour utiliser wmcoincoin avec le kicker de KDE (<3.0)\n"));
+	myprintf(_("\t\tmais comme le kicker de KDE 2.1 a un bug qui l'empeche de sauver les options\n"));
+	myprintf(_("\t\tde la ligne de commande d'une session a l'autre, le mieux est d'invoquer\n"));
+	myprintf(_("\t\twmcoincoin sous le nom %<YEL wmcoincoin-kde> (c'est un bete lien symbolique)\n"));
+	myprintf(_("\t\tet l'option -w sera automatiquement activee...\n"));
+	myprintf(_(" %<GRN -B> \t\t: ajoute la bordure de wmcoincoin (pour windowmanager sans dock)\n"));
+	myprintf(_(" %<GRN -x> %<CYA x:y>\t\t: essaye de positionner wmcoincoin en (x,y), cette option\n"
+		 "\t\tn'est utile que si le windowmanager n'a pas de dock \n"
+		 "\t\t(utiliser avec l'option %<GRN -B>)\n"));
+#ifndef DISABLE_BALLOONS
+	myprintf(_(" %<GRN -H> \t\t: desactive les ballons d'aide\n"));	
+#endif
+	//	myprintf(_(" %<GRN -r> %<CYA url>\t\t: se connecte sur un autre site dacode que linuxfr (defaut %<grn http://linuxfr.org:80>)\n"));
+	myprintf(_(" %<GRN -s> %<CYA v>\t\t: vitesse de defilement du trolloscope (1 = rapide, 100 = 1 tres lent)\n(defaut %<grn %d>)\n"), The_Prefs->default_trollo_speed);
+	/*	myprintf(_(" %<GRN -C> %<CYA cookie>\t: indique la valeur de votre cookie 'session_id' (il faut\n"
+		 "\t\t�tre authentifi�). Cela permet � wmCoinCoin de d�tecter quand il y a une\n"
+		 "\t\tnouvelle r�ponse � un de vos commentaires -- cette option est\n"
+		 "\t\t tout � fait facultative\n"));*/
+	myprintf(_(" %<GRN -o> %<CYA fichier>\t: indique le nom du fichier d'options a utiliser dans le\n"
+		 "\t\t rep ~/.wmcoincoin (defaut '%<grn %s>')\n"), options_file_name);
+	myprintf(_(" %<GRN -W>\t\t: ouvre le pinnipede des le lancement de wmcoincoin)\n"));
+	myprintf(_(" %<GRN -l> %<CYA locale>\t: change the default locale (use -l fr to force wmcoincoin to speak french) (or set LC_MESSAGES properly)\n"));
+	myprintf(_(" %<GRN -L> %<CYA locale_dir>\t: change the default directory of stored translations (default: %<grn %s>)\n"), LOCALEDIR);
+	exit(0);
+      } break;
+      /*
+    case 'd': TEST_CMDLINE_OPT(OPT_tribune_delay); break;
+    case 'D': TEST_CMDLINE_OPT(OPT_news_delay); break;
+    case 'f': TEST_CMDLINE_OPT(OPT_news_font_family); break;
+    case 'F': TEST_CMDLINE_OPT(OPT_news_font_size); break; 
+    case 'u': TEST_CMDLINE_OPT(OPT_palmipede_useragent); break;
+    case 'm': TEST_CMDLINE_OPT(OPT_palmipede_default_message); break;
+      */
+    case 'v':
+      {
+	The_Prefs->verbosity = atoi(optarg); assert(The_Prefs->verbosity >= 0 && The_Prefs->verbosity <= 5);
+      } break;
+      /*
+    case 'p':
+      {
+	The_Prefs->news_max_nb_days = atoi(optarg);
+	assert(The_Prefs->news_max_nb_days > 0 && The_Prefs->news_max_nb_days < 100);
+      } break;
+    case 'b': TEST_CMDLINE_OPT(OPT_dock_bg_color); break;
+    case 'c': TEST_CMDLINE_OPT(OPT_dock_fg_color); break;
+    case 'X': TEST_CMDLINE_OPT(OPT_dock_bg_pixmap); break;
+      */
+    case 'g':
+      {
+	if (optarg == NULL) {
+	  The_Prefs->debug = 1;
+	} else The_Prefs->debug = atoi(optarg);
+	/* | 1 : force X � synchroniser toutes ses op 
+           | 2 : utilise les backends dans ~/wmcoincoin/test
+           | 4 : ralenti consid�rablement la maj de l'animation de l'applet (pratique pour des displays export�s de tr�s loin sur un modem)
+           | 8 : d�sactive le fork sur le gethostbyname */
+	myprintf(_("Activation of the secret %<YEL debug> mode (dbg=%d)!\n"), The_Prefs->debug);
+      } break;
+      /*
+    case 'P': TEST_CMDLINE_OPT(OPT_http_proxy); break;
+    case 'A': TEST_CMDLINE_OPT(OPT_http_proxy_auth); break;
+      */
+    case 'w': optarg = "0"; TEST_CMDLINE_OPT(OPT_dock_iconwin); printf("dock.iconwin: %d\n", Prefs.use_iconwin);break;
+    case 'B': TEST_CMDLINE_OPT(OPT_dock_draw_border); break;
+    case 'x': TEST_CMDLINE_OPT(OPT_dock_pos); break;
+      /*
+    case 'H': TEST_CMDLINE_OPT(OPT_dock_use_balloons); break;
+    case 'r': TEST_CMDLINE_OPT(OPT_http_site_url); break;
+    case 's':
+      {
+	The_Prefs->default_trollo_speed = 1 << (atoi(optarg)-1);
+	//	printf("%s -> %d\n",optarg, The_Prefs->default_trollo_speed);
+	if (The_Prefs->default_trollo_speed < 1 || The_Prefs->default_trollo_speed > 128) {
+	  myprintf(_("option '-s' : la vitesse doit se situer en 1 et 8\n"));
+	  exit(1);
+	}
+      } break;
+    case 'C' : TEST_CMDLINE_OPT(OPT_http_cookie); break;
+      */
+    case 'W' : The_Prefs->pinnipede_open_on_start = 1; break; /* auto ouvre le pinnipede au lancement */
+    case 'o': break; /* cette option est trait�e dans init_default_prefs (cad AVANT la lecture du fichier d'options) */
+    case 'l': break; /* cette option est trait�e au tout d�but de la fontion main() */
+    case 'L': break; /* cette option est trait�e au tout d�but de la fontion main() */
+    case ':':
+    case '?':
+    default:
+      printf("obsolete option : '-%c'\n", optc);
+      exit(0); break;   
+    }
+  }
+}
+
+ 
+static void
+check_wmcoincoin_prefs_dir()
+{
+  char rpath[2048];
+  struct stat stbuf;
+  int is_ok;
+
+  snprintf(rpath,2048,"%s/.wmcoincoin", getenv("HOME"));
+  is_ok = 1;
+  if (stat(rpath, &stbuf) == 0) {
+    if (!S_ISDIR(stbuf.st_mode)) {
+      fprintf(stderr, _("the file '%s' is not a directory !!! trash it please\n"), rpath);
+      is_ok = 0;
+    }
+  } else {
+    if (errno == ENOENT) {
+      myfprintf(stderr, _("creating '%<YEL %s>'..\n"), rpath);
+      if (mkdir(rpath,-1)) {
+	myfprintf(stderr, _("can't create the directory '%s'\n[error: '%<red %s>']\n"),
+		 rpath, strerror(errno));
+	is_ok = 0;
+      }
+    } else {
+      fprintf(stderr, _("There's something strange with the directory '%s' [err=%s]\n"), rpath, strerror(errno));
+      is_ok = 0;
+    }
+  }
+  if (is_ok == 0) {
+    exit(1);
+  }
+}
+
+/* alors celle-l� est vraiment � chier */
+int
+copy_file(char *dest, char *src) {
+  FILE *in, *out;
+  int c;
+  
+  in = fopen(src, "r");
+  if (!in) {
+    fprintf(stderr, _("can't read '%s' : %s\n"), src, strerror(errno)); return -1;
+  }
+  out = open_wfile(dest);
+  if (!out) {
+    fprintf(stderr, _("can't write '%s' : %s\n"), dest, strerror(errno)); return -1;
+  }
+
+  while ((c=fgetc(in)) != EOF) {
+    fputc(c, out);
+  }
+  fclose(in); fclose(out);
+  return 0;
+}
+
+
+/* installe un fichier de WMCCDATADIR dans le ~/.wmcoincoin si n�cessaire */
+char *
+check_install_data_file(char *data_file_name, char *dot_wmcc_file_name)
+{
+  char *dot_name;
+  char *data_name;
+  struct stat stbuf;
+  int use_data = 0;
+
+
+  dot_name = (dot_wmcc_file_name[0] != '/' && dot_wmcc_file_name[0] != '.') ?
+    str_printf("%s/.wmcoincoin/%s", getenv("HOME"), dot_wmcc_file_name) : strdup(dot_wmcc_file_name);
+  data_name = str_printf(WMCCDATADIR "/%s", data_file_name);
+
+  if (stat(dot_name, &stbuf)) {
+    fprintf(stderr, _("ah ben y'a pas le fichier '%s', on va le creer\n"), dot_name);
+    copy_file(dot_name, data_name);
+  }
+
+  if (stat(dot_name, &stbuf)) {
+    fprintf(stderr, _("\ndesole, demerdez-vous pour copier '%s' dans votre ~/.wmcoincoin ..\n"), data_file_name);
+    use_data = 1;
+  } else if (!S_ISREG(stbuf.st_mode)) {
+    fprintf(stderr, _("\narretez de faire n'importe quoi dans votre ~/.wmcoincoin..\n\n"));
+    use_data = 1;
+  }
+
+  if (use_data) {
+    if (stat(data_name, &stbuf)) {
+      fprintf(stderr, _("wmcoincoin a du etre mal installe, je ne trouve pas le fichier '%s' par defaut dans le rep '%s'...\n"),
+	      data_name,WMCCDATADIR);
+      exit(1);
+    } else {
+      fprintf(stderr, _("utilisation du fichier se trouvant dans '%s'\n"), data_name);
+    }
+    free(dot_name); return data_name;
+  } else {
+    free(data_name); return dot_name;
+  }
+}
+
+void
+wmcc_prefs_initialize(int argc, char **argv, GeneralPrefs *p)
+{
+  int i;
+  char *errmsg;
+  char *options_full_file_name;
+  wmcc_prefs_set_default(p);
+  ASSIGN_STRING_VAL(options_file_name, "options");
+  /* pas tr�s beau : pr�analyse de la ligne de command pour d�tecter l'usage
+     d'un fichier d'options autre que celui par d�faut */
+  for (i=1; i < argc-1; i++) {
+    if (strcmp(argv[i], "-o") == 0) {
+      assert(argv[i+1]);
+      ASSIGN_STRING_VAL(options_file_name, argv[i+1]);
+      myprintf(_("using option file '%<yel %s>'\n"), argv[i+1]);
+      break;
+    }
+  }
+
+  /* creation de ~/.wmcoincoin si necessaire */
+  check_wmcoincoin_prefs_dir();
+
+  options_full_file_name = check_install_data_file("options", options_file_name);
+  assert(options_full_file_name);
+  errmsg = wmcc_prefs_read_options(p, options_full_file_name,0); /* lecture de '.wmcoincoin/options' */
+  if (errmsg) {
+    myprintf(_("Error during while reading '%s':\n%<YEL %s>\n") , options_full_file_name, errmsg);
+    free(errmsg); exit(1);
+  }
+  free(options_full_file_name);
+  wmcc_prefs_from_cmdline(argc, argv, p);
+}
+
+/* man fonction_a_la_con */
+static int
+str_copy_if_changed(char **a, char *b) {
+  if (*a == NULL && b == NULL) {
+    return 0;
+  } if (*a == NULL && b) {
+    *a = strdup(b);
+    return 1;
+  } else if (*a && b == NULL) {
+    FREE_STRING(*a); return 1;
+  } else if (strcmp(*a,b)) {
+    FREE_STRING(*a); *a = strdup(b); return 1;
+  }
+  return 0;
+}
+
+static int
+int_copy_if_changed(int *a, int b) {
+  if (*a != b) {
+    *a = b; return 1;
+  } else return 0;
+}
+
+static int
+bic_copy_if_changed(BiColor *a, BiColor b) {
+  if (a->opaque != b.opaque || a->transp != b.transp) {
+    *a = b; return 1;
+  } else return 0;
+}
+
+static int
+transp_copy_if_changed(TransparencyInfo *a, TransparencyInfo b) {
+  int different = 0;
+  
+  if (a->type != b.type) different = 1;
+  else {
+    switch (b.type) {
+    case FULL_TRANSPARENCY:
+      break;
+    case SHADING:
+      if (a->shade.luminosite != b.shade.luminosite ||
+	  a->shade.assombrissement != b.shade.assombrissement) different = 1;
+      break;
+    case TINTING:
+      if (a->tint.white != b.tint.white ||
+	  a->tint.black != b.tint.black) different = 1;
+      break;
+    default: assert(0);
+    }
+  }
+  if (different) { *a = b; }
+  return different;
+}
+
+static int
+font_style_copy_if_changed(FontStyle *a, FontStyle b)
+{
+  if (a->underlined != b.underlined ||
+      a->slanted != b.slanted ||
+      a->bold != b.bold ||
+      a->teletype != b.teletype) {
+    a->underlined = b.underlined;
+    a->slanted = b.slanted;
+    a->bold = b.bold;
+    a->teletype = b.teletype;
+    return 1;
+  } else return 0;
+}
+
+static int
+key_list_copy_if_changed(KeyList **a, KeyList *b)
+{
+  KeyList *hk;
+  int changed = 0;
+
+  hk = b;
+  /* ajoute les nouvelle */
+  while (hk) {
+    KeyList *hka;
+    if ((hka=key_list_find(*a, hk->key, hk->type)) == NULL) {
+      changed = 1;
+      *a = key_list_add(*a, hk->key, hk->type, hk->num, hk->from_prefs);
+    } else if (hka->num != hk->num) {
+      changed = 1;
+      /* on l'enleve puis la rajoute pour assurer un tri dans le bon ordre */
+      *a = key_list_remove(*a, hk->key, hk->type);
+      *a = key_list_add(*a, hk->key, hk->type, hk->num, hk->from_prefs);
+    }
+    hk = hk->next;
+  }
+  hk = *a;
+  /* vire les anciennes */
+  while (hk) {
+    KeyList *hkb;
+    if (hk->from_prefs) {
+      if ((hkb = key_list_find(b, hk->key, hk->type)) == NULL) {
+	changed = 1;
+	*a = key_list_remove(*a, hk->key, hk->type);
+	hk = *a; continue;
+      }
+    }
+    hk = hk->next;
+  }
+  //printf(_("key_list changed: %d\n"), changed);
+  return changed;
+}
+
+
+static int
+string_list_copy_if_changed(char ***a, int *na, char * const *b, const int nb)
+{
+  int changed = 0, i;
+  
+  if (*na != nb) changed = 1;
+  else {
+    for (i=0; i < *na; i++) {
+      if (strcasecmp((*a)[i], b[i]) != 0) { changed = 1; break; }
+    }
+  }
+  if (changed) {
+    free(*a);
+    *a = calloc(nb, sizeof(char*));
+    for (i=0; i < nb; i++) {
+      (*a)[i] = strdup(b[i]);
+    }
+  }
+  return changed;
+}
+
+#define INT_OPT_CHANGED(_a, _b, _x) (_a._x != (int)_b._x)
+#define G_INT_OPT_CHANGED(_x) INT_OPT_CHANGED(Prefs,newPrefs,_x)
+#define SP_INT_OPT_CHANGED(_x) INT_OPT_CHANGED((*p),(*np),_x)
+
+#define STR_OPT_CHANGED(_a,_b,_x) ((_a._x == NULL && _b._x) || \
+                             (_a._x && _b._x == NULL) || \
+                             ((_a._x != NULL && _b._x != NULL) \
+                              && strcmp(_a._x, _b._x)))
+#define G_STR_OPT_CHANGED(_x) STR_OPT_CHANGED(Prefs,newPrefs,_x)
+#define SP_STR_OPT_CHANGED(_x) STR_OPT_CHANGED((*p),(*np),_x)
+
+#define INT_OPT_COPY(_a,_b,_x) {_a._x = (int)_b._x; }
+#define G_INT_OPT_COPY(_x) INT_OPT_COPY(Prefs,newPrefs,_x)
+#define SP_INT_OPT_COPY(_x) INT_OPT_COPY((*p),(*np),_x)
+
+#define STR_OPT_COPY(_a,_b,_x) {FREE_STRING(_a._x); if (_b._x) _a._x = strdup(_b._x); }
+#define G_STR_OPT_COPY(_x) STR_OPT_COPY(Prefs,newPrefs,_x)
+#define SP_STR_OPT_COPY(_x) STR_OPT_COPY((*p),(*np),_x)
+
+#define STR_OPT_COPY_IF_CHANGED(_a,_b,_x) (str_copy_if_changed(&_a._x, _b._x))
+#define G_STR_OPT_COPY_IF_CHANGED(_x) STR_OPT_COPY_IF_CHANGED(Prefs,newPrefs,_x)
+#define SP_STR_OPT_COPY_IF_CHANGED(_x) STR_OPT_COPY_IF_CHANGED((*p),(*np),_x)
+
+#define INT_OPT_COPY_IF_CHANGED(_a,_b,_x) (int_copy_if_changed(&_a._x, _b._x))
+#define G_INT_OPT_COPY_IF_CHANGED(_x) INT_OPT_COPY_IF_CHANGED(Prefs,newPrefs,_x)
+#define SP_INT_OPT_COPY_IF_CHANGED(_x) INT_OPT_COPY_IF_CHANGED((*p),(*np),_x)
+
+#define BIC_OPT_CHANGED(_a,_b,_x) ((_a._x.opaque != (int)_b._x.opaque) || \
+                             (_a._x.transp != (int)_b._x.transp))
+#define G_BIC_OPT_CHANGED(_x) BIC_OPT_CHANGED(Prefs,newPrefs,_x)
+#define SP_BIC_OPT_CHANGED(_x) BIC_OPT_CHANGED((*p),(*np),_x)
+
+#define BIC_OPT_COPY_IF_CHANGED(_a,_b,_x) (bic_copy_if_changed(&_a._x, _b._x))
+#define G_BIC_OPT_COPY_IF_CHANGED(_x) BIC_OPT_COPY_IF_CHANGED(Prefs,newPrefs,_x)
+#define SP_BIC_OPT_COPY_IF_CHANGED(_x) BIC_OPT_COPY_IF_CHANGED((*p),(*np),_x)
+
+#define TRANSP_OPT_COPY_IF_CHANGED(_a,_b,_x) (transp_copy_if_changed(&_a._x, _b._x))
+#define G_TRANSP_OPT_COPY_IF_CHANGED(_x) TRANSP_OPT_COPY_IF_CHANGED(Prefs,newPrefs,_x)
+
+#define KEY_LIST_COPY_IF_CHANGED(_a,_b,_x) (key_list_copy_if_changed(&_a._x, _b._x))
+#define G_KEY_LIST_COPY_IF_CHANGED(_x) KEY_LIST_COPY_IF_CHANGED(Prefs,newPrefs,_x)
+
+#define FONTSTYLE_COPY_IF_CHANGED(_a,_b,_x) (font_style_copy_if_changed(&_a._x, _b._x))
+#define SP_FONTSTYLE_COPY_IF_CHANGED(_x) FONTSTYLE_COPY_IF_CHANGED((*p),(*np),_x)
+
+#define STRING_LIST_COPY_IF_CHANGED(_a,_b,_x,_nb) (string_list_copy_if_changed(&_a._x, &_a._nb, \
+   _b._x, _b._nb))
+#define G_STRING_LIST_COPY_IF_CHANGED(_x,_nb) STRING_LIST_COPY_IF_CHANGED(Prefs,newPrefs,_x,_nb)
+char *get_wmcc_tmp_options_filename() {
+  return str_printf("%s/.wmcoincoin/wmcc_%u.tmp", getenv("HOME"), getpid());
+}
+
+char *get_wmcc_options_filename() {
+  
+  return (options_file_name[0] != '/' && options_file_name[0] != '.') ? 
+    str_printf("%s/.wmcoincoin/%s", getenv("HOME"), options_file_name) : 
+    strdup(options_file_name);  
+}
+
+/* c'est un peu bourrin comme approche mais �a devrait marcher..*/
+void
+wmcc_prefs_relecture(Dock *dock, int whatfile)
+{
+  GeneralPrefs newPrefs;
+  char *errmsg;
+  char *options_full_file_name;
+
+  memset(&newPrefs, 0, sizeof(GeneralPrefs));
+  wmcc_prefs_set_default(&newPrefs);
+  if (whatfile == 1) {
+    options_full_file_name = check_install_data_file("options", options_file_name);
+  } else {
+    options_full_file_name = get_wmcc_tmp_options_filename();
+  }
+  errmsg = wmcc_prefs_read_options(&newPrefs, options_full_file_name,0);
+  if (errmsg) {
+    char *s = str_printf(_("Error while rereading options [%s]<br>%s"),
+			 options_full_file_name, errmsg); free(errmsg);
+    msgbox_show(dock, s); free(s);
+  } else {
+    int redraw_pinni = 0;
+    int rebuild_pinni = 0;
+    int rebuild_palmi = 0;
+    int close_palmi = 0;
+    int reset_dock_pix = 0;
+    int i;
+
+    myprintf(_("rereading of options '%<YEL %s>' successful\n"), options_full_file_name);
+    /*printf("VIREZ MOIVIREZ MOIVIREZ MOIVIREZ MOIVIREZ MOIVIREZ MOIVIREZ MOI\n"
+           "sites=%s,%s,%s..\n", newPrefs.site[0]->site_name,newPrefs.site[1]->site_name,newPrefs.site[2]->site_name);
+    */
+    if (editw_ismapped(dock->editw)) editw_unmap(dock, dock->editw);
+
+    /* recopie b�te de certaines options modifiables sans difficultes */
+    
+    /* parametres de refresh */
+    G_INT_OPT_COPY(max_refresh_delay);
+    G_INT_OPT_COPY(switch_off_coincoin_delay);
+    G_INT_OPT_COPY(verbosity_underpants);
+    G_INT_OPT_COPY(verbosity_http);
+    G_INT_OPT_COPY(http_inet_ip_version);
+    G_INT_OPT_COPY(use_balloons);
+    G_INT_OPT_COPY(pp_use_classical_tabs);
+    G_INT_OPT_COPY(pp_use_colored_tabs);
+
+    /* l'ensemble des options http */
+    G_INT_OPT_COPY(http_timeout);
+    G_STR_OPT_COPY(browser_cmd);
+    G_STR_OPT_COPY(browser2_cmd);
+
+    G_INT_OPT_COPY(enable_troll_detector);
+    G_INT_OPT_COPY(board_auto_dl_pictures);
+    G_INT_OPT_COPY(board_enable_hfr_pictures);
+
+    /* spell */
+    if (G_INT_OPT_COPY_IF_CHANGED(ew_do_spell) +
+	G_STR_OPT_COPY_IF_CHANGED(ew_spell_cmd) +
+	G_STR_OPT_COPY_IF_CHANGED(ew_spell_dict)) {
+      check_if_should_kill_ispell(1);
+    }
+
+    for (i=0; i < NB_BIGORNO; ++i)
+      G_STR_OPT_COPY(post_cmd[i]);
+    G_STR_OPT_COPY(board_scrinechote);
+
+    G_INT_OPT_COPY(palmipede_enable_scroll_wheel_for_boulets);
+
+    /* � faire: plop_words */
+
+    /* maintenant les options generales qui demande un peu de boulot */
+
+    if (G_INT_OPT_COPY_IF_CHANGED(palmipede_override_redirect))
+      close_palmi = 1;
+
+    if (G_INT_OPT_COPY_IF_CHANGED(pp_tabs_pos) +
+        G_BIC_OPT_COPY_IF_CHANGED(sc_bg_color) +
+        G_BIC_OPT_COPY_IF_CHANGED(sc_bg_light_color) +
+	G_BIC_OPT_COPY_IF_CHANGED(sc_bg_dark_color) + 
+	G_BIC_OPT_COPY_IF_CHANGED(sc_arrow_normal_color) +
+	G_BIC_OPT_COPY_IF_CHANGED(sc_arrow_emphasized_color) +
+	G_BIC_OPT_COPY_IF_CHANGED(sc_bar_color) +
+	G_BIC_OPT_COPY_IF_CHANGED(sc_bar_light_color) +
+	G_BIC_OPT_COPY_IF_CHANGED(sc_bar_dark_color)) {
+      rebuild_pinni = 1;
+    }
+
+    /* d�placement du dock dans le cas ou la fenetre est en override redirect */
+    if ((G_INT_OPT_COPY_IF_CHANGED(dock_xpos) + G_INT_OPT_COPY_IF_CHANGED(dock_ypos)) && 
+	Prefs.draw_border && Prefs.use_iconwin==0) {
+      XMoveWindow(dock->display, DOCK_WIN(dock), newPrefs.dock_xpos, newPrefs.dock_ypos);
+    }
+
+    if (G_STR_OPT_COPY_IF_CHANGED(dock_bgpixmap) + G_INT_OPT_COPY_IF_CHANGED(dock_bgcolor)
+	+ G_INT_OPT_COPY_IF_CHANGED(dock_fgcolor)) {
+      reset_dock_pix = 1;
+    }
+    
+    if (G_INT_OPT_COPY_IF_CHANGED(disable_xft_antialiasing)) {
+      rebuild_pinni = 1;
+      rebuild_palmi = 1;
+    }
+    
+    /* test sur les grosses options du pinnipede */
+    if (G_STR_OPT_COPY_IF_CHANGED(pp_fn_family) +
+	G_INT_OPT_COPY_IF_CHANGED(pp_fn_size) +
+        G_INT_OPT_COPY_IF_CHANGED(pp_show_sec_mode) +
+        G_INT_OPT_COPY_IF_CHANGED(pp_html_mode)) {
+      rebuild_pinni = 1;
+    }
+
+    if (G_KEY_LIST_COPY_IF_CHANGED(plopify_key_list) +
+	G_INT_OPT_COPY_IF_CHANGED(hungry_boitakon)) {
+      boards_update_boitakon(dock->sites->boards);
+      redraw_pinni = 1;
+    }
+
+    //G_INT_OPT_COPY_IF_CHANGED(hunt_opened);
+    G_INT_OPT_COPY_IF_CHANGED(hunt_max_duck);
+
+    /* les options plus light se n�gocient avec un bon gros refresh */
+    if (G_BIC_OPT_COPY_IF_CHANGED(pp_buttonbar_bgcolor) +
+        G_BIC_OPT_COPY_IF_CHANGED(pp_buttonbar_fgcolor) +
+        G_BIC_OPT_COPY_IF_CHANGED(pp_buttonbar_msgcnt_color) +
+        G_BIC_OPT_COPY_IF_CHANGED(pp_buttonbar_updlcnt_color) +
+        G_BIC_OPT_COPY_IF_CHANGED(pp_buttonbar_progressbar_color) +
+        G_BIC_OPT_COPY_IF_CHANGED(pp_emph_color) +
+        G_BIC_OPT_COPY_IF_CHANGED(pp_sel_bgcolor) +
+        G_BIC_OPT_COPY_IF_CHANGED(pp_popup_fgcolor) +
+        G_BIC_OPT_COPY_IF_CHANGED(pp_popup_bgcolor) +
+        G_BIC_OPT_COPY_IF_CHANGED(pp_my_msg_color) +
+        G_BIC_OPT_COPY_IF_CHANGED(pp_answer_my_msg_color) +
+        G_BIC_OPT_COPY_IF_CHANGED(pp_keyword_color[0]) +
+        G_BIC_OPT_COPY_IF_CHANGED(pp_keyword_color[1]) +
+        G_BIC_OPT_COPY_IF_CHANGED(pp_keyword_color[2]) +
+        G_BIC_OPT_COPY_IF_CHANGED(pp_keyword_color[3]) +
+        G_BIC_OPT_COPY_IF_CHANGED(pp_keyword_color[4]) +
+        G_BIC_OPT_COPY_IF_CHANGED(pp_plopify_color) +
+	G_TRANSP_OPT_COPY_IF_CHANGED(pp_transparency) +
+        G_INT_OPT_COPY_IF_CHANGED(use_fake_real_transparency) +
+	G_KEY_LIST_COPY_IF_CHANGED(hilight_key_list) +
+	G_STRING_LIST_COPY_IF_CHANGED(plop_words,nb_plop_words)) {
+      redraw_pinni = 1;
+    }
+
+    /* --------- test des options par site --------- */
+
+    /* modification d'un site ? */
+    
+    for (i=0; i < MAX_SITES; i++) {
+      SitePrefs *p, *np;
+      int inp;
+      if (Prefs.site[i] == NULL) continue;
+      p = Prefs.site[i];
+      //np = wmcc_prefs_find_site(&newPrefs, p->site_name); 
+      //if (np == NULL) continue;
+      inp = wmcc_prefs_find_site_id(&newPrefs, p->site_name); 
+      if (inp == -1) continue;
+      np = newPrefs.site[inp];
+
+      /* test du changement d'ordre dans les sites */
+      if (inp != i) {
+        rebuild_pinni = 1;
+      }
+
+      SP_INT_OPT_COPY(rss_ignore_description);
+      SP_INT_OPT_COPY(board_check_delay);
+      SP_INT_OPT_COPY(board_max_msg);
+      SP_INT_OPT_COPY(backend_type);
+      SP_INT_OPT_COPY(proxy_nocache);
+      SP_INT_OPT_COPY(use_if_modified_since);
+      SP_STR_OPT_COPY(user_agent);
+      SP_STR_OPT_COPY(proxy_auth_user);
+      SP_STR_OPT_COPY(proxy_auth_pass);
+      SP_INT_OPT_COPY(locale);
+      SP_INT_OPT_COPY(hunt_opened_on_site);
+
+      if (SP_STR_OPT_COPY_IF_CHANGED(proxy_name) +
+	  SP_STR_OPT_COPY_IF_CHANGED(backend_url)) {
+	myprintf(_("You changed the site/proxy, gethostbyname soon in progress\n"));
+      }
+      
+      SP_INT_OPT_COPY(proxy_port);
+      SP_STR_OPT_COPY(user_name);
+      SP_STR_OPT_COPY(post_url);
+      SP_STR_OPT_COPY(post_template);
+      SP_STR_OPT_COPY(user_cookie);
+      SP_STR_OPT_COPY(pop3_user);
+      SP_STR_OPT_COPY(pop3_pass);
+      SP_STR_OPT_COPY(user_login);
+      //SP_INT_OPT_COPY(board_auto_refresh);
+
+      if (SP_INT_OPT_COPY_IF_CHANGED(palmi_msg_max_len) +
+	  SP_INT_OPT_COPY_IF_CHANGED(palmi_ua_max_len)) {
+	rebuild_palmi = 1;
+      }
+
+      if (SP_INT_OPT_COPY_IF_CHANGED(mark_id_gaps) +
+	  SP_BIC_OPT_COPY_IF_CHANGED(pp_fgcolor) +
+	  SP_INT_OPT_COPY_IF_CHANGED(pp_bgcolor) +
+	  SP_BIC_OPT_COPY_IF_CHANGED(pp_tstamp_color) +
+	  SP_BIC_OPT_COPY_IF_CHANGED(pp_useragent_color) +
+	  SP_BIC_OPT_COPY_IF_CHANGED(pp_trollscore_color) +
+	  SP_BIC_OPT_COPY_IF_CHANGED(pp_login_color) +
+	  SP_BIC_OPT_COPY_IF_CHANGED(pp_url_color) +
+	  SP_BIC_OPT_COPY_IF_CHANGED(pp_visited_url_color) +
+	  SP_BIC_OPT_COPY_IF_CHANGED(pp_strike_color) +
+	  SP_FONTSTYLE_COPY_IF_CHANGED(pp_login_style) +
+	  SP_FONTSTYLE_COPY_IF_CHANGED(pp_ua_style) +
+	  SP_FONTSTYLE_COPY_IF_CHANGED(pp_clock_style)) {
+	redraw_pinni = 1;
+      }
+      if (SP_INT_OPT_COPY_IF_CHANGED(use_AM_PM)) {
+	rebuild_pinni = 1;
+      }
+
+      if (SP_INT_OPT_COPY_IF_CHANGED(check_board)) {
+	Site *site;
+	rebuild_pinni = 1;
+
+	site = sl_find_site_by_name(dock->sites, p->site_name);
+	assert(site);
+
+	if (site->prefs->check_board == 0 && site->board) {
+	  board_destroy(site->board); site->board = NULL;
+	} else if (site->prefs->check_board && site->board == NULL) {
+	  site->board = board_create(site, dock->sites->boards);
+	}
+      }
+    }
+
+    /* suppression de sites ? */
+    for (i=0; i < MAX_SITES; i++) {
+      if (Prefs.site[i] && 
+	  wmcc_prefs_find_site(&newPrefs, Prefs.site[i]->site_name) == NULL) {
+	Site *site;
+	
+	site = sl_find_site_by_name(dock->sites, Prefs.site[i]->site_name); assert(site);
+
+	printf(_("site removed: '%s'\n"), site->prefs->site_name);
+
+	sl_delete_site(dock->sites, site);
+	wmcc_site_prefs_destroy(Prefs.site[i]);
+	Prefs.site[i] = NULL;
+	Prefs.nb_sites--;
+
+	rebuild_pinni = 1;
+	rebuild_palmi = 1;
+      }
+    }
+
+
+    /* cr�ation de nouveaux sites ? */
+    for (i=0; i < MAX_SITES; i++) {
+      if (newPrefs.site[i] &&
+	  wmcc_prefs_find_site(&Prefs, newPrefs.site[i]->site_name) == NULL) {
+	SitePrefs *sp;
+	int j;
+
+	for (j=0; j < MAX_SITES; j++) {
+	  if (Prefs.site[j] == NULL) break;
+	}
+	assert(j < MAX_SITES);
+	assert(Prefs.nb_sites< MAX_SITES-1);
+
+	ALLOC_OBJ(sp, SitePrefs);
+	Prefs.site[j] = sp; Prefs.nb_sites++;
+	wmcc_site_prefs_copy(sp, newPrefs.site[i]);
+
+	printf(_("new site added: '%s'\n"), sp->site_name);
+
+	assert(sl_find_site_by_name(dock->sites, sp->site_name) == NULL);
+	sl_insert_new_site(dock->sites, sp);
+
+	rebuild_pinni = 1;
+      }
+    }
+
+    /* remise dans l'ordre de dock->sites->list */
+    {
+      Site * slist[MAX_SITES], *s;
+      int i;
+      memset(slist, 0, sizeof slist);
+      for (s = dock->sites->list; s; s = s->next) {
+        int nid = wmcc_prefs_find_site_id(&newPrefs, s->prefs->site_name);
+        assert(nid != -1);
+        slist[nid] = s;
+      }
+      dock->sites->list = NULL;
+      for (i=MAX_SITES-1; i >= 0; --i) {
+        if (slist[i]) { slist[i]->next = dock->sites->list; dock->sites->list = slist[i]; }
+      }
+    }
+
+
+    /* dans tous les cas, on reevalue la liste tri�e
+       des messages , y'a des fois ou c'est pas necessaire --> a ameliorer */
+    boards_init_sites(dock->sites);
+
+    
+    /* et allez ! pour les regles de miniua, on swap tout connement (comme �a les anciennes seront
+       proprement d�truites */
+    {
+      MiniUARule *tmp = Prefs.miniuarules.first;
+      Prefs.miniuarules.first = newPrefs.miniuarules.first;
+      newPrefs.miniuarules.first = tmp;
+    }
+    /* et clac ! comme c'est gruik et j'aime �a, on fait pareil pour les URLReplacement */
+    {
+      URLReplacement *tmp = Prefs.url_repl.first;
+      Prefs.url_repl.first = newPrefs.url_repl.first;
+      newPrefs.url_repl.first = tmp;
+    }
+
+
+    /* MISE A JOUR DU COINCOIN */
+    if (reset_dock_pix) { 
+      if ((errmsg=dock_build_pixmap_porte(dock))) {
+	fprintf(stderr, errmsg);
+      }
+      close_palmi = 1;
+    }
+    
+    if (close_palmi) {
+      int showed;
+      if ((showed = editw_ismapped(dock->editw))) editw_unmap(dock, dock->editw);
+      editw_reload_colors(dock, dock->editw);
+      if (showed) editw_show(dock, NULL, 0);
+    }
+
+    if (rebuild_pinni) {
+      // int showed = pp_ismapped(dock);
+      //      pp_destroy(dock);
+      pp_rebuild(dock,1);
+      //      if (showed) pp_show(dock);
+    } if (redraw_pinni) {
+      pp_rebuild(dock,0);
+      //pp_set_prefs_colors(dock);
+      /*
+      if (pp_ismapped(dock)) {
+	pp_unmap(dock);
+	pp_show(dock);
+      }
+      */
+    }
+
+    if (rebuild_palmi) {
+      editw_rebuild(dock);
+    }
+  }
+  
+
+  wmcc_prefs_destroy(&newPrefs);
+  free(options_full_file_name);
+}
diff --git a/src/raster.c b/src/raster.c
new file mode 100644
index 0000000..9749c9c
--- /dev/null
+++ b/src/raster.c
@@ -0,0 +1,489 @@
+/*
+  rcsid=$Id: raster.c,v 1.20 2004/05/16 12:54:30 pouaite Exp $
+  ChangeLog:
+  $Log: raster.c,v $
+  Revision 1.20  2004/05/16 12:54:30  pouaite
+  250c
+
+  Revision 1.19  2004/04/26 20:32:32  pouaite
+  roger demande le commit
+
+  Revision 1.18  2003/08/26 21:50:48  pouaite
+  2.6.4b au mastic
+
+  Revision 1.17  2002/08/18 19:00:28  pouaite
+  plop
+
+  Revision 1.16  2002/06/23 22:26:01  pouaite
+  bugfixes+support � deux francs des visuals pseudocolor
+
+  Revision 1.15  2002/06/23 10:44:05  pouaite
+  i18n-isation of the coincoin(kwakkwak), thanks to the incredible jjb !
+
+  Revision 1.14  2002/06/01 17:54:04  pouaite
+  nettoyage
+
+  Revision 1.13  2002/05/13 10:51:46  pouaite
+  bugfix lecture xpm
+
+  Revision 1.12  2002/05/11 22:00:20  pouaite
+  bugfix lecture des xpms en niveaux de gris
+
+  Revision 1.11  2002/04/15 19:56:38  pouaite
+  v2.3.7a
+
+  Revision 1.10  2002/04/13 11:55:19  pouaite
+  fix kde3 + deux trois conneries
+
+  Revision 1.9  2002/04/10 22:53:44  pouaite
+  un commit et au lit
+
+  Revision 1.8  2002/04/02 22:29:29  pouaite
+  bugfixes transparence
+
+  Revision 1.7  2002/04/01 01:39:38  pouaite
+  grosse grosse commition (cf changelog)
+
+  Revision 1.6  2002/03/21 22:53:07  pouaite
+  ajout d'une icone pour la fenetre du pinnipede et des news
+
+  Revision 1.5  2002/03/19 09:55:58  pouaite
+  bugfixes compilation
+
+  Revision 1.4  2002/03/18 22:46:49  pouaite
+  1 ou 2 bugfix mineurs, et surtout suppression de la dependance avec la libXpm .. un premier pas vers wmc� en 8bits
+
+  Revision 1.3  2002/03/10 16:07:10  pouaite
+  pseudo transp basique dans le pinnipede (en cours..)
+
+  Revision 1.2  2001/12/02 18:34:54  pouaite
+  ajout de tags cvs Id et Log un peu partout...
+
+*/
+#include <string.h>
+#include <errno.h>
+#include "global.h"
+#include "raster.h"
+#include "coin_util.h"
+
+#include <libintl.h>
+#define _(String) gettext (String)
+
+/* 
+   ces fonctions toutes nazes remplacent dor�vanant la libwraster 
+
+   le code est tr�s simple parce qu'on envoie chier tout ce qui n'est pas truecolor
+   et que la performance n'est pas un souci (cf les XPutPixel dans RGBAImage2Ximage ... 
+   -> ceci dit, c'est pareil dans la libwraster: grosse d�ception...)
+
+   le code reste n�anmoins tr�s inspir� par la libwraster
+
+   les images sont stock�es dans des tableaux, dans l'ordre (attention !!):
+   [ligne][colonne] -> c.a.d. (y,x)
+*/
+
+
+/* transforme une valeur 0<=c<=255 en 
+   une quantit� suffisament d�cal�e pour loger dans le mask
+*/
+static unsigned long 
+foobarize(unsigned long c, unsigned long mask)
+{
+  int dec, len;
+  
+  dec = 0; /* decalage du masque */
+  while ((mask & 1)==0) {
+    dec++; mask >>= 1;
+  }
+  len = 0; /* nb de bits � 1 */
+  while ((mask & 1)==1) {
+    len++; mask >>= 1;
+  }
+  if (len < 8) {
+    c >>= (8-len);
+  } else if (len > 8) {
+    c <<= (len-8);
+  }
+  c <<= dec;
+  return c;
+}
+
+
+/* recherche la couleur la plus proche de r,g,b dans la colormap */
+static unsigned long 
+rgba_pseudocol_rgb2color(RGBAContext *c,int r,int g,int b)
+{
+  XColor xc;
+  int status;
+  assert(c->truecolor == 0); /* sinon on n'a rien a faire ici */
+  xc.red = r*256;
+  xc.green = g*256;
+  xc.blue = b*256;
+  xc.flags = 0;
+  status = XAllocColor(c->dpy,  c->cmap, &xc);
+
+  printf("allocation de [%02x,%02x,%02x] :  [%02x,%02x,%02x], status=%d, pix=%lx\n", r,g,b,xc.red,xc.green,xc.blue,status,xc.pixel);
+  return xc.pixel;
+}
+
+RGBAContext*
+RGBACreateContext(Display *dpy, int screen_number)
+{
+  RGBAContext *context;
+  XGCValues gcv;
+  int i;
+
+  ALLOC_OBJ(context, RGBAContext);
+  
+  context->dpy = dpy;
+  
+  context->screen_number = screen_number;
+  
+  context->visual = DefaultVisual(dpy, screen_number);
+  context->depth = DefaultDepth(dpy, screen_number);
+  context->cmap = DefaultColormap(dpy, screen_number);
+  context->drawable = RootWindow(dpy, screen_number);
+  context->black = BlackPixel(dpy, screen_number);
+  context->white = WhitePixel(dpy, screen_number);
+  context->vclass = context->visual->class;
+    
+  gcv.function = GXcopy;
+  gcv.graphics_exposures = False;
+  context->copy_gc = XCreateGC(dpy, context->drawable, GCFunction
+			       |GCGraphicsExposures, &gcv);
+  if (context->vclass == TrueColor || context->vclass == DirectColor) {
+    context->truecolor = 1;
+    /* calc offsets to create a TrueColor pixel */
+    BLAHBLAH(1,printf(_("The visual (depth=%d) is in %s, cool\n"), context->depth, 
+		      context->vclass == TrueColor ? "TrueColor" : "DirectColor"));
+  } else if (context->vclass == PseudoColor || context->vclass == StaticColor) {
+    int r,g,b;
+    printf(_("Bleh, we are in pseudocolor (depth=%d)...\n"), context->depth);
+    
+    context->truecolor = 0;
+    
+    for (r=0; r < PSEUDOCOL_NCOLORS+1; r++) {
+      for (g=0; g < PSEUDOCOL_NCOLORS+1; g++) {
+	for (b=0; b < PSEUDOCOL_NCOLORS+1; b++) {
+	  int rr,gg,bb;
+	  rr = MIN((r*255)/PSEUDOCOL_NCOLORS,255);
+	  gg = MIN((g*255)/PSEUDOCOL_NCOLORS,255);
+	  bb = MIN((b*255)/PSEUDOCOL_NCOLORS,255);
+	  context->pseudocol_palette[r][g][b] = rgba_pseudocol_rgb2color(context, rr,gg,bb);
+	}
+      }
+    }
+
+    return context;
+
+    //    free(context); return NULL;
+  } else if (context->vclass == GrayScale || context->vclass == StaticGray) {
+    printf(_("Unbelievable, there's even no colors !\n"));
+    free(context); return NULL;
+  } else return NULL;
+  
+  for (i=0; i < 256; i++) {
+    context->rtable[i] = foobarize(i, context->visual->red_mask);
+    context->gtable[i] = foobarize(i, context->visual->green_mask);
+    context->btable[i] = foobarize(i, context->visual->blue_mask);
+    /*    printf("i=%02x: %lx %lx %lx\n", i, context->rtable[i], context->gtable[i], context->btable[i]); */
+  }
+
+  {
+    unsigned long mask;
+    int nbits, decal;
+
+    context->r_shift_left = context->g_shift_left = context->b_shift_left = 0;
+    context->r_shift_right = context->g_shift_right = context->b_shift_right = 0;
+
+    mask = context->visual->red_mask; nbits = 0; decal = 0;
+    while ((mask & 1) == 0) { decal++; mask >>= 1; }
+    while ((mask & 1) == 1) { nbits++; mask >>= 1; }
+    BLAHBLAH(1,printf("rmask=%08lx, decal=%d, nbits=%d\n", 
+		      context->visual->red_mask, decal, nbits));
+    context->r_shift_left = decal + (nbits-8);
+    if (decal + nbits - 8 < 0) { 
+      context->r_shift_right = -context->r_shift_left;
+      context->r_shift_left  = 0;
+    }
+
+    mask = context->visual->green_mask; nbits = 0; decal = 0;
+    while ((mask & 1) == 0) { decal++; mask >>= 1; }
+    while ((mask & 1) == 1) { nbits++; mask >>= 1; }
+    BLAHBLAH(1,printf("gmask=%08lx, decal=%d, nbits=%d\n", 
+		      context->visual->green_mask, decal, nbits));
+    context->g_shift_left = decal + (nbits-8);
+    if (decal + nbits - 8 < 0) { 
+      context->g_shift_right = -context->g_shift_left;
+      context->g_shift_left  = 0;
+    }
+
+    mask = context->visual->blue_mask; nbits = 0; decal = 0;
+    while ((mask & 1) == 0) { decal++; mask >>= 1; }
+    while ((mask & 1) == 1) { nbits++; mask >>= 1; }
+    BLAHBLAH(1,printf("bmask=%08lx, decal=%d, nbits=%d\n", 
+		      context->visual->blue_mask, decal, nbits));
+    context->b_shift_left = decal + (nbits-8);
+    if (decal + nbits - 8 < 0) { 
+      context->b_shift_right = -context->b_shift_left;
+      context->b_shift_left  = 0;
+    }
+  }
+  return context;
+}
+
+RGBAImage*
+RGBACreateImage(int width, int height)
+{
+  RGBAImage *image=NULL;
+    
+  assert(width>0 && height>0);
+
+  image = malloc(sizeof(RGBAImage));
+  if (!image) {
+    return NULL;
+  }
+
+  image->w = width;
+  image->h = height;
+  assert(sizeof(RGBAPixel) == 4); /* je compte la dessus .. */
+  ALLOC_ARR(image->data, height, width, RGBAPixel);
+  return image;
+}
+
+void
+RGBADestroyImage(RGBAImage *img)
+{
+  assert(img);
+  free(img->data[0]); free(img->data); free(img);
+}
+
+XImage *
+RGBAImage2XImage(RGBAContext *ctx, RGBAImage *rimg)
+{
+  XImage *ximg;
+  int x,y;
+
+  ximg = XCreateImage(ctx->dpy, ctx->visual, ctx->depth,
+		      ZPixmap, 0, NULL, rimg->w, rimg->h, 8, 0);
+  if (ximg == NULL) {
+    return NULL;
+  }
+  ximg->data = calloc(ximg->bytes_per_line * rimg->h, 1);
+  if (ximg->data == NULL) {
+    XDestroyImage(ximg); return NULL;
+  }
+
+  if (ctx->truecolor) {
+    for (x=0; x < rimg->w; x++) {
+      for (y=0; y < rimg->h; y++) {
+	unsigned long pix;
+	
+	/*      printf("x=%04d, y=%04d, rgb=%02x%02x%02x, %08lx %08lx\n", x,y,
+		rimg->data[y][x].rgba[0],rimg->data[y][x].rgba[1],rimg->data[y][x].rgba[2],
+		pix, ctx->white); */
+	pix = (ctx->rtable[rimg->data[y][x].rgba[0]] + 
+	       ctx->gtable[rimg->data[y][x].rgba[1]] + 
+	       ctx->btable[rimg->data[y][x].rgba[2]]);
+	XPutPixel(ximg, x, y, pix);
+      }
+    }
+  } else {
+    for (x=0; x < rimg->w; x++) {
+      for (y=0; y < rimg->h; y++) {
+	unsigned long pix;
+	pix = _RGB2PIXEL(ctx,rimg->data[y][x].rgba[0],rimg->data[y][x].rgba[1],rimg->data[y][x].rgba[2]);
+	XPutPixel(ximg, x, y, pix);
+      }
+    }
+  }
+
+  return ximg;
+}
+
+Pixmap
+RGBAImage2Pixmap(RGBAContext *ctx, RGBAImage *rimg)
+{
+  XImage *ximg;
+  Pixmap pixmap;
+
+  assert(ctx);
+  assert(rimg);
+  ximg = RGBAImage2XImage(ctx, rimg);
+  if (ximg == NULL) return None;
+  pixmap = XCreatePixmap(ctx->dpy, ctx->drawable, rimg->w,
+			 rimg->h, ctx->depth);
+  XPutImage(ctx->dpy, pixmap, ctx->copy_gc, ximg, 0, 0, 0, 0, rimg->w, rimg->h);
+  XDestroyImage(ximg);
+  return pixmap;
+}
+
+/*
+  dans la cat�gorie des fonctions � ne pas appeler trop souvent, 
+  ni sur des wallpaper 1600x1200 , voici un clone de XpmCreatePixmapFromData ... 
+
+  Update: coup�e en deux
+*/
+RGBAImage *
+RGBACreateRImgFromXpmData(RGBAContext *rc, char **xpm)
+{
+  int w,h,ncolor,cpp;
+  RGBAImage *rimg;
+
+  struct xpm_color {
+    char char_color[4];
+    int r,g,b,a;
+  } *col_tab;
+  
+  int i, rgb;
+  int err = 0;
+
+  assert(sscanf(xpm[0], "%d %d %d %d", &w, &h, &ncolor, &cpp)==4);
+  assert(w > 0); assert(h>0); assert(ncolor>0); assert(cpp>0 && cpp <= 4);
+  
+  ALLOC_VEC(col_tab, ncolor, struct xpm_color);
+  for (i=0; i < ncolor; i++) {
+    char *s;
+    s = xpm[i+1];
+    strncpy(col_tab[i].char_color, s, cpp); /* copie les caracteres identifiant la couleur */
+
+    s+= cpp;
+    if (!(*s == '\t' || *s == ' ')) { err = 1; goto ralala; }
+    while (*s == '\t' || *s == ' ') s++;
+    if (*s != 'c' && *s != 'g') {err = 2; printf("expected 'c' or 'g' got '%c'\n", *s); goto ralala;} /* seulement les fichiers xpms en couleur ou en niveau de gris (en gris les couleurs sont qd m�me sous la forme #rrggbb, avec rr=gg=bb)  */
+
+    s++; if (!(*s == ' ')) { err=3; goto ralala; }
+    s++;
+    if (strcasecmp(s, "None") != 0) {
+      if (*s != '#' || strlen(s) != 7) {
+	XColor xc;
+	if (XParseColor(rc->dpy, DefaultColormap(rc->dpy, rc->screen_number), s, &xc) == 0) {
+	  fprintf(stderr, _("Unknown colour in the .xpm: '%s'\n'"), s);
+	  exit(0);
+	}
+	rgb = ((xc.red>>8) << 16) + ((xc.green>>8) << 8) + (xc.blue>>8);
+      } else {
+	if (!(sscanf(s+1, "%x", &rgb)==1)) {err = 4; goto ralala; }
+      }
+      col_tab[i].r = (rgb & 0xff0000) >> 16;
+      col_tab[i].g = (rgb & 0x00ff00) >> 8;
+      col_tab[i].b = (rgb & 0x0000ff);
+      col_tab[i].a = 255;
+      
+      /*printf("couleur %d: %x [s='%s']\n", i, rgb, xpm[i+1]);*/
+    } else {
+      col_tab[i].r = 0;
+      col_tab[i].g = 0;
+      col_tab[i].b = 0;
+      col_tab[i].a = 0;
+      
+    }
+  }
+
+  rimg = RGBACreateImage(w,h); assert(rimg);
+  for (i=0; i < h; i++) {
+    char *s; 
+    int j;
+    s = xpm[i+1+ncolor];
+    for (j=0; j < w; j++) {
+      int k;
+
+      /* recherche ultra-bourrine de la couleur, pas le temps de finasser ;) */
+      for (k = 0; k < ncolor; k++) {
+	if (memcmp(s+j*cpp, col_tab[k].char_color, cpp) == 0) {
+	  break;
+	}
+      }
+      assert(k < ncolor);
+      
+      /*   printf("%d %d --> [%02x,%02x,%02x]\n", i, j, col_tab[k].r, col_tab[k].g, col_tab[k].b);*/
+      rimg->data[i][j].rgba[0] = col_tab[k].r;
+      rimg->data[i][j].rgba[1] = col_tab[k].g;
+      rimg->data[i][j].rgba[2] = col_tab[k].b;
+      rimg->data[i][j].rgba[3] = col_tab[k].a;
+    }
+  }
+
+  free(col_tab);  
+  return rimg;
+ ralala:
+  fprintf(stderr, _("dommage, vous avez trouve une pouille dans le 'parseur' de .xpm\n VOTRE fichier .xpm n'est pas conforme a MON standard xpm\nerr=%d, la ligne qui pose probleme est: '%s'\n En le reecrivant avec un autre logiciel ca devrait mieux marcher, mais le mieux c'est sans doute d'envoyer un bug report [ c0in at altern.org ]\n"), err, xpm[i+1]);
+  exit(1);
+  return NULL;
+}
+
+Pixmap
+RGBACreatePixmapFromXpmData(RGBAContext *ctx, char **xpm)
+{
+  RGBAImage *rimg;
+  Pixmap pix;
+
+  rimg = RGBACreateRImgFromXpmData(ctx, xpm);
+  pix = RGBAImage2Pixmap(ctx, rimg);
+  RGBADestroyImage(rimg);
+  return pix;
+}
+
+/* toujours plus con , voici...*/
+Pixmap
+RGBACreatePixmapFromXpmFile(RGBAContext *ctx, char *xpm_file, int *w, int *h)
+{
+  FILE *f;
+#define LEN_MAX 4096
+#define NLIG_MAX 8192
+
+  char *l_tab[NLIG_MAX]; /* beurk */
+  char l[LEN_MAX];       /* eeeerk */
+  int lcnt;
+  Pixmap pix;
+
+  *w = 0; *h = 0;
+  f = fopen(xpm_file, "r"); if (f == NULL) {
+    fprintf(stderr, _("Unable to open '%s' : %s\n"), xpm_file, strerror(errno));
+    return None;
+  }
+  
+  lcnt = 0;
+  do {
+    if (ferror(f)) {
+      fprintf(stderr, _("Error while reading '%s' !? [%s]\n"), xpm_file, strerror(errno));
+    }
+
+    l[0] = 0; fgets(l, LEN_MAX, f);
+    
+    /* on ne prend en compte QUE LES LIGNES QUI COMMENCE PAR '"' et QUI SE TERMINENT PAR '",' */
+    
+    if (l[0] == '"') {
+      int i;
+      i = strlen(l); assert(i > 2);
+      
+      i--;
+      while (l[i] != '"') i--; /* oui, j'ai pas envie de finasser */
+      if (i == 0) {
+	fprintf(stderr, _("The '%s' line looks weird\n"), l); return None;
+      }
+      l[i] = 0;
+
+      /*      printf("ajout de la ligne: '%s'\n", l+1); */
+      l_tab[lcnt] = strdup(l+1);
+      lcnt++;
+      if (lcnt == NLIG_MAX) {
+	fprintf(stderr, _("There are too many lines in '%s' (max=%d) !! \n"), xpm_file, NLIG_MAX);
+	exit(1);
+      }
+    }
+  } while (!feof(f));
+  fclose(f);
+  
+  assert(lcnt > 0);
+  sscanf(l_tab[0], "%d %d", w, h);
+  pix = RGBACreatePixmapFromXpmData(ctx, l_tab);
+
+  while (lcnt > 0) {
+    lcnt--;
+    free(l_tab[lcnt]);
+  }
+  return pix;
+}
+
+
diff --git a/src/raster.h b/src/raster.h
new file mode 100644
index 0000000..53611f9
--- /dev/null
+++ b/src/raster.h
@@ -0,0 +1,102 @@
+/*
+  rcsid=$Id: raster.h,v 1.10 2003/01/11 14:10:07 pouaite Exp $
+  ChangeLog:
+  $Log: raster.h,v $
+  Revision 1.10  2003/01/11 14:10:07  pouaite
+  fix du palmi pour xf 4.3
+
+  Revision 1.9  2002/08/31 21:26:46  pouaite
+  ajout du wmccc
+
+  Revision 1.8  2002/06/23 22:26:01  pouaite
+  bugfixes+support � deux francs des visuals pseudocolor
+
+  Revision 1.7  2002/04/10 22:53:44  pouaite
+  un commit et au lit
+
+  Revision 1.6  2002/04/02 22:29:29  pouaite
+  bugfixes transparence
+
+  Revision 1.5  2002/03/21 22:53:07  pouaite
+  ajout d'une icone pour la fenetre du pinnipede et des news
+
+  Revision 1.4  2002/03/18 22:46:49  pouaite
+  1 ou 2 bugfix mineurs, et surtout suppression de la dependance avec la libXpm .. un premier pas vers wmc� en 8bits
+
+  Revision 1.3  2002/03/10 16:07:10  pouaite
+  pseudo transp basique dans le pinnipede (en cours..)
+
+  Revision 1.2  2001/12/02 18:34:54  pouaite
+  ajout de tags cvs Id et Log un peu partout...
+
+*/
+
+#ifndef RASTER_H__
+#define RASTER_H__
+
+#include <X11/X.h>
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+#ifdef XINERAMA
+# include <X11/extensions/Xinerama.h>
+#endif
+#define PSEUDOCOL_NCOLORS 6
+
+#define _RGB2PIXEL(c,r,g,b) ((c->truecolor) ? c->rtable[r] + \
+                             c->gtable[g] + \
+                             c->btable[b] : c->pseudocol_palette[(r*PSEUDOCOL_NCOLORS+128)/255][(g*PSEUDOCOL_NCOLORS+128)/255][(b*PSEUDOCOL_NCOLORS+128)/255])
+#define _IRGB2PIXEL(c,rgb) ((c->truecolor) ? c->rtable[((rgb)>>16) & 0xff] + \
+                            c->gtable[((rgb)>> 8) & 0xff] + \
+                            c->btable[((rgb)    ) & 0xff] : \
+                            c->pseudocol_palette[((((rgb)>>16) & 0xff)*PSEUDOCOL_NCOLORS+128)/255][((((rgb)>> 8) & 0xff)*PSEUDOCOL_NCOLORS+128)/255][(((rgb) & 0xff)*PSEUDOCOL_NCOLORS+128)/255])
+
+
+typedef struct RGBAContext {
+  Display *dpy;
+  int screen_number;
+  Colormap cmap;
+  
+  GC copy_gc;
+  
+  Visual *visual;
+  int depth;
+  Window drawable;		       /* window to pass for XCreatePixmap().*/
+				       /* generally = root */
+  int vclass;
+  
+  unsigned long black;
+  unsigned long white;
+
+  unsigned long rtable[256], gtable[256], btable[256];
+
+  /* decalages � appliquer sur un pixel (apres l'avoir masque avec visual->red_mask etc) pour se retrouver avec une valeur entre 0 et 255 
+     ex: composante rouge: (pixel >> r_shift_left) << r_shift_right;
+  */
+  unsigned char r_shift_left , g_shift_left,  b_shift_left;
+  unsigned char r_shift_right, g_shift_right, b_shift_right;
+  int rmask, gmask, bmask;
+
+  int truecolor;
+  unsigned long pseudocol_palette[PSEUDOCOL_NCOLORS+1][PSEUDOCOL_NCOLORS+1][PSEUDOCOL_NCOLORS+1]; /* contient les pixel pour une palette en pseudocolor */
+} RGBAContext;
+
+
+typedef union RGBAPixel_ {
+  unsigned char rgba[4];
+  unsigned int v;
+} RGBAPixel;
+
+typedef struct {
+  int w, h;
+  RGBAPixel **data;
+} RGBAImage;
+
+RGBAContext* RGBACreateContext(Display *dpy, int screen_number);
+RGBAImage* RGBACreateImage(int width, int height);
+void RGBADestroyImage(RGBAImage *img);
+XImage *RGBAImage2XImage(RGBAContext *ctx, RGBAImage *rimg);
+Pixmap RGBAImage2Pixmap(RGBAContext *ctx, RGBAImage *rimg);
+RGBAImage *RGBACreateRImgFromXpmData(RGBAContext *ctx, char **xpm);
+Pixmap RGBACreatePixmapFromXpmData(RGBAContext *ctx, char **xpm);
+Pixmap RGBACreatePixmapFromXpmFile(RGBAContext *ctx, char *xpm_file, int *w, int *h);
+#endif
diff --git a/src/regexp.c b/src/regexp.c
new file mode 100644
index 0000000..ccb2e52
--- /dev/null
+++ b/src/regexp.c
@@ -0,0 +1,467 @@
+/*
+    wmCoinCoin, the stupidest WindowMaker dock applet
+    Copyright (C) 2001  Julien Pommier
+    This is file (C) 2001 Ga�l Le Mignot <kilobug at freesurf.fr>
+
+    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., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+
+ */
+/*
+  rcsid=$Id: regexp.c,v 1.15 2002/12/20 11:26:35 pouaite Exp $
+  ChangeLog:
+  $Log: regexp.c,v $
+  Revision 1.15  2002/12/20 11:26:35  pouaite
+  deux trois conneries
+
+  Revision 1.14  2002/11/20 23:34:40  pouaite
+  paf le patch, par lordOric
+
+  Revision 1.13  2002/10/16 20:41:45  pouaite
+  killall toto
+
+  Revision 1.12  2002/10/15 23:17:28  pouaite
+  rustinage � la truelle
+
+  Revision 1.11  2002/08/23 00:25:21  pouaite
+  ou�
+
+  Revision 1.10  2002/08/18 20:52:15  pouaite
+  les locales des sites fonctionnent (c bon pour les news)
+
+  Revision 1.9  2002/06/23 22:26:01  pouaite
+  bugfixes+support � deux francs des visuals pseudocolor
+
+  Revision 1.8  2002/06/23 10:44:05  pouaite
+  i18n-isation of the coincoin(kwakkwak), thanks to the incredible jjb !
+
+  Revision 1.7  2002/05/27 18:39:14  pouaite
+  trucs du week-end + patch de binny
+
+  Revision 1.6  2002/03/03 10:10:04  pouaite
+  bugfixes divers et vari�s
+
+  Revision 1.5  2001/12/17 22:59:26  pouaite
+  bugfix d�bile qui empeche le plantage du coincoin quand /backend.rdf est invalide
+
+  Revision 1.4  2001/12/17 00:18:04  pouaite
+  changement du format du backend -> on utilise desormais le /backend.rdf
+
+  Revision 1.3  2001/12/02 20:29:31  pouaite
+  rajout de 'options' et 'useragents' dans le Makefile.am ...
+
+  Revision 1.2  2001/12/02 18:24:16  pouaite
+  modif (virage) des regexp pour le texte des news, trop chiant � maintenir, du coup �a devrait marcher � nouveau sous bsd
+
+*/
+
+#include <stdlib.h>
+#include <string.h>
+#include "general.h"
+#include "regexp.h"
+#include "coincoin.h"
+
+#include <libintl.h>
+#define _(String) gettext (String)
+
+patterns_t patterns[] =
+  { 
+
+  	{ pat_xp, "XP[^:]*:[^[:digit:]]*(-?[[:digit:]]*)", NULL, "d"  },
+    { pat_votes, 
+      "([[:digit:]]*)[[:space:]]*votes[[:space:]]*.*"
+      "reste[^:]*:[^[0-9\\-]]*(-?[[:digit:]]*)", NULL, "dd" },
+
+		{ pat_xp_votes, "XPs: (-?[[:digit:]]+)/(-?[[:digit:]]+)/(-?[[:digit:]]+)", NULL, "ddd" }
+    /*    
+	  
+    pat_news est remplace par la fonction ci-dessous (j'arrive pas a avoir une regex qui marche
+    bien -> cad qui fonctionne dans tous les cas et qui est rapide -> en particulier gros pb sur
+    openbsd
+
+
+
+    { pat_news,
+      //"<!-- *NEWSBOX +[[:digit:]]+ *-->.*"
+      //"class=\"newstitle\"[^>]*>.*<a[^>]*>([^<]*)</a>: <a +name=[^>]*>([^<]*)</a></td>.*"
+      //"class=\"newsinfo\"[^>]*>.*Post.* +par +(.*)\\. +Approuv� +le +(.*) +<a[^>]*>\\[M\\]</a>.*"
+      //"class=\"newstext\"[^>]*><a[^>]*>.*</a>(.*)</td>.*"
+      //"class=\"newslink\"[^>]*>(.*)"
+      //"class=\"[^\"]*\"[^>]*>.*"
+      //       NULL,
+      //      "ssssss" },
+
+      //"<span class=\"newstext\"[^<]*<a[^>]*>([^<]*)</a>.*" // le titre
+      ".*Approuv� +le +([^<]*).*"           // date
+      "class=\"newstext\"[^>]*>(.+)</td>.*"  // texte de la news
+      "class=\"newslink\"[^>]*>([^[.</td>.]]+).*"                       // le bloc des liens
+      //      "class=\"[^\"]*\"[^>]*>.*"
+      ,NULL,
+      "sss" }*/
+  };
+
+
+const char *
+site_locale_str(SitePrefs *sp, const char *s) {
+  struct {
+    const char *ref;
+    const char *trad[2];
+  } traduc[] = {{"Approved on ", {NULL, "Approuv� le "}}, 
+		{"Posted by"   , {NULL, "Post� par"}},
+		{"Topic:"      , {NULL, NULL}},
+		{"Theme:"      , {NULL, "Th�me:"}},
+		{"Mod�r� :"    , {NULL, NULL}},
+		{NULL,           {NULL,NULL}}};
+  int i = 0;
+  while (traduc[i].ref) {
+    if (strcmp(s, traduc[i].ref) == 0) {
+      const char *t = traduc[i].trad[sp->locale];
+      if (t == NULL) return s; else return t;
+    }
+    i++;
+  }
+  assert(0);
+  return NULL;
+}
+
+char *
+mystrndup(const char *s, int n)
+{
+  char *p;
+
+  p = malloc(n+1);
+  strncpy(p, s, n); p[n] = 0;
+  return p;
+}
+
+char*
+after_substr(const char *s, const char *substr)
+{
+  const char *p;
+
+  if (s == NULL) return NULL;
+  p = strstr(s, substr);
+  if (p) {
+    return (char *) p+strlen(substr);
+  } else {
+    return NULL;
+  }
+}
+
+
+
+
+/* remplace pat_news */
+void
+extract_news_txt_dacode14(SitePrefs *sp, const char *s, news_extract_t *extr)
+{
+  const unsigned char *p, *p2=NULL;
+
+  extr->date = extr->auteur = extr->section = extr->txt = NULL;
+  extr->nb_url = 0;
+  
+  p = after_substr(s, "class=\"newsinfo\"");
+  p = after_substr(s, site_locale_str(sp, "Approved on "));
+  if (p) {
+    p2 = strchr(p, '<');
+    if (p2) {
+      extr->date = mystrndup(p, p2-p);
+    }
+  }
+
+  //  printf("p_date = '%s'\n", *p_date);
+
+  p = after_substr(s, "class=\"newsinfo\"");
+  p = after_substr(s, site_locale_str(sp, "Posted by"));
+  if (p) {
+    p2 = strstr(p, site_locale_str(sp, "Approved on "));
+    if (p2) {
+      extr->auteur = mystrndup(p, p2-p);
+    }
+  }
+  if (extr->auteur == NULL) { extr->auteur = strdup("???"); }
+
+  /* recherche de la section */
+  p2 = p;
+  p = after_substr(s, site_locale_str(sp, "Topic:"));
+  if (p == NULL) p = after_substr(s, site_locale_str(sp, "Theme:")); /* actuellement (16/12/2001) c'est cette chaine qui est utilisee */
+  if (p) {
+    p = strchr(p, '>');
+    if (p) {
+      p++;
+      p2 = strchr(p, '<');
+      if (p2 && p2 - p < 100) {
+	extr->section = mystrndup(p, p2-p);
+      }
+    }
+  }
+  if (extr->section == NULL) extr->section = strdup("???");
+
+  p = after_substr(p2, "class=\"newstext\"");
+  p = after_substr(p, ">");  
+  if (p) {
+    p2 = strstr(p, "</td>");
+    if (p2) {
+      extr->txt = mystrndup(p, p2-p);
+    }
+  }
+
+  //  printf("p_txt = '%s'\n", extr->txt);
+
+  /* les urls SAI CHIANT */
+  if (extr->txt) { /* si pas de txt , on ne s'acharne pas */
+    p = after_substr(p2, "class=\"newslink\"");
+    p = after_substr(p, ">");
+    if (p) {
+      char *url, *url_descr;
+      const unsigned char *p_fin;
+      url = NULL; url_descr = NULL;
+      p_fin = strstr(p, "</td>");
+      p2 = p;
+      while (p2 && p_fin && p2 < p_fin) {
+	const unsigned char *p3, *p4;
+	/* bourrin .. au moindre probl�me on laisse tomber */
+	
+	/* essai 1 : y'a t-il un onmouseover ? (pour chopper le vrai lien) */
+	p3 = after_substr(p2, " onmouseover=\"javascript: window.status='");
+	if (p3 && p3 < p_fin) {
+	  p4 = p3;
+	  p3 = strchr(p3, '\'');
+	  if (p3) {
+	    url = mystrndup(p4, p3-p4);
+	  }
+	}
+
+	/* essai 2, il y a juste un href= */
+	if (url == NULL) {
+	  p3 = after_substr(p2, "<a href=\"");
+	  if (p3 == NULL || p3 > p_fin) goto stop_url;
+	  p4 = p3;
+	  p3 = strchr(p3, '"');
+	  if (p3 == NULL) goto stop_url;
+	  url = mystrndup(p4, p3-p4);
+	}
+
+	/* chope la descriptuion de l'url */
+	p3 = strstr(p3, ">");
+	if (p3 == NULL) goto stop_url;
+	p4 = p3+1;
+	p3 = strstr(p3, "<");
+	if (p3 == NULL) goto stop_url;
+	url_descr = mystrndup(p4, p3-p4);
+	//      printf("LINK='%s' , DESC='%s'\n", url_tab[nb_url], url_tab_desc[nb_url]);
+	extr->url_tab[extr->nb_url] = url;
+	extr->url_descr[extr->nb_url] = url_descr;
+	extr->nb_url++;
+	url = NULL; url_descr = NULL;
+	p2 = p3;
+      }
+    stop_url:
+      if (url) free(url);
+      if (url_descr) free(url_descr);
+    }
+  }
+}
+
+
+void
+extract_news_txt_dacode2(SitePrefs *sp, const char *s, news_extract_t *extr)
+{
+  const unsigned char *p, *p2=NULL;
+
+  extr->date = extr->auteur = extr->section = extr->txt = NULL;
+  extr->nb_url = 0;
+  
+  p = after_substr(s, "class=\"newstitle\"");
+  p = after_substr(s, site_locale_str(sp, "Mod�r� :"));
+  if (p) {
+    p2 = strchr(p, '<');
+    if (p2) {
+      extr->date = mystrndup(p, p2-p);
+    }
+  }
+
+  //  printf("p_date = '%s'\n", *p_date);
+
+  p = after_substr(s, "class=\"newstitle\"");
+  p = after_substr(s, site_locale_str(sp, "Posted by"));
+  p = after_substr(p, ">");
+  if (p) {
+    p2 = strstr(p, "<");
+    if (p2) {
+      extr->auteur = mystrndup(p, MIN(p2-p, 500));
+      BLAHBLAH(2, myprintf("Auteur = '%s'\n", extr->auteur));
+    }
+  }
+  if (extr->auteur == NULL) { extr->auteur = strdup("???"); }
+
+  /* recherche de la section */
+  p2 = p;
+  p = after_substr(s, "class=\"newstitle\"");
+  if (p) {
+    p = after_substr(p, "<a "); p = after_substr(p, "\">");
+    if (p) {
+      p2 = strchr(p, '<');
+      if (p2 && p2 - p < 100) {
+	extr->section = mystrndup(p, p2-p);
+      }
+    }
+  }
+  if (extr->section == NULL) extr->section = strdup("???");
+
+  p = after_substr(p2, "class=\"bodydiv\"");
+  p = after_substr(p, "</div>");
+  if (p) {
+    p2 = strstr(p, "<ul>");
+    if (p2 == NULL) p2 = strstr(p, "</div>");
+    if (p2) {
+      extr->txt = mystrndup(p, p2-p);
+    }
+  }
+
+
+
+  BLAHBLAH(2, printf("TXT = '%s'\n", extr->txt));
+
+  /* les urls SAI CHIANT */
+  if (extr->txt) { /* si pas de txt , on ne s'acharne pas */
+    p = after_substr(s, "class=\"newslink\"");
+    if (p) {
+      int cnt = 0;
+      while (p > (const unsigned char*)s && strncmp(p, "<li>", 4) && cnt < 200) { p--; cnt++; }
+    }
+    if (p) {
+      char *url, *url_descr;
+      const unsigned char *p_fin;
+      url = NULL; url_descr = NULL;
+      p_fin = strstr(p, "</ul>");
+      p2 = p;
+      while (p2 && p_fin && p2 < p_fin) {
+	const unsigned char *p3, *p4;
+	/* bourrin .. au moindre probl�me on laisse tomber */
+	p2 = after_substr(p2, "<li>");
+	/* essai 1 : y'a t-il un onmouseover ? (pour chopper le vrai lien) */
+	p3 = after_substr(p2, " onmouseover=\"javascript: window.status='");
+	if (p3 && p3 < p_fin) {
+	  p4 = p3;
+	  p3 = strchr(p3, '\'');
+	  if (p3) {
+	    url = mystrndup(p4, p3-p4);
+	  }
+	}
+
+	/* essai 2, il y a juste un href= */
+	if (url == NULL) {
+	  p3 = after_substr(p2, "<a href=\"");
+	  if (p3 == NULL || p3 > p_fin) goto stop_url;
+	  p4 = p3;
+	  p3 = strchr(p3, '"');
+	  if (p3 == NULL) goto stop_url;
+	  url = mystrndup(p4, p3-p4);
+	}
+
+	/* chope la descriptuion de l'url */
+	p3 = strstr(p3, ">");
+	if (p3 == NULL) goto stop_url;
+	p4 = p3+1;
+	p3 = strstr(p3, "<");
+	if (p3 == NULL) goto stop_url;
+	url_descr = mystrndup(p4, p3-p4);
+	BLAHBLAH(2, printf("LINK='%s' , DESC='%s'\n", url, url_descr));
+	extr->url_tab[extr->nb_url] = url;
+	extr->url_descr[extr->nb_url] = url_descr;
+	extr->nb_url++;
+	url = NULL; url_descr = NULL;
+	p2 = p3;
+      }
+    stop_url:
+      if (url) free(url);
+      if (url_descr) free(url_descr);
+    }
+  }
+}
+
+
+int 
+regexp_extract(const char *str, pat_type_t pattern, ...)
+{
+  int res, i;
+  regmatch_t *match = NULL;
+  int nb;
+  va_list ap;
+  int *ip;
+  char **sp;
+  char *s = NULL;
+
+  g_return_val_if_fail(str != NULL, FALSE);
+  g_return_val_if_fail(patterns[pattern].id == pattern, FALSE);
+
+  /* Compilation de la regexp */
+  if (patterns[pattern].regexp == NULL) {
+    patterns[pattern].regexp = malloc(sizeof(*(patterns[pattern].regexp)));
+    g_return_val_if_fail(patterns[pattern].regexp != NULL, FALSE);
+    res = regcomp(patterns[pattern].regexp, patterns[pattern].pattern,
+		  REG_EXTENDED | REG_ICASE);
+    if (res) {
+      printf(_("regexp error: %d\n"), res);
+      exit(1);
+    }
+    g_return_val_if_fail(res == 0, FALSE);    
+  }
+  
+  /* Utilisation de la regexp */
+  nb = (patterns[pattern].format) ? strlen(patterns[pattern].format) : 0;
+  match = malloc(sizeof(*match) * (nb + 1));
+  g_return_val_if_fail(match != NULL, FALSE);
+  res = regexec(patterns[pattern].regexp, str, nb + 1, match, 0);
+  if (res != 0) {
+    BLAHBLAH(1,fprintf(stderr, 
+		       _("The regexp [%s] doesn't match the string [%s]\n"),
+		       patterns[pattern].pattern, str));
+    free(match);
+    return FALSE;
+  }  
+  
+  /* R�cup�ration du r�sultat */
+  va_start(ap, pattern);
+  for (i = 0; patterns[pattern].format[i]; i++) {
+    
+    s = malloc(match[i + 1].rm_eo - match[i + 1].rm_so + 2);
+    g_return_val_if_fail(s != NULL, FALSE);
+    strncpy(s, str + match[i + 1].rm_so, match[i + 1].rm_eo - match[i + 1].rm_so + 1);
+    s[match[i + 1].rm_eo - match[i + 1].rm_so] = 0;
+    
+    switch (patterns[pattern].format[i]) {
+    case 'd':
+      ip = va_arg(ap, int *);
+      g_return_val_if_fail(ip != NULL, FALSE);
+      *ip = atoi(s);
+      free(s);
+      break;
+    case 's':
+      sp = va_arg(ap, char **);
+      g_return_val_if_fail(sp != NULL, FALSE);
+      *sp = s;
+      break;
+    default:
+      free(s);
+      g_return_val_if_reached(FALSE);
+    }
+  }
+  free(match);
+  va_end(ap);
+
+  return TRUE;
+}
+
diff --git a/src/regexp.h b/src/regexp.h
new file mode 100644
index 0000000..abf7b04
--- /dev/null
+++ b/src/regexp.h
@@ -0,0 +1,94 @@
+/*
+    wmCoinCoin, the stupidest WindowMaker dock applet
+    Copyright (C) 2001  Julien Pommier
+    This is file (C) 2001 Ga�l Le Mignot <kilobug at freesurf.fr>
+
+    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., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+
+*/
+/*
+  rcsid=$Id: regexp.h,v 1.8 2002/11/20 23:34:40 pouaite Exp $
+  ChangeLog:
+  $Log: regexp.h,v $
+  Revision 1.8  2002/11/20 23:34:40  pouaite
+  paf le patch, par lordOric
+
+  Revision 1.7  2002/10/15 23:17:28  pouaite
+  rustinage � la truelle
+
+  Revision 1.6  2002/08/18 20:52:15  pouaite
+  les locales des sites fonctionnent (c bon pour les news)
+
+  Revision 1.5  2002/03/03 10:10:04  pouaite
+  bugfixes divers et vari�s
+
+  Revision 1.4  2001/12/17 00:18:04  pouaite
+  changement du format du backend -> on utilise desormais le /backend.rdf
+
+  Revision 1.3  2001/12/03 13:49:10  pouaite
+  fix pour la compil sous cygwin
+
+  Revision 1.2  2001/12/02 18:24:16  pouaite
+  modif (virage) des regexp pour le texte des news, trop chiant � maintenir, du coup �a devrait marcher � nouveau sous bsd
+
+*/
+
+#ifndef COINCOIN_REGEXP_H
+#define COINCOIN_REGEXP_H
+
+#include <sys/types.h>
+#include <regex.h>
+#include <stdarg.h>
+#include "prefs.h"
+typedef enum { pat_xp, pat_votes, pat_xp_votes, pat_news, pat_news_no_sec } pat_type_t;
+
+typedef struct _patterns_t
+{
+  pat_type_t id;
+  const char *pattern;
+  regex_t *regexp;
+  const char *format;
+} patterns_t;
+
+#define NB_MAX_URL 512
+typedef struct _news_extract_t {
+  char *txt;
+  char *date;
+  char *auteur;
+  char *section;
+  int nb_url;
+  char *url_tab[NB_MAX_URL];
+  char *url_descr[NB_MAX_URL];
+} news_extract_t;
+
+/*
+** Format can be:
+**  d => decimal number (need int *)
+**  s => string (need char **)
+*/
+
+extern patterns_t patterns[];
+const char *site_locale_str(SitePrefs *sp, const char *s);
+int regexp_extract(const char *str, pat_type_t pattern, ...);
+
+/* et une fonction speciale qui n'utilise pas les regex.. */
+void extract_news_txt_dacode14(SitePrefs *sp, const char *s, news_extract_t *extr);
+void extract_news_txt_dacode2(SitePrefs *sp, const char *s, news_extract_t *extr);
+
+/* et deux fonctions � la con qui peuvent etre utiles */
+char *mystrndup(const char *s, int n);
+char *after_substr(const char *s, const char *substr);
+
+#endif
diff --git a/src/scrollcoin.c b/src/scrollcoin.c
new file mode 100644
index 0000000..58cbbc3
--- /dev/null
+++ b/src/scrollcoin.c
@@ -0,0 +1,430 @@
+#include "global.h"
+#include "scrollcoin.h"
+#include "coin_util.h"
+#include "coin_xutil.h"
+
+#include <libintl.h>
+#define _(String) gettext(String)
+
+
+RGBAContext *xctx;
+
+#define BT_H 10
+
+#define IS_IN_BTUP(sc,mx,my) (IS_INSIDE((mx),(my), \
+  				        sc->x, sc->y, \
+				        sc->x + SC_W - 1, sc->y + BT_H-1))
+#define IS_IN_BTDN(sc,mx,my) (IS_INSIDE(mx,my, \
+					sc->x, sc->y + sc->h - BT_H + 1, \
+					sc->x + SC_W - 1, sc->y + sc->h - 1))
+#define IS_IN_BAR(sc,mx,my) (IS_INSIDE(mx,my, \
+				       sc->x, sc->y + sc->pixel_pos, \
+				       sc->x + SC_W - 1, sc->y + sc->pixel_pos + sc->bar_sz - 1))
+
+struct _ScrollCoin {
+  int vmin, vmax;
+  int pos, pixel_pos;
+  int requested_pos;
+
+  int x,y,h;
+  int dragging, drag_pos0, drag_y0, drag_pixel_pos0;
+  int bar_sz;
+
+  Pixmap pix;
+
+  enum { BT_UP, BT_DOWN, BT_BAR, BT_NONE} bt_state; 
+
+  unsigned long scroll_bg_pixel;
+  unsigned long scroll_bg_light_pixel;
+  unsigned long scroll_bg_dark_pixel;
+  unsigned long scroll_arrow_normal_pixel;
+  unsigned long scroll_arrow_emphasized_pixel;
+  
+  unsigned long scroll_bar_pixel;
+  unsigned long scroll_bar_light_pixel;
+  unsigned long scroll_bar_dark_pixel;
+};
+
+
+
+static void
+scrollcoin_draw_btup(ScrollCoin *sc)
+{
+  int y0, y1;
+
+  y0 = 1; y1 = BT_H-1;
+  if (sc->bt_state != BT_UP) {
+    XSetForeground(xctx->dpy, xctx->copy_gc, sc->scroll_bg_light_pixel);
+    XDrawLine(xctx->dpy, sc->pix, xctx->copy_gc, 1, y0, SC_W-2, y0);  
+    XDrawLine(xctx->dpy, sc->pix, xctx->copy_gc, 1, y0, 1, y1);
+  } else {
+    XSetForeground(xctx->dpy, xctx->copy_gc, sc->scroll_bg_dark_pixel);
+    XFillRectangle(xctx->dpy, sc->pix, xctx->copy_gc, 1, y0, SC_W-2, BT_H-1);
+  }
+
+  if (sc->pos != sc->vmin) {
+    XSetForeground(xctx->dpy, xctx->copy_gc, sc->scroll_arrow_normal_pixel);
+  } else {
+    XSetForeground(xctx->dpy, xctx->copy_gc, sc->scroll_arrow_emphasized_pixel);
+  }
+  XDrawLine(xctx->dpy, sc->pix, xctx->copy_gc, 4, y0+3, 5, y0+3);
+  XDrawLine(xctx->dpy, sc->pix, xctx->copy_gc, 3, y0+4, 6, y0+4);
+  XDrawLine(xctx->dpy, sc->pix, xctx->copy_gc, 2, y0+5, 7, y0+5);
+}
+
+static void
+scrollcoin_draw_btdn(ScrollCoin *sc)
+{
+  int y0, y1;
+
+  y0 = sc->h - BT_H; y1 = sc->h-2;
+  if (sc->bt_state != BT_DOWN) {
+    XSetForeground(xctx->dpy, xctx->copy_gc, sc->scroll_bg_light_pixel);
+    XDrawLine(xctx->dpy, sc->pix, xctx->copy_gc, 1, y0, SC_W-2, y0);
+    XDrawLine(xctx->dpy, sc->pix, xctx->copy_gc, 1, y0, 1, y1);
+  } else {
+    XSetForeground(xctx->dpy, xctx->copy_gc, sc->scroll_bg_dark_pixel);
+    XFillRectangle(xctx->dpy, sc->pix, xctx->copy_gc, 1, y0, SC_W-2, BT_H-1);
+  }
+
+  if (sc->pos != sc->vmax) {
+    XSetForeground(xctx->dpy, xctx->copy_gc, sc->scroll_arrow_normal_pixel);
+  } else {
+    XSetForeground(xctx->dpy, xctx->copy_gc, sc->scroll_arrow_emphasized_pixel);
+  }
+  XDrawLine(xctx->dpy, sc->pix, xctx->copy_gc, 4, y1-3, 5, y1-3);
+  XDrawLine(xctx->dpy, sc->pix, xctx->copy_gc, 3, y1-4, 6, y1-4);
+  XDrawLine(xctx->dpy, sc->pix, xctx->copy_gc, 2, y1-5, 7, y1-5);
+}
+
+static void
+scrollcoin_draw_bar(ScrollCoin *sc)
+{
+  int by0,by1;
+
+  if (sc->h < 2*BT_H+4) return;
+
+  by0 = sc->pixel_pos; by1 = by0 + sc->bar_sz -1;
+
+  XSetForeground(xctx->dpy, xctx->copy_gc, sc->scroll_bg_dark_pixel);
+  XFillRectangle(xctx->dpy, sc->pix, xctx->copy_gc, 0, 0, SC_W, sc->h);
+
+  XSetForeground(xctx->dpy, xctx->copy_gc, sc->scroll_bg_pixel);
+  XFillRectangle(xctx->dpy, sc->pix, xctx->copy_gc, 1, 1, SC_W-2, sc->h-2);
+  
+  /* lignes sombres au-dessus et en dessous des deux boutons */
+  XSetForeground(xctx->dpy, xctx->copy_gc, sc->scroll_bg_dark_pixel);
+  XDrawLine(xctx->dpy, sc->pix, xctx->copy_gc, 1, BT_H, SC_W-2, BT_H);  
+  XDrawLine(xctx->dpy, sc->pix, xctx->copy_gc, 1, sc->h - BT_H-1, SC_W-2, sc->h - BT_H-1);
+
+
+  XSetForeground(xctx->dpy, xctx->copy_gc, sc->scroll_bar_dark_pixel);
+  XDrawRectangle(xctx->dpy, sc->pix, xctx->copy_gc, 0, by0, SC_W, sc->bar_sz);
+
+  XSetForeground(xctx->dpy, xctx->copy_gc, sc->scroll_bar_light_pixel);
+  XDrawLine(xctx->dpy, sc->pix, xctx->copy_gc, 1, by0+1, SC_W-2, by0+1);  
+  XDrawLine(xctx->dpy, sc->pix, xctx->copy_gc, 1, by0+1, 1, by1);
+
+  XSetForeground(xctx->dpy, xctx->copy_gc, sc->scroll_bar_pixel);
+  XFillRectangle(xctx->dpy, sc->pix, xctx->copy_gc, 2, by0+2, SC_W-3, sc->bar_sz-2);
+}
+
+static void
+scrollcoin_draw(ScrollCoin *sc)
+{
+  scrollcoin_draw_bar(sc);
+  scrollcoin_draw_btup(sc);
+  scrollcoin_draw_btdn(sc);  
+}
+
+void
+scrollcoin_update_pixmap(ScrollCoin *sc)
+{
+  assert(sc);
+  assert(sc->h > 0);
+  if (sc->pix != None) { XFreePixmap(xctx->dpy, sc->pix); sc->pix = None; }
+  
+  sc->pix = XCreatePixmap(xctx->dpy, xctx->drawable, SC_W, sc->h, xctx->depth); 
+  assert(sc->pix != None);
+
+  scrollcoin_draw(sc);
+}
+
+
+static void
+scrollcoin_compute_bar_size(ScrollCoin *sc) {
+  int npos;
+
+  sc->bar_sz = -1;
+
+  if (sc->vmin > sc->vmax) { return;}
+  assert(sc->pos >= sc->vmin && sc->pos <= sc->vmax);
+
+  npos = sc->vmax - sc->vmin + 1;
+  sc->bar_sz = MAX((sc->h - 2*BT_H - 1) / npos,30);
+  /*  printf("bar_sz <- %d\n",sc->bar_sz); */
+}
+
+static void
+scrollcoin_compute_pixel_pos(ScrollCoin *sc, int pos) {
+  int npos;
+  int nxpos;
+  assert(sc->bar_sz > 1);
+
+  nxpos = (sc->h - sc->bar_sz - 2*BT_H);
+  npos = sc->vmax - sc->vmin + 1;
+  
+  if (pos != sc->vmax) {
+    sc->pixel_pos = (int)(0.5+(((float)(pos - sc->vmin))/npos * nxpos)) + BT_H;
+  } else {
+    sc->pixel_pos = sc->h - BT_H - sc->bar_sz - 1;
+  }
+  
+
+  /*  printf("pos=%d, vmin=%d, vmax=%d, nxpos = %d, pixel_pos = %d\n",
+      pos, sc->vmin, sc->vmax, nxpos, sc->pixel_pos);*/
+}
+
+void
+scrollcoin_set_pos(ScrollCoin *sc, int pos)
+{
+  assert(sc);
+  assert(sc->vmin <= sc->vmax);
+  sc->pos = MIN(MAX(pos, sc->vmin), sc->vmax);
+}
+
+
+/* fonctions publiques */
+
+void
+scrollcoin_build(RGBAContext *rgbactx)
+{
+  xctx = rgbactx;
+}
+
+#define GET_BICOLOR(x) (opaque_color ? _IRGB2PIXEL(xctx, x.transp) : _IRGB2PIXEL(xctx, x.opaque))
+void
+scrollcoin_change_colors(ScrollCoin *sc, int opaque_color) {
+  sc->scroll_bg_pixel               = GET_BICOLOR(Prefs.sc_bg_color);
+  sc->scroll_bg_light_pixel         = GET_BICOLOR(Prefs.sc_bg_light_color);
+  sc->scroll_bg_dark_pixel          = GET_BICOLOR(Prefs.sc_bg_dark_color);
+  sc->scroll_arrow_normal_pixel     = GET_BICOLOR(Prefs.sc_arrow_normal_color);
+  sc->scroll_arrow_emphasized_pixel = GET_BICOLOR(Prefs.sc_arrow_emphasized_color);
+  
+  sc->scroll_bar_pixel              = GET_BICOLOR(Prefs.sc_bar_color);
+  sc->scroll_bar_light_pixel        = GET_BICOLOR(Prefs.sc_bar_light_color);
+  sc->scroll_bar_dark_pixel         = GET_BICOLOR(Prefs.sc_bar_dark_color);
+}
+
+
+ScrollCoin *
+scrollcoin_create(int vmin, int vmax, int pos, 
+		  int x, int y, int h, int opaque_color) {
+  ScrollCoin *sc;
+
+  ALLOC_OBJ(sc, ScrollCoin);
+  
+  sc->x = x;
+  sc->y = y;
+  sc->h = h;
+
+  sc->bt_state = BT_NONE;
+  sc->dragging = 0;
+
+  sc->pix = None;
+  sc->requested_pos = sc->pos;
+
+  scrollcoin_change_colors(sc, opaque_color);
+
+  scrollcoin_setbounds(sc, vmin, vmax);
+  scrollcoin_setpos(sc, pos);
+
+  scrollcoin_update_pixmap(sc);
+  return sc;
+}
+
+void
+scrollcoin_destroy(ScrollCoin *sc)
+{
+  if (sc->pix != None) { XFreePixmap(xctx->dpy, sc->pix); sc->pix = None; }
+  free(sc);
+}
+
+void
+scrollcoin_refresh(ScrollCoin *sc, Drawable d, int force_redraw)
+{
+  
+  if (force_redraw) { scrollcoin_draw(sc); }
+  XCopyArea(xctx->dpy, sc->pix, d, xctx->copy_gc, 0, 0, SC_W, sc->h, sc->x, sc->y);
+}
+
+void
+scrollcoin_setpos(ScrollCoin *sc, int new_pos)
+{
+  if (!(new_pos >= sc->vmin && new_pos <= sc->vmax)) {
+    BLAHBLAH(2,printf(_("setpos out of bounds: %d min=%d, mx=%d\n"), new_pos, sc->vmin, sc->vmax));
+  }
+  new_pos = MIN(MAX(new_pos, sc->vmin),sc->vmax);
+  if (sc->pos != new_pos) {
+    sc->pos = new_pos;
+    sc->requested_pos = new_pos;
+  }
+  if (sc->dragging == 0) {
+    scrollcoin_compute_bar_size(sc);
+    scrollcoin_compute_pixel_pos(sc, sc->pos);
+  }
+}
+
+int scrollcoin_get_vmax(const ScrollCoin *sc) { return sc->vmax; }
+int scrollcoin_get_vmin(const ScrollCoin *sc) { return sc->vmin; }
+
+/* renvoie zero si la position n'a pas �t� chang�e */
+int
+scrollcoin_read_requested_pos(ScrollCoin *sc, int *pos) 
+{
+  *pos = sc->requested_pos;
+  if (sc->pos != sc->requested_pos) {
+    return 1;
+  } else return 0;
+}
+
+void
+scrollcoin_setbounds(ScrollCoin *sc, int vmin, int vmax)
+{
+  if (vmin > vmax) vmin = vmax;
+  sc->vmin = vmin; sc->vmax = vmax;
+  if (sc->pos < vmin) scrollcoin_setpos(sc, vmin);
+  if (sc->pos > vmax) scrollcoin_setpos(sc, vmax);
+  scrollcoin_compute_bar_size(sc);
+  scrollcoin_compute_pixel_pos(sc, sc->pos);
+  scrollcoin_update_pixmap(sc);
+}
+
+
+void
+scrollcoin_resize(ScrollCoin *sc, int x, int y, int h)
+{
+  int old_h;
+  sc->x = x; sc->y = y; old_h = sc->h; sc->h = h;
+  if (h != old_h) {
+    scrollcoin_update_pixmap(sc);
+  }
+}
+
+int
+scrollcoin_handle_button_press(ScrollCoin *sc, XButtonEvent *ev, Drawable d)
+{
+  int mx, my;
+
+  mx = ev->x;
+  my = ev->y;
+  /*  printf("clic %d %d (%d,%d,%d,%d)\n",mx,my,sc->x, sc->y, SC_W, sc->h); */
+  if (mx >= sc->x && mx <= sc->x + SC_W -1 &&
+      my >= sc->y && my <= sc->y + sc->h-1) {
+    if (ev->button == Button1 || ev->button == Button2 || ev->button == Button3) {
+      if (IS_IN_BTUP(sc,mx,my) && sc->pos != sc->vmin) {
+	sc->bt_state = BT_UP; 
+      } else if (IS_IN_BTDN(sc,mx,my) && sc->pos != sc->vmax) {
+	sc->bt_state = BT_DOWN;
+      } else if (IS_IN_BAR(sc,mx,my)) {
+	sc->bt_state = BT_BAR;
+	sc->drag_pos0 = sc->pos; 
+	sc->drag_y0 = my; 
+	sc->drag_pixel_pos0 = sc->pixel_pos;
+	sc->dragging = 1;
+      }
+      scrollcoin_refresh(sc, d, 1);
+    }
+    return 1;
+  } else { 
+    return 0; 
+  }
+}
+
+int
+scrollcoin_handle_button_release(ScrollCoin *sc, XButtonEvent *ev, Drawable d)
+{
+  int mx, my;
+
+  mx = ev->x;
+  my = ev->y;
+  if ((mx >= sc->x && mx <= sc->x + SC_W -1 &&
+       my >= sc->y && my <= sc->y + sc->h-1) || sc->bt_state != BT_NONE) {
+    if (sc->dragging == 0) {
+      if (IS_IN_BTUP(sc,mx,my) && sc->bt_state == BT_UP) {
+	if (ev->button == Button1) {
+	  sc->requested_pos = MAX(sc->pos - 1, sc->vmin);
+	} else if (ev->button == Button2) {
+	  sc->requested_pos = MAX(sc->pos - 10, sc->vmin);
+	} else if (ev->button == Button3) {
+	  sc->requested_pos = sc->vmin;
+	} 
+      } else if (IS_IN_BTDN(sc,mx,my) && sc->bt_state == BT_DOWN) {
+	if (ev->button == Button1) {
+	  sc->requested_pos = MIN(sc->pos + 1, sc->vmax);
+	} else if (ev->button == Button2) {
+	  sc->requested_pos = MIN(sc->pos + 10, sc->vmax);
+	} else if (ev->button == Button3) {
+	  sc->requested_pos = sc->vmax;
+	} 
+      } else if (!IS_IN_BAR(sc,mx,my)) {
+	int q = (my < sc->y + sc->pixel_pos) ? -1 : +1;
+	if (ev->button == Button1) {
+	  sc->requested_pos = MAX(MIN(sc->pos + 10*q, sc->vmax), sc->vmin);
+	} else if (ev->button == Button2) {
+	  sc->requested_pos = ((my-sc->y) * (sc->vmax - sc->vmin))/(sc->h-2*BT_H) + sc->vmin;
+	  sc->requested_pos = MAX(MIN(sc->requested_pos, sc->vmax), sc->vmin);	  
+	}
+      }
+    }
+    if (sc->bt_state != BT_NONE) {
+      sc->bt_state = BT_NONE;
+    }
+    scrollcoin_refresh(sc, d, 1);
+    sc->dragging = 0;
+    return 1;
+  } else { 
+    sc->dragging = 0;
+    return 0; 
+  }
+}
+
+int
+scrollcoin_handle_motion(ScrollCoin *sc, XMotionEvent *ev, Drawable d)
+{
+  int mx, my;
+
+  mx = ev->x;
+  my = ev->y;
+  if (sc->dragging && (ev->state & Button1Mask)) {
+    int decal;
+    int pix_pos, pos, marge;
+    float coef;
+
+    decal = (my - sc->drag_y0);
+    pix_pos = sc->drag_pixel_pos0 + decal;
+    marge = sc->h - 2*BT_H - sc->bar_sz - 1;
+
+    if (marge <= 0) return 1;
+
+    pix_pos = MAX(pix_pos, BT_H);
+    pix_pos = MIN(pix_pos, BT_H + marge);
+
+    coef = ((float)pix_pos - BT_H)/(marge);
+    pos = (int)(coef * (sc->vmax - sc->vmin) + sc->vmin);
+
+    /*    printf("coef=%f , rmarge = %d, sc->y = %d, marge=%d pos=%d\n", coef, pix_pos - sc->y - BT_H, sc->y, marge, pos); */
+
+    if (pos != sc->pos) {
+      /*      printf("scrollcoin_handle_motion: requested_pos <- %d\n", pos); */
+      sc->requested_pos = pos;
+    }
+    if (pix_pos != sc->pixel_pos) {
+      sc->pixel_pos = pix_pos;
+      scrollcoin_refresh(sc, d, 2);
+    }
+    return 1;
+  } else {
+    return 0;
+  }
+}
diff --git a/src/scrollcoin.h b/src/scrollcoin.h
new file mode 100644
index 0000000..d01c8d3
--- /dev/null
+++ b/src/scrollcoin.h
@@ -0,0 +1,24 @@
+#ifndef __SCROLLCOIN_H
+#define __SCROLLCOIN_H
+
+#include "raster.h"
+
+#define SC_W 10
+
+typedef struct _ScrollCoin ScrollCoin;
+
+void scrollcoin_build(RGBAContext *rgbactx);
+void scrollcoin_change_colors(ScrollCoin *sc, int opaque_color);
+ScrollCoin *scrollcoin_create(int vmin, int vmax, int pos, int x, int y, int h, int opaque_color);
+void scrollcoin_destroy(ScrollCoin *sc);
+void scrollcoin_refresh(ScrollCoin *sc, Drawable d, int force);
+int scrollcoin_get_vmax(const ScrollCoin *sc);
+int scrollcoin_get_vmin(const ScrollCoin *sc);
+void scrollcoin_setpos(ScrollCoin *sc, int new_pos);
+int scrollcoin_read_requested_pos(ScrollCoin *sc, int *pos);
+void scrollcoin_resize(ScrollCoin *sc, int xpos, int ypos, int h);
+void scrollcoin_setbounds(ScrollCoin *sc, int vmin, int vmax);
+int scrollcoin_handle_button_press(ScrollCoin *sc, XButtonEvent *ev, Drawable d);
+int scrollcoin_handle_button_release(ScrollCoin *sc, XButtonEvent *ev, Drawable d);
+int scrollcoin_handle_motion(ScrollCoin *sc, XMotionEvent *ev, Drawable d);
+#endif
diff --git a/src/site.c b/src/site.c
new file mode 100644
index 0000000..a2edcd7
--- /dev/null
+++ b/src/site.c
@@ -0,0 +1,294 @@
+#include <limits.h>
+#include "coincoin.h"
+#include "site.h"
+
+static void
+sl_build_site_names_hash(SiteList *sl)
+{
+  Site *site;
+  int cnt;
+  Boards *bds = sl->boards; 
+
+  if (bds->aliases) free(bds->aliases);
+  bds->nb_aliases = 0;
+  for (site = sl->list; site; site = site->next) {
+    bds->nb_aliases += site->prefs->nb_names;    
+  }
+  if (bds->nb_aliases == 0) {
+    bds->aliases = NULL;
+    return;
+  } 
+  ALLOC_VEC(bds->aliases, bds->nb_aliases, SiteNameHash);
+  
+  cnt = 0;
+  for (site = sl->list; site; site = site->next) {
+    int i;
+    for (i=0; i < site->prefs->nb_names; i++) {
+      bds->aliases[cnt].hash = str_hache_nocase(site->prefs->all_names[i], 
+					       strlen(site->prefs->all_names[i]));
+      bds->aliases[cnt].sid = site->site_id;
+      cnt ++;
+    }
+  }
+  assert(cnt == bds->nb_aliases);
+}
+
+void
+boards_init_sites(SiteList *slist) {
+  Site *s;
+  int i;
+  for (i=0; i < MAX_SITES; i++)
+    slist->boards->btab[i] = NULL;
+  for (s = slist->list; s; s=s->next) {
+    slist->boards->btab[s->site_id] = s->board;
+  }
+  sl_build_site_names_hash(slist);
+}
+
+static Boards *
+boards_create() {
+  Boards *b;
+  ALLOC_OBJ(b, Boards);
+  b->first = NULL;
+  b->last = NULL;
+  b->nb_rss_e = 0; b->max_rss_e = 10; ALLOC_VEC(b->rss_e, b->max_rss_e, RSSBonusInfo*);
+  return b;
+}
+
+void
+boards_destroy(Boards *b) {
+  free(b);
+}
+
+
+
+/* init de la liste de sites */
+SiteList *
+sl_create() {
+  SiteList *sl;
+  int i;
+  ALLOC_OBJ(sl, SiteList);
+  sl->boards = boards_create(sl);
+  sl->list = NULL;
+  for (i = 0; i < MAX_SITES; i++) {
+    if (Prefs.site[i]) {
+      sl_insert_new_site(sl, Prefs.site[i]);
+    }
+  }
+  boards_init_sites(sl);
+  return sl;
+}
+
+static void
+sl_set_site_id(Site *site)
+{
+  int i;
+  i = 0;
+  while (i < MAX_SITES && Prefs.site[i] != site->prefs) {
+    i++;
+  }
+  assert(i < MAX_SITES); /* or you can shoot yourself in the nose */
+  site->site_id = i;
+}
+
+/* insertion d'un nouveau site */
+void
+sl_insert_new_site(SiteList *sl, SitePrefs *sp)
+{
+  Site *site, *pp;
+
+  ALLOC_OBJ(site, Site);
+  site->prefs = sp;
+
+  SplittedURL su;
+  assert(split_url(sp->backend_url, &su) == 0);
+  if (sp->backend_type != BACKEND_TYPE_POP) {
+    site->relative_urls_base = strdup(sp->backend_url);
+    url_au_coiffeur(site->relative_urls_base, 1); /* vire le nom du backend */
+    //printf("%s -> relative_urls_base : %s\n", sp->backend_url, site->relative_urls_base);
+  } else site->relative_urls_base = strdup("invalid://");
+  
+
+  if (sp->check_board) site->board = board_create(site, sl->boards);
+  else site->board = NULL;
+
+  site->site_id = -1;
+  site->http_error_cnt = site->http_success_cnt = site->http_recent_error_cnt = 0;;
+  {
+    int i;
+    for (i=0; i < NB_HTTP_PING_STAT; ++i) site->http_ping_stat_buf[i] = -1.;
+    site->http_ping_stat_i = 0;
+    site->http_ping_stat = -1.0;
+  }
+
+  sl_set_site_id(site);
+ 
+  /* inserts at end of list */
+  pp = sl->list; while (pp && pp->next) pp = pp->next;
+  if (pp) pp->next = site; else sl->list = site;
+
+  boards_init_sites(sl);
+}
+
+/* suppression d'un site */
+void
+sl_delete_site(SiteList *sl, Site *site)
+{
+  Site *p, *pp;
+
+  p = sl->list; pp = NULL;
+  while (p && p != site) { pp = p; p = p->next; }
+  assert(p);
+  p = p->next;
+  if (pp) {
+    pp->next = p;
+  } else {
+    sl->list = p;
+  }
+  if (site->board) board_destroy(site->board);
+  if (site->relative_urls_base) free(site->relative_urls_base);
+  free(site);
+  boards_init_sites(sl);
+}
+
+Site*
+sl_find_site_by_name(SiteList *sl, char *site_name)
+{
+  Site *p;
+  p = sl->list;
+  while (p && strcmp(site_name, p->prefs->site_name)) {
+    p = p->next;
+  }
+  return p;
+}
+
+
+Site*
+sl_find_site_id(SiteList *sl, int sid) {
+  Site *s;
+  s = sl->list;
+  while (s) {
+    if (s->site_id == sid) return s;
+    s = s->next;
+  }
+  return NULL;
+}
+
+#if 0
+News*
+sl_find_news(SiteList *sl, id_type id) {
+  Site *s;
+
+  s = sl_find_site_id(sl, id_type_sid(id));
+  if (s) {
+    return site_news_find_id(s, id);
+  }
+  return NULL;
+}
+
+News*
+sl_get_nth_unreaded_news(SiteList *sl, int i)
+{
+  Site *s;
+  int cnt = 0;
+  for (s = sl->list; s; s = s->next) {
+    News *n;    
+    for (n = s->news; n; n = n->next) {
+      if (site_newslues_find(s, id_type_lid(n->id)) == 0) {
+	cnt++;
+        if (cnt == i) return n;
+      }
+    }
+  }
+  return NULL;
+}
+
+/*
+  renvoi un site dont le xp ont chang�
+*/
+Site*
+sl_find_xp_change(SiteList *sl) {
+  Site *s;
+  s = sl->list;
+  while (s) {
+    if (s->xp_change_flag && s->prefs->user_cookie && s->prefs->check_comments) 
+      return s;
+    s = s->next;
+  }
+  return NULL;
+}
+
+/*
+  renvoi un site dont le comment_change_flag est activ�
+*/
+Site*
+sl_find_comment_change(SiteList *sl) {
+  Site *s;
+  s = sl->list;
+  while (s) {
+    if (s->comment_change_flag && s->prefs->user_cookie && s->prefs->check_comments) 
+      return s;
+    s = s->next;
+  }
+  return NULL;
+}
+Message*
+sl_find_unreaded_msg(SiteList *sl)
+{
+  Site *s;
+  for (s = sl->list; s; s = s->next) {
+    Message *m;
+    if ((m = site_msg_find_unreaded(s)))
+      return m;
+  }
+  return NULL;
+}
+
+Comment *
+sl_find_modified_comment(SiteList *sl)
+{
+  Site *s;
+  for (s = sl->list; s; s = s->next) {
+    Comment *c;
+    if ((c = site_yc_find_modified(s)))
+      return c;
+  }
+  return NULL;
+}
+
+
+#endif
+
+/*
+  renvoi un site sur la tribune duquel vous venez d'avoir une r�ponse � 
+  votre message � combien interessant
+*/
+Site*
+sl_find_board_answer_to_me(SiteList *sl) {
+  Site *s;
+  s = sl->list;
+  while (s) {
+    if (s->prefs->check_board) {
+      assert(s->board);
+      if (s->board->flag_answer_to_me)
+	return s;
+    }
+    s = s->next;
+  }
+  return NULL;
+}
+ 
+void 
+site_save_state(Dock *dock UNUSED, FILE *f, Site *site) {
+  assert(f);
+  if (site->board) {
+    board_save_state(f, site->board);
+  }
+}
+
+void 
+site_restore_state(Dock *dock UNUSED, FILE *f, Site *site) {
+  if (site->board) {
+    board_restore_state(f,site->board);
+  }
+}
diff --git a/src/site.h b/src/site.h
new file mode 100644
index 0000000..c605f5c
--- /dev/null
+++ b/src/site.h
@@ -0,0 +1,16 @@
+#ifndef _SITE_H
+#define _SITE_H
+#include "coincoin.h"
+
+/* fonctions qui agissent sur une liste de sites (sl = site_list) */
+void     boards_init_sites(SiteList *slist);
+
+SiteList * sl_create();
+void       sl_insert_new_site(SiteList *sl, SitePrefs *sp);
+void       sl_delete_site(SiteList *sl, Site *site);
+Site *     sl_find_site_by_name(SiteList *sl, char *site_name);
+Site *     sl_find_site_id(SiteList *sl, int sid);
+Site *     sl_find_board_answer_to_me(SiteList *sl);
+void site_save_state(Dock *dock, FILE *f, Site *site);
+void site_restore_state(Dock *dock, FILE *f, Site *site);
+#endif
diff --git a/src/spell_coin.c b/src/spell_coin.c
new file mode 100644
index 0000000..46b7e12
--- /dev/null
+++ b/src/spell_coin.c
@@ -0,0 +1,448 @@
+/*
+    wmCoinCoin, the stupidest WindowMaker dock applet
+    This file is Copyright (C) 2001  fpy & pouaite & poolpy
+
+    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., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+
+
+ */
+/*
+  rcsid=$Id: spell_coin.c,v 1.17 2004/04/28 22:19:00 pouaite Exp $
+  ChangeLog:
+  $Log: spell_coin.c,v $
+  Revision 1.17  2004/04/28 22:19:00  pouaite
+  bugfixes dae + des trucs que j'ai oublie
+
+  Revision 1.16  2003/06/09 16:42:29  pouaite
+  pan pan
+
+  Revision 1.15  2003/03/01 17:31:22  pouaite
+  compat ipv6 a tester
+
+  Revision 1.14  2002/08/31 21:26:46  pouaite
+  ajout du wmccc
+
+  Revision 1.13  2002/08/29 00:15:53  pouaite
+  cosm�tique et capillotraction
+
+  Revision 1.12  2002/06/23 10:44:05  pouaite
+  i18n-isation of the coincoin(kwakkwak), thanks to the incredible jjb !
+
+  Revision 1.11  2002/04/01 01:39:38  pouaite
+  grosse grosse commition (cf changelog)
+
+  Revision 1.10  2002/02/24 22:13:57  pouaite
+  modifs pour la v2.3.5 (selection, scrollcoin, plopification, bugfixes)
+
+  Revision 1.9  2002/02/06 21:34:17  pouaite
+  coin coin
+
+  Revision 1.8  2001/12/16 20:28:45  pouaite
+  bugfixes divers
+
+  Revision 1.7  2001/12/16 01:43:33  pouaite
+  patch de fpy (pb des clignotements)
+
+  Revision 1.6  2001/12/03 08:20:59  pouaite
+  remplacement du GRUIKesque vfork par un honnete fork (damned!)
+
+  Revision 1.5  2001/12/02 19:04:42  pouaite
+  suppression de messages de debug...
+
+  Revision 1.4  2001/12/02 18:11:45  pouaite
+  am�lioration du support de ispell (moins de pb de ralentissement du palmipede) au prix d'un vilain hack
+
+*/
+
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <ctype.h>
+#include <string.h>
+#include <time.h>
+#include <unistd.h>
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <signal.h>
+
+#include <libintl.h>
+#define _(String) gettext (String)
+
+#include "global.h"
+#include "coin_util.h"
+#include "myprintf.h"
+#include "spell_coin.h"
+
+/* c'est pas bien de foutre des variables globales au fichier ici mais... */
+int ispell_pid = -1; /* remplace is_ispell_running */
+int ispell_stdin, ispell_stdout;
+time_t ispell_time_last_used = 0;
+
+/*
+  Libere une ErrList de la memoire (c francais ca?)
+ */
+void freeErrList(ErrList l)
+{
+  ErrList tmp;
+  unsigned i;
+  while( l!=NULL ) {
+    tmp = l;
+    l = tmp->next;
+    free(tmp->original);
+    if( tmp->proposals!=NULL ) {
+      for(i=0 ; i<tmp->proposals_size; ++i)
+	free(tmp->proposals[i]);
+      free(tmp->proposals);
+    }
+    free(tmp);
+  }
+}
+
+
+/*
+  prepare une chaine de caractere a etre traite par ispell
+ */
+char* convert4Spell(const unsigned char* str)
+{
+  unsigned char *buff, *s;
+  int lastspace = 1;
+
+  buff = malloc(strlen(str)+2); strcpy(buff, str); 
+  s = buff;
+  while (*s) {
+    if (lastspace && is_url(s) != -1 ) {
+      for(; s[1] && s[1]>=' '; ++s)
+	*s = ' '; 
+      lastspace = 0;
+    } else if (*s <= ' ') {
+      lastspace = 1; 
+      *s = ' ';
+    } else lastspace = 0;
+    s++;
+  }
+  strcat(buff, "\n");
+  //  BLAHBLAH(1, myprintf("conver4spell: s='%<GRN %s>'\n", res));
+  return buff;
+}
+
+/*
+  Lance la commande 'spell_cmd -d spell_dict -a' avec des pipes 
+  d'entree/sortie associes
+*/
+int
+launch_ispell(const char *spell_cmd, const char* spell_dict)
+{
+  int tube_stdin[2];
+  int tube_stdout[2];
+  int spell_pid;
+  static time_t time_last_fork = 0, now;
+  static int launched_last_time = 1;
+
+  assert(ispell_pid == -1);
+  now = time(NULL);
+  if (difftime(now, time_last_fork) < 30 && time_last_fork) {
+    static int cnt = 0;
+    if (launched_last_time == 1) {
+      cnt ++;
+      printf("[%d] mmmmhh ispell a dej� �t� lanc� il y a %d secondes, on va attendre un peu\n"
+	     "(si ce message se r�p�te, vous avez un pb avec ispell, genre mauvais dictionnaire..)\n", cnt,
+	     (int)difftime(now, time_last_fork));
+      if (cnt > 80) {
+	myprintf("%<MAG BON CA SUFFIT MAINTENANT>!\n spell-check d�sactiv�\n");
+	Prefs.ew_do_spell = 0;
+      }
+      launched_last_time = 0;
+    }
+    return -1; /* petite capote � ispells mal configur�s (dico inexistant..) */
+  }
+  time_last_fork = now;
+  launched_last_time = 1;
+  /* tout ceci a �t� pomp�e de mni�re �hont�e dans 'prog syst en c sous linux'..*/
+  if (pipe(tube_stdin)) {
+    return -1;
+  }
+  if (pipe(tube_stdout)) { /* rhhhoooo :-( */
+    close(tube_stdin[0]); close(tube_stdin[1]);
+    return -1;
+  }
+  /* Attention je suis co**llu je suis un male ... je prends des risques
+     je fait un vfork (Vous les petits jeunes regardez pas ca c'est MAL(tm)
+
+     UPDATE: vfork c'est trop GRUIK pour moi :) --sign� pouaite
+  */
+  switch ( spell_pid = fork() ) {
+  case -1: /* arrrrg */
+    {
+      fprintf(stderr, _("Fork failed...(%s)\n"), strerror(errno));
+      close(tube_stdin[0]); close(tube_stdin[1]);
+      close(tube_stdout[0]); close(tube_stdout[1]);	
+      return -1;
+    } break;
+  case 0: /* fiston (ispell) */
+    {
+      int retExec;
+
+      close(tube_stdin[1]); /* bouchage des tuyau */
+      close(tube_stdout[0]);
+      dup2(tube_stdin[0], STDIN_FILENO);
+      dup2(tube_stdout[1], STDOUT_FILENO);
+
+      /* Je suis toujours co**llu et je fait un execlp ... enfin la c'est
+	 petit joueur (le execle serait plus rapide ... on lui donne un
+	 env allege)mais j'ai peur de faire une couffe
+       */
+      retExec = execlp(spell_cmd, spell_cmd, "-d", spell_dict, "-a", NULL, 
+		       NULL);
+      if( retExec==-1 ) {
+	fprintf(stderr, _("Exec failed...(%s)\n"), strerror(errno));
+      }
+      close(tube_stdin[0]);
+      close(tube_stdout[1]);
+      exit(retExec);
+    } break;
+  default: /* p�pa (wmcc) */
+    {
+      close(tube_stdin[0]); /* bouchage des autres extermit�s des tuyaux */
+      close(tube_stdout[1]);
+      ispell_stdin = tube_stdin[1];
+      ispell_stdout = tube_stdout[0];
+      ispell_time_last_used = time(NULL);
+      ispell_pid = spell_pid;
+    } break;
+  }
+  return 0;
+}
+
+int
+is_ispell_ready(const char* spell_cmd, const char* spell_dict)
+{
+  if (ispell_pid!=-1) {
+    return 1;
+  } else {
+    return (launch_ispell(spell_cmd, spell_dict) == 0 ? 1 : 0);
+  }
+}
+
+void
+kill_ispell()
+{
+  int spell_pid = ispell_pid, ret;
+  ispell_pid = -1;
+  BLAHBLAH(1,printf("kill ispell(%d)\n", spell_pid));
+  close(ispell_stdin);
+  close(ispell_stdout); /* et paf ! */
+  waitpid(spell_pid, &ret, 0); /* On attends la reponse ca elimine les zombies :) */
+}
+
+/* appel�e r�guli�rement par X_loop */
+int
+check_if_should_kill_ispell(int now) 
+{
+  if (ispell_pid!=-1) {
+    if (difftime(time(NULL), ispell_time_last_used) > 10.0 || now) { /* au bout de 10 secondes, on lib�re ispell.. */
+      kill_ispell();
+    }
+  }
+  return 0;
+}
+
+static ErrList current_errlist = NULL;
+static unsigned char *current_spell_string = NULL;
+
+ErrList spellString(const char* str)
+{
+  static unsigned char *requested_spell_string = NULL;
+
+  if (!flag_spell_request) {
+
+    requested_spell_string = convert4Spell(str);
+    if( current_spell_string && strcmp(requested_spell_string, current_spell_string)==0) {
+      /* Si la nouvelle chaine est comme l'ancienne on ne fait rien
+      */
+      free(requested_spell_string);
+    } else {    
+      /* Sinon on relance ispell */
+      if( current_spell_string )
+	free(current_spell_string);
+      current_spell_string = requested_spell_string; 
+      flag_spell_request = 1;
+    }
+  }
+  /* dans tout les cas on renvoie les anciennes erreurs
+     ca peut merder un peu sur la correction mais ca peut aller
+     le relancement de ispell_run_background corrigera tout
+  */
+  return current_errlist;
+}
+
+void
+ispell_run_background(const char* spellCmd, const char* spellDict)
+{
+  ErrList new_errlist = NULL, tmp;
+  ErrList *end_of_ret = &new_errlist;
+  
+  int save_errno; /* comme cette fonction est susceptible d'etre appelee depuis http.c,
+		     il ne faut pas qu'elle modifie errno !
+		  */
+  
+  save_errno = errno;
+  if (flag_spell_request == 0) return;
+  if (flag_spell_finished) return; /* car sinon on serait susceptible d'appeller la fonction du dessus dans un 
+				      environnement multitache (et donc on accederait a errlist etc..) 
+				      
+				      update: �a n'a plus aucun interet, coincoin n'est pas du tout thread�, m�me plus sous cygwin
+				   */
+  
+
+  /* reinitailise le passe de cette fonction 
+     Ben non en fait c pour ca que coincoin il clignotte 
+     on va d'abord calculer et ensuite on swappera 
+     
+     freeErrList(current_errlist);
+     current_errlist = NULL;
+  */
+
+  /* lancement de ispell */
+
+  BLAHBLAH(2 ,myprintf("running %<RED %s -d  %s -a>\n", 
+		       spellCmd, spellDict));
+
+  if (!is_ispell_ready(spellCmd, spellDict) ) {
+    errno = save_errno;
+    return;
+  } else {
+    char buff[1024];
+    unsigned char *s;
+
+    /*      free(spellSh);*/
+
+    s = current_spell_string;
+    /* envoie la chaine � ispell */
+    BLAHBLAH(2,printf(_("We send '%s' to ispell\n"), s));
+    while (*s) {
+      if (write(ispell_stdin, s, 1) != 1) {
+	printf(_("Error, '%s' was still to send to ispell...\n"), s);
+	break; /* ajouter plus tard la gestion des erreurs retryables */
+      }
+      s++;
+      ALLOW_X_LOOP;
+    }
+    //printf("apres ecriture: %s\n", strerror(errno));
+    do {
+      int i, got;
+      char c;
+
+      /* lecture de la ligne comme un gros boeuf */
+      i = 0; buff[0] = 0;
+      while (i < (int)(sizeof buff) - 1) {
+	do {
+	  got = read(ispell_stdout, &c, 1);
+	  ALLOW_X_LOOP;
+	} while (got <= 0 && errno == EINTR);
+	/* fprintf(stderr, "errno = %d '%s'\n", errno, strerror(errno));  */
+	if (c != '\n' && (errno == 0 || errno == EINTR)) {
+	  
+	  buff[i] = c;
+	} else {
+	  buff[i] = 0;
+	  break;
+	}
+	i++;
+      }
+      buff[i] = 0;
+
+      BLAHBLAH(2, myprintf(_("ISPELL answered: '%<MAG %s>' (err=%s)\n"), buff, strerror(errno)));
+      switch( buff[0] ) {
+      case 0:
+	break;
+      case SpellComment:
+      case SpellOK:
+      case SpellRoot:
+      case SpellCompound:
+	/* on passe a la ligne suivante */
+	break;
+      case SpellMiss:
+      case SpellGuess:
+      case SpellNone:
+	/* Super!!!! ispell a trouve une faute ... 
+	   il est bon ce ispell !(?) */
+	tmp = (ErrList)malloc(sizeof(struct spell_err));
+	tmp->next = NULL;
+
+	/* on saute les espaces */
+	s = buff+1;
+	while (*s == ' ' && *s) s++;
+	  
+	/* recherche du mot original */
+	i = 0;
+	while (s[i] > ' ') i++;
+	tmp->original = malloc(i+1);
+	strncpy(tmp->original, s, i); tmp->original[i] = 0;
+
+	s += i;
+	if( buff[0]!=SpellNone ) {
+	  sscanf(s, "%d %d", &tmp->proposals_size,&tmp->offset);
+	} else {
+	  sscanf(s, "%d", &tmp->offset);
+	}
+	/* pour l'instant je recupere pas les propositions */
+	tmp->proposals_size = 0;
+	tmp->proposals = NULL;
+	*end_of_ret = tmp;
+	end_of_ret = &(tmp->next);
+	break;
+      case '(': /* '(#) International Ispell Version 3.1.20 10/10/95, patch 1'  etc.. bug ? pas bug ? */
+        printf("%s\n", buff);
+	//printf("mouaaaaif vas-y dis-moi des mots bleus\n");
+	break;
+      default:
+	/* Qu'est ce que je fout ici moi ?
+	   NOTE peut etre que je devrais en tenir compte au cas
+	   ou le pgm (ki n'est pas ispell) a des retours en +?
+	   (keskil renvoit aspell au fait? ... regarder son man
+	   sur une machine qui a ce truc)
+	*/
+	fprintf(stderr, _("spellString: unknown option \'0x%02x\'\n"), buff[0]); fflush(stderr);
+	fprintf(stderr, _("The complete answer was: '%.512s'\n"), buff);
+	fprintf(stderr, _("With great leniency, wmcoincoin will let ispell alive, just to see what happens. Don't even think of suiciding the coincoin : THE SHOW MUST GO ON\n"));
+	//	kill_ispell(); /* je veux pas d'un ispell tout patraque */
+
+
+	/*
+	  <pouaite> �a ARRIVE PARFOIS .. !? (�a vient tout juste de m'arriver..)
+	   il faudra trouver pourquoi et g�rer autrement que par le suicide..
+	*/
+
+	//	assert(0);     /* voila une triste fin */
+      }
+    } while (buff[0]);
+  }
+  ispell_time_last_used = time(NULL); /* hop ! */
+  /* renvoie la liste des fautes 
+   */
+  flag_spell_finished = 4;  /* y'a un petit delai entre la fin de la correction et 
+			      son affichage, c'est juste pour �viter un clignotement trop
+			      chiant quand on tape
+			      -> on decremente progressivement flag_spell_finished dans X_loop
+			    */
+  tmp = current_errlist;
+  current_errlist = new_errlist;
+  freeErrList(tmp);
+  flag_spell_request = 0;
+  errno = save_errno;
+}
+
+
diff --git a/src/spell_coin.h b/src/spell_coin.h
new file mode 100644
index 0000000..b9ad4d9
--- /dev/null
+++ b/src/spell_coin.h
@@ -0,0 +1,49 @@
+/*
+  rcsid=$Id: spell_coin.h,v 1.4 2002/04/01 01:39:38 pouaite Exp $
+  ChangeLog:
+  $Log: spell_coin.h,v $
+  Revision 1.4  2002/04/01 01:39:38  pouaite
+  grosse grosse commition (cf changelog)
+
+  Revision 1.3  2001/12/02 18:11:45  pouaite
+  am�lioration du support de ispell (moins de pb de ralentissement du palmipede) au prix d'un vilain hack
+
+*/
+#ifndef _spell_coin_H
+#define _spell_coin_H
+
+typedef struct spell_err *ErrList;
+
+typedef enum {
+  SpellComment = '@',
+  SpellOK = '*',        /* Pas de fautes */
+  SpellRoot = '+',      /* Indique la racine */
+  SpellCompound = '-',  /* Le mot est un concatenation de 2 autres*/
+  SpellMiss = '&',      /* Mot non trouve avec des solutions */
+  SpellGuess = '?',     /* Mot non trouve avec des solutions  
+			   [prefix+] root [-prefix] [-suffix] [+suffix] */
+  SpellNone = '#'       /* Mot non trouve sans solution */
+} SpellErrType;
+
+struct spell_err {
+  char* original;   /* Le fameux mot plain de fautes */
+  unsigned offset;  /* Sa position dans la phrase */
+  unsigned proposals_size; /* Nombre de propositions */
+  char** proposals; /* Contiendra les propositions de correction 
+		       Mais pas encore implemente
+		     */
+  ErrList next;
+};
+
+
+ErrList spellString(const char* str);
+/* 
+   pseudo-tache de fond ispell (appellee depuis Network_Thread dans wmcoincoin.c,
+   mais aussi depuis certaines zones d'attente de http.c pour eviter de temporiser ispell 
+   quand un transfert se traine un peu (c'est vraiment du multitache de gros naze :)
+*/
+void ispell_run_background(const char* spellCmd, const char* spellDict);
+
+/* appele de X_loop de wmcoincoin.c, pour tuer le process quand il est reste inutilis� trop longtemps (10sec) */
+int check_if_should_kill_ispell(int now);
+#endif
diff --git a/src/swallowcoincoin.c b/src/swallowcoincoin.c
new file mode 100644
index 0000000..9e58d18
--- /dev/null
+++ b/src/swallowcoincoin.c
@@ -0,0 +1,105 @@
+#include "coincoin.h"
+#include "coin_xutil.h"
+#include "pinnipede.h"
+#include "fontcoincoin.h"
+
+Window sw_hostwin(Dock *dock) {
+  if (Prefs.auto_swallow)
+    return dock->pp_win;
+  else {
+    assert(dock->pinnipede);
+    return dock->pinnipede->win;
+  }    
+}
+
+SwallowedApp * sw_swallow_win_id(Dock *dock, Window wid) {
+  Window ew = sw_hostwin(dock);
+  SwallowedApp *sa;
+  ALLOC_OBJ(sa, SwallowedApp);
+  sa->winx = sa->winy = 0;
+  sa->framex = sa->framey = sa->framew = sa->frameh = 0;
+  sa->win = wid;
+  get_window_dimensions(dock->display, wid, &sa->winw, &sa->winh);
+  sa->name = NULL; //name_of_window(wid);
+  XReparentWindow(dock->display, wid, ew, 0, 0);
+  XMapWindow(dock->display,wid);
+  sa->next = dock->swallow->apps;
+  dock->swallow->apps = sa;
+  dock->swallow->nb_swallowed++;
+  if (wid == DOCK_WIN(dock)) dock->swallow->self = sa;
+  BLAHBLAH(1,printf("swallowed win %8x dimensions %dx%d\n", (int)wid, sa->winw, sa->winh));
+  dock->swallow->layout_dirty = 1;
+  return sa;
+}
+
+void sw_layout_dockapps(Dock *dock, int x0, int y0, int x1, int y1) {
+  //Window ew = sw_hostwin(dock);
+  SwallowCoincoin *sw = dock->swallow;;
+  SwallowedApp *sa;
+  int y = y1, yspacing = 2, count = 0;
+  if (sw->x0 != x0 || sw->x1 != x1 || sw->y0 != y0 || sw->y1 != y1 || sw->layout_dirty) {
+    sw->layout_dirty = 0;
+    sw->x0 = x0; sw->x1 = x1; sw->y0 = y0; sw->y1 = y1;
+    for (sa = sw->apps; sa; sa = sa->next, ++count) {
+      int nexty = y - (sa->winh);
+      if (nexty >= y0) y = nexty; else break;
+    }
+    if (count) {
+      if (y != y0) 
+        yspacing = (y1-y0+1) / ((y - y0) * count);
+      else yspacing = 0;
+      
+      y = y0 + MIN((x1-x0-64)/2, (y1-y0-64)/2);
+      //y = y1;
+      for (sa = sw->apps; sa; sa = sa->next) {
+        sa->framex = x0;
+        sa->framey = y; //- yspacing - sa->winh;
+        sa->framew = x1 - x0 + 1;
+        sa->frameh = sa->winh + yspacing;
+        sa->winx = x0 + (sa->framew - sa->winw)/2;
+        sa->winy = sa->framey + yspacing/2;
+        XMoveWindow(dock->display, sa->win, sa->winx, sa->winy);
+        //y -= sa->frameh;
+        y += sa->frameh;
+      }
+    }
+  }
+}
+
+void sw_redraw(Dock *dock) {
+  SwallowCoincoin *sw = dock->swallow;;
+  Window ew = sw_hostwin(dock);
+  Pinnipede *pp = dock->pinnipede;
+  if (pp_ismapped(dock) && pp->use_minibar && pp->tabs_pos == PPT_LEFT && sw->y1 >= sw->y0) {
+    XSetForeground(dock->display, dock->NormalGC, cccolor_pixel(dock->pinnipede->minib_color));
+    XFillRectangle(dock->display, ew, dock->NormalGC, sw->x0, sw->y0, 
+                   sw->x1 - sw->x0, sw->y1 - sw->y0 + 1);
+    XSetForeground(dock->display, dock->NormalGC, cccolor_pixel(dock->pinnipede->minib_dark_color));
+    XDrawLine(dock->display, ew, dock->NormalGC, sw->x1, sw->y0, sw->x1, sw->y1);
+  }
+}
+
+
+/* sluuuuuuuuuuuuuuuuuuurp */
+void
+swallower_autoswallow(Dock *dock) {
+  dock->swallow->self = sw_swallow_win_id(dock, DOCK_WIN(dock));
+}
+
+int
+swallower_is_autoswallowed(Dock *dock) {
+  return dock->swallow->self != NULL;
+}
+
+void
+swallower_init(Dock *dock) {
+  SwallowCoincoin *sw;
+  ALLOC_OBJ(dock->swallow, SwallowCoincoin);
+  sw = dock->swallow;
+  sw->hostwin = dock->pp_win;
+  sw->x0 = sw->x1 = 0;
+  sw->y0 = sw->y1 = 0;
+  sw->nb_swallowed = 0; sw->apps = NULL;
+  sw->layout_dirty = 0;
+  sw->self = NULL;
+}
diff --git a/src/totoz_bookmark.c b/src/totoz_bookmark.c
new file mode 100644
index 0000000..0997847
--- /dev/null
+++ b/src/totoz_bookmark.c
@@ -0,0 +1,169 @@
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include "coincoin.h" 
+
+const char *totoz_bookmark_filename() {
+  static char *fname = NULL;
+  if (fname == NULL) {
+    fname = str_printf("%s/.wmcoincoin/totoz/bookmarks.txt", getenv("HOME"));
+  }
+  return fname;
+}
+const char *totoz_bookmark_url_html() {
+  static char *fname = NULL;
+  if (fname == NULL) {
+    fname = str_printf("file://%s/.wmcoincoin/totoz/bookmarks.html", getenv("HOME"));
+  }
+  return fname;
+}
+
+static const char *totoz_bookmark_filename_html() {
+  static char *fname = NULL;
+  if (fname == NULL) {
+    fname = str_printf("%s/.wmcoincoin/totoz/bookmarks.html", getenv("HOME"));
+  }
+  return fname;
+}
+
+TotozBookmarkItem* totoz_bookmark_search(Dock *dock, const char *name) {
+  TotozBookmark *bm = dock->totoz_bm;
+  TotozBookmarkItem *bi = bm->first;
+  while (bi) {
+    if (strcmp(name, bi->name) == 0) break;
+    bi = bi->next;
+  }
+  return bi;
+}
+
+TotozBookmarkItem*
+totoz_bookmark_insert(Dock *dock, const char *name) {
+  TotozBookmark *bm = dock->totoz_bm;
+  TotozBookmarkItem *bi = totoz_bookmark_search(dock, name);
+  if (bi) {
+    bi->popularity++;
+  } else {
+    ALLOC_OBJ(bi, TotozBookmarkItem);
+    bi->name = strdup(name); bi->popularity = 0;
+    bi->next = bm->first; bm->first = bi;
+  }
+  return bi;
+}
+
+static void
+totoz_bookmark_destroy(Dock *dock) {
+  TotozBookmark *bm = dock->totoz_bm;
+  if (bm) {
+    TotozBookmarkItem *bi, *bin;
+    for (bi = bm->first; bi; bi = bin) {
+      bin = bi->next; if (bi->name) free(bi->name);
+      free(bi);
+    }
+    free(bm);
+    dock->totoz_bm=NULL;
+  }
+}
+
+static void 
+totoz_bookmark_append_file(Dock *dock, const char *fname) {
+  FILE *f = fopen(fname,"r");
+  char line[512];
+  if (!f) return;
+  while (fgets(line, sizeof(line), f)) {
+    char *p;
+    int pop;
+    TotozBookmarkItem *bi;
+    str_trim(line);
+    if (line[0] == '#' || strlen(line) == 0) continue;
+   
+    pop = 0;
+    p = strrchr(line, ']'); 
+    if (p == NULL || p == line
+        || strncmp(line,"[:",2) || p - line < 3) {
+      printf("wrong totoz in '%s' here: '%s'\n", fname, line); continue;
+    }
+    if (p[1]) { sscanf(p+1, "%d",&pop); p[1] = 0; }
+    bi = totoz_bookmark_insert(dock, line);
+    bi->popularity = MAX(bi->popularity, pop);
+  }
+  fclose(f);
+}
+
+void
+totoz_bookmark_load(Dock *dock) {
+  struct stat st;
+  stat(totoz_bookmark_filename(), &st);
+  
+  totoz_bookmark_destroy(dock);
+  ALLOC_OBJ(dock->totoz_bm, TotozBookmark);
+  dock->totoz_bm->first = NULL; 
+  dock->totoz_bm->last_modif = st.st_mtime;
+  totoz_bookmark_append_file(dock, totoz_bookmark_filename());
+}
+
+void totoz_bookmark_save(Dock *dock, int merge_first) {
+  TotozBookmark *bm = dock->totoz_bm;
+  TotozBookmarkItem *bi;
+  FILE *f;
+  struct stat st;
+  stat(totoz_bookmark_filename(), &st);
+
+  if (st.st_mtime != bm->last_modif && merge_first) {
+    /* au cas ou le fichier a �t� edit� par ailleurs, on merge
+       aux bookmarks */
+    totoz_bookmark_append_file(dock, totoz_bookmark_filename()); 
+  }
+  f = fopen(totoz_bookmark_filename(),"w");
+  if (!f) { 
+    fprintf(stderr, "could not write to %s : %s\n", totoz_bookmark_filename(), strerror(errno)); 
+    return;
+  }
+  fprintf(f, "# picture bookmark for wmcoincoin\n");
+  fprintf(f, "# you can edit manually this file, or use the pinnipede to add new entries\n");
+  for (bi = bm->first; bi; bi = bi->next) {
+    fprintf(f, "%s %d\n", bi->name, bi->popularity);
+  }
+  fclose(f);
+}
+
+void totoz_bookmark_save_html(Dock *dock) {
+  TotozBookmark *bm = dock->totoz_bm;
+  TotozBookmarkItem *bi;
+  FILE *f;
+  f = fopen(totoz_bookmark_filename_html(),"w");
+  if (!f) return;
+  fprintf(f, 
+          "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">"
+          "<html>\n"
+          "<head>\n"
+          " <title>Totoz Bookmarks</title>"
+          " <meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-15\">"
+          " <style type=\"text/css\" title=\"Page default\">\n"
+          "  body {background-color:#eee;color: black; font-size: .6em; }\n"
+          "  .thumbs {}\n"
+          "  .thumbs li {list-style:none; float: left; margin: 1em; border:1px solid #aaa; background-color: white;width:13%%;min-height:3em;text-align:center;padding-top:0.25em; padding-bottom:0.25em;}\n"
+          "  .thumbs li a {text-decoration:none;}\n"
+          "  .thumbs li a:hover {text-decoration:underline;color:red}\n"
+          "  .thumbs li a img {border: none;padding:0.1em;padding-right:0.2em;}\n"
+          " </style>\n"
+          "</head>\n"
+          "<body>\n");
+  fprintf(f, "<h2>Source file for these bookmarks: <a href=\"file://%s\">~/.wmcoincoin/totoz/bookmarks.txt</a></h2>\n",
+          totoz_bookmark_filename());
+  fprintf(f, "<div class=\"thumbs\">\n <ul>\n");
+  
+  for (bi = bm->first; bi; bi = bi->next) {
+    assert(strlen(bi->name)>3); /* ben oui, [:dkskj] */
+    char *realfname = pp_totoz_realfname(bi->name,0); assert(realfname);
+    char *browserfname = str_substitute(realfname, "%", "%25"); /* ah ben oui sinon le browser il interprete les % ... */
+    char *teufname = str_ndup(bi->name+2, strlen(bi->name)-3);
+    fprintf(f, "  <li><a href=\"http://totoz.eu/%s.gif\"><img src=\"%s.gif\" alt=\"%s\"></a>%s</li>\n", 
+            teufname, browserfname, bi->name, bi->name);
+    free(teufname); free(browserfname); free(realfname);
+  }
+  fprintf(f, " </ul>\n</div>\n");
+  fprintf(f, "</body>\n</html>");
+  fclose(f);
+}
+
+
diff --git a/src/troll_data.h b/src/troll_data.h
new file mode 100644
index 0000000..b20d100
--- /dev/null
+++ b/src/troll_data.h
@@ -0,0 +1,623 @@
+struct troll_data troll_data[] = {
+  {CVINT(198,217,47,57), 0, 0, 1, 0, 0, 0, 0, 0, 0},
+  {CVINT(219,203,79,137), 0, 0, 2, 0, 1, 0, 0, 0, 0},
+  {CVINT(181,205,63,97), 0, 0, 2, 0, 1, 0, 0, 0, 0},
+  {CVINT(190,193,15,185), 0, 0, 2, 0, 0, 0, 0, 0, 0},
+  {CVINT(178,9,83,57), 0, 0, 2, 0, 0, 0, 0, 0, 0},
+  {CVINT(218,249,15,18), 0, 1, 3, 0, 0, 2, 0, 0, 0},
+  {CVINT(218,249,154,18), 0, 1, 3, 0, 0, 2, 0, 0, 0},
+  {CVINT(170,7,202,58), 0, 1, 3, 0, 1, 2, 0, 0, 0},
+  {CVINT(205,237,146,170), 0, 1, 3, 0, 1, 2, 0, 0, 0},
+  {CVINT(207,205,35,33), 0, 0, 3, 0, 1, 0, 0, 0, 0},
+  {CVINT(198,205,83,177), 0, 0, 3, 0, 1, 0, 0, 0, 0},
+  {CVINT(198,217,83,57), 0, 0, 3, 0, 1, 0, 0, 0, 0},
+  {CVINT(216,249,87,57), 1, 0, 84, 0, 2, 84, 3, 0, 0},
+  {CVINT(162,193,19,129), 0, 0, 84, 0, 0, 0, 0, 0, 0},
+  {CVINT(170,249,123,105), 1, 0, 5, 0, 3, 3, 2, 0, 0},
+  {CVINT(170,249,123,147), 1, 0, 5, 0, 4, 3, 2, 0, 0},
+  {CVINT(216,249,98,243), 1, 0, 5, 4, 4, 3, 2, 0, 0},
+  {CVINT(219,249,123,18), 1, 0, 5, 3, 3, 3, 2, 0, 0},
+  {CVINT(219,249,98,243), 1, 0, 5, 4, 4, 3, 2, 0, 0},
+  {CVINT(216,249,23,73), 1, 0, 5, 4, 2, 3, 2, 0, 0},
+  {CVINT(216,249,23,57), 1, 0, 5, 0, 3, 3, 2, 0, 0},
+  {CVINT(216,249,123,18), 1, 0, 5, 3, 2, 3, 2, 0, 0},
+  {CVINT(184,31,79,113), 1, 0, 5, 6, 2, 3, 2, 0, 0},
+  {CVINT(217,249,43,57), 1, 0, 5, 4, 1, 3, 2, 0, 0},
+  {CVINT(217,249,43,139), 1, 0, 5, 4, 2, 0, 0, 0, 0},
+  {CVINT(171,115,123,147), 1, 0, 5, 0, 3, 0, 0, 0, 0},
+  {CVINT(171,205,123,105), 1, 0, 5, 0, 2, 0, 0, 0, 0},
+  {CVINT(217,205,98,243), 1, 0, 5, 4, 3, 3, 2, 0, 0},
+  {CVINT(217,115,98,243), 1, 0, 5, 4, 3, 3, 2, 0, 0},
+  {CVINT(197,209,115,57), 1, 0, 5, 0, 1, 0, 0, 0, 0},
+  {CVINT(178,205,79,129), 0, 0, 5, 5, 0, 0, 0, 0, 0},
+  {CVINT(219,249,154,18), 0, 0, 5, 0, 0, 0, 0, 0, 0},
+  {CVINT(219,249,15,18), 0, 0, 5, 3, 1, 0, 0, 0, 0},
+  {CVINT(216,209,91,185), 0, 0, 5, 0, 4, 84, 3, 0, 0},
+  {CVINT(198,217,83,49), 0, 0, 5, 4, 0, 0, 0, 0, 0},
+  {CVINT(170,209,79,1), 0, 0, 5, 5, 1, 0, 0, 0, 0},
+  {CVINT(197,249,43,18), 0, 0, 5, 0, 0, 0, 0, 0, 0},
+  {CVINT(197,249,43,113), 0, 0, 5, 4, 1, 0, 0, 0, 0},
+  {CVINT(176,217,35,57), 1, 0, 5, 5, 3, 0, 0, 0, 0},
+  {CVINT(197,217,79,135), 1, 0, 5, 0, 3, 0, 0, 0, 0},
+  {CVINT(160,217,79,97), 1, 0, 5, 5, 3, 0, 0, 0, 0},
+  {CVINT(214,59,130,74), 0, 0, 5, 0, 0, 3, 1, 0, 0},
+  {CVINT(167,3,130,161), 0, 0, 5, 0, 0, 3, 1, 0, 0},
+  {CVINT(219,193,83,57), 0, 0, 5, 0, 0, 3, 1, 0, 0},
+  {CVINT(207,19,234,226), 0, 0, 5, 0, 0, 3, 1, 0, 0},
+  {CVINT(201,193,15,97), 0, 0, 5, 0, 0, 3, 1, 6, 2},
+  {CVINT(198,209,43,18), 0, 0, 5, 0, 0, 3, 1, 6, 2},
+  {CVINT(201,205,35,18), 0, 0, 5, 0, 0, 3, 1, 0, 0},
+  {CVINT(172,205,79,137), 1, 0, 5, 5, 1, 0, 0, 0, 0},
+  {CVINT(173,195,39,137), 0, 1, 5, 0, 0, 1, 0, 0, 0},
+  {CVINT(181,49,11,25), 0, 0, 5, 6, 1, 0, 0, 0, 0},
+  {CVINT(180,49,31,1), 0, 0, 5, 0, 0, 3, 3, 0, 0},
+  {CVINT(188,249,7,41), 0, 0, 5, 5, 0, 0, 0, 0, 0},
+  {CVINT(223,201,154,18), 0, 0, 6, 0, 0, 0, 0, 0, 0},
+  {CVINT(221,247,31,89), 0, 0, 7, 0, 0, 0, 0, 0, 0},
+  {CVINT(190,51,15,57), 0, 0, 8, 6, 0, 0, 0, 0, 0},
+  {CVINT(221,247,47,137), 1, 0, 9, 0, 4, 10, 3, 23, 4},
+  {CVINT(198,219,55,18), 1, 0, 10, 0, 0, 5, 1, 0, 0},
+  {CVINT(198,219,67,18), 1, 0, 10, 0, 0, 5, 1, 0, 0},
+  {CVINT(180,19,142,26), 1, 0, 10, 8, 0, 5, 1, 0, 0},
+  {CVINT(180,3,250,49), 1, 0, 10, 7, 0, 5, 1, 0, 0},
+  {CVINT(167,15,198,49), 1, 0, 10, 0, 5, 5, 2, 10, 5},
+  {CVINT(180,27,254,26), 1, 0, 10, 0, 8, 5, 2, 10, 5},
+  {CVINT(180,11,138,58), 1, 0, 10, 0, 8, 5, 2, 10, 5},
+  {CVINT(174,5,19,89), 1, 0, 10, 6, 0, 5, 1, 0, 0},
+  {CVINT(170,61,79,97), 1, 0, 10, 6, 0, 5, 1, 0, 0},
+  {CVINT(174,17,198,185), 1, 0, 10, 7, 0, 5, 1, 0, 0},
+  {CVINT(165,205,39,49), 1, 0, 10, 0, 0, 5, 1, 0, 0},
+  {CVINT(175,19,75,25), 1, 0, 10, 0, 0, 5, 3, 0, 0},
+  {CVINT(216,193,11,18), 1, 0, 10, 0, 0, 5, 3, 0, 0},
+  {CVINT(173,41,39,73), 1, 0, 10, 0, 0, 5, 3, 0, 0},
+  {CVINT(163,7,35,177), 1, 0, 10, 0, 1, 5, 3, 0, 0},
+  {CVINT(189,209,83,41), 1, 0, 10, 0, 0, 5, 3, 0, 0},
+  {CVINT(206,251,23,81), 1, 0, 10, 0, 0, 5, 3, 0, 0},
+  {CVINT(184,49,11,81), 1, 0, 10, 0, 0, 5, 1, 0, 0},
+  {CVINT(217,195,154,18), 1, 0, 10, 0, 0, 5, 1, 0, 0},
+  {CVINT(171,27,202,9), 1, 0, 10, 0, 2, 5, 4, 10, 4},
+  {CVINT(166,19,246,1), 1, 0, 10, 7, 7, 5, 2, 10, 5},
+  {CVINT(173,53,174,49), 1, 0, 10, 0, 5, 5, 1, 0, 0},
+  {CVINT(216,213,39,18), 1, 0, 10, 0, 7, 5, 4, 10, 2},
+  {CVINT(179,203,31,9), 1, 0, 10, 5, 2, 5, 2, 10, 1},
+  {CVINT(171,249,35,105), 1, 0, 10, 0, 0, 5, 1, 0, 0},
+  {CVINT(199,223,87,18), 1, 0, 10, 0, 2, 5, 0, 0, 0},
+  {CVINT(170,31,230,25), 1, 0, 10, 0, 0, 5, 1, 0, 0},
+  {CVINT(199,9,238,226), 1, 0, 10, 0, 3, 5, 1, 0, 0},
+  {CVINT(222,207,63,209), 1, 1, 10, 0, 0, 7, 1, 0, 0},
+  {CVINT(195,243,79,209), 1, 0, 10, 0, 0, 5, 1, 0, 0},
+  {CVINT(221,201,87,18), 1, 0, 10, 0, 2, 5, 1, 0, 0},
+  {CVINT(216,249,115,57), 1, 0, 10, 0, 1, 5, 1, 0, 0},
+  {CVINT(216,249,87,57), 1, 0, 10, 0, 1, 5, 1, 0, 0},
+  {CVINT(164,205,83,57), 1, 0, 10, 0, 1, 5, 1, 0, 0},
+  {CVINT(201,245,11,18), 1, 0, 10, 0, 1, 5, 2, 10, 1},
+  {CVINT(175,17,158,57), 1, 0, 10, 0, 1, 5, 2, 10, 1},
+  {CVINT(166,21,158,97), 1, 0, 10, 0, 1, 5, 2, 10, 1},
+  {CVINT(182,17,75,1), 1, 0, 10, 0, 1, 5, 2, 10, 1},
+  {CVINT(195,249,83,49), 1, 0, 10, 4, 3, 5, 0, 0, 0},
+  {CVINT(201,217,39,137), 1, 0, 10, 0, 4, 10, 1, 11, 1},
+  {CVINT(166,57,178,250), 1, 0, 10, 0, 3, 5, 1, 11, 2},
+  {CVINT(190,193,35,89), 1, 0, 10, 0, 4, 5, 2, 0, 0},
+  {CVINT(178,29,47,89), 1, 0, 10, 0, 2, 8, 2, 0, 0},
+  {CVINT(171,201,63,41), 1, 0, 11, 0, 4, 11, 4, 0, 0},
+  {CVINT(171,23,242,41), 1, 0, 11, 0, 4, 11, 4, 0, 0},
+  {CVINT(163,251,31,129), 1, 0, 11, 0, 4, 11, 4, 0, 0},
+  {CVINT(200,127,74,18), 1, 0, 11, 0, 4, 11, 4, 0, 0},
+  {CVINT(202,247,39,137), 1, 0, 11, 0, 4, 11, 4, 0, 0},
+  {CVINT(174,19,158,145), 1, 0, 11, 0, 4, 11, 4, 0, 0},
+  {CVINT(163,23,230,177), 0, 0, 12, 0, 0, 0, 0, 0, 0},
+  {CVINT(175,19,47,105), 0, 0, 12, 0, 0, 0, 0, 0, 0},
+  {CVINT(191,59,146,129), 0, 0, 12, 0, 0, 0, 0, 0, 0},
+  {CVINT(144,233,7,161), 0, 0, 12, 0, 0, 0, 0, 0, 0},
+  {CVINT(207,217,19,18), 1, 0, 13, 0, 0, 5, 0, 13, 2},
+  {CVINT(217,243,47,18), 1, 0, 13, 0, 0, 5, 0, 13, 2},
+  {CVINT(173,57,154,123), 1, 0, 13, 0, 0, 12, 3, 13, 1},
+  {CVINT(183,247,91,121), 1, 0, 13, 0, 0, 5, 0, 13, 2},
+  {CVINT(223,221,115,18), 1, 0, 13, 0, 0, 5, 0, 13, 2},
+  {CVINT(202,243,75,18), 0, 0, 13, 0, 0, 0, 0, 0, 0},
+  {CVINT(190,25,218,114), 0, 0, 13, 0, 0, 0, 0, 0, 0},
+  {CVINT(172,209,35,49), 0, 0, 14, 0, 0, 0, 0, 0, 0},
+  {CVINT(207,217,154,18), 1, 1, 15, 0, 0, 14, 0, 23, 2},
+  {CVINT(190,37,174,194), 0, 0, 16, 8, 0, 0, 0, 0, 0},
+  {CVINT(193,217,31,97), 0, 0, 27, 0, 0, 0, 0, 0, 0},
+  {CVINT(204,247,39,137), 0, 0, 18, 0, 0, 0, 0, 0, 0},
+  {CVINT(174,27,35,9), 0, 0, 19, 0, 0, 0, 0, 0, 0},
+  {CVINT(198,217,83,57), 0, 0, 20, 0, 0, 0, 0, 0, 0},
+  {CVINT(166,195,63,57), 0, 0, 21, 0, 0, 20, 4, 0, 0},
+  {CVINT(191,203,75,129), 0, 0, 22, 0, 0, 5, 3, 0, 0},
+  {CVINT(170,3,178,57), 0, 0, 22, 7, 0, 0, 0, 0, 0},
+  {CVINT(179,247,39,113), 1, 0, 23, 5, 1, 23, 2, 0, 0},
+  {CVINT(200,205,63,97), 1, 0, 23, 0, 1, 23, 2, 0, 0},
+  {CVINT(175,213,39,89), 1, 0, 23, 0, 1, 23, 2, 0, 0},
+  {CVINT(200,115,94,97), 1, 0, 23, 0, 1, 23, 2, 0, 0},
+  {CVINT(200,205,94,97), 1, 0, 23, 0, 1, 23, 2, 0, 0},
+  {CVINT(200,115,63,97), 1, 0, 23, 0, 1, 23, 2, 0, 0},
+  {CVINT(175,247,39,185), 1, 0, 23, 0, 1, 23, 2, 0, 0},
+  {CVINT(165,33,39,185), 1, 0, 23, 0, 1, 23, 2, 0, 0},
+  {CVINT(219,203,39,145), 1, 0, 23, 0, 1, 23, 2, 0, 0},
+  {CVINT(200,205,75,18), 1, 0, 23, 0, 1, 23, 2, 0, 0},
+  {CVINT(201,205,75,18), 1, 0, 23, 0, 1, 23, 2, 0, 0},
+  {CVINT(166,7,91,89), 1, 0, 23, 0, 1, 23, 2, 0, 0},
+  {CVINT(194,119,19,145), 1, 0, 23, 0, 6, 23, 2, 0, 0},
+  {CVINT(162,207,23,185), 1, 0, 23, 5, 1, 21, 8, 23, 2},
+  {CVINT(181,205,11,105), 1, 0, 23, 5, 1, 23, 2, 0, 0},
+  {CVINT(201,193,75,57), 1, 0, 23, 0, 1, 23, 2, 0, 0},
+  {CVINT(219,205,63,113), 1, 0, 23, 4, 1, 23, 2, 0, 0},
+  {CVINT(200,209,23,25), 1, 0, 23, 0, 1, 0, 0, 0, 0},
+  {CVINT(171,203,63,177), 1, 0, 23, 0, 1, 23, 2, 0, 0},
+  {CVINT(199,217,15,177), 1, 0, 23, 4, 1, 23, 2, 0, 0},
+  {CVINT(199,117,86,177), 1, 0, 23, 4, 1, 23, 2, 0, 0},
+  {CVINT(175,203,86,139), 1, 0, 23, 5, 1, 23, 2, 0, 0},
+  {CVINT(181,117,19,139), 1, 0, 23, 5, 1, 23, 2, 0, 0},
+  {CVINT(169,195,86,179), 1, 0, 23, 0, 2, 0, 0, 0, 0},
+  {CVINT(189,155,239,2), 1, 0, 23, 0, 3, 0, 0, 0, 0},
+  {CVINT(189,37,146,2), 1, 0, 23, 0, 2, 0, 0, 0, 0},
+  {CVINT(177,123,123,147), 1, 0, 23, 5, 2, 0, 0, 0, 0},
+  {CVINT(177,209,123,105), 1, 0, 23, 5, 2, 0, 0, 0, 0},
+  {CVINT(190,193,75,89), 0, 0, 23, 0, 0, 0, 0, 0, 0},
+  {CVINT(168,193,43,113), 1, 0, 23, 0, 1, 23, 1, 0, 0},
+  {CVINT(191,19,182,202), 1, 0, 23, 8, 1, 5, 0, 0, 0},
+  {CVINT(180,35,246,146), 1, 0, 23, 0, 1, 0, 0, 0, 0},
+  {CVINT(211,225,246,154), 1, 0, 23, 0, 2, 0, 0, 0, 0},
+  {CVINT(164,21,218,89), 1, 0, 23, 7, 1, 23, 2, 19, 2},
+  {CVINT(187,1,154,242), 1, 0, 23, 8, 0, 23, 2, 0, 0},
+  {CVINT(200,205,35,137), 1, 0, 23, 0, 0, 18, 2, 0, 0},
+  {CVINT(200,205,35,18), 1, 0, 23, 0, 0, 18, 2, 0, 0},
+  {CVINT(169,41,178,97), 1, 0, 23, 7, 1, 23, 2, 0, 0},
+  {CVINT(171,57,206,57), 1, 0, 23, 7, 1, 23, 1, 0, 0},
+  {CVINT(176,9,3,89), 1, 0, 23, 6, 1, 23, 1, 0, 0},
+  {CVINT(182,15,178,33), 1, 0, 23, 7, 1, 23, 1, 0, 0},
+  {CVINT(165,1,226,74), 1, 0, 23, 0, 1, 23, 2, 0, 0},
+  {CVINT(204,247,15,161), 1, 0, 23, 4, 1, 23, 2, 0, 0},
+  {CVINT(186,195,63,57), 1, 0, 23, 0, 0, 23, 2, 0, 0},
+  {CVINT(147,105,39,18), 1, 0, 23, 0, 1, 23, 2, 0, 0},
+  {CVINT(166,209,83,57), 1, 0, 23, 0, 1, 23, 2, 0, 0},
+  {CVINT(175,243,63,177), 1, 0, 23, 5, 4, 5, 3, 0, 0},
+  {CVINT(191,7,31,177), 1, 0, 23, 0, 4, 0, 0, 0, 0},
+  {CVINT(192,193,55,105), 1, 0, 23, 4, 1, 23, 1, 0, 0},
+  {CVINT(202,245,67,18), 1, 0, 23, 0, 3, 23, 1, 76, 4},
+  {CVINT(181,209,47,57), 1, 0, 23, 5, 1, 5, 3, 0, 0},
+  {CVINT(181,123,47,139), 1, 0, 23, 5, 1, 5, 2, 0, 0},
+  {CVINT(243,195,74,121), 1, 0, 23, 5, 1, 5, 2, 0, 0},
+  {CVINT(194,243,39,177), 1, 0, 23, 0, 1, 0, 0, 0, 0},
+  {CVINT(209,217,19,146), 1, 0, 23, 0, 3, 5, 0, 0, 0},
+  {CVINT(163,39,79,129), 1, 0, 23, 0, 1, 0, 0, 0, 0},
+  {CVINT(188,209,83,1), 1, 0, 23, 5, 1, 0, 0, 0, 0},
+  {CVINT(201,17,138,226), 1, 0, 23, 9, 2, 0, 0, 0, 0},
+  {CVINT(181,3,19,57), 1, 0, 23, 6, 0, 22, 3, 0, 0},
+  {CVINT(200,205,23,105), 1, 0, 23, 4, 4, 25, 3, 0, 0},
+  {CVINT(171,9,11,105), 1, 0, 23, 6, 2, 0, 0, 0, 0},
+  {CVINT(197,209,115,89), 1, 0, 23, 4, 2, 0, 0, 0, 0},
+  {CVINT(165,17,11,169), 1, 0, 23, 6, 2, 0, 0, 0, 0},
+  {CVINT(169,33,206,57), 1, 0, 23, 0, 1, 0, 0, 0, 0},
+  {CVINT(167,3,146,106), 1, 0, 23, 8, 1, 0, 0, 0, 0},
+  {CVINT(167,31,146,106), 1, 0, 23, 8, 1, 0, 0, 0, 0},
+  {CVINT(199,19,154,2), 1, 0, 23, 9, 1, 0, 0, 0, 0},
+  {CVINT(214,19,186,146), 1, 0, 23, 9, 1, 0, 0, 0, 0},
+  {CVINT(189,61,35,137), 1, 1, 23, 6, 3, 23, 1, 0, 0},
+  {CVINT(217,251,3,121), 1, 0, 23, 0, 1, 0, 0, 0, 0},
+  {CVINT(216,251,3,169), 1, 0, 23, 0, 1, 0, 0, 0, 0},
+  {CVINT(175,45,79,137), 1, 1, 23, 0, 0, 16, 3, 0, 0},
+  {CVINT(174,39,79,65), 1, 1, 23, 0, 0, 16, 3, 0, 0},
+  {CVINT(174,217,67,89), 1, 1, 23, 0, 1, 27, 0, 0, 0},
+  {CVINT(168,209,47,25), 1, 0, 23, 0, 1, 0, 0, 0, 0},
+  {CVINT(176,9,150,89), 1, 0, 23, 7, 1, 0, 0, 0, 0},
+  {CVINT(165,35,210,137), 1, 0, 23, 0, 1, 5, 1, 0, 0},
+  {CVINT(165,203,31,137), 1, 0, 23, 0, 0, 5, 1, 0, 0},
+  {CVINT(192,201,130,162), 1, 0, 23, 0, 0, 5, 2, 0, 0},
+  {CVINT(196,37,134,202), 1, 0, 23, 0, 0, 5, 2, 0, 0},
+  {CVINT(197,201,31,145), 1, 0, 23, 0, 2, 5, 2, 0, 0},
+  {CVINT(171,1,130,82), 1, 0, 23, 8, 3, 5, 2, 35, 2},
+  {CVINT(165,43,238,162), 1, 0, 23, 8, 2, 5, 1, 33, 3},
+  {CVINT(206,17,190,122), 1, 0, 23, 9, 2, 0, 0, 0, 0},
+  {CVINT(184,205,79,9), 1, 1, 23, 5, 4, 27, 0, 0, 0},
+  {CVINT(161,43,15,177), 1, 0, 23, 6, 1, 0, 0, 0, 0},
+  {CVINT(217,243,130,90), 1, 0, 23, 10, 1, 5, 1, 0, 0},
+  {CVINT(195,223,83,18), 1, 0, 23, 0, 2, 5, 2, 23, 1},
+  {CVINT(179,61,198,9), 1, 0, 23, 0, 4, 23, 3, 0, 0},
+  {CVINT(190,217,115,57), 1, 0, 23, 5, 3, 0, 0, 0, 0},
+  {CVINT(205,205,39,177), 1, 0, 23, 4, 3, 0, 0, 0, 0},
+  {CVINT(169,209,11,57), 1, 0, 23, 0, 2, 0, 0, 0, 0},
+  {CVINT(201,249,87,81), 1, 0, 23, 0, 1, 23, 4, 0, 0},
+  {CVINT(193,243,35,18), 1, 0, 23, 0, 5, 0, 0, 0, 0},
+  {CVINT(201,9,134,26), 1, 0, 23, 0, 2, 5, 3, 0, 0},
+  {CVINT(179,23,182,106), 1, 0, 23, 0, 2, 5, 3, 0, 0},
+  {CVINT(190,51,190,89), 1, 0, 23, 0, 2, 5, 1, 55, 2},
+  {CVINT(175,243,91,113), 1, 0, 23, 0, 1, 5, 3, 0, 0},
+  {CVINT(184,203,39,185), 1, 0, 23, 5, 3, 0, 0, 0, 0},
+  {CVINT(165,195,31,97), 1, 0, 23, 0, 2, 0, 0, 0, 0},
+  {CVINT(217,209,15,113), 1, 0, 24, 4, 4, 24, 3, 0, 0},
+  {CVINT(221,193,222,18), 1, 0, 24, 10, 0, 24, 2, 5, 2},
+  {CVINT(183,39,142,34), 0, 0, 24, 0, 0, 0, 0, 0, 0},
+  {CVINT(200,203,39,97), 1, 0, 24, 4, 1, 24, 2, 0, 0},
+  {CVINT(219,253,15,177), 1, 0, 25, 0, 1, 5, 2, 25, 2},
+  {CVINT(178,221,59,233), 0, 0, 25, 13, 0, 25, 0, 0, 0},
+  {CVINT(170,3,178,57), 1, 0, 25, 7, 2, 25, 0, 0, 0},
+  {CVINT(177,39,31,113), 1, 0, 25, 6, 0, 25, 0, 0, 0},
+  {CVINT(173,3,79,113), 1, 0, 25, 6, 2, 25, 0, 0, 0},
+  {CVINT(197,247,170,202), 0, 0, 25, 0, 1, 25, 0, 0, 0},
+  {CVINT(222,245,31,18), 0, 0, 25, 0, 1, 25, 0, 0, 0},
+  {CVINT(160,51,15,185), 0, 0, 25, 0, 3, 25, 0, 0, 0},
+  {CVINT(176,61,83,129), 0, 0, 25, 6, 2, 25, 0, 0, 0},
+  {CVINT(196,57,246,58), 0, 0, 26, 0, 0, 23, 2, 0, 0},
+  {CVINT(204,41,162,50), 0, 0, 26, 9, 0, 23, 2, 0, 0},
+  {CVINT(193,217,31,97), 0, 0, 27, 0, 0, 0, 0, 0, 0},
+  {CVINT(193,243,35,18), 1, 0, 28, 0, 5, 23, 3, 0, 0},
+  {CVINT(219,209,79,113), 1, 1, 28, 0, 0, 28, 0, 0, 0},
+  {CVINT(197,217,127,18), 0, 1, 28, 0, 0, 27, 15, 5, 6},
+  {CVINT(168,61,15,137), 0, 0, 29, 6, 0, 0, 0, 0, 0},
+  {CVINT(171,19,194,202), 1, 0, 29, 8, 1, 29, 2, 0, 0},
+  {CVINT(171,19,194,202), 1, 0, 29, 8, 1, 91, 2, 0, 0},
+  {CVINT(202,205,43,18), 1, 0, 30, 0, 2, 44, 3, 0, 0},
+  {CVINT(161,5,91,113), 0, 0, 31, 6, 0, 0, 0, 0, 0},
+  {CVINT(177,43,79,129), 1, 1, 31, 0, 0, 31, 3, 0, 0},
+  {CVINT(180,31,39,177), 1, 0, 32, 6, 0, 32, 2, 0, 0},
+  {CVINT(172,205,63,177), 0, 0, 32, 0, 0, 0, 0, 0, 0},
+  {CVINT(203,43,218,202), 0, 0, 32, 0, 0, 0, 0, 0, 0},
+  {CVINT(200,195,31,177), 1, 1, 32, 0, 0, 32, 2, 0, 0},
+  {CVINT(223,221,67,18), 1, 1, 32, 0, 0, 32, 2, 0, 0},
+  {CVINT(177,247,31,89), 1, 1, 32, 0, 0, 32, 0, 32, 1},
+  {CVINT(168,13,19,89), 1, 0, 33, 0, 0, 5, 0, 0, 0},
+  {CVINT(191,209,75,57), 1, 0, 33, 0, 0, 5, 2, 0, 0},
+  {CVINT(166,43,43,113), 1, 0, 33, 0, 1, 5, 2, 0, 0},
+  {CVINT(164,27,226,113), 1, 0, 33, 0, 1, 5, 2, 0, 0},
+  {CVINT(206,245,83,18), 1, 0, 33, 0, 1, 5, 2, 0, 0},
+  {CVINT(217,201,87,18), 1, 0, 33, 0, 1, 5, 2, 0, 0},
+  {CVINT(180,33,154,2), 1, 0, 33, 0, 0, 5, 2, 0, 0},
+  {CVINT(210,53,226,186), 1, 0, 33, 0, 0, 5, 0, 0, 0},
+  {CVINT(198,219,63,18), 1, 0, 33, 0, 3, 5, 2, 0, 0},
+  {CVINT(163,213,31,193), 1, 0, 33, 0, 3, 5, 2, 0, 0},
+  {CVINT(219,215,91,41), 1, 0, 33, 0, 0, 5, 2, 0, 0},
+  {CVINT(167,245,79,137), 1, 0, 33, 0, 0, 5, 2, 0, 0},
+  {CVINT(178,9,230,1), 1, 0, 33, 0, 0, 5, 2, 0, 0},
+  {CVINT(204,207,79,18), 1, 0, 34, 0, 0, 35, 4, 5, 2},
+  {CVINT(204,243,43,18), 1, 0, 34, 0, 0, 35, 4, 5, 2},
+  {CVINT(206,249,43,25), 1, 0, 34, 0, 0, 35, 0, 0, 0},
+  {CVINT(169,37,39,145), 1, 0, 34, 6, 0, 5, 0, 0, 0},
+  {CVINT(179,47,35,49), 1, 0, 35, 6, 0, 5, 0, 0, 0},
+  {CVINT(221,39,170,178), 1, 0, 35, 0, 0, 5, 0, 0, 0},
+  {CVINT(174,31,246,50), 1, 0, 35, 0, 3, 0, 0, 0, 0},
+  {CVINT(171,31,246,89), 1, 0, 35, 0, 3, 5, 2, 0, 0},
+  {CVINT(175,3,246,242), 1, 0, 35, 0, 3, 5, 2, 0, 0},
+  {CVINT(198,239,103,225), 1, 0, 35, 0, 3, 5, 2, 0, 0},
+  {CVINT(221,39,170,178), 1, 0, 35, 0, 0, 5, 2, 0, 0},
+  {CVINT(198,91,154,18), 1, 0, 35, 0, 1, 5, 2, 0, 0},
+  {CVINT(198,245,154,18), 1, 0, 35, 0, 0, 5, 0, 0, 0},
+  {CVINT(189,43,170,26), 1, 0, 35, 0, 3, 5, 2, 0, 0},
+  {CVINT(192,217,158,170), 1, 0, 35, 0, 3, 5, 2, 0, 0},
+  {CVINT(179,47,238,49), 1, 0, 35, 0, 0, 5, 2, 0, 0},
+  {CVINT(179,53,182,49), 1, 0, 35, 0, 1, 5, 2, 0, 0},
+  {CVINT(185,61,182,162), 1, 0, 35, 0, 0, 5, 2, 0, 0},
+  {CVINT(207,41,170,42), 1, 0, 35, 9, 0, 5, 5, 0, 0},
+  {CVINT(172,193,35,209), 1, 0, 35, 0, 2, 5, 3, 0, 0},
+  {CVINT(188,193,87,177), 1, 0, 35, 0, 2, 5, 3, 0, 0},
+  {CVINT(175,19,234,90), 1, 0, 35, 0, 2, 5, 3, 0, 0},
+  {CVINT(175,193,35,33), 1, 0, 35, 0, 3, 5, 3, 0, 0},
+  {CVINT(165,35,31,113), 1, 0, 35, 0, 0, 5, 3, 0, 0},
+  {CVINT(175,19,234,90), 1, 0, 35, 0, 3, 5, 2, 0, 0},
+  {CVINT(206,29,142,218), 1, 0, 35, 0, 0, 35, 5, 5, 2},
+  {CVINT(220,193,35,18), 1, 0, 35, 3, 0, 5, 0, 0, 0},
+  {CVINT(198,245,35,18), 1, 0, 35, 0, 2, 23, 2, 5, 2},
+  {CVINT(162,31,250,121), 1, 0, 35, 0, 1, 39, 2, 23, 2},
+  {CVINT(165,19,246,122), 1, 0, 35, 0, 3, 5, 3, 0, 0},
+  {CVINT(181,209,23,105), 1, 0, 36, 0, 1, 5, 4, 0, 0},
+  {CVINT(196,245,154,18), 1, 0, 37, 0, 0, 5, 2, 37, 1},
+  {CVINT(198,209,23,18), 1, 0, 37, 0, 1, 5, 4, 41, 4},
+  {CVINT(160,53,7,185), 0, 0, 37, 0, 0, 0, 0, 0, 0},
+  {CVINT(172,195,75,121), 0, 0, 37, 0, 0, 0, 0, 0, 0},
+  {CVINT(166,13,83,169), 1, 0, 37, 0, 0, 37, 1, 0, 0},
+  {CVINT(162,193,19,129), 0, 0, 37, 0, 4, 0, 0, 0, 0},
+  {CVINT(189,251,15,161), 1, 0, 37, 0, 0, 37, 1, 0, 0},
+  {CVINT(193,205,19,137), 1, 0, 37, 0, 0, 37, 1, 0, 0},
+  {CVINT(172,61,63,49), 1, 0, 38, 0, 0, 5, 2, 38, 3},
+  {CVINT(202,251,63,18), 1, 0, 38, 0, 0, 38, 3, 5, 2},
+  {CVINT(169,33,75,129), 1, 0, 38, 0, 0, 38, 3, 5, 2},
+  {CVINT(194,193,87,18), 1, 0, 39, 0, 3, 5, 2, 35, 2},
+  {CVINT(162,57,31,9), 1, 0, 39, 0, 0, 39, 1, 5, 3},
+  {CVINT(161,59,250,49), 0, 0, 39, 0, 0, 39, 1, 0, 0},
+  {CVINT(172,49,3,177), 1, 0, 39, 0, 0, 39, 1, 0, 0},
+  {CVINT(175,23,182,33), 0, 0, 39, 0, 0, 39, 1, 0, 0},
+  {CVINT(211,223,87,18), 1, 0, 40, 0, 0, 5, 1, 40, 2},
+  {CVINT(188,61,63,137), 1, 0, 40, 6, 1, 5, 1, 40, 2},
+  {CVINT(205,209,75,18), 1, 0, 40, 0, 0, 5, 1, 40, 2},
+  {CVINT(193,223,87,18), 1, 0, 40, 0, 0, 5, 1, 40, 2},
+  {CVINT(206,227,75,18), 0, 0, 40, 0, 0, 5, 1, 40, 2},
+  {CVINT(197,251,3,137), 1, 0, 40, 0, 1, 5, 1, 40, 2},
+  {CVINT(219,213,154,18), 1, 0, 41, 0, 0, 5, 0, 0, 0},
+  {CVINT(198,209,23,18), 1, 0, 41, 0, 1, 5, 0, 0, 0},
+  {CVINT(175,243,91,113), 1, 0, 41, 0, 1, 5, 0, 0, 0},
+  {CVINT(216,249,35,18), 1, 0, 41, 0, 0, 5, 0, 0, 0},
+  {CVINT(195,243,154,18), 1, 0, 41, 0, 0, 5, 0, 0, 0},
+  {CVINT(174,207,75,57), 1, 0, 41, 0, 0, 5, 0, 0, 0},
+  {CVINT(202,201,11,18), 1, 0, 41, 0, 0, 5, 0, 0, 0},
+  {CVINT(178,51,150,177), 1, 0, 41, 0, 0, 5, 0, 0, 0},
+  {CVINT(165,39,59,113), 1, 0, 41, 0, 0, 5, 0, 0, 0},
+  {CVINT(176,43,190,178), 1, 0, 42, 0, 0, 42, 0, 5, 2},
+  {CVINT(168,209,43,137), 1, 0, 42, 0, 0, 42, 0, 5, 2},
+  {CVINT(198,249,75,177), 1, 0, 42, 0, 0, 42, 0, 5, 2},
+  {CVINT(219,193,35,57), 1, 0, 42, 0, 0, 42, 0, 5, 2},
+  {CVINT(169,207,39,121), 1, 0, 43, 0, 1, 5, 3, 35, 4},
+  {CVINT(192,219,15,18), 1, 0, 43, 0, 1, 5, 3, 35, 4},
+  {CVINT(192,253,47,18), 1, 0, 43, 0, 0, 5, 0, 35, 2},
+  {CVINT(185,45,31,73), 1, 0, 43, 0, 0, 5, 0, 0, 0},
+  {CVINT(216,229,95,58), 1, 0, 43, 0, 0, 5, 0, 0, 0},
+  {CVINT(220,201,154,18), 1, 0, 43, 0, 0, 5, 0, 0, 0},
+  {CVINT(177,55,230,33), 1, 0, 43, 0, 0, 5, 0, 56, 4},
+  {CVINT(200,57,154,18), 1, 0, 43, 0, 1, 5, 0, 0, 0},
+  {CVINT(169,31,250,89), 1, 0, 43, 7, 3, 5, 2, 0, 0},
+  {CVINT(206,113,70,18), 1, 0, 43, 0, 3, 5, 2, 0, 0},
+  {CVINT(170,21,246,89), 1, 0, 44, 0, 0, 5, 0, 0, 0},
+  {CVINT(166,27,138,162), 1, 0, 44, 0, 0, 5, 0, 0, 0},
+  {CVINT(163,13,43,57), 1, 0, 44, 0, 0, 5, 0, 0, 0},
+  {CVINT(160,193,43,113), 1, 0, 44, 0, 0, 5, 0, 0, 0},
+  {CVINT(181,205,35,153), 1, 0, 44, 5, 0, 5, 0, 0, 0},
+  {CVINT(194,217,154,18), 1, 0, 44, 0, 1, 5, 0, 0, 0},
+  {CVINT(198,245,63,57), 1, 0, 44, 0, 1, 5, 0, 0, 0},
+  {CVINT(199,225,35,209), 1, 0, 44, 0, 0, 5, 0, 0, 0},
+  {CVINT(220,117,47,18), 1, 0, 44, 0, 0, 5, 0, 0, 0},
+  {CVINT(180,193,35,73), 1, 0, 44, 0, 0, 5, 0, 0, 0},
+  {CVINT(160,193,43,113), 1, 0, 44, 0, 0, 5, 0, 0, 0},
+  {CVINT(220,201,154,18), 1, 0, 44, 0, 0, 5, 0, 0, 0},
+  {CVINT(194,247,23,18), 1, 0, 44, 0, 0, 5, 0, 0, 0},
+  {CVINT(172,9,154,42), 1, 0, 44, 0, 2, 5, 1, 0, 0},
+  {CVINT(207,203,3,145), 1, 0, 45, 0, 0, 5, 3, 0, 0},
+  {CVINT(191,13,234,185), 1, 0, 45, 0, 0, 5, 3, 0, 0},
+  {CVINT(211,243,154,18), 1, 0, 45, 0, 1, 5, 3, 45, 4},
+  {CVINT(180,19,11,57), 1, 0, 45, 6, 0, 5, 3, 45, 4},
+  {CVINT(193,235,218,18), 1, 0, 45, 10, 0, 5, 3, 45, 4},
+  {CVINT(196,245,107,114), 1, 0, 45, 11, 0, 0, 0, 0, 0},
+  {CVINT(221,205,75,57), 1, 1, 45, 4, 0, 45, 1, 0, 0},
+  {CVINT(179,21,178,97), 0, 1, 45, 7, 2, 45, 0, 0, 0},
+  {CVINT(189,201,31,9), 1, 0, 46, 5, 0, 5, 4, 46, 5},
+  {CVINT(189,201,31,9), 1, 0, 46, 5, 0, 5, 4, 56, 5},
+  {CVINT(176,63,47,25), 1, 0, 46, 0, 0, 5, 4, 46, 5},
+  {CVINT(176,63,47,25), 1, 0, 46, 0, 0, 5, 4, 56, 5},
+  {CVINT(221,193,154,18), 1, 0, 46, 0, 0, 5, 4, 46, 5},
+  {CVINT(221,193,47,18), 1, 0, 46, 0, 0, 5, 4, 46, 5},
+  {CVINT(204,255,63,121), 1, 0, 46, 0, 0, 5, 4, 46, 5},
+  {CVINT(177,217,11,89), 1, 0, 46, 0, 1, 5, 3, 0, 0},
+  {CVINT(180,217,11,89), 1, 0, 46, 0, 1, 5, 3, 0, 0},
+  {CVINT(206,219,154,18), 1, 0, 46, 0, 0, 5, 2, 46, 3},
+  {CVINT(223,217,23,105), 1, 0, 46, 0, 3, 5, 2, 46, 3},
+  {CVINT(207,219,154,18), 1, 1, 46, 0, 0, 46, 3, 0, 0},
+  {CVINT(200,209,75,18), 1, 1, 46, 0, 0, 46, 3, 0, 0},
+  {CVINT(192,209,75,57), 1, 0, 46, 0, 0, 5, 4, 0, 0},
+  {CVINT(180,55,83,89), 1, 0, 46, 0, 0, 5, 3, 0, 0},
+  {CVINT(181,15,218,57), 1, 0, 46, 0, 5, 5, 3, 46, 3},
+  {CVINT(206,219,154,18), 0, 0, 47, 0, 0, 0, 0, 0, 0},
+  {CVINT(188,57,214,97), 1, 1, 47, 7, 4, 47, 0, 46, 5},
+  {CVINT(219,209,75,57), 0, 0, 48, 0, 0, 0, 0, 0, 0},
+  {CVINT(219,249,154,18), 0, 0, 48, 0, 0, 0, 0, 0, 0},
+  {CVINT(216,217,35,177), 1, 1, 48, 0, 0, 48, 0, 48, 4},
+  {CVINT(173,53,218,97), 1, 1, 48, 0, 0, 48, 2, 0, 0},
+  {CVINT(192,197,154,18), 1, 1, 48, 0, 0, 48, 2, 0, 0},
+  {CVINT(205,217,154,18), 0, 0, 48, 0, 0, 0, 0, 0, 0},
+  {CVINT(216,205,79,113), 0, 0, 49, 0, 0, 0, 0, 0, 0},
+  {CVINT(216,209,67,57), 1, 1, 49, 0, 0, 49, 2, 0, 0},
+  {CVINT(205,247,15,57), 1, 1, 49, 0, 0, 49, 2, 0, 0},
+  {CVINT(172,209,83,57), 1, 1, 50, 0, 0, 15, 3, 0, 0},
+  {CVINT(200,205,35,18), 1, 1, 50, 3, 0, 15, 3, 0, 0},
+  {CVINT(200,249,43,18), 1, 1, 50, 0, 0, 15, 3, 0, 0},
+  {CVINT(163,217,83,49), 1, 1, 50, 5, 0, 15, 3, 0, 0},
+  {CVINT(197,209,115,18), 1, 1, 50, 3, 0, 15, 3, 0, 0},
+  {CVINT(187,203,31,89), 1, 1, 50, 5, 0, 15, 3, 0, 0},
+  {CVINT(223,217,75,57), 1, 1, 50, 0, 0, 15, 3, 0, 0},
+  {CVINT(167,61,218,177), 0, 0, 51, 0, 1, 0, 0, 0, 0},
+  {CVINT(170,21,15,25), 1, 1, 51, 0, 0, 51, 4, 0, 0},
+  {CVINT(212,57,186,186), 1, 0, 52, 0, 0, 5, 1, 0, 0},
+  {CVINT(212,57,186,186), 1, 0, 52, 0, 0, 23, 3, 0, 0},
+  {CVINT(218,211,107,1), 1, 0, 53, 0, 2, 0, 0, 0, 0},
+  {CVINT(161,51,95,209), 1, 0, 53, 0, 2, 0, 0, 0, 0},
+  {CVINT(182,17,242,178), 1, 0, 53, 0, 5, 5, 2, 45, 3},
+  {CVINT(182,17,242,178), 1, 0, 53, 0, 3, 45, 3, 0, 0},
+  {CVINT(202,203,43,18), 0, 0, 54, 0, 0, 0, 0, 0, 0},
+  {CVINT(167,23,43,105), 1, 1, 54, 0, 0, 54, 2, 0, 0},
+  {CVINT(200,69,54,18), 0, 0, 55, 0, 0, 5, 1, 55, 2},
+  {CVINT(221,215,154,18), 1, 0, 55, 0, 2, 5, 1, 55, 2},
+  {CVINT(193,209,67,25), 1, 0, 55, 0, 2, 5, 1, 55, 2},
+  {CVINT(193,245,91,18), 1, 0, 55, 0, 1, 5, 1, 91, 2},
+  {CVINT(193,255,47,18), 1, 0, 55, 0, 2, 5, 1, 55, 2},
+  {CVINT(219,217,83,113), 1, 0, 55, 0, 0, 5, 1, 55, 2},
+  {CVINT(219,195,91,18), 1, 0, 55, 0, 0, 5, 1, 55, 2},
+  {CVINT(179,19,186,50), 1, 0, 55, 0, 0, 5, 2, 45, 2},
+  {CVINT(202,245,91,18), 1, 0, 55, 0, 0, 5, 2, 55, 3},
+  {CVINT(180,61,75,81), 0, 0, 55, 0, 0, 5, 1, 55, 2},
+  {CVINT(217,249,19,217), 0, 0, 55, 0, 0, 5, 1, 55, 2},
+  {CVINT(202,219,31,18), 1, 0, 55, 0, 3, 5, 1, 55, 2},
+  {CVINT(223,33,154,18), 1, 0, 55, 0, 3, 5, 1, 55, 2},
+  {CVINT(171,25,3,33), 1, 0, 55, 0, 1, 5, 1, 55, 2},
+  {CVINT(194,255,138,82), 1, 0, 55, 0, 5, 5, 2, 55, 3},
+  {CVINT(170,209,87,89), 1, 0, 55, 0, 4, 5, 2, 0, 0},
+  {CVINT(210,213,230,18), 1, 0, 55, 0, 1, 5, 1, 0, 0},
+  {CVINT(164,205,19,105), 1, 0, 55, 0, 4, 5, 2, 55, 3},
+  {CVINT(191,15,234,177), 1, 0, 55, 0, 2, 5, 2, 55, 3},
+  {CVINT(198,205,35,105), 1, 0, 55, 0, 3, 5, 2, 55, 3},
+  {CVINT(199,193,87,145), 1, 0, 56, 0, 0, 5, 2, 55, 3},
+  {CVINT(200,209,47,113), 1, 0, 56, 0, 0, 5, 2, 55, 3},
+  {CVINT(168,213,31,121), 1, 0, 56, 0, 0, 5, 2, 55, 3},
+  {CVINT(181,31,59,57), 1, 0, 56, 0, 0, 5, 2, 55, 3},
+  {CVINT(218,255,174,74), 1, 0, 56, 0, 0, 5, 2, 55, 3},
+  {CVINT(200,245,59,18), 1, 0, 57, 0, 0, 5, 1, 57, 1},
+  {CVINT(223,213,87,81), 1, 0, 57, 0, 0, 5, 1, 57, 1},
+  {CVINT(201,209,87,81), 1, 0, 57, 0, 0, 5, 1, 57, 1},
+  {CVINT(209,245,59,18), 1, 0, 57, 0, 0, 5, 1, 57, 1},
+  {CVINT(165,1,83,97), 0, 0, 58, 0, 0, 0, 0, 0, 0},
+  {CVINT(182,175,139,57), 0, 0, 58, 0, 0, 0, 0, 0, 0},
+  {CVINT(182,223,83,57), 0, 0, 58, 0, 0, 0, 0, 0, 0},
+  {CVINT(196,249,75,18), 0, 1, 59, 0, 0, 44, 2, 0, 0},
+  {CVINT(196,249,75,18), 0, 1, 59, 0, 0, 43, 2, 0, 0},
+  {CVINT(196,249,75,18), 0, 1, 59, 0, 0, 10, 2, 0, 0},
+  {CVINT(196,249,75,18), 0, 1, 59, 0, 0, 11, 2, 0, 0},
+  {CVINT(196,249,75,18), 0, 1, 59, 0, 0, 11, 2, 0, 0},
+  {CVINT(196,249,75,18), 0, 1, 59, 0, 0, 58, 2, 0, 0},
+  {CVINT(194,245,154,18), 1, 1, 60, 0, 0, 59, 0, 0, 0},
+  {CVINT(206,245,75,18), 1, 1, 60, 0, 0, 59, 0, 0, 0},
+  {CVINT(168,57,182,154), 0, 0, 61, 0, 0, 0, 0, 0, 0},
+  {CVINT(166,43,15,177), 0, 0, 61, 6, 0, 0, 0, 0, 0},
+  {CVINT(188,41,23,81), 1, 1, 61, 6, 0, 61, 2, 0, 0},
+  {CVINT(219,193,91,57), 1, 0, 61, 4, 0, 61, 2, 0, 0},
+  {CVINT(216,249,23,57), 0, 0, 61, 4, 0, 0, 0, 0, 0},
+  {CVINT(173,205,83,137), 1, 1, 62, 5, 0, 62, 0, 0, 0},
+  {CVINT(172,205,47,1), 0, 0, 62, 5, 4, 0, 0, 0, 0},
+  {CVINT(189,9,146,105), 0, 0, 62, 7, 4, 0, 0, 0, 0},
+  {CVINT(161,5,91,113), 0, 0, 62, 6, 4, 0, 0, 0, 0},
+  {CVINT(187,9,31,137), 0, 0, 63, 0, 0, 0, 0, 0, 0},
+  {CVINT(186,25,35,25), 1, 1, 63, 0, 0, 63, 1, 0, 0},
+  {CVINT(219,209,35,18), 0, 1, 63, 0, 0, 63, 1, 0, 0},
+  {CVINT(172,217,43,113), 0, 0, 64, 0, 0, 0, 0, 0, 0},
+  {CVINT(219,247,15,177), 0, 1, 64, 0, 0, 64, 1, 0, 0},
+  {CVINT(187,7,150,73), 1, 1, 64, 0, 0, 64, 0, 0, 0},
+  {CVINT(166,217,79,129), 0, 0, 64, 0, 0, 0, 0, 0, 0},
+  {CVINT(190,53,87,137), 0, 1, 64, 0, 0, 64, 1, 0, 0},
+  {CVINT(171,19,154,18), 1, 1, 64, 0, 0, 64, 0, 0, 0},
+  {CVINT(222,29,146,146), 0, 0, 65, 0, 0, 0, 0, 0, 0},
+  {CVINT(183,211,35,225), 1, 1, 65, 0, 0, 65, 1, 23, 1},
+  {CVINT(175,243,63,177), 1, 1, 65, 0, 0, 65, 5, 0, 0},
+  {CVINT(161,1,214,161), 0, 0, 66, 0, 0, 0, 0, 0, 0},
+  {CVINT(200,203,31,18), 0, 0, 66, 0, 0, 0, 0, 0, 0},
+  {CVINT(201,203,39,18), 1, 0, 66, 0, 1, 66, 1, 0, 0},
+  {CVINT(193,217,154,18), 0, 1, 67, 0, 2, 67, 0, 0, 0},
+  {CVINT(197,217,154,18), 0, 1, 67, 0, 0, 67, 0, 0, 0},
+  {CVINT(184,29,23,105), 1, 1, 67, 0, 0, 67, 0, 0, 0},
+  {CVINT(223,205,63,18), 0, 1, 67, 0, 0, 67, 0, 0, 0},
+  {CVINT(202,255,15,9), 0, 1, 67, 0, 0, 67, 0, 0, 0},
+  {CVINT(223,205,79,177), 0, 0, 67, 0, 0, 0, 0, 0, 0},
+  {CVINT(184,15,158,25), 1, 0, 68, 0, 0, 5, 3, 0, 0},
+  {CVINT(162,15,146,25), 1, 0, 68, 0, 4, 5, 2, 0, 0},
+  {CVINT(177,15,158,25), 1, 0, 68, 0, 2, 5, 2, 0, 0},
+  {CVINT(165,15,170,25), 1, 0, 68, 0, 3, 5, 2, 0, 0},
+  {CVINT(205,251,154,18), 1, 0, 68, 0, 1, 5, 3, 0, 0},
+  {CVINT(205,247,15,57), 1, 0, 68, 0, 0, 68, 3, 5, 1},
+  {CVINT(175,41,238,57), 1, 0, 68, 0, 0, 5, 2, 0, 0},
+  {CVINT(171,17,43,89), 1, 0, 69, 6, 3, 69, 2, 5, 3},
+  {CVINT(159,227,74,18), 1, 0, 69, 0, 3, 69, 2, 5, 3},
+  {CVINT(177,41,190,25), 1, 0, 69, 7, 0, 69, 2, 5, 3},
+  {CVINT(160,59,178,226), 1, 0, 69, 8, 0, 69, 2, 5, 3},
+  {CVINT(162,37,87,89), 1, 0, 69, 0, 0, 69, 2, 5, 3},
+  {CVINT(180,1,75,129), 1, 0, 69, 6, 0, 69, 2, 5, 3},
+  {CVINT(170,25,15,137), 1, 0, 69, 6, 0, 69, 2, 5, 3},
+  {CVINT(174,205,43,113), 1, 0, 69, 5, 0, 69, 2, 5, 3},
+  {CVINT(194,251,15,129), 1, 0, 69, 0, 3, 0, 0, 0, 0},
+  {CVINT(179,47,35,49), 0, 0, 70, 6, 0, 0, 0, 0, 0},
+  {CVINT(187,49,39,57), 1, 1, 70, 6, 0, 70, 5, 0, 0},
+  {CVINT(193,247,154,18), 1, 1, 71, 2, 0, 71, 1, 0, 0},
+  {CVINT(199,205,75,129), 1, 0, 71, 4, 0, 5, 2, 0, 0},
+  {CVINT(168,209,63,177), 1, 0, 72, 5, 0, 72, 0, 0, 0},
+  {CVINT(172,205,35,97), 0, 0, 72, 0, 0, 72, 0, 0, 0},
+  {CVINT(172,209,63,97), 0, 0, 72, 0, 2, 0, 0, 0, 0},
+  {CVINT(220,195,95,130), 1, 1, 73, 0, 0, 73, 0, 0, 0},
+  {CVINT(192,217,127,18), 0, 0, 73, 0, 4, 73, 0, 0, 0},
+  {CVINT(200,219,154,18), 0, 0, 73, 0, 1, 0, 0, 0, 0},
+  {CVINT(187,19,79,129), 1, 1, 74, 0, 0, 74, 0, 0, 0},
+  {CVINT(216,209,43,57), 0, 0, 74, 0, 4, 74, 3, 0, 0},
+  {CVINT(196,37,246,178), 0, 0, 74, 0, 0, 0, 0, 0, 0},
+  {CVINT(185,205,83,57), 1, 1, 75, 0, 0, 75, 0, 0, 0},
+  {CVINT(187,199,15,145), 0, 0, 75, 0, 3, 0, 0, 0, 0},
+  {CVINT(190,217,87,137), 1, 1, 76, 0, 0, 76, 0, 5, 3},
+  {CVINT(175,13,83,177), 0, 0, 76, 0, 7, 77, 4, 0, 0},
+  {CVINT(219,215,91,9), 1, 1, 77, 0, 0, 77, 0, 0, 0},
+  {CVINT(173,29,142,114), 0, 0, 77, 0, 5, 78, 4, 0, 0},
+  {CVINT(173,29,83,57), 1, 1, 78, 0, 0, 78, 0, 0, 0},
+  {CVINT(187,1,31,137), 0, 0, 78, 0, 3, 0, 0, 0, 0},
+  {CVINT(216,217,11,18), 1, 1, 79, 0, 0, 79, 0, 0, 0},
+  {CVINT(201,193,15,97), 0, 0, 79, 0, 2, 0, 0, 0, 0},
+  {CVINT(207,193,15,97), 0, 0, 79, 0, 4, 0, 0, 0, 0},
+  {CVINT(217,209,75,145), 1, 1, 80, 0, 1, 80, 0, 5, 2},
+  {CVINT(215,221,59,122), 1, 0, 80, 11, 0, 5, 2, 80, 2},
+  {CVINT(193,247,98,18), 0, 0, 80, 0, 3, 0, 0, 0, 0},
+  {CVINT(188,209,83,1), 1, 0, 81, 5, 1, 33, 1, 0, 0},
+  {CVINT(172,209,83,1), 0, 0, 81, 5, 0, 0, 0, 0, 0},
+  {CVINT(189,17,138,226), 1, 1, 81, 8, 0, 81, 3, 0, 0},
+  {CVINT(187,9,31,137), 1, 0, 82, 6, 1, 82, 2, 5, 2},
+  {CVINT(195,61,194,186), 1, 0, 82, 9, 1, 82, 2, 5, 2},
+  {CVINT(161,249,87,89), 0, 0, 82, 0, 0, 82, 1, 0, 0},
+  {CVINT(187,7,79,129), 0, 0, 82, 6, 1, 82, 0, 23, 1},
+  {CVINT(221,193,35,18), 0, 0, 82, 0, 1, 82, 0, 23, 1},
+  {CVINT(180,209,39,185), 0, 0, 82, 5, 2, 82, 0, 23, 1},
+  {CVINT(194,255,83,57), 0, 0, 82, 4, 1, 82, 0, 0, 0},
+  {CVINT(170,53,35,41), 0, 0, 82, 6, 1, 82, 0, 5, 1},
+  {CVINT(175,255,63,97), 1, 0, 82, 5, 3, 82, 1, 23, 1},
+  {CVINT(196,37,134,202), 1, 0, 83, 0, 4, 83, 3, 0, 0},
+  {CVINT(204,193,47,145), 1, 0, 83, 0, 0, 5, 3, 0, 0},
+  {CVINT(206,213,55,18), 0, 0, 83, 0, 0, 5, 3, 0, 0},
+  {CVINT(211,255,154,18), 1, 0, 83, 0, 0, 5, 3, 0, 0},
+  {CVINT(216,249,87,57), 1, 1, 84, 0, 0, 84, 0, 0, 0},
+  {CVINT(163,217,83,49), 0, 1, 84, 0, 5, 84, 4, 0, 0},
+  {CVINT(204,243,43,18), 0, 0, 84, 0, 2, 0, 0, 0, 0},
+  {CVINT(216,203,63,145), 1, 0, 85, 0, 1, 0, 0, 0, 0},
+  {CVINT(196,249,83,137), 1, 0, 85, 0, 1, 0, 0, 0, 0},
+  {CVINT(204,207,79,18), 1, 1, 86, 0, 0, 86, 0, 0, 0},
+  {CVINT(191,193,35,185), 0, 1, 86, 0, 2, 86, 0, 0, 0},
+  {CVINT(162,43,182,105), 0, 0, 86, 7, 5, 10, 2, 0, 0},
+  {CVINT(174,5,19,89), 1, 1, 87, 0, 0, 87, 0, 0, 0},
+  {CVINT(182,223,83,57), 0, 0, 87, 0, 7, 87, 0, 0, 0},
+  {CVINT(165,205,39,49), 0, 0, 87, 0, 2, 10, 3, 0, 0},
+  {CVINT(182,13,206,58), 0, 0, 88, 0, 0, 0, 0, 0, 0},
+  {CVINT(171,251,79,49), 0, 0, 89, 0, 0, 0, 0, 0, 0},
+  {CVINT(201,205,83,49), 0, 0, 90, 0, 0, 0, 0, 0, 0},
+  {CVINT(222,201,43,18), 1, 0, 91, 0, 0, 91, 2, 0, 0},
+  {CVINT(211,201,43,18), 0, 0, 91, 0, 0, 0, 0, 0, 0},
+  {CVINT(216,205,31,145), 1, 0, 91, 0, 0, 91, 2, 0, 0},
+  {CVINT(213,237,31,41), 1, 0, 91, 0, 0, 91, 2, 0, 0},
+  {CVINT(217,205,87,57), 1, 0, 91, 0, 0, 88, 0, 91, 2},
+  {CVINT(208,197,222,210), 1, 0, 91, 0, 0, 91, 2, 0, 0},
+  {CVINT(197,253,15,234), 1, 1, 91, 0, 0, 89, 2, 91, 3},
+  {CVINT(194,217,11,154), 1, 0, 91, 0, 0, 91, 2, 0, 0},
+  {CVINT(198,223,246,50), 1, 0, 91, 10, 0, 91, 2, 0, 0},
+  {CVINT(213,3,206,34), 0, 0, 91, 9, 0, 91, 2, 0, 0},
+  {CVINT(208,197,222,210), 1, 0, 91, 0, 0, 91, 2, 0, 0},
+  {CVINT(223,217,59,242), 1, 0, 91, 11, 0, 91, 2, 0, 0},
+  {CVINT(214,23,255,26), 1, 0, 91, 0, 0, 91, 2, 0, 0},
+  {CVINT(193,9,166,74), 1, 0, 91, 9, 4, 91, 2, 0, 0},
+  {CVINT(206,239,186,226), 0, 0, 91, 10, 0, 91, 2, 0, 0},
+  {CVINT(190,249,11,89), 0, 0, 91, 5, 0, 91, 2, 0, 0},
+  {CVINT(175,3,182,66), 1, 0, 91, 0, 0, 91, 2, 0, 0},
+  {CVINT(189,31,142,50), 1, 0, 91, 8, 0, 91, 2, 0, 0},
+  {CVINT(161,19,242,50), 0, 0, 91, 8, 0, 91, 2, 0, 0},
+  {CVINT(165,43,206,154), 0, 0, 91, 8, 0, 91, 2, 0, 0},
+  {CVINT(215,31,130,74), 0, 0, 91, 9, 0, 91, 2, 0, 0},
+  {CVINT(211,43,170,226), 0, 0, 91, 9, 0, 91, 2, 0, 0},
+  {CVINT(211,245,43,18), 0, 0, 91, 0, 0, 91, 2, 0, 0},
+  {CVINT(201,251,39,1), 1, 0, 91, 0, 3, 91, 2, 0, 0},
+  {CVINT(228,141,75,105), 1, 0, 91, 0, 3, 91, 2, 0, 0},
+  {CVINT(201,251,39,9), 1, 0, 91, 0, 3, 91, 2, 0, 0},
+  {CVINT(228,143,75,105), 1, 0, 91, 0, 3, 91, 2, 0, 0},
+  {CVINT(193,119,15,57), 1, 0, 91, 0, 5, 91, 2, 5, 1},
+  {CVINT(206,199,19,18), 1, 0, 91, 0, 3, 91, 2, 0, 0},
+  {CVINT(220,245,31,49), 1, 0, 91, 0, 4, 91, 2, 5, 1},
+  {CVINT(201,9,134,26), 1, 0, 91, 0, 3, 5, 3, 0, 0},
+  {CVINT(190,51,190,89), 1, 0, 91, 0, 0, 5, 2, 0, 0},
+  {CVINT(170,31,198,57), 0, 0, 91, 7, 0, 91, 2, 0, 0},
+  {CVINT(166,239,87,161), 0, 0, 91, 13, 0, 0, 0, 0, 0},
+  {CVINT(213,233,198,146), 1, 0, 91, 10, 3, 91, 2, 0, 0},
+  {CVINT(190,53,242,177), 1, 0, 91, 7, 0, 91, 1, 0, 0},
+  {CVINT(216,229,130,202), 0, 0, 91, 0, 0, 0, 0, 0, 0},
+  {CVINT(214,213,51,177), 0, 0, 91, 0, 0, 0, 0, 0, 0},
+  {CVINT(180,19,130,161), 0, 0, 91, 7, 0, 0, 0, 0, 0},
+  {CVINT(160,31,166,50), 1, 0, 91, 0, 3, 91, 2, 0, 0},
+  {CVINT(161,27,35,25), 1, 0, 91, 6, 1, 91, 2, 0, 0},
+  {CVINT(211,219,242,194), 1, 0, 91, 0, 4, 0, 0, 0, 0},
+  {CVINT(211,253,242,130), 1, 0, 91, 10, 1, 91, 2, 0, 0},
+  {CVINT(204,49,254,26), 1, 0, 91, 0, 2, 91, 2, 0, 0},
+  {CVINT(186,19,198,113), 1, 1, 91, 7, 0, 90, 1, 91, 2},
+  {CVINT(170,37,19,185), 0, 0, 91, 6, 0, 0, 0, 0, 0},
+  {CVINT(180,3,242,154), 0, 0, 91, 8, 0, 0, 0, 0, 0},
+  {CVINT(198,7,130,186), 0, 0, 91, 9, 0, 0, 0, 0, 0},
+  {CVINT(199,217,31,49), 1, 0, 91, 4, 1, 91, 2, 0, 0},
+  {CVINT(212,233,218,114), 0, 0, 91, 10, 0, 91, 2, 0, 0},
+  {CVINT(172,49,206,82), 1, 0, 91, 8, 0, 91, 3, 0, 0},
+  {CVINT(180,13,242,105), 1, 0, 91, 7, 0, 91, 3, 0, 0},
+  {CVINT(167,249,87,89), 1, 0, 91, 5, 0, 91, 1, 0, 0},
+  {CVINT(206,73,154,18), 1, 0, 91, 2, 0, 91, 3, 0, 0},
+  {CVINT(186,21,238,242), 1, 0, 91, 0, 0, 91, 2, 0, 0},
+  {CVINT(175,59,158,170), 1, 0, 91, 8, 0, 91, 2, 0, 0},
+  {CVINT(199,7,218,50), 1, 0, 91, 9, 1, 91, 2, 0, 0},
+  {CVINT(176,17,138,57), 1, 0, 91, 7, 0, 91, 2, 0, 0},
+  {CVINT(172,193,15,129), 0, 0, 91, 0, 0, 91, 2, 0, 0},
+  {CVINT(168,5,87,89), 0, 0, 91, 0, 0, 91, 2, 0, 0},
+  {CVINT(169,61,35,177), 0, 0, 91, 6, 0, 91, 2, 0, 0},
+  {CVINT(195,25,162,234), 1, 0, 91, 0, 0, 91, 2, 0, 0},
+  {CVINT(177,7,214,57), 1, 0, 91, 7, 0, 91, 2, 0, 0},
+  {CVINT(182,27,142,26), 1, 0, 91, 8, 0, 91, 2, 0, 0},
+  {CVINT(212,63,150,10), 0, 0, 91, 0, 0, 91, 1, 0, 0}};
+#define NB_TROLL_WORDS 621
diff --git a/src/troll_detector.c b/src/troll_detector.c
new file mode 100644
index 0000000..283b325
--- /dev/null
+++ b/src/troll_detector.c
@@ -0,0 +1,772 @@
+/*
+  rcsid=$Id: troll_detector.c,v 1.19 2004/02/29 15:01:19 pouaite Exp $
+  ChangeLog:
+  $Log: troll_detector.c,v $
+  Revision 1.19  2004/02/29 15:01:19  pouaite
+  May the charles bronson spirit be with you
+
+  Revision 1.18  2003/06/29 23:58:39  pouaite
+  suppression de l'overrideredirect du palmi et ajout de pinnipede_totoz.c et wmcoincoin-totoz-get etc
+
+  Revision 1.17  2003/05/07 18:44:57  pouaite
+  bugfix divers+solaris7
+
+  Revision 1.16  2003/02/28 19:08:43  pouaite
+  trucs divers
+
+  Revision 1.15  2002/08/21 20:22:16  pouaite
+  fix compil
+
+  Revision 1.14  2002/08/17 18:33:40  pouaite
+  grosse commition
+
+  Revision 1.13  2002/06/23 10:44:05  pouaite
+  i18n-isation of the coincoin(kwakkwak), thanks to the incredible jjb !
+
+  Revision 1.12  2002/04/13 11:55:19  pouaite
+  fix kde3 + deux trois conneries
+
+  Revision 1.11  2002/04/01 01:39:38  pouaite
+  grosse grosse commition (cf changelog)
+
+  Revision 1.10  2002/03/18 22:46:49  pouaite
+  1 ou 2 bugfix mineurs, et surtout suppression de la dependance avec la libXpm .. un premier pas vers wmc� en 8bits
+
+  Revision 1.9  2002/03/05 21:04:28  pouaite
+  bugfixes suite � l'upgrade de dlfp [et retour au comportement � l'ancienne du clic sur les horloges pour les moules ronchonnes]
+
+  Revision 1.8  2002/03/03 10:10:04  pouaite
+  bugfixes divers et vari�s
+
+  Revision 1.7  2002/02/27 00:32:19  pouaite
+  modifs velues
+
+  Revision 1.6  2002/02/24 22:13:57  pouaite
+  modifs pour la v2.3.5 (selection, scrollcoin, plopification, bugfixes)
+
+  Revision 1.5  2002/02/02 23:49:17  pouaite
+  plop
+
+  Revision 1.4  2002/01/30 21:03:51  pouaite
+  correction du bug du au signe des char, et d'un petit bug dans les reference d'horloges
+
+  Revision 1.3  2002/01/14 23:54:06  pouaite
+  reconnaissance des posts effectu� par l'utilisateur du canard (� suivre...)
+
+  Revision 1.2  2001/12/02 18:34:54  pouaite
+  ajout de tags cvs Id et Log un peu partout...
+
+*/
+
+#include <libintl.h>
+#define _(String) gettext (String)
+
+#include "config.h"
+#include "coincoin.h"
+#include "coin_util.h"
+#include "myprintf.h"
+
+/*
+
+                                              "Abandon All Hope, Ye Who Enter Here"
+
+*/
+
+
+#define MI_MAX_LEN 1024 /* lg max du message prise en compte */
+#define MI_MAX_WORD 200 /* nb max de mots pris en compte */
+#define MAX_WLEN 32     /* lg max d'un mot trollesque */
+#define MAX_TD_MATCH 20 /* nb max d'occurences d'un meme mot dans troll_data */
+struct troll_data {
+  unsigned int hash;
+  unsigned char debut_troll; /* = 1 si le mot peut �tre � la source d'un troll */
+  unsigned char need_lnk1; /* = 1 si le mot n'est valable que si on satisfait la categorie lnkcat1 */
+  unsigned char categ; /* > � 0 */
+  unsigned char ltrunc;
+  unsigned char bonus;
+  unsigned char lnkcat1; /* > � 0 si catagorie li�e, 0 sinon */
+  unsigned char bonuscat1;
+  unsigned char lnkcat2; /* > � 0 si catagorie li�e, 0 sinon */
+  unsigned char bonuscat2;
+};
+
+#include "troll_data.h"
+
+typedef struct _Word {
+  unsigned char *w; /* pointeur non malloc� */
+  int len;
+  
+  int nb_td_idx; /* 0 = mot non trollesque */
+  int *td_idx;   /* liste de mots trollesques correspondant (a priori un m�me mot 
+		    trollesque peut apparaitre plusieurs fois dans troll_data, mais avec 
+		    des contextes differents (cad des categ, lnkcat12 et bonuscat12 differents)
+
+		    exemple: gpl + xemacs = troll
+		             gpl + windows = troll
+			     mais windows + xemacs = pas forcement troll
+
+			     bon cet exeple est pas genial mais l'idee est la
+		 */
+
+  int in_tag; /* dans un tag ? */
+  int num;
+  struct _Word *prev, *next;
+} Word;
+
+int cnt_anti_blocage; /* anti recursions qui se comportent en O(n!) (genre avec 30 coins..)*/
+#define MAX_CNT_ANTI_BLOCAGE 300000
+
+
+static Word*
+wordlist_merge(Word *w1, Word *w2)
+{
+  Word *w;
+
+  if (w2 == NULL) return w1;
+  if (w1 == NULL) return w2;
+  
+  w = w1;
+  while (w->next) { w = w->next; }
+  w->next = w2;
+  w2->prev = w;
+  
+  return w1;
+}
+
+/* enleve les mots dont le nb_td_idx == 0 */
+static Word *
+wordlist_cleanup(Word *wlst)
+{
+  Word *w, *next=NULL, *prev=NULL, *first=NULL;
+  
+  w = wlst;
+  if (w) { prev = w->prev; }
+  while (w) {
+    next = w->next;
+    if (w->nb_td_idx == 0) {
+      if (w->td_idx) free(w->td_idx);
+      free(w);
+    } else {
+      if (prev) prev->next = w;
+      w->prev = prev;
+      w->next = NULL;
+      if (first == NULL) first = w;
+      prev = w;
+    }
+    w = next;
+  }
+  return first;
+}
+
+static Word *
+decoupe_bloc(unsigned char *start, unsigned char *end, int in_tag)
+{
+  int n;
+  unsigned char *s, *tagstart, *tagend;
+  Word *wl;
+  
+  assert(start); assert(end);
+
+  n = end - start;
+  if (start == end) return NULL;
+  wl = NULL;
+
+  tagstart = NULL; tagend = NULL;
+  
+  /* recherche un tag (ouverture + fermeture) complet dans le bloc
+     si on n'en trouve qu'un partie, on consid�re que c'est un mot de na><0r */
+  for (s = start; s < end; s++) {
+    if (*s == '\t' && s < end-1) {
+      if (s[1] == '<' && tagstart == NULL) { tagstart = s; }
+      if (s[1] == '>' && tagstart != NULL) { tagend = s; break; }
+    }
+  }
+  
+  if (tagstart && tagend) {
+    wl = decoupe_bloc(start, tagstart, 0);
+    wl = wordlist_merge(wl, decoupe_bloc(tagstart+2, tagend, 1));
+    wl = wordlist_merge(wl, decoupe_bloc(tagend+2, end, 0));
+  } else {
+    /* si le mot se termine par des chiffres, on s�pare la partie chiffre de la partie mot */
+    s = end-1;
+    while (s > start) {
+      if (*s >= '0' && *s <= '9') {
+	s--; assert(*s);
+      } else { s++; break;}
+    }
+    if (s != end && s != start) {
+      /* on vient de couper en deux ? */
+      wl = decoupe_bloc(start, s, in_tag);
+      wl = wordlist_merge(wl,decoupe_bloc(s, end, in_tag));
+    } else {
+      ALLOC_OBJ(wl, Word);
+      wl->next = NULL;
+      wl->prev = NULL;
+      wl->w = start;
+      wl->len = end-start;
+      wl->in_tag = in_tag;
+    }
+  }
+  return wl;
+}
+
+static int
+tdata_lookup(unsigned hash_codes[MAX_WLEN], int preflen, int **match)
+{
+  int i;
+  int idx[MAX_TD_MATCH];
+  int nb_match;
+
+  assert(match);
+  assert(*match == NULL);
+
+  nb_match = 0;
+
+  /* recherche tous les mots qui collent et les stocke dans la table 'idx' */
+  for (i = 0; i < NB_TROLL_WORDS; i++) {
+    if (troll_data[i].hash == hash_codes[preflen]) {
+      idx[nb_match++] = i;
+      if (nb_match == MAX_TD_MATCH) break;
+    } else if (troll_data[i].ltrunc > 0 && troll_data[i].ltrunc <= preflen) {
+      assert(troll_data[i].ltrunc < MAX_WLEN && troll_data[i].ltrunc >= 2);
+      if (troll_data[i].hash == hash_codes[troll_data[i].ltrunc]) {
+	idx[nb_match++] = i;
+	if (nb_match == MAX_TD_MATCH) break;
+      }
+    }
+  }
+  
+  /* alloue la liste de retour */
+  if (nb_match) {
+    ALLOC_VEC((*match), nb_match, int);
+    for (i = 0; i < nb_match; i++) {
+      (*match)[i] = idx[i];
+    }
+  } else {
+    *match = NULL;
+  }
+
+  return nb_match;
+}
+
+
+/* 
+   on se donne une liste de mots trollesques, et parmis ceux-ci, on choisi la
+   combinaison donnant le meilleur score
+
+   c'est recursif, pas optimal, donc �a peut bouffer beaucoup de temps, d'o� le
+   cnt_anti_blocage et la limitation � 5 niveaux de r�cursion
+
+   nb_mots = nombre de mots disponibles (taille de sel_init, best_sel, sel)
+
+   filter_categ = 0 si on commence un nouveau troll (level == 1)
+                  num�ro de la catgogie sond�e si un troll est en cours (level > 1)
+
+   level = niveau de r�cursion (le plus bas : level = 1)
+
+   best_sel = en entr�e: liste des mots d�j� selectionn�s 
+              en sortie: m�me chose + les nouveaux mots qui compl�tent le troll
+
+   trouve -> en sortie , indique si on a pu satisfaire les conditions du troll	      
+
+ */
+static int
+eval_best_troll(Word *wlst, int nb_mots, int filter_categ, int level, int bonus_if_found, char *best_sel, int *trouve)
+{
+  Word *w;
+  int score;
+  int best_score = -10000;
+  char sel_init[nb_mots];
+  int i;
+
+  *trouve = 0;
+
+  assert(wlst);
+
+  if (level > 6) return 0; /* faut pas exagerer */
+
+  /* liste des mots d�j� selectionn�s � des level inf�rieurs */
+  for (i=0; i < nb_mots; i++) {
+    sel_init[i] = best_sel[i];
+  }
+
+  /* on parcours tous les mots */
+  w = wlst;
+
+  while (w) {
+    if (sel_init[w->num] == 0) { 
+      int idx;
+      /* assez souvent, nb_td_idx = 1.. */
+      for (idx=0; idx < w->nb_td_idx; idx++) {
+	struct troll_data *td;
+
+	assert(w->td_idx[idx] >= 0);
+	td = &troll_data[w->td_idx[idx]];
+
+	/* 
+	   le mot est admissible pour un supplement d'enquete si: 
+	   - on est au premier niveau, toutes les cat�gories sont bonnes mais il faut
+	   que le mot soit habilit� � d�buter un troll
+	   - on est en cours de troll (level > 1), il faut que le mot soit dans 
+	   la categorie recherchee
+	*/
+	if ((level == 1 && td->debut_troll) ||
+	    (level > 1 && td->categ == filter_categ)) {
+	  char sel[nb_mots];
+	  
+	  ALLOW_X_LOOP;
+	  
+	  cnt_anti_blocage++;
+	  if (cnt_anti_blocage > MAX_CNT_ANTI_BLOCAGE) goto stooooop;
+	  
+	  /* on reprend la liste de mots bloqu�s initial */
+	  for (i=0; i < nb_mots; i++) {
+	    sel[i] = sel_init[i];
+	  }
+	  
+	  /* score initial */
+	  score = td->bonus + bonus_if_found;
+	  BLAHBLAH(2,myprintf("lvl %<mag %d>, test du mot %<mag %.*s>, score=%<mag %d>, bscore=%d\n", level, w->len, w->w, score, best_score));
+	  
+	  
+	  /* on bloque le mot et on essaye d'aller plus loin dans le troll */
+	  sel[w->num] = level;
+	  if (td->lnkcat1) {
+	    int trouve1, trouve2;
+	    int subscore;
+	    subscore = eval_best_troll(wlst, nb_mots, td->lnkcat1, level+1, td->bonuscat1, sel, &trouve1);
+	    BLAHBLAH(2,myprintf("    recherche lnk1 de %<mag %.*s>, (cat=%<mag %d>)-> trouve = %<yel %d>, subscore=%<yel %d>\n", w->len, w->w, td->lnkcat1,trouve1, subscore));
+	    /* certains mots ne satisfont leur cat�gorie que si leur cat�gorie li�e est elle satisfaite
+	       on consid�re celle-ci comme OBLIGATOIRE */
+	    if (td->need_lnk1 == 0 || (trouve1)) {
+	      *trouve = 1;
+	      score += subscore;
+	    }
+	    if (td->lnkcat2 && trouve1) {
+	      score += eval_best_troll(wlst, nb_mots, td->lnkcat2, level+1, td->bonuscat2, sel, &trouve2);
+	    }
+	  } else {
+	    *trouve = 1;
+	  }
+	  
+	    /* yaisssseuuu ! */
+	  if (*trouve && (score > best_score || best_score == -10000)) {
+	    for (i=0; i < nb_mots; i++) {
+	      best_sel[i] = sel[i];
+	    }
+	    best_score = score;
+	  }
+	}
+      }
+    }
+    w = w->next;
+  }
+ stooooop:
+  return ((*trouve) ? best_score : 0);
+}
+
+void
+troll_detector(board_msg_info *mi) {
+  int score;
+
+  unsigned char *trans_simple  = "���������������������������������������";
+  unsigned char *trans_simple2 = "eeeeeeeeaaaaaaaauuuucciiiiiiiioooooooon";
+
+  unsigned char txt_simple[MI_MAX_LEN];
+
+  unsigned char *s;
+  int majuscule_cnt;
+  int exclamation_cnt;
+  int bizarre_cnt;
+  int smiley_flag;
+  int tag_cnt;
+  int boldwords_cnt;
+  int in_url;
+  int i;
+
+  Word *wlst;
+
+  mi->troll_score = 0;
+  if (Prefs.enable_troll_detector == 0) return;
+
+  flag_troll_braining = 1;
+  score = 0;
+  majuscule_cnt = 0;
+  exclamation_cnt = 0;
+  bizarre_cnt = 0;
+  smiley_flag = 0;
+  tag_cnt = 0;
+  boldwords_cnt = 0;
+  i = 0; s = mi->msg; assert(mi->msg);
+
+  /* passe zero: recherche de la pr�sence de smileys -> �a diminue le coefficient trollesque */
+  if (strstr(s, ";-)") || strstr(s, ":-)") || strstr(s, ":o)") || strstr(s, "(-:") || 
+      strstr(s, ":P") || strstr(s, ":)") || strstr(s, ";)") || strstr(s, ":�)") || strstr(s, ";o)")) {
+    smiley_flag = 1;
+  }
+
+  /* premiere passe: filtrage de certains caract�res, mise en minuscule et suppression des accents
+     comptage des majuscules, exclamations et caract�re graphiques */
+
+  in_url = 0;
+  
+  while (*s) {
+    unsigned char *p;
+
+    /* on ignore les tags des [urls] */
+    if (*s == '\t') {
+      if (s[1] == '<') {
+	if (strncasecmp(s, "\t<a href=\"",10) == 0) {
+	  s += 10;
+	  in_url++;
+	  if (i < MI_MAX_LEN-5) {
+	    txt_simple[i++] = '\t';
+	    txt_simple[i++] = '<';
+	    txt_simple[i++] = 'a';
+	    txt_simple[i++] = '\t';
+	    txt_simple[i++] = '>';
+	  }
+	  continue;
+	} else if (strncasecmp(s, "\t</a\t>", 6) == 0) {
+	  s += 6;
+	  in_url--;
+	  if (i < MI_MAX_LEN-6) {
+	    txt_simple[i++] = '\t';
+	    txt_simple[i++] = '<';
+	    txt_simple[i++] = '/';
+	    txt_simple[i++] = 'a';
+	    txt_simple[i++] = '\t';
+	    txt_simple[i++] = '>';
+	  }
+	  continue;
+	}	
+	if (in_url) {
+	  do s++; while (*s != '\t' && *s);
+	  if (*s) s++;
+	}
+      }
+      
+      
+    }
+
+    if (i == MI_MAX_LEN-1) break;
+
+    if ((p=strchr(trans_simple, *s))) {
+      txt_simple[i] = trans_simple2[(p-trans_simple)]; i++; 
+      s++;
+    } else if (*s < ' ' && *s != '\t') {
+      txt_simple[i] = ' '; i++;
+      s++;
+    } else if (*s >= 'A' && *s <= 'Z') {
+      majuscule_cnt++;
+      txt_simple[i] = 'a' + (*s - 'A'); i++; 
+      s++;
+    } else if (*s == '!' || *s == '?') {
+      exclamation_cnt++; 
+      s++;
+    } else if (strchr(".;,:@*()[]{}#\"'��", *s)) {
+      txt_simple[i] = ' '; i++; 
+      s++;
+    } else {
+      /* on vire les '/' sauf si il ferment une balise */
+      if (*s == '/' && s > (unsigned char*)mi->msg && *(s-1) != '<') {
+	txt_simple[i] = ' ';
+      } else {
+	txt_simple[i] = *s;
+      }
+      i++;
+      if (*s > 127) { bizarre_cnt++; } 
+      s++;
+    }
+    if (i == MI_MAX_LEN-1) break;
+  }
+  txt_simple[i] = 0;
+  BLAHBLAH(2,myprintf(_("troll_detector, initial message : %<YEL %s>\n"), mi->msg));
+  /*  myprintf("message filtr� : %<GRN %s>\n", txt_simple); */
+  /*
+    passe deux: construction de la liste de mots avec identification des tags, 
+     s�paration des mots se terminant par des chiffres, du genre 'emacs21' en 'emacs' '21' 
+     tout cela sans modifier les mots du genre 'na><0r'
+  */
+  s = txt_simple; wlst = NULL;
+  i = 0;
+  while (*s) {
+    unsigned char *p;
+    Word *sublst;
+
+    while (*s && *s <= ' ' && *s != '\t') s++; 
+    if (*s == 0) break;
+
+    p = s;
+    while (*p && (*p > ' ' || *p == '\t')) p++;
+
+    sublst = decoupe_bloc(s, p, 0);
+    wlst = wordlist_merge(wlst, sublst);
+    s = p;
+  }
+  ALLOW_X_LOOP;
+
+  if (wlst == NULL) goto cassos;
+
+  /* comptage du nombre de tags,
+     ainsi que du nombre de mots mis en gras */
+  {
+    Word *w = wlst;
+    int in_bold=0;
+    in_url=0;
+
+    while (w) {
+      if (w->in_tag && w->len == 2 && w->w[0] == '/' && w->w[1] == 'b') {
+	in_bold = 0;
+      }
+      if (in_bold && !in_url) {
+	boldwords_cnt++;
+      }
+
+      /* on ne compte pas les tags fermant */
+      if (w->in_tag && w->w[0] != '/') {
+	if (!(w->len == 1 && (w->w[0] == 'i' || w->w[0] == 'a'))) {
+	  tag_cnt ++; /* on ne compte pas les <i>, c'est des tags gentils, mais on compte tout le reste */
+	}
+	if (w->len == 1 && w->w[0] == 'b') {
+	  in_bold = 1;
+	}
+	if (w->len == 1 && w->w[0] == 'a') {
+	  in_url = 1;
+	}
+      }
+      if (in_url && w->len == 2 && w->w[0] == '/' && w->w[1] == 'a') {
+	in_url = 0;
+      }
+      w = w->next; 
+    }
+  }
+
+
+  if (Prefs.verbosity > 1) {
+    Word *w;
+    w = wlst;
+    myprintf("liste de mots: (smiley_flag = %<bld %d>, bizarre_cnt = %<bld %d>, exclam_cnt=%<bld %d>, majuscule_cnt=%<bld %d>, tag_cnt=%<bld %d>\n",
+	     smiley_flag, bizarre_cnt, exclamation_cnt, majuscule_cnt, tag_cnt); 
+    while (w) { 
+      assert(w->len); 
+      if (w->in_tag == 0) {
+	myprintf("'%<GRN %.*s>' ", w->len, w->w); 
+      } else {
+	myprintf("'%<MAG %.*s>' ", w->len, w->w); 
+      }
+      w = w->next;
+    }
+    printf("\n\n");
+  }
+
+  /* recherche des mots trollesques */
+
+  {
+    Word *w;
+    w = wlst;
+    while (w) {
+      unsigned hash_codes[MAX_WLEN];
+
+      int i,j;
+      char s[MAX_WLEN+1];
+      
+      strncpy(s, w->w, MAX_WLEN); s[MIN(MAX_WLEN, w->len)] = 0; 
+
+
+      /* calcul du hash code pour differentes longueurs */
+      hash_codes[0] = hash_codes[1] = 0;
+      for (i = 2; i < MAX_WLEN; i++) {
+	hash_codes[i] = str_hache(s, MIN(i, w->len));
+      }
+      
+      /* trouve-t-on un mot troll correspondant ? */
+      
+      
+      w->td_idx = NULL;
+      w->nb_td_idx = tdata_lookup(hash_codes, MIN(w->len, MAX_WLEN-1), &w->td_idx);
+
+      if (w->nb_td_idx == 0) {
+	/* si pas trouv�, deuxieme chance: on */
+	/* enleeeeeeeeve leeeees letttttres en douuublons */
+	i=0; j=0;
+	while (s[i]) {
+	  s[j] = s[i];
+	  while (s[j] == s[i]) i++;
+	  j++;
+	}
+	s[j] = 0;
+	for (i = 2; i < MAX_WLEN; i++) {
+	  hash_codes[i] = str_hache(s, MIN(i, (int)strlen(s)));
+	}
+	w->nb_td_idx = tdata_lookup(hash_codes, MIN(strlen(s), MAX_WLEN-1), &w->td_idx);
+      }
+
+      if (w->nb_td_idx > 0) {
+	BLAHBLAH(2,myprintf("mot troll trouv�: '%<MAG %.*s>' (idx = ", w->len,w->w);
+		 for (i=0; i < w->nb_td_idx; i++) printf("%d ", w->td_idx[i]); printf(")\n"));
+      }
+      w = w->next;
+    }
+  }
+
+  /* 
+     suppression des doublons (genre 'coin coin coin coin coin coin coin ... ') -> 
+     on ne conserve qu'un seul exemplaire (et qui ne sera utilise que dans un troll)
+
+     exception: si le mot_troll est present en plusieurs exemplaires dans troll_data,
+     alors on le laisse en autant d'exemplaires (bonne idee? mauvaise idee ?)
+  */
+
+  {
+    Word *w;
+    int wcnt[NB_TROLL_WORDS];
+    int i;
+    
+    for (i=0; i < NB_TROLL_WORDS; i++) wcnt[i] = 0;
+    w = wlst;
+    while (w) {
+      int keep_word;
+      
+      keep_word = 0;
+      for (i=0; i < w->nb_td_idx; i++) {
+	if (wcnt[w->td_idx[i]] == 0) {
+	  wcnt[w->td_idx[i]]++;
+	  keep_word = 1;
+	}
+      }
+      if (keep_word == 0) {
+	w->nb_td_idx = 0; /* marqu� pour effecament */
+      }
+      w = w->next;
+    }
+  }
+
+
+  do {
+    int nb_mots;
+    Word *w;
+
+    /* on vire les mots dont le nb_td_idx == 0 */
+
+    wlst = wordlist_cleanup(wlst);
+
+    if (wlst == NULL) break; /* tous les mots ont �t� �valu�s */
+
+    /* comptage et num�rotation des mots restants */
+    nb_mots = 0;
+    w = wlst;
+    while (w) {
+      w->num = nb_mots++; 
+      assert(nb_mots < 1000);
+      w = w->next;
+    }
+
+    assert(nb_mots > 0);
+
+    {
+      char *selection;
+      int sub_score;
+      int i, trouve;
+
+      /* tableau stockant la liste des mots selectionnes pour le troll */
+      selection = malloc(nb_mots);
+      for (i=0; i < nb_mots; i++) selection[i] = 0;
+
+      /* anti-je-tourne-en-rond */
+      cnt_anti_blocage = 0;
+
+      /* recherche du plus gros troll dans la liste de mots */
+      sub_score = eval_best_troll(wlst, nb_mots, 0, 1, 0, selection, &trouve);
+      if (cnt_anti_blocage > MAX_CNT_ANTI_BLOCAGE) {
+	BLAHBLAH(2,myprintf(_("%<RED this one was too hard> ! (nb_words = %d)\n txt='%s'\n"), nb_mots, mi->msg));
+      }
+
+      if (trouve == 0) {
+	BLAHBLAH(2,printf(_(" -> unable to use the words left in a troll, this is the end\n")));
+	free(selection);
+	break;
+      }
+      
+      score += sub_score;
+
+      BLAHBLAH(2,myprintf(_("score = %<YEL %d> (sub_score=%<YEL %d>), the following words were used: "), score, sub_score));
+      /* on marque les mots selectionn�s pour la suppression � la prochaine �tape */
+      w = wlst;
+      while (w) {
+	if (selection[w->num]) { 
+	  w->nb_td_idx = 0; 
+	  BLAHBLAH(2,myprintf("'%<CYA %.*s>' (lvl=%d) ", w->len,w->w,  selection[w->num]));
+	}
+	w = w->next;
+      }
+      BLAHBLAH(2,printf("\n"));
+
+      free(selection);
+    }
+  } while (1);
+
+  while (wlst) {
+    Word *w;
+    w = wlst;
+    if (w->td_idx) free(w->td_idx); w->td_idx = NULL;
+    wlst = w->next;
+    free(w);
+  }
+
+  /* ajout de divers bonus :) */
+  {
+    int msglen;
+    int bonus;
+
+    msglen = strlen(txt_simple);
+    if (majuscule_cnt > msglen/3 && msglen > 5) {
+      bonus = MIN(majuscule_cnt / 6, 3);
+      if (majuscule_cnt > msglen*4/5 && msglen > 10) {
+	bonus += 1;
+      }
+      BLAHBLAH(2,myprintf(_("bonus for using capitals: %<YEL %d>\n"), bonus));
+      score += bonus;
+    }
+    
+    if (exclamation_cnt > 4 && msglen > 6) {
+      bonus = 1;
+      if (exclamation_cnt > 8) bonus += 3;
+      BLAHBLAH(2,myprintf(_("bonus for exclamation marks: %<YEL %d>\n"), bonus));
+      score += bonus;
+    }
+    if (bizarre_cnt > 2 && msglen > 2) {
+      bonus = 1;
+      if (bizarre_cnt > msglen/4) {
+	bonus += 3;
+      }
+      BLAHBLAH(2,myprintf(_("bonus for abusive use of weird characters: %<YEL %d>\n"), bonus));
+      score += bonus;
+    }
+    if (tag_cnt>1) {
+      bonus = MIN(tag_cnt/2, 6);
+      BLAHBLAH(2,myprintf(_("bonus for abusive use of html tags: %<YEL %d>\n"), bonus));
+      score += bonus;
+    }
+    if (boldwords_cnt > 1) {
+      bonus = MIN(boldwords_cnt/2, 6);
+      BLAHBLAH(2,myprintf(_("bonus for abusive usage of BOLD: %<YEL %d>\n"), bonus));
+      score += bonus;
+    }
+    if (smiley_flag) { /* attenuateur de troll */
+      score /= 2;
+      BLAHBLAH(2,myprintf(_("%<bld attenuation for using a smiley>\n")));
+    }
+    
+    BLAHBLAH(2,myprintf(_("%<WHT final score: >%<YEL %d>\n\n"), score));
+  }
+
+
+  mi->troll_score = score;
+
+  
+
+
+ cassos:
+    flag_troll_braining = 0;
+}
diff --git a/src/wmccc.c b/src/wmccc.c
new file mode 100644
index 0000000..a0d7f4b
--- /dev/null
+++ b/src/wmccc.c
@@ -0,0 +1,1557 @@
+/*
+ * Initial main.c file generated by Glade. Edit as required.
+ * Glade will not overwrite this file.
+ */
+
+/*
+  petite remarque sur la gestion de la memoire dans wmccc: on utilise un
+  garbage-collector tr�s puissant. Pour le mettre en action, il suffit
+  d'appeler exit(0). Side-effect: met fin au programme.
+*/
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include <errno.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <signal.h>
+#include <ctype.h>
+#include <unistd.h>
+#define GLOBALS_HERE
+#define WMCCC_C
+#include "wmccc.h"
+#include "wmccc_interface.h"
+#include "wmccc_support.h"
+#include "myprintf.h"
+
+GtkWidget *my_lookup_widget(GtkWidget *widget, const gchar *widget_name_) {
+  char *s = strdup(widget_name_), *p;
+  GtkWidget *parent, *found_widget;
+  for (p = s; *p; ++p) if (*p == '.' || *p == '[' || *p == ']') *p = '_';
+  for (;;)
+    {
+      if (GTK_IS_MENU (widget))
+        parent = gtk_menu_get_attach_widget (GTK_MENU (widget));
+      else
+        parent = widget->parent;
+      if (!parent)
+        parent = (GtkWidget*) g_object_get_data (G_OBJECT (widget), "GladeParentKey");
+      if (parent == NULL)
+        break;
+      widget = parent;
+    }
+
+  found_widget = (GtkWidget*) g_object_get_data (G_OBJECT (widget),
+                                                 s);
+  free(s);
+  return found_widget;
+}
+
+GtkWidget *my_lookup_widget_assert(GtkWidget *widget, const gchar *widget_name_) {
+  GtkWidget *w = my_lookup_widget(widget, widget_name_); assert(w);
+  return w;
+}
+
+GdkColor*
+irgb_to_gdkcolor(unsigned icol) {
+  static GdkColor color;
+  color.red   = ((icol & 0xff0000) >> 16) * 256+ 127;
+  color.green = ((icol & 0x00ff00) >> 8) * 256 + 127;
+  color.blue  = ((icol & 0x0000ff)     ) * 256 + 127;
+    
+  gdk_colormap_alloc_color( gdk_colormap_get_system(), &color, FALSE, TRUE);
+  return &color;
+}
+
+unsigned gdkcolor_to_irgb(GdkColor *c) {
+  g_assert(c);
+  return ((c->red/256) << 16) + ((c->green/256) << 8) + (c->blue/256);
+}
+
+GtkWidget *messagebox_dialog(char *widget) {
+  static GtkWidget *d = NULL;
+  if (!d) { d = create_messagebox_dialog(); g_assert(d); }
+  return (widget == NULL) ? d : my_lookup_widget_assert(d, widget); 
+}
+
+GtkWidget *new_board_dialog(char *widget) {
+  GtkWidget *d = getdlg(DLG_NEW_BOARD);
+  return (widget == NULL) ? d : my_lookup_widget_assert(d, widget); 
+}
+
+GtkWidget *new_rss_dialog(char *widget) {
+  GtkWidget *d = getdlg(DLG_NEW_RSS);
+  return (widget == NULL) ? d : my_lookup_widget_assert(d, widget); 
+}
+
+GtkWidget *new_pop_dialog(char *widget) {
+  GtkWidget *d = getdlg(DLG_NEW_POP);
+  return (widget == NULL) ? d : my_lookup_widget_assert(d, widget); 
+}
+
+/*GtkWidget *pinnipede_dialog(char *widget) {
+  static GtkWidget *d = NULL;
+  if (!d) { d = create_pinnipede_dialog(); g_assert(d); }
+  return (widget == NULL) ? d : my_lookup_widget_assert(d, widget); 
+  }*/
+
+GtkWidget *pinnipede_site_colors_dialog(char *widget) {
+  GtkWidget *d = getdlg(DLG_SITE_COLORS);
+  return (widget == NULL) ? d : my_lookup_widget_assert(d, widget); 
+}
+
+GtkWidget *edit_dialog(char *widget) {
+  GtkWidget *d = getdlg(DLG_EDIT_OPTIONS);
+  return (widget == NULL) ? d : my_lookup_widget_assert(d, widget); 
+}
+
+GtkWidget *change_board_settings_dialog(char *widget) {
+  GtkWidget *d = getdlg(DLG_CHANGE_BOARD_SETTINGS);
+  return (widget == NULL) ? d : my_lookup_widget_assert(d, widget); 
+}
+
+GtkWidget *change_rss_settings_dialog(char *widget) {
+  GtkWidget *d = getdlg(DLG_CHANGE_RSS_SETTINGS);
+  return (widget == NULL) ? d : my_lookup_widget_assert(d, widget); 
+}
+
+GtkWidget *change_pop_settings_dialog(char *widget) {
+  GtkWidget *d = getdlg(DLG_CHANGE_POP_SETTINGS);
+  return (widget == NULL) ? d : my_lookup_widget_assert(d, widget); 
+}
+
+GtkWidget *bronson_wizard(const char *widget) {
+  GtkWidget *d = getdlg(DLG_BRONSON_WIZARD);
+  return (widget == NULL) ? d : my_lookup_widget_assert(d, widget); 
+}
+
+/*GtkWidget *grab_cookie_dialog(char *widget) {
+  static GtkWidget *d = NULL;
+  if (!d) { d = create_grab_cookie_dialog(); g_assert(d); }
+  return (widget == NULL) ? d : my_lookup_widget_assert(d, widget); 
+  }*/
+
+GtkWidget *sitelist_dialog(char *widget) {
+  GtkWidget *d = getdlg(DLG_SITELIST);
+  return (widget == NULL) ? d : my_lookup_widget_assert(d, widget); 
+}
+
+void bidouille_prefs_site_name(SitePrefs *sp) {
+  int i;
+  sp->all_names = g_renew(char *, sp->all_names, MAX(4, sp->nb_names));
+  for (i = sp->nb_names; i < 4; i++) sp->all_names[i] = NULL;
+  sp->site_name = NULL;
+}
+
+int bidouille_prefs_site_names() {
+  /* petite bidouille pour les alias de sites et le nom de site */
+  int snum;
+  for (snum = 0; snum < Prefs->nb_sites; snum++) {
+    bidouille_prefs_site_name(Prefs->site[snum]);
+  }
+  return 0;
+}
+
+/* lit out relit les prefs */
+int read_prefs() {
+  char *err;
+  if (Prefs && glob.nb_selected_sites) { 
+    quick_message("you should not be able to do that!"); exit(1); 
+  }
+  if (Prefs) wmcc_prefs_destroy(Prefs);
+  Prefs = g_new0(GeneralPrefs, 1);
+  wmcc_prefs_set_default(Prefs);
+
+  err = wmcc_prefs_read_options(Prefs, glob.options_file,1);
+  if (err || Prefs->nb_sites == 0) {
+    if (!err && Prefs->nb_sites == 0) err = "no site..";
+    quick_message("error reading %s: %s", glob.options_file, err); return 2;
+  }
+  bidouille_prefs_site_names();
+  return 0;
+}
+
+int new_options_from_string(const char *s) {
+  FILE *f;
+  char *err;
+  int old_nb_site = Prefs->nb_sites, i;
+  char *congratulations = NULL;
+  if (!s || strlen(s) == 0) return -1;
+  f = open_wfile(glob.tmp_options_file);
+  if (!f) {
+    quick_message("could not create temporary file '%s' : %s", glob.tmp_options_file, strerror(errno));
+    return -1;
+  }
+  if (fputs(s,f) == EOF) {
+    quick_message("could not create temporary file '%s' : %s", glob.tmp_options_file, strerror(errno));
+    return -1;
+  }
+  fclose(f);
+  err = wmcc_prefs_read_options(Prefs, glob.tmp_options_file, 1);
+  if (err) {
+    g_print("error while parsing preferences: %s\n", err);
+    if (read_prefs() != 0) { // on remet celles d'avant
+      fprintf(stderr, "�a commence a bien faire.\n"); exit(1); 
+    }    
+    return 2;
+  }
+  for (i = old_nb_site; i < Prefs->nb_sites; ++i) {
+    congratulations = str_cat_printf(congratulations, "%s%s", Prefs->site[i]->site_name, (i?"":", "));
+  }
+  quick_message("Congratulations !\nThe options were successfully parsed\n%d sites were added: %s",
+                Prefs->nb_sites-old_nb_site,congratulations);
+  free(congratulations);
+  return 0;
+}
+
+/* Function to open a dialog box displaying the message provided. */
+void quick_message(gchar *message_fmt, ...) {
+  va_list ap;
+  GtkWidget *label;
+  char s[1024];
+  va_start(ap, message_fmt);
+  vsnprintf(s,1024,message_fmt,ap);
+  va_end(ap);
+  label = messagebox_dialog("messagebox_label"); 
+  gtk_label_set_text(GTK_LABEL(messagebox_dialog("messagebox_label")), s);
+  gtk_dialog_run (GTK_DIALOG(messagebox_dialog(NULL)));
+}
+
+GtkWidget *colorselection_dialog() {
+  static GtkWidget *d = NULL;
+  if (!d) { d = gtk_color_selection_dialog_new("select a color"); g_assert(d); }
+  return d;
+}
+
+int change_or_create_site_prefs(int sid, SitePrefs *sp0) {
+  for (sp0->nb_names = 0; sp0->all_names[sp0->nb_names] && sp0->nb_names < 4; ++sp0->nb_names) /*plop*/ ;
+  if (sid == -1 || sid > Prefs->nb_sites-1) {
+    sid = Prefs->nb_sites++;
+    if (Prefs->nb_sites == MAX_SITES) {
+      quick_message("too much sites!");
+      return -1;
+    }  
+    Prefs->site[sid] = g_new0(SitePrefs,1);
+    wmcc_site_prefs_set_default(Prefs->site[sid],1);
+  }
+  wmcc_site_prefs_copy(Prefs->site[sid], sp0);  
+  bidouille_prefs_site_name(Prefs->site[sid]);
+  //printf("created new site, name = %s %s\n", sp0->all_names[0], Prefs->site[sid]->all_names[0]);
+  return 0;
+}
+
+void colorize_grab_cookie_dialog(GtkWidget *view) {
+  GtkTextIter start, end;
+  GtkTextBuffer *buffer;
+  static GtkTextTag *tags[4] = { NULL, };
+  char *txt; // utf8 :/
+  int lcount;
+  buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW (view)); g_assert(buffer);
+  //if (tags[1] == 0) {
+    tags[0] = NULL;
+    tags[1] = gtk_text_buffer_create_tag(buffer, "cookiefile",
+                                         "foreground", "#804000", NULL);
+    tags[2] = gtk_text_buffer_create_tag(buffer, "cookieok",
+                                         "foreground", "#008000", "weight", PANGO_WEIGHT_BOLD, NULL);
+    tags[3] = gtk_text_buffer_create_tag(buffer, "cookiedead",
+                                         "foreground", "#808080", NULL);
+    //}
+  lcount = 0;
+  for (lcount = 0; lcount < gtk_text_buffer_get_line_count(buffer); ++lcount) {
+    char *p; int state, i0, i1;
+    gtk_text_buffer_get_iter_at_line(buffer, &start, lcount);
+    gtk_text_buffer_get_iter_at_line(buffer, &end, lcount+1);
+    txt = gtk_text_buffer_get_slice(buffer, &start, &end, TRUE);
+    if (str_startswith(txt, "Search")) {
+      for (p=txt; *p; ++p) *p = 1;
+    } else {
+      char *p = strchr(txt,'=');
+      while (p && p > txt && !isspace(*p)) --p;
+      
+      if (p) {
+        char *q = p+1;
+        int exp = 0;
+        for (p=q; p && !isspace(*p); ++p) /*plop*/;
+        sscanf(p, " %*s %*s %d", &exp);
+        for (p=q; p && !isspace(*p); ++p) *p = (exp < 0) ? 3 : 2;
+      }
+    }
+    int col;
+    for (col = 0, state = 0, i0 = 0; col <= (int)strlen(txt); ++col) { /* on prend le 0 */
+      int next_state = (txt[col] >= 1 && txt[col] <= 3) ? txt[col] : 0;
+      p = txt + col;
+      if (next_state != state) {
+        if (state) {
+          i1 = p-txt;
+          gtk_text_buffer_get_iter_at_line_index(buffer, &start, lcount, i0);
+          gtk_text_buffer_get_iter_at_line_index(buffer, &end, *p == 0 ? lcount+1 : lcount, *p == 0 ? 0 : i1);
+          gtk_text_buffer_apply_tag (buffer, tags[state], &start, &end);
+        }
+        i0 = p-txt;
+        state = next_state;
+      }
+    }
+    free(txt);
+  } 
+}
+
+
+void grab_cookie_bt_clicked(GtkWidget *bt UNUSED, GtkWidget *user_cookie_widget UNUSED) {  
+  char searched[200]; searched[0] = 0;
+  FILE *f;
+  if (glob.nb_selected_sites != 0 && !str_is_empty(glob.selected_sites[0]->backend_url)) {
+    SplittedURL su; 
+    if (split_url(glob.selected_sites[0]->backend_url, &su) == 0) {
+      strcpy(searched, su.host);
+    }
+  }
+  if (strlen(searched) == 0) 
+    strcpy(searched,"linuxfr.org");
+
+  char cmd[300];
+  char *tmp = shell_quote(searched);    
+  snprintf(cmd, sizeof cmd, "wmcoincoin-search-cookies %s", tmp);
+  free(tmp);
+  myprintf("wmccc is running: %<YEL %s>\n", cmd);
+  f = popen(cmd, "r");
+
+  if (f == NULL) { quick_message("uh ? failed to launch %s (%s)", cmd, strerror(errno)); return; }
+  GtkWidget *d = create_grab_cookie_dialog();
+  GtkWidget *view = lookup_widget(d,"cookies");
+  GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW (view)); g_assert(buffer);
+  PangoFontDescription *ttfdesc = pango_font_description_copy(GTK_WIDGET(view)->style->font_desc);
+  GtkTextIter start, end;
+  gtk_text_buffer_get_bounds(buffer, &start, &end);
+  gtk_text_buffer_delete(buffer, &start, &end);
+
+  //gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(view), GTK_WRAP_WORD);
+  gtk_text_view_set_left_margin(GTK_TEXT_VIEW(view), 5);
+  pango_font_description_set_family (ttfdesc, "monospace");
+  pango_font_description_set_weight( ttfdesc, PANGO_WEIGHT_NORMAL);
+  pango_font_description_set_size ( ttfdesc, PANGO_SCALE * 8);
+  gtk_widget_modify_font(view, ttfdesc);  
+  
+  char *msg = str_printf("   output of %s ... \n", cmd);
+  gtk_text_buffer_insert_at_cursor(buffer, msg, strlen(msg));
+  errno = 0;
+  do {
+    int i;
+    unsigned char *l = str_fget_line(f);
+    for (i=0; l[i]; ++i) if (l[i] >= 127) l[i] = ' '; 
+    gtk_text_buffer_insert_at_cursor(buffer, l, strlen(l));
+    gtk_text_buffer_insert_at_cursor(buffer, "\n", 1);    
+  } while (!feof(f));
+  pclose(f);
+  colorize_grab_cookie_dialog(view);
+
+  g_signal_connect_swapped (lookup_widget(d,"close_bt"), "clicked", G_CALLBACK(gtk_widget_destroy), d);
+  gtk_widget_show(d);
+  //gtk_window_set_transient_for(GTK_WINDOW(grab_cookie_dialog(NULL)), GTK_WINDOW(GTK_WIDGET(bt)->parent));
+}
+
+/* ------ widget management ------*/
+
+typedef struct TouchedInfo_ {
+  int touched;
+  int multivalued;
+  GtkWidget *feedback_label;
+} TouchedInfo;
+
+gboolean
+widget_value_changed_callback(GtkWidget *w, TouchedInfo *ti) {
+  g_assert(ti);
+  if (ti->touched == -1) return FALSE;
+  //printf("ptouiched=%d\n", ti->touched);
+  (ti->touched)++;
+  if (ti->feedback_label) {
+    gtk_widget_modify_fg(ti->feedback_label, GTK_STATE_NORMAL, &glob.modif_widget_color);
+    gtk_widget_modify_text(w, GTK_STATE_NORMAL, &glob.modif_widget_color);
+    gtk_label_set_text(GTK_LABEL(ti->feedback_label), "[changed]");
+    gtk_widget_set_sensitive(ti->feedback_label, TRUE);
+  }
+  /*gtk_widget_modify_bg(w, GTK_STATE_NORMAL, &glob.modif_widget_color);
+  gtk_widget_modify_bg(w, GTK_STATE_SELECTED, &glob.modif_widget_color);
+  gtk_button_set_label(GTK_BUTTON(w), "plop!");*/
+  return FALSE;
+}
+
+/* ---------------- toggle buttons ----------------*/
+void multi_set_toggle_button(GtkWidget *w, GtkWidget *feedback_label, int value, int count) {
+  TouchedInfo *ti = NULL;
+  //printf("multi set toggle : count = %d, val = %d\n",count,value);
+  if (count == 0) {
+    if (!(ti = g_object_get_data(G_OBJECT(w),"touched"))) {
+      ti = g_new0(TouchedInfo,1);
+      g_object_set_data(G_OBJECT(w), "touched", ti);
+      g_signal_connect ((gpointer) w, "toggled",
+                        G_CALLBACK (widget_value_changed_callback),
+                        g_object_get_data(G_OBJECT(w), "touched"));
+    }
+    ti->feedback_label = feedback_label; ti->multivalued = 0;
+    ti->touched = -1;
+    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(w), value);
+  } else {
+    ti = g_object_get_data(G_OBJECT(w), "touched");
+    if (value != gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w)) && !ti->multivalued) 
+      ti->multivalued = 1;
+    /*    if (!gtk_toggle_button_get_inconsistent(GTK_TOGGLE_BUTTON(w)) &&
+        gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w)) != value) {
+      gtk_toggle_button_set_inconsistent(GTK_TOGGLE_BUTTON(w), TRUE);
+    }
+    */
+  }
+  if (ti->feedback_label) {
+    if (ti->multivalued) {
+      gtk_widget_modify_fg(ti->feedback_label, GTK_STATE_NORMAL, &glob.modif_widget_color);
+    } else gtk_widget_set_style (ti->feedback_label, NULL);
+    gtk_label_set_text(GTK_LABEL(ti->feedback_label), ti->multivalued ? "[different values!]" : "[unchanged]");
+    gtk_widget_set_sensitive(ti->feedback_label, FALSE);
+  }
+  ti->touched = 0;
+}
+
+int multi_get_toggle_button(GtkWidget *w, gboolean *value) {
+  TouchedInfo *ti = g_object_get_data(G_OBJECT(w), "touched"); g_assert(ti);
+  if (ti->touched) {
+    *value = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(w));
+  }
+  return ti->touched;
+}
+/* ---------------- option menus ----------------*/
+void multi_set_option_menu(GtkWidget *w, int value, int count) {
+  TouchedInfo *ti = NULL;
+
+  value--; /* pour backend_flavour qui varie entre 1 et 3 */
+
+  //printf("multi_set_option_menu(%p,%d,%d)\n", w, value, count);
+  if (count == 0) {
+    if (!(ti = g_object_get_data(G_OBJECT(w),"touched"))) {
+      ti = g_new0(TouchedInfo,1);
+      g_object_set_data(G_OBJECT(w), "touched", ti);
+      g_signal_connect ((gpointer) w, "changed",
+                        G_CALLBACK (widget_value_changed_callback),
+                        g_object_get_data(G_OBJECT(w), "touched"));
+    }
+    ti->feedback_label = NULL; ti->multivalued = 0;
+    ti->touched = -1;
+    gtk_option_menu_set_history(GTK_OPTION_MENU(w), value);
+  } else {
+    ti = g_object_get_data(G_OBJECT(w), "touched");
+    if (value != gtk_option_menu_get_history(GTK_OPTION_MENU(w)) && !ti->multivalued) {
+      ti->multivalued = 1;
+      gtk_widget_set_sensitive(w, FALSE);
+    }
+  }
+  ti->touched = 0;
+}
+
+int multi_get_option_menu(GtkWidget *w, gboolean *value) {
+  TouchedInfo *ti = g_object_get_data(G_OBJECT(w), "touched"); g_assert(ti);
+  if (ti->touched) {
+    *value = gtk_option_menu_get_history(GTK_OPTION_MENU(w))+1;
+  }
+  return ti->touched;
+}
+
+/* ------------------- text entry ---------------------------- */
+int check_for_non_ascii(const char *s) {
+  unsigned i;
+  for (i = 0; i < strlen(s); ++i) 
+    if (s[i] < 0 || s[i] == 127) {
+      quick_message("Please, please, please !!!\n Avoid non-ASCII characters in wmccc...\n"
+                    "Since gtk2 is all-UTF8, and wmcc is all-iso8859 everything is going to break "
+                    "if you put accentuated character everywhere... So for now, it is restricted to pure ascii.\nYes, it sux.");
+      return -1;
+    }
+  return 0;
+}
+
+char *gtk_entry_get_text_iso8859(GtkEntry *w) {
+  /*int new_len;
+  const char *s = gtk_entry_get_text(w);
+  char *s2 = g_convert(s, -1, "iso-8859-15", "utf8", NULL, &new_len, NULL);
+  return s2 == NULL ? "invalid!!" : s2;*/
+  const char *s = gtk_entry_get_text(w);
+  check_for_non_ascii(s); return (char*)s;
+}
+
+void multi_set_text_entry(GtkWidget *w, GtkWidget *feedback_label, char *value, int count) {
+  TouchedInfo *ti = NULL;
+  //printf("multi set text entry : count = %d, val = %s\n",count,value);
+  assert(value);
+  if (count == 0) {
+    if (!(ti = g_object_get_data(G_OBJECT(w),"touched"))) {
+      ti = g_new0(TouchedInfo,1);
+      g_object_set_data(G_OBJECT(w), "touched", ti);
+      g_signal_connect ((gpointer) w, "changed",
+                        G_CALLBACK (widget_value_changed_callback),
+                        g_object_get_data(G_OBJECT(w), "touched"));
+    }
+    ti->feedback_label = feedback_label; ti->multivalued = 0;
+    ti->touched = -1;
+    gtk_entry_set_text(GTK_ENTRY(w), value);
+  } else {
+    ti = g_object_get_data(G_OBJECT(w), "touched");
+    if (strcmp(value, gtk_entry_get_text_iso8859(GTK_ENTRY(w))) && !ti->multivalued) {
+      ti->multivalued = 1;
+      if (feedback_label == NULL) gtk_entry_set_text(GTK_ENTRY(w), "[multiple values]");
+    }
+  }
+  if (ti->feedback_label) {
+    if (ti->multivalued) {
+      gtk_widget_modify_fg(ti->feedback_label, GTK_STATE_NORMAL, &glob.modif_widget_color);
+    } else gtk_widget_set_style (ti->feedback_label, NULL);
+    gtk_label_set_text(GTK_LABEL(ti->feedback_label), ti->multivalued ? "[different values!]" : "[unchanged]");
+    gtk_widget_set_sensitive(ti->feedback_label, FALSE);
+  }
+  ti->touched = 0;  
+}
+
+
+int multi_get_text_entry(GtkWidget *w, char **pstr) {
+  TouchedInfo *ti = g_object_get_data(G_OBJECT(w), "touched"); g_assert(ti);
+  if (ti->touched) {
+    //printf("multi_get_text_entry: %s <- %s\n", *pstr,  gtk_entry_get_text(GTK_ENTRY(w)));
+    ASSIGN_STRING_VAL(*pstr, gtk_entry_get_text_iso8859(GTK_ENTRY(w)));
+  }
+  return ti->touched;
+}
+/* ------------------- spin button ---------------------------- */
+void multi_set_spin_button(GtkWidget *w, GtkWidget *feedback_label, int value, int count) {
+  TouchedInfo *ti = NULL;
+  //printf("multi set spin button : count = %d, val = %d\n",count, value);
+  if (count == 0) {
+    if (!(ti = g_object_get_data(G_OBJECT(w),"touched"))) {
+      ti = g_new0(TouchedInfo,1);
+      g_object_set_data(G_OBJECT(w), "touched", ti);
+      g_signal_connect ((gpointer) w, "changed",
+                        G_CALLBACK (widget_value_changed_callback),
+                        g_object_get_data(G_OBJECT(w), "touched"));
+    }
+    ti->feedback_label = feedback_label; ti->multivalued = 0;
+    ti->touched = -1;
+    gtk_spin_button_set_value(GTK_SPIN_BUTTON(w), (gdouble)value);
+  } else {
+    ti = g_object_get_data(G_OBJECT(w), "touched");
+    if ((value != gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(w))) && !ti->multivalued) {
+      ti->multivalued = 1;
+    }
+  }
+  if (ti->feedback_label) {
+    if (ti->multivalued) {
+      gtk_widget_modify_fg(ti->feedback_label, GTK_STATE_NORMAL, &glob.modif_widget_color);
+    } else gtk_widget_set_style (ti->feedback_label, NULL);
+    gtk_label_set_text(GTK_LABEL(ti->feedback_label), ti->multivalued ? "[different values!]" : "[unchanged]");
+    gtk_widget_set_sensitive(ti->feedback_label, FALSE);
+  }
+  ti->touched = 0;
+}
+
+int multi_get_spin_button(GtkWidget *w, int *pvalue) {
+  TouchedInfo *ti = g_object_get_data(G_OBJECT(w), "touched"); g_assert(ti);
+  if (ti->touched) {
+    *pvalue = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(w));
+  }
+  return ti->touched;
+}
+/* ------------------- color button -------------------------- */
+
+void color_button_update_color(GtkWidget *w, GdkColor *c, int value_store) {
+  if (value_store) g_object_set_data(G_OBJECT(w), "value", GINT_TO_POINTER(gdkcolor_to_irgb(c)));
+  gtk_widget_modify_bg(w, GTK_STATE_PRELIGHT, c);
+  gtk_widget_modify_bg(w, GTK_STATE_NORMAL, c);
+}
+
+void color_button_clicked_callback(GtkWidget *w, TouchedInfo *ti) {
+  GdkColor c;
+  
+  GtkWidget *colorsel = GTK_COLOR_SELECTION_DIALOG(colorselection_dialog())->colorsel;
+  
+  gtk_color_selection_set_current_color(GTK_COLOR_SELECTION(colorsel), 
+                                        irgb_to_gdkcolor(GPOINTER_TO_INT(g_object_get_data(G_OBJECT(w), "value"))));
+  gtk_color_selection_set_has_palette(GTK_COLOR_SELECTION(colorsel), TRUE);
+  int rep = gtk_dialog_run(GTK_DIALOG(colorselection_dialog()));
+
+  gtk_color_selection_get_current_color(GTK_COLOR_SELECTION(colorsel), &c);
+  gtk_widget_hide(GTK_WIDGET(colorselection_dialog()));
+  
+  if (rep == GTK_RESPONSE_OK) {
+    //printf("colorselection_dialog returned %d %d/%d/%d\n", rep, c.red, c.green, c.blue);
+    color_button_update_color(w,&c,1);
+    widget_value_changed_callback(w,ti);
+  }
+}
+
+void multi_set_color_button(GtkWidget *w, unsigned value, int count) {
+  TouchedInfo *ti = NULL;
+  //printf("multi set color button : count = %d, val = %d\n",count,value);
+  if (count == 0) {
+    if (!(ti = g_object_get_data(G_OBJECT(w),"touched"))) {
+      ti = g_new0(TouchedInfo,1);
+      g_object_set_data(G_OBJECT(w), "touched", ti);
+      g_signal_connect ((gpointer) w, "clicked",
+                        G_CALLBACK (color_button_clicked_callback),
+                        g_object_get_data(G_OBJECT(w), "touched"));
+    }
+    ti->feedback_label = GTK_BIN(w)->child; ti->multivalued = 0;
+    ti->touched = -1;
+    //printf("bgcolor : %06x\n", value);
+    //gtk_widget_modify_text(ti->feedback_label, GTK_STATE_NORMAL, irgb_to_gdkcolor(value));
+    color_button_update_color(w, irgb_to_gdkcolor(value), 1);
+  } else {
+    ti = g_object_get_data(G_OBJECT(w), "touched");
+    if (value != (unsigned)GPOINTER_TO_INT(g_object_get_data(G_OBJECT(w), "value")) && !ti->multivalued) {
+      gtk_widget_set_style (ti->feedback_label, NULL);
+      ti->multivalued = 1;
+    }
+  }
+  if (ti->multivalued) {
+    //gtk_widget_set_style(w, NULL); // marche p� 
+    color_button_update_color(w, irgb_to_gdkcolor(0x808080), 0);
+  }
+  gtk_label_set_text(GTK_LABEL(ti->feedback_label), ti->multivalued ? "[*val!]" : "       ");
+  ti->touched = 0;
+}
+
+int multi_get_color_button(GtkWidget *w, unsigned *value) {
+  TouchedInfo *ti = g_object_get_data(G_OBJECT(w), "touched"); g_assert(ti);
+  if (ti->touched) {
+    *value =  GPOINTER_TO_INT(g_object_get_data(G_OBJECT(w), "value"));
+    //printf("multi_get_color_button got %06x, stored in %p\n", *value, value);
+  }
+  return ti->touched;
+}
+
+
+int validate_cookies(const char *cookies, SitePrefs *sp) { 
+  ASSIGN_STRING_VAL(sp->user_cookie, cookies); return 0; 
+}
+int validate_post_url(const char *url, SitePrefs *sp) { 
+  SplittedURL su;
+  if (split_url(url, &su)) {
+    quick_message("malformed post url");
+    return -1;
+  } else {
+    ASSIGN_STRING_VAL(sp->post_url, url);
+    return 0;
+  }
+}
+int validate_backend_url(const char *url, SitePrefs *sp) {
+  SplittedURL su;
+  if (split_url(url, &su)) {
+    quick_message("malformed backend url");
+    return -1;
+  } else {
+    ASSIGN_STRING_VAL(sp->backend_url, url);
+    return 0;
+  }
+}
+int validate_post_template(const char *url, SitePrefs *sp) { 
+  ASSIGN_STRING_VAL(sp->post_template, url); 
+  return 0; 
+}
+    
+
+int validate_site_name(const char *s, SitePrefs *sp, int check_new_site) {
+  if (str_is_empty(s)) { quick_message("Empty site name"); return -1; }
+  if (check_for_non_ascii(s)) return -1;
+  if (check_new_site) {
+    char *s2 = strdup(s); str_trim(s2);
+    int i;
+    for (i=0; i < Prefs->nb_sites; ++i) {
+      int j;
+      assert(Prefs->site[i]);
+      for (j=0; j < Prefs->site[i]->nb_names; ++j)
+        if (strcasecmp(Prefs->site[i]->all_names[j], s) == 0) {
+          printf("oups\n");
+          quick_message("there is already a site called %s", s); return -1;
+        }
+    }
+    free(s2);
+  }
+  if (sp->all_names == NULL) { sp->all_names = g_new0(char*,4); }
+  if (s != sp->all_names[0]) ASSIGN_STRING_VAL(sp->all_names[0], s);
+  return 0;
+}
+
+int pfc_toggle_button(GtkWidget *win, const char *widget_name, int *pvalue, int index, int finalize) {
+  GtkWidget *w, *w_fb;
+  if ((w=my_lookup_widget(win, widget_name))) {
+    char *name_fb = str_printf("%s_fb", widget_name);
+    //printf("dialog[%s] F=%d, V=%d (toggle button)\n", widget_name, finalize, *pvalue);
+    w_fb = my_lookup_widget(win, name_fb);
+    FREE_STRING(name_fb);
+    if (finalize == 0) {
+      multi_set_toggle_button(w, w_fb, *pvalue, index);
+    } else multi_get_toggle_button(w, pvalue);
+    return 1;
+  } else return 0;
+}
+
+int pfc_option_menu(GtkWidget *win, const char *widget_name, int *pvalue, int index, int finalize) {
+  GtkWidget *w;
+  if ((w=my_lookup_widget(win, widget_name))) {
+    if (finalize == 0) {
+      multi_set_option_menu(w, *pvalue, index);
+    } else multi_get_option_menu(w, pvalue);
+    return 1;
+  } else return 0;
+}
+
+int pfc_color_button(GtkWidget *win, const char *widget_name, unsigned *value, int index, int finalize) {
+  GtkWidget *w;
+  if ((w=my_lookup_widget(win, widget_name))) {
+    if (finalize == 0) {
+      multi_set_color_button(w, *value, index);
+    } else multi_get_color_button(w, value);
+    return 1;
+  } else return 0;
+}
+
+int pfc_text_entry(GtkWidget *win, const char *widget_name, gchar **pstr, int index, int finalize) {
+  GtkWidget *w, *w_fb;
+  //printf("text entry lookup(%s) = %p\n", widget_name, my_lookup_widget(win, widget_name));
+  if ((w=my_lookup_widget(win, widget_name))) {
+    char *name_fb = str_printf("%s_fb", widget_name);
+    //printf("dialog[%s] F=%d, V=%s (text entry)\n", widget_name, finalize, *pstr);
+    w_fb = my_lookup_widget(win, name_fb);
+    FREE_STRING(name_fb);
+    if (finalize == 0) {
+      multi_set_text_entry(w, w_fb, *pstr == NULL ? "" : *pstr, index);
+    } else multi_get_text_entry(w, pstr);
+    return 1;
+  } else return 0;
+}
+
+int pfc_spin_button(GtkWidget *win, const char *widget_name, int *pvalue, int index, int finalize) {
+  GtkWidget *w, *w_fb;
+  if ((w=my_lookup_widget(win, widget_name))) {
+    char *name_fb = str_printf("%s_fb", widget_name);
+    //printf("dialog[%s] F=%d, V=%d (spin button)\n", widget_name, finalize, *pvalue);
+    w_fb = my_lookup_widget(win, name_fb);
+    FREE_STRING(name_fb);
+    if (finalize == 0) {
+      multi_set_spin_button(w, w_fb, *pvalue, index);
+    } else multi_get_spin_button(w, pvalue);
+    return 1;
+  } else return 0;
+}
+
+#define PFC_TOGGLE_BUTTON_G(pname) { pfc_toggle_button(dialog, #pname, &Prefs->pname, 0, finalize); }
+#define PFC_TOGGLE_BUTTON_S(pname) { int i__; for (i__=0; i__ < glob.nb_selected_sites; ++i__) { \
+                                       pfc_toggle_button(dialog, #pname, &glob.selected_sites[i__]->pname, i__, finalize); }}
+#define PFC_OPTION_MENU_G(pname) { pfc_option_menu(dialog, #pname, &Prefs->pname, 0, finalize); }
+#define PFC_OPTION_MENU_S(pname) { int i__; for (i__=0; i__ < glob.nb_selected_sites; ++i__) { \
+                                     pfc_option_menu(dialog, #pname, (int*)&glob.selected_sites[i__]->pname, i__, finalize); }}
+#define PFC_COLOR_BUTTON_S(pname) { int i__; for (i__=0; i__ < glob.nb_selected_sites; ++i__) { \
+                                       pfc_color_button(dialog, #pname, &glob.selected_sites[i__]->pname, i__, finalize); }}
+#define PFC_TEXT_ENTRY_G(pname) { pfc_text_entry(dialog, #pname, &Prefs->pname, 0, finalize); }
+#define PFC_TEXT_ENTRY_S(pname) { int i__; for (i__=0; i__ < glob.nb_selected_sites; ++i__) \
+                                       pfc_text_entry(dialog, #pname, &glob.selected_sites[i__]->pname, i__, finalize); }
+#define PFC_SPIN_BUTTON_G(pname) { pfc_spin_button(dialog, #pname, &Prefs->pname, 0, finalize); }
+#define PFC_SPIN_BUTTON_S(pname) { int i__; for (i__=0; i__ < glob.nb_selected_sites; ++i__) \
+                                       pfc_spin_button(dialog, #pname, &glob.selected_sites[i__]->pname, i__, finalize); }
+static int prepare_or_finalize_conf_dialog_(GtkWidget *dialog, int finalize) {
+  PFC_TEXT_ENTRY_S(all_names[0]);
+  PFC_TEXT_ENTRY_S(all_names[1]);
+  PFC_TEXT_ENTRY_S(all_names[2]);
+  PFC_TEXT_ENTRY_S(all_names[3]);
+  PFC_TEXT_ENTRY_S(backend_url);
+  PFC_OPTION_MENU_S(backend_flavour);
+  PFC_TEXT_ENTRY_S(post_url);
+  PFC_TEXT_ENTRY_S(post_template);
+  PFC_SPIN_BUTTON_S(board_check_delay);
+  PFC_TEXT_ENTRY_S(user_cookie);
+  PFC_TEXT_ENTRY_S(user_login);
+  PFC_TEXT_ENTRY_S(pop3_user);
+  PFC_TEXT_ENTRY_S(pop3_pass);
+  PFC_TEXT_ENTRY_S(user_agent);
+  PFC_TEXT_ENTRY_S(proxy_name);
+  PFC_SPIN_BUTTON_S(proxy_port);
+  PFC_TEXT_ENTRY_S(proxy_auth_user);
+  PFC_TEXT_ENTRY_S(proxy_auth_pass);
+  PFC_TOGGLE_BUTTON_S(proxy_nocache);
+  PFC_TOGGLE_BUTTON_S(use_if_modified_since);
+  PFC_TEXT_ENTRY_G(pp_fn_family);
+  PFC_SPIN_BUTTON_G(pp_fn_size);
+  PFC_TOGGLE_BUTTON_S(rss_ignore_description);
+  PFC_TOGGLE_BUTTON_G(pinnipede_open_on_start);
+  PFC_TOGGLE_BUTTON_G(pp_use_classical_tabs);
+  PFC_TOGGLE_BUTTON_G(pp_use_colored_tabs);
+  PFC_OPTION_MENU_G(pp_tabs_pos);
+  PFC_TOGGLE_BUTTON_G(hungry_boitakon);
+  PFC_TOGGLE_BUTTON_G(disable_xft_antialiasing);
+  PFC_TOGGLE_BUTTON_S(mark_id_gaps);
+  PFC_TOGGLE_BUTTON_G(auto_swallow);
+  PFC_TOGGLE_BUTTON_G(enable_troll_detector);
+  PFC_TOGGLE_BUTTON_G(board_enable_hfr_pictures);
+  PFC_TOGGLE_BUTTON_G(board_auto_dl_pictures);
+  PFC_TOGGLE_BUTTON_G(hunt_opened);
+  PFC_TOGGLE_BUTTON_S(hunt_opened_on_site);
+  PFC_SPIN_BUTTON_G(hunt_max_duck);
+  PFC_TEXT_ENTRY_G(browser_cmd);
+  PFC_TEXT_ENTRY_G(browser2_cmd);
+  PFC_COLOR_BUTTON_S(pp_bgcolor);
+  PFC_COLOR_BUTTON_S(pp_fgcolor.opaque);
+  PFC_COLOR_BUTTON_S(pp_trollscore_color.opaque);
+  PFC_COLOR_BUTTON_S(pp_login_color.opaque);
+  PFC_COLOR_BUTTON_S(pp_tstamp_color.opaque);
+  PFC_COLOR_BUTTON_S(pp_useragent_color.opaque);
+  PFC_COLOR_BUTTON_S(pp_useragent_color.opaque);
+  PFC_COLOR_BUTTON_S(pp_url_color.opaque);
+  PFC_COLOR_BUTTON_S(pp_visited_url_color.opaque);
+  PFC_COLOR_BUTTON_S(pp_fgcolor.transp);
+  PFC_COLOR_BUTTON_S(pp_trollscore_color.transp);
+  PFC_COLOR_BUTTON_S(pp_login_color.transp);
+  PFC_COLOR_BUTTON_S(pp_tstamp_color.transp);
+  PFC_COLOR_BUTTON_S(pp_useragent_color.transp);
+  PFC_COLOR_BUTTON_S(pp_useragent_color.transp);
+  PFC_COLOR_BUTTON_S(pp_url_color.transp);
+  PFC_COLOR_BUTTON_S(pp_visited_url_color.transp);
+  if (!finalize && my_lookup_widget(dialog, "user_cookie") && my_lookup_widget(dialog, "grab_cookie_bt")) 
+    g_signal_connect ((gpointer) my_lookup_widget(dialog, "grab_cookie_bt"), "clicked",
+                      G_CALLBACK (grab_cookie_bt_clicked), my_lookup_widget(dialog, "user_cookie"));
+  if (!finalize && my_lookup_widget(dialog, "edit_options_bt")) 
+    g_signal_connect ((gpointer) my_lookup_widget(dialog, "edit_options_bt"), "clicked",
+                      G_CALLBACK (run_edit_dialog), NULL);
+  return 0;
+}
+
+int prepare_conf_dialog(GtkWidget *dialog) { return prepare_or_finalize_conf_dialog_(dialog, 0); }
+
+int finalize_conf_dialog(GtkWidget *dialog) { return prepare_or_finalize_conf_dialog_(dialog, 1); }
+
+/* --------------------- new board dialog ------------------------*/
+
+static SitePrefs *new_board_sp = 0;
+
+int prepare_new_board_dialog() {
+  if (new_board_sp == 0) new_board_sp = g_new0(SitePrefs, 1);
+  wmcc_site_prefs_set_default(new_board_sp,1);
+  bidouille_prefs_site_name(new_board_sp);
+  ASSIGN_STRING_VAL(new_board_sp->all_names[0], "dlfp");
+  glob.nb_selected_sites = 1; glob.selected_sites[0] = new_board_sp;
+  prepare_conf_dialog(new_board_dialog(NULL));
+  glob.nb_selected_sites = 0;
+  return 0;
+}
+
+int validate_new_board_dialog()
+{
+  glob.nb_selected_sites = 1; glob.selected_sites[0] = new_board_sp;
+  if (finalize_conf_dialog(new_board_dialog(NULL)) == 0 &&
+      validate_site_name(new_board_sp->all_names[0], new_board_sp, TRUE) == 0) {
+    change_or_create_site_prefs(-1, new_board_sp);
+    return 0;
+  } else return 1;
+}
+
+/* --------------------- new rss dialog ------------------------*/
+
+static SitePrefs *new_rss_sp = 0;
+
+int prepare_new_rss_dialog() {
+  if (new_rss_sp == 0) new_rss_sp = g_new0(SitePrefs, 1);
+  SitePrefs *sp = new_rss_sp;
+  wmcc_site_prefs_set_default(sp,1); 
+  bidouille_prefs_site_name(sp);
+  ASSIGN_STRING_VAL(sp->all_names[0], "dlfpnews");
+  ASSIGN_STRING_VAL(sp->backend_url, "http://linuxfr.org/backend.rss");
+  sp->backend_type = BACKEND_TYPE_RSS; sp->board_check_delay = 600;
+  glob.nb_selected_sites = 1; glob.selected_sites[0] = sp;
+  prepare_conf_dialog(new_rss_dialog(NULL));
+  glob.nb_selected_sites = 0;
+  return 0;
+}
+
+int validate_new_rss_dialog()
+{
+  glob.nb_selected_sites = 1; glob.selected_sites[0] = new_rss_sp;
+  if (finalize_conf_dialog(new_rss_dialog(NULL)) == 0) {
+    change_or_create_site_prefs(-1, new_rss_sp);
+    return 0;
+  } else return 1;
+}
+
+/* --------------------- new pop dialog ------------------------*/
+
+static SitePrefs *new_pop_sp = 0;
+
+int prepare_new_pop_dialog() {
+  if (new_pop_sp == 0) new_pop_sp = g_new0(SitePrefs, 1);
+  SitePrefs *sp = new_pop_sp;
+  wmcc_site_prefs_set_default(sp,1); 
+  bidouille_prefs_site_name(sp);
+  ASSIGN_STRING_VAL(sp->all_names[0], "altern");
+  ASSIGN_STRING_VAL(sp->backend_url, "pop://mail.altern.org");
+  new_pop_sp->backend_type = BACKEND_TYPE_POP; sp->board_check_delay = 600;
+  glob.nb_selected_sites = 1; glob.selected_sites[0] = sp;
+  prepare_conf_dialog(new_pop_dialog(NULL));
+  glob.nb_selected_sites = 0;
+  return 0;
+}
+
+int validate_new_pop_dialog()
+{
+  glob.nb_selected_sites = 1; glob.selected_sites[0] = new_pop_sp;
+  if (finalize_conf_dialog(new_pop_dialog(NULL)) == 0) {
+    change_or_create_site_prefs(-1, new_pop_sp);
+    return 0;
+  } else return 1;
+}
+
+/* ---------------- pinnipede_dialog -------------------*/
+
+/*
+int run_pinnipede_dialog() {
+  if (prepare_conf_dialog(pinnipede_dialog(NULL)) == 0) {
+    do {
+      int rep = gtk_dialog_run(GTK_DIALOG(pinnipede_dialog(NULL)));
+      if (rep != GTK_RESPONSE_OK) break;        
+      printf("pinni finished\n");
+    } while (finalize_conf_dialog(pinnipede_dialog(NULL)));
+  }
+  gtk_widget_hide(GTK_WIDGET(pinnipede_dialog(NULL)));
+  return 0;
+}
+*/
+/* ------------------ edit dialog -------------------*/
+void colorize_edit_dialog() {
+  /* should be made utf8 aware .. */
+  GtkTextIter start, end;
+  GtkWidget *view = edit_dialog("textview");
+  GtkTextBuffer *buffer;
+  static GtkTextTag *tags[7] = { NULL, };
+  char *txt; // utf8 :/
+  int lcount;
+  buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW (view)); g_assert(buffer);
+  //if (tags[1] == 0) {
+    tags[0] = NULL;
+    tags[1] = gtk_text_buffer_create_tag(buffer, "comment_tag",
+                                         "foreground", "#804000", NULL);
+    tags[2] = gtk_text_buffer_create_tag(buffer, "string_tag",
+                                         "foreground", "#008000", NULL);
+    tags[3] = gtk_text_buffer_create_tag(buffer, "kwdot",
+                                         "foreground", "#A0A0F0", NULL);
+    tags[4] = gtk_text_buffer_create_tag(buffer, "kwlev1",
+                                         "foreground", "blue", NULL);
+    tags[5] = gtk_text_buffer_create_tag(buffer, "kwlev2",
+                                         "foreground", "#0080A0", NULL);
+    tags[6] = gtk_text_buffer_create_tag(buffer, "triple_comment",
+                                         "foreground", "#301010", "family", "sans", NULL);
+    //}
+  lcount = 0;
+  for (lcount = 0; lcount < gtk_text_buffer_get_line_count(buffer); ++lcount) {
+    char *p; int state, i0, i1;
+    gtk_text_buffer_get_iter_at_line(buffer, &start, lcount);
+    gtk_text_buffer_get_iter_at_line(buffer, &end, lcount+1);
+    txt = gtk_text_buffer_get_slice(buffer, &start, &end, TRUE);
+
+    if ((p=strstr(txt, "###"))) {
+      for (p+=3; *p; ++p) *p = 6;
+    }
+
+    if ((p=strchr(txt, '#'))) {
+      for (; *(unsigned char*)p >= ' '; ++p) *p = 1;
+    }
+
+    for (p = txt, state = 0; *p; ++p) {
+      if (*p == '"') { if (!(p > txt && *(p-1) == '\\')) state = 1-state; }
+      if (state == 1 && *p != '"') *p = 2;
+    }
+    if ((p = strstr(txt, ": "))) {
+      char *q = txt;
+      state = 4;
+      for (q = txt; q <= p; ++q) {
+        if (*q == '.' || *q == ':') {
+          *q = 3; state = 5;
+        } else {
+          *q = state;
+        }
+      }
+    }
+    int col;
+    for (col = 0, state = 0, i0 = 0; col <= (int)strlen(txt); ++col) { /* on prend le 0 */
+      int next_state = (txt[col] >= 1 && txt[col] <= 6) ? txt[col] : 0;
+      p = txt + col;
+      if (next_state != state) {
+        if (state) {
+          i1 = p-txt;
+          gtk_text_buffer_get_iter_at_line_index(buffer, &start, lcount, i0);
+          gtk_text_buffer_get_iter_at_line_index(buffer, &end, *p == 0 ? lcount+1 : lcount, *p == 0 ? 0 : i1);
+          gtk_text_buffer_apply_tag (buffer, tags[state], &start, &end);
+        }
+        i0 = p-txt;
+        state = next_state;
+      }
+    }
+    free(txt);
+  } 
+}
+
+GtkTextBuffer *buffer;
+
+int edit_dialog_insert_file(const char *fname, gboolean remove_uncommented) {
+  FILE *f;
+  if (!(f = fopen(fname, "r"))) {
+    quick_message("uh ? cannot find %s", fname); return -1;
+  } else {
+    char rd[10000];
+    int lcnt = 1;
+    int got_warning = 0;
+    int is_new_line = 1;
+    while (fgets(rd, sizeof rd, f)) {
+      char *utf8, *p;
+      gsize utf8_len;
+
+      if (is_new_line && remove_uncommented && rd[0] != '#' && !str_is_empty(rd)) continue;
+
+      is_new_line = 0;
+      for (p = rd; *p; ++p) if (*p == '\n') { is_new_line = 1; lcnt++; }
+ 
+      //utf8 = g_locale_to_utf8(rd, -1, NULL, &utf8_len, NULL);
+      utf8 = g_convert(rd, -1, "utf8", "iso-8859-15", NULL, &utf8_len, NULL);
+      if (!utf8 || utf8_len == 0) {
+        if (!got_warning) {
+          quick_message("gtk could not convert your option file to utf8 -- "
+                        "check your locales, check for fucking caracters in your file (around line %d)..\n"
+                        "I am now going to patiently strip all non ascii caracters. You have been warned.", lcnt);
+          got_warning = 1;
+        }
+        for (p = rd; *p; ++p) { if (*p < 0) *p = ' '; }
+        utf8 = g_locale_to_utf8(rd, -1, NULL, &utf8_len, NULL); g_assert(utf8); g_assert(utf8_len);
+      }
+      //gtk_text_buffer_get_bounds(buffer, &start, &end);
+      gtk_text_buffer_insert_at_cursor(buffer, utf8, utf8_len);
+      g_free(utf8);
+    }
+  }
+  return 0;
+}
+
+int prepare_edit_dialog() {
+  GtkTextIter it1, it2, start, end;
+  GtkWidget *view = edit_dialog("textview");
+  PangoFontDescription *ttfdesc;
+
+  if (!glob.wmcc_pid) gtk_widget_set_sensitive(edit_dialog("apply_bt"),FALSE);
+
+  buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW (view)); g_assert(buffer);
+  gtk_text_buffer_get_bounds(buffer, &start, &end);
+  gtk_text_buffer_delete(buffer, &start, &end);
+
+  gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(view), GTK_WRAP_WORD);
+  gtk_text_view_set_left_margin(GTK_TEXT_VIEW(view), 5);
+  ttfdesc = pango_font_description_copy(GTK_WIDGET(view)->style->font_desc);
+  pango_font_description_set_family (ttfdesc, "monospace");
+  gtk_widget_modify_font(view, ttfdesc);
+
+  if (edit_dialog_insert_file(glob.options_file, FALSE) != 0) return -1;
+  gtk_text_buffer_insert_at_cursor(buffer, "\n\n# append your new options here (or edit the values above)\n\n\n", -1);
+
+  //gtk_text_buffer_get_bounds(buffer, &start, &end);
+  //GtkTextMark *end_mark =  gtk_text_buffer_create_mark(buffer, "end", &end, 0); g_assert(end_mark);
+  int lcount = gtk_text_buffer_get_line_count(buffer);
+
+  gtk_text_buffer_insert_at_cursor(buffer, "# Below you will find the content of the options file shipped with wmcc\n"
+                                   "# You will find there some options that wmccc does not show\n"
+                                   "# Everything is commented by default, so just uncomment them\n",
+                                   -1);
+  edit_dialog_insert_file(WMCCDATADIR "/options", TRUE);
+
+  colorize_edit_dialog();
+
+  gtk_text_buffer_get_iter_at_line(buffer, &it1, lcount+3);
+  gtk_text_buffer_get_iter_at_line(buffer, &it2, lcount-2);
+  GtkTextMark *mark =  gtk_text_buffer_create_mark(buffer, "plop", &it1, 0); g_assert(mark);
+  gtk_text_view_scroll_mark_onscreen(GTK_TEXT_VIEW(view), mark);
+  gtk_text_buffer_place_cursor(buffer, &it2);
+  gtk_text_buffer_set_modified(buffer, FALSE);
+  return 0;
+}
+
+int edit_options_dialog_commit_changes_to_wmccc() {
+  GtkTextIter start, end;
+  char *tmpfname = str_printf("%s/.wmcoincoin/wmccc_editted_options", getenv("HOME"));
+  gtk_text_buffer_get_bounds(buffer, &start, &end);
+  gchar *txt = gtk_text_buffer_get_text(buffer, &start, &end, FALSE);
+  FILE *f = fopen(tmpfname, "w");
+  if (f == NULL) { quick_message("could not write to '%s'..", tmpfname); return -1; }
+  fprintf(f, "#temp file for wmccc\n%s", txt);
+  
+  fclose(f);
+  
+  GeneralPrefs *Prefs2 = g_new0(GeneralPrefs, 1);
+  wmcc_prefs_set_default(Prefs2);
+
+  char *err = wmcc_prefs_read_options(Prefs2, tmpfname,1);
+  if (err == NULL) {
+    err = wmcc_prefs_read_options_auth(Prefs2, glob.options_file);
+  }
+  if (err || Prefs2->nb_sites == 0) {
+    if (!err && Prefs2->nb_sites == 0) err = "no site found!!";
+    quick_message("You fucked up the prefs!\nThe error is: %s\nPlease correct that and try again", err); 
+    wmcc_prefs_destroy(Prefs2);
+    return -1;
+  }
+  wmcc_prefs_destroy(Prefs); glob.nb_selected_sites = 0;
+  Prefs = Prefs2;
+  bidouille_prefs_site_names();
+  free(tmpfname);
+  return 0;
+}
+
+void run_new_board_dialog() {
+  wmccc_run_dialog(DLG_NEW_BOARD,TRUE);
+}
+
+void run_new_rss_dialog() {
+  wmccc_run_dialog(DLG_NEW_RSS,TRUE);
+}
+
+void run_new_pop_dialog() {
+  wmccc_run_dialog(DLG_NEW_POP,TRUE);
+}
+
+void run_edit_dialog() {
+  wmccc_run_dialog(DLG_EDIT_OPTIONS,FALSE);
+}
+
+int prepare_bronson_wizard(int isinit UNUSED) {
+
+  return 0;
+}
+/*
+int run_pinnipede_site_colors_dialog() {
+  GtkWidget *pp = pinnipede_site_colors_dialog(NULL);
+  prepare_conf_dialog(pp);
+  int rep = gtk_dialog_run(GTK_DIALOG(pp));
+  if (rep == GTK_RESPONSE_APPLY) {
+    finalize_conf_dialog(pp);
+    apply_prefs();
+  }
+  gtk_widget_hide(GTK_WIDGET(pp));
+  return 0;
+}
+*/
+/*
+int run_change_board_settings_dialog() {
+  GtkWidget *dlg = change_board_settings_dialog(NULL);
+  prepare_or_finalize_conf_dialog(dlg,0);
+  assert(lookup_widget(dlg,"all_names_0_"));
+  assert(my_lookup_widget(dlg,"all_names[0]"));
+  int rep = gtk_dialog_run(GTK_DIALOG(dlg));
+  if (rep == GTK_RESPONSE_APPLY) {
+    prepare_or_finalize_conf_dialog(dlg,1);
+    apply_prefs();
+  }
+  gtk_widget_hide(GTK_WIDGET(dlg));
+  return 0;
+}
+*/
+
+
+enum { SITE_ENABLED_COLUMN, SITE_NAME_COLUMN, BACKEND_COLUMN, REFRESH_COLUMN, N_COLUMN };
+
+/*static void
+tree_selection_changed_cb (GtkTreeSelection *selection, gpointer data)
+{
+        GtkTreeIter iter;
+        GtkTreeModel *model;
+        gchar *author;
+
+        if (gtk_tree_selection_get_selected (selection, &model, &iter))
+        {
+                gtk_tree_model_get (model, &iter, AUTHOR_COLUMN, &author, -1);
+
+                g_print ("You selected a book by %s\n", author);
+
+                g_free (author);
+        }
+}
+*/
+
+typedef struct SiteListModel {
+  GtkListStore *store;
+  GtkTreeSelection *select;
+} SiteListModel;
+
+int sitelist_iter_to_sid(GtkTreeModel *store, GtkTreeIter *iter) {
+  gchar *site_name = NULL;
+  int id;
+  gtk_tree_model_get(store, iter, SITE_NAME_COLUMN, &site_name, -1);
+  id = wmcc_prefs_find_site_id(Prefs, site_name);
+  g_free(site_name);
+  return id;
+}
+
+void sitelist_update_site_order() {
+  GtkTreeView *view = GTK_TREE_VIEW(sitelist_dialog("treeview"));
+  GtkTreeModel *store = gtk_tree_view_get_model(view);
+  GtkTreeIter iter;
+  int count, i=0;
+  SitePrefs *tmpp[MAX_SITES];
+  memset(tmpp, 0, sizeof tmpp);
+  if (gtk_tree_model_get_iter_first(store, &iter)) {
+    do {
+      gchar *site_name;
+      count = sitelist_iter_to_sid(store,&iter);
+      gtk_tree_model_get(store, &iter, 
+                         SITE_NAME_COLUMN, &site_name,
+                         -1);
+      //printf("site(%02d)=%s %s\n", i, site_name, Prefs->site[count]->all_names[0]);
+      tmpp[i] = Prefs->site[count];
+      ++i;
+    } while (gtk_tree_model_iter_next(store, &iter));
+    memcpy(Prefs->site, tmpp, sizeof(SitePrefs*)*MAX_SITES);
+  }
+}
+
+void sitelist_remove_cb(GtkWidget *button UNUSED, SiteListModel *mdl) {
+  GtkTreeIter iter;
+  int count, j;
+  sitelist_update_site_order();
+  if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(mdl->store), &iter)) {
+    do {
+      if (gtk_tree_selection_iter_is_selected(mdl->select,&iter) &&
+          (count = sitelist_iter_to_sid(GTK_TREE_MODEL(mdl->store), &iter)) != -1) {
+        wmcc_site_prefs_destroy(Prefs->site[count]);
+        Prefs->site[count] = NULL;
+      }
+    } while (gtk_tree_model_iter_next(GTK_TREE_MODEL(mdl->store), &iter));
+  }
+  for (count = 0, j=0; count < Prefs->nb_sites; ++count) {
+    if (Prefs->site[count]) {
+      Prefs->site[j++] = Prefs->site[count];
+    }
+  }
+  Prefs->nb_sites = j;
+  gtk_dialog_response(GTK_DIALOG(sitelist_dialog(NULL)),1); 
+}
+
+void sitelist_edit_cb(GtkWidget *button UNUSED, SiteListModel *mdl) {
+  GtkTreeIter iter;
+  int count, count2 = 0;
+  glob.nb_selected_sites = 0;
+  if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(mdl->store), &iter)) {
+    do {
+      count = sitelist_iter_to_sid(GTK_TREE_MODEL(mdl->store),&iter);
+      if (gtk_tree_selection_iter_is_selected(mdl->select,&iter) &&
+          (count = sitelist_iter_to_sid(GTK_TREE_MODEL(mdl->store),&iter)) != -1) {
+        if (glob.nb_selected_sites && 
+            Prefs->site[count]->backend_type != glob.selected_sites[0]->backend_type) {
+          quick_message("You are not allowed to edit multiple sites with different backend types");
+          return;
+        }
+        glob.selected_sites[glob.nb_selected_sites++] = Prefs->site[count];
+        count2++;
+      }
+    } while (gtk_tree_model_iter_next(GTK_TREE_MODEL(mdl->store), &iter));
+  }
+  if (count2) {
+    switch (glob.selected_sites[0]->backend_type) {
+      case BACKEND_TYPE_BOARD: wmccc_run_dialog(DLG_CHANGE_BOARD_SETTINGS, FALSE); break;
+      case BACKEND_TYPE_RSS: wmccc_run_dialog(DLG_CHANGE_RSS_SETTINGS, FALSE); break;
+      case BACKEND_TYPE_POP: wmccc_run_dialog(DLG_CHANGE_POP_SETTINGS, FALSE); break;
+      default: assert(0);
+    }
+    /*run_change_board_settings_dialog();
+      gtk_dialog_response(GTK_DIALOG(sitelist_dialog(NULL)),1);*/
+  } else quick_message("Please concentrate yourself!\nYou forgot to select (at least) one site");
+}
+
+void sitelist_colors_cb(GtkWidget *button UNUSED, SiteListModel *mdl) {
+  GtkTreeIter iter;
+  int count = 0, count2 = 0;
+  glob.nb_selected_sites = 0;
+  if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(mdl->store), &iter)) {
+    do {
+      if (gtk_tree_selection_iter_is_selected(mdl->select,&iter) &&
+          (count = sitelist_iter_to_sid(GTK_TREE_MODEL(mdl->store),&iter)) != -1) {
+        glob.selected_sites[glob.nb_selected_sites++] = Prefs->site[count];
+        count2++;
+      }
+    } while (gtk_tree_model_iter_next(GTK_TREE_MODEL(mdl->store), &iter));
+  }
+  if (count2) {
+    wmccc_run_dialog(DLG_SITE_COLORS, FALSE);
+  } else quick_message("Please concentrate yourself!\nYou forgot to select (at least) one site");
+}
+
+void sitelist_proxy_cb(GtkWidget *button UNUSED, SiteListModel *mdl) {
+  GtkTreeIter iter;
+  int count = 0, count2 = 0;
+  glob.nb_selected_sites = 0;
+  if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(mdl->store), &iter)) {
+    do {
+      if (gtk_tree_selection_iter_is_selected(mdl->select,&iter) &&
+          (count = sitelist_iter_to_sid(GTK_TREE_MODEL(mdl->store),&iter)) != -1) {
+        glob.selected_sites[glob.nb_selected_sites++] = Prefs->site[count];
+        count2++;
+      }
+    } while (gtk_tree_model_iter_next(GTK_TREE_MODEL(mdl->store), &iter));
+  }
+  if (count2) {
+    wmccc_run_dialog(DLG_PROXY, FALSE);
+  } else quick_message("Please concentrate yourself!\nYou forgot to select (at least) one site. \n"
+                       "If you may to change proxy settings for all sites, select them all.");
+}
+
+void sitelist_new_site_cb(GtkWidget *button UNUSED, SiteListModel *mdl UNUSED) {
+  wmccc_run_dialog(DLG_BRONSON_WIZARD,TRUE);
+}
+
+void pinnipede_settings_cb(GtkWidget *button UNUSED, SiteListModel *mdl UNUSED) {
+  wmccc_run_dialog(DLG_GLOBAL_PINNIPEDE_OPTIONS,FALSE);
+}
+
+void sitelist_set_row(GtkListStore *store, GtkTreeIter *iter, SitePrefs *sp) {
+  char s[30]; sprintf(s, "%d", sp->board_check_delay);
+  gtk_list_store_set(store, iter, 
+                     SITE_ENABLED_COLUMN, sp->check_board,
+                     SITE_NAME_COLUMN, sp->all_names[0],
+                     BACKEND_COLUMN, sp->backend_url, 
+                     REFRESH_COLUMN, s, -1);
+}
+
+void sitelist_site_name_edited_cb(GtkCellRendererText *cell UNUSED,
+                                  gchar               *path_string,
+                                  gchar               *new_text,
+                                  GtkListStore *store) {
+  GtkTreeIter   iter;
+  int i;
+  gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(store), &iter, path_string);
+  printf("edited %s, new value : %s\n", path_string, new_text);
+  i = sitelist_iter_to_sid(GTK_TREE_MODEL(store),&iter);assert(i >= 0);
+  if (strcmp(Prefs->site[i]->all_names[0], new_text))
+    validate_site_name(new_text, Prefs->site[i], TRUE);
+  sitelist_set_row(store, &iter, Prefs->site[i]);
+}
+
+void sitelist_site_enabled_toggled_cb(GtkCellRendererToggle *cell UNUSED,
+                                      gchar                 *path_string,
+                                      GtkListStore *store) {
+  GtkTreeIter   iter;
+  int i;
+  gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(store), &iter, path_string);
+  i = sitelist_iter_to_sid(GTK_TREE_MODEL(store),&iter);assert(i >= 0);
+  //i = atoi(path_string);
+  Prefs->site[i]->check_board = Prefs->site[i]->check_board ? 0 : 1;
+  sitelist_set_row(store, &iter, Prefs->site[i]);
+}
+
+
+int prepare_sitelist_dialog(int isinit) {
+  static SiteListModel mdl = {0,0};
+  GtkTreeIter   iter;
+  GtkCellRenderer *renderer;
+  GtkTreeViewColumn *column;
+  int i;
+  char title[512];
+  assert(glob.options_file);
+  if (glob.wmcc_pid == 0) {
+    snprintf(title, sizeof title, "<span size=\"x-small\">Editing <tt>%s</tt></span>", shorten_path(glob.options_file));
+  } else {
+    snprintf(title, sizeof title, "<span size=\"x-small\">Editing <tt>%s</tt>, wmcc pid is <b>%d</b>, temporary options stored in <tt>%s</tt></span>", 
+             shorten_path(glob.options_file), glob.wmcc_pid, shorten_path(glob.tmp_options_file));
+  }
+  gtk_label_set_markup(GTK_LABEL(sitelist_dialog("title_lbl")), title);
+
+  if (!glob.wmcc_pid) gtk_widget_set_sensitive(sitelist_dialog("apply_bt"), FALSE);
+
+  if (isinit) gtk_list_store_clear(mdl.store);
+  else mdl.store = gtk_list_store_new (N_COLUMN, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
+  for (i = 0; i < Prefs->nb_sites; ++i) {
+    gtk_list_store_append (mdl.store, &iter);
+    sitelist_set_row(mdl.store, &iter, Prefs->site[i]);
+  }
+  if (!isinit) {
+    gtk_tree_view_set_model(GTK_TREE_VIEW(sitelist_dialog("treeview")), GTK_TREE_MODEL(mdl.store));
+    renderer = gtk_cell_renderer_toggle_new();  
+    g_object_set(renderer, "activatable", TRUE, NULL);
+    g_signal_connect(renderer, "toggled", (GCallback) sitelist_site_enabled_toggled_cb, mdl.store);
+    column = gtk_tree_view_column_new_with_attributes ("Enabled",
+                                                       renderer,
+                                                       "active", SITE_ENABLED_COLUMN,
+                                                       NULL);
+    gtk_tree_view_append_column (GTK_TREE_VIEW (sitelist_dialog("treeview")), column);
+    
+    renderer = gtk_cell_renderer_text_new ();
+
+    g_object_set(renderer, "editable", TRUE, NULL);
+    g_signal_connect(renderer, "edited", (GCallback) sitelist_site_name_edited_cb, mdl.store);
+
+    column = gtk_tree_view_column_new_with_attributes ("Site Name",
+                                                       renderer,
+                                                       "text", SITE_NAME_COLUMN,
+                                                       NULL);
+    gtk_tree_view_append_column (GTK_TREE_VIEW (sitelist_dialog("treeview")), column);
+    
+    renderer = gtk_cell_renderer_text_new ();
+    //g_object_set(renderer, "editable", TRUE, NULL); // incompatible with dnd
+    column = gtk_tree_view_column_new_with_attributes ("Backend",
+                                                       renderer,
+                                                       "text", BACKEND_COLUMN,
+                                                       NULL);
+    gtk_tree_view_append_column (GTK_TREE_VIEW (sitelist_dialog("treeview")), column);
+
+    renderer = gtk_cell_renderer_text_new ();
+    column = gtk_tree_view_column_new_with_attributes ("Refresh",
+                                                       renderer,
+                                                       "text", REFRESH_COLUMN,
+                                                       NULL);
+    gtk_tree_view_append_column (GTK_TREE_VIEW (sitelist_dialog("treeview")), column);
+
+    mdl.select = gtk_tree_view_get_selection (GTK_TREE_VIEW(sitelist_dialog("treeview")));
+    gtk_tree_selection_set_mode(mdl.select, GTK_SELECTION_MULTIPLE);
+
+    gtk_tree_view_set_reorderable(GTK_TREE_VIEW (sitelist_dialog("treeview")), TRUE);
+    g_signal_connect(G_OBJECT(sitelist_dialog("remove_bt")), "clicked",
+                     G_CALLBACK(sitelist_remove_cb),
+                     (gpointer)&mdl);
+    g_signal_connect(G_OBJECT(sitelist_dialog("edit_bt")), "clicked",
+                     G_CALLBACK(sitelist_edit_cb),
+                     (gpointer)&mdl);
+    g_signal_connect(G_OBJECT(sitelist_dialog("colors_bt")), "clicked",
+                     G_CALLBACK(sitelist_colors_cb),
+                     (gpointer)&mdl);
+    g_signal_connect(G_OBJECT(sitelist_dialog("proxy_bt")), "clicked",
+                     G_CALLBACK(sitelist_proxy_cb),
+                     (gpointer)&mdl);
+    g_signal_connect(G_OBJECT(sitelist_dialog("new_site_bt")), "clicked",
+                     G_CALLBACK(sitelist_new_site_cb),
+                     (gpointer)&mdl);
+    g_signal_connect(G_OBJECT(sitelist_dialog("pinnipede_settings_bt")), "clicked",
+                     G_CALLBACK(pinnipede_settings_cb),
+                     (gpointer)&mdl);    
+    g_signal_connect(G_OBJECT(sitelist_dialog("edit_options_bt")), "clicked",
+                     G_CALLBACK(run_edit_dialog),
+                     (gpointer)&mdl);    
+  }
+  for (i = 0; i < glob.nb_selected_sites; ++i) {
+    int j;
+    for (j = 0; j < Prefs->nb_sites; ++j) if (Prefs->site[j] == glob.selected_sites[i]) break;
+    gtk_tree_selection_select_path(mdl.select, gtk_tree_path_new_from_indices(j, -1));
+  }
+  return 0;
+}
+
+char *abs_options_filename(const char *fname) {
+  if (str_startswith(fname, "./") || fname[0] == '/') return strdup(fname);
+  else return str_printf("%s/.wmcoincoin/%s", getenv("HOME"),fname);
+}
+
+int
+main (int argc, char *argv[])
+{
+  enum { ADD_NEW_BOARD, ADD_NEW_RSS, EDIT_SITE_COLORS, CONFIG_PINNI, ABORT_WMCCC, EDIT_CONFIG, BRONSON_WIZARD, SITELIST } action;
+#ifdef ENABLE_NLS_POUR_WMCCC
+  bindtextdomain (GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR);
+  bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8");
+  textdomain (GETTEXT_PACKAGE);
+#endif
+
+  glob.current_site = 0;
+  glob.main_win = NULL;
+  glob.nb_selected_sites = 0;
+  //  gtk_set_locale ();
+
+  umask(077);
+  gtk_set_locale ();
+  gtk_init (&argc, &argv);
+
+  add_pixmap_directory (WMCCDATADIR);
+  add_pixmap_directory ("pixmaps");
+  add_pixmap_directory ("xpms");
+
+  glob.modif_widget_color.red = 32000;
+  glob.modif_widget_color.green = 000;
+  glob.modif_widget_color.blue = 000;
+  gdk_colormap_alloc_color(gdk_colormap_get_system(), &glob.modif_widget_color, FALSE, TRUE);
+
+  glob.wmcc_pid = 0;    
+  glob.options_file = abs_options_filename("options");
+  glob.tmp_options_file = NULL;
+
+  if (argc > 1) {
+    if (strcmp(argv[1], "-wmccpid")==0) {
+      printf("wmc� (pid=%d) launched from wmc�\n", (int)getpid()); g_assert(argc >= 5);
+      glob.wmcc_pid = atoi(argv[2]);
+      glob.options_file = abs_options_filename(argv[3]);
+      glob.tmp_options_file = abs_options_filename(argv[4]);
+      argc-=4; argv+=4;
+    } else {
+      glob.wmcc_pid = 0;    
+      if (argc < 2 || strcmp(argv[1],"-o")) {
+        g_print("missing -o option_file");
+        return -1;
+      } 
+      glob.options_file = abs_options_filename(argv[2]);
+      argc -= 2; argv += 2;
+    }
+  }
+
+  Prefs = NULL;
+  read_prefs();
+
+  //action = ABORT_WMCCC;
+  action = SITELIST;
+  if (argc > 1) {
+    if (strcasecmp(argv[1], "-new-board")==0) {
+      action = ADD_NEW_BOARD; argc--; argv++;
+    } else if (strcasecmp(argv[1], "-new-rss")==0) {
+      action = ADD_NEW_RSS; argc--; argv++;
+    } else if (strcasecmp(argv[1], "-config-pinni")==0) {
+      action = CONFIG_PINNI; argc--; argv++;
+    } else if (strcasecmp(argv[1], "-site-colors")==0) {
+      action = EDIT_SITE_COLORS; argc--; argv++;
+    } else if (strcasecmp(argv[1], "-edit")==0) {
+      action = EDIT_CONFIG; argc--; argv++;
+    } else if (strcasecmp(argv[1], "-wizard")==0 || strcasecmp(argv[1], "-charles-bronson")==0) {
+      action = BRONSON_WIZARD; argc--; argv++;
+    } 
+  }
+
+  while (argc > 1 && strcasecmp(argv[1], "-site")==0) {
+    assert(argc > 2);
+    char *sname = argv[2];
+    SitePrefs *sp =  wmcc_prefs_find_site(Prefs, sname);
+    if (sp) {
+      glob.selected_sites[glob.nb_selected_sites++] = sp;
+    } else {
+      printf("wanring: site %s not found!\n", sname);
+    }
+    argc -=2; argv += 2;
+  }
+
+  switch (action) {
+    case ABORT_WMCCC:
+    case ADD_NEW_RSS:
+      break;
+    case ADD_NEW_BOARD: {
+      //grab_cookie_bt_clicked(NULL,NULL);
+      run_new_board_dialog();
+    } break;
+    case EDIT_SITE_COLORS: {
+      wmccc_run_dialog(DLG_SITE_COLORS, TRUE); //run_pinnipede_site_colors_dialog();
+    } break;
+    case CONFIG_PINNI: {
+      //wmccc_run_dialog(DLG_PINNI_CONFIG,TRUE);
+    } break;
+    case EDIT_CONFIG: {
+      wmccc_run_dialog(DLG_EDIT_OPTIONS,TRUE);
+    } break;
+    case BRONSON_WIZARD: {
+      wmccc_run_dialog(DLG_BRONSON_WIZARD,TRUE);
+    } break;
+    case SITELIST: {
+      wmccc_run_dialog(DLG_SITELIST,TRUE);
+    }break;
+    default: g_assert(0);
+  }
+  gtk_main();
+  return 0;
+}
+
diff --git a/src/wmccc.h b/src/wmccc.h
new file mode 100644
index 0000000..39369d9
--- /dev/null
+++ b/src/wmccc.h
@@ -0,0 +1,71 @@
+#ifndef WMCCC_H
+#define WMCCC_H
+
+#define IN_WMCCC
+#include <gtk/gtk.h>
+#include "prefs.h"
+#include "options_list.h"
+#include "coin_util.h"
+
+
+#ifdef __GNUC__
+# define UNUSED __attribute((unused))
+#else
+# define UNUSED
+#endif
+
+
+typedef struct _strucGlob {
+  GtkWidget *main_win;
+  GdkFont *fixed_font;
+  int current_site;
+  int updating_labels;
+  
+  pid_t wmcc_pid;
+  char *options_file;
+  char *tmp_options_file;
+  int nb_selected_sites;
+  SitePrefs *selected_sites[MAX_SITES];
+  GdkColor modif_widget_color;
+} strucGlob;
+
+#ifndef GLOBALS_HERE
+extern GeneralPrefs *Prefs;
+extern strucGlob glob;
+#else
+GeneralPrefs *Prefs;
+strucGlob glob;
+#endif
+
+void quick_message(gchar *message_fmt, ...);
+void prefs_write_to_file(GeneralPrefs *p, FILE *f);
+
+
+typedef enum { DLG_SITELIST, DLG_NEW_BOARD, DLG_NEW_RSS, DLG_NEW_POP, 
+               DLG_BRONSON_WIZARD, DLG_EDIT_OPTIONS, 
+               DLG_CHANGE_BOARD_SETTINGS, DLG_CHANGE_RSS_SETTINGS, DLG_CHANGE_POP_SETTINGS, 
+               DLG_SITE_COLORS, DLG_GLOBAL_PINNIPEDE_OPTIONS, DLG_PROXY, NB_DLG } wmccc_dialog_t;
+GtkWidget *getdlg(wmccc_dialog_t dlg);
+GtkWidget *my_lookup_widget(GtkWidget *widget, const gchar *widget_name_);
+void wmccc_run_dialog(wmccc_dialog_t dlg, gboolean hide_parent);
+int edit_options_dialog_commit_changes_to_wmccc();
+void sitelist_update_site_order();
+int prepare_sitelist_dialog(int isinit);
+int prepare_bronson_wizard(int isinit);
+int prepare_new_board_dialog();
+int prepare_new_rss_dialog();
+int prepare_new_pop_dialog();
+int prepare_edit_dialog();
+int prepare_conf_dialog(GtkWidget *w);
+int finalize_conf_dialog(GtkWidget *w);
+int validate_new_board_dialog();
+int validate_new_rss_dialog();
+int validate_new_pop_dialog();
+int apply_prefs();
+int save_prefs();
+void run_new_board_dialog();
+void run_new_rss_dialog();
+void run_new_pop_dialog();
+void run_edit_dialog();
+GtkWidget *bronson_wizard(const char *widget_name);
+#endif
diff --git a/src/wmccc_callbacks.c b/src/wmccc_callbacks.c
new file mode 100644
index 0000000..d13026d
--- /dev/null
+++ b/src/wmccc_callbacks.c
@@ -0,0 +1,26 @@
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include <gtk/gtk.h>
+
+#include "wmccc_callbacks.h"
+#include "wmccc_interface.h"
+#include "wmccc_support.h"
+#include "wmccc.h"
+
+void
+on_bottom1_activate                    (GtkMenuItem     *menuitem,
+                                        gpointer         user_data)
+{
+
+}
+
+
+void
+on_left1_activate                      (GtkMenuItem     *menuitem,
+                                        gpointer         user_data)
+{
+
+}
+
diff --git a/src/wmccc_callbacks.h b/src/wmccc_callbacks.h
new file mode 100644
index 0000000..e8b143c
--- /dev/null
+++ b/src/wmccc_callbacks.h
@@ -0,0 +1,39 @@
+#include <gtk/gtk.h>
+
+
+void
+on_message_tags_are__htmlentitised_1_activate
+                                        (GtkMenuItem     *menuitem,
+                                        gpointer         user_data);
+
+void
+on_message_tags_are_raw1_activate      (GtkMenuItem     *menuitem,
+                                        gpointer         user_data);
+
+void
+on_the_backend_has_no_pants1_activate  (GtkMenuItem     *menuitem,
+                                        gpointer         user_data);
+
+void
+new_board_dialog_OK                    (GtkButton       *button,
+                                        gpointer         user_data);
+
+void
+on_mark_id_gaps_checkbutton_toggled    (GtkToggleButton *togglebutton,
+                                        gpointer         user_data);
+
+void
+on_mark_id_gaps_checkbutton_toggled    (GtkToggleButton *togglebutton,
+                                        gpointer         user_data);
+
+void
+edit_bt_clicked                        (GtkButton       *button,
+                                        gpointer         user_data);
+
+void
+on_bottom1_activate                    (GtkMenuItem     *menuitem,
+                                        gpointer         user_data);
+
+void
+on_left1_activate                      (GtkMenuItem     *menuitem,
+                                        gpointer         user_data);
diff --git a/src/wmccc_dialogs.c b/src/wmccc_dialogs.c
new file mode 100644
index 0000000..8ed352c
--- /dev/null
+++ b/src/wmccc_dialogs.c
@@ -0,0 +1,224 @@
+#include "wmccc.h"
+#include "wmccc_interface.h"
+#include "wmccc_support.h"
+#include "myprintf.h"
+
+struct {
+  wmccc_dialog_t lst[100];
+  int sz;
+} dlgstack;
+
+static GtkWidget *getdlg_(wmccc_dialog_t dlg, gboolean destroy) {
+  static GtkWidget *w[NB_DLG] = {NULL,};
+  if (destroy) {
+    gtk_widget_destroy(w[dlg]); w[dlg] = 0;
+  } else if (!w[dlg]) {
+    switch (dlg) {
+      case DLG_SITELIST: {
+        w[dlg] = create_sitelist_dialog();
+      } break;
+      case DLG_NEW_BOARD: {
+        w[dlg] = create_new_board_dialog();
+      } break;
+      case DLG_NEW_RSS: {
+        w[dlg] = create_new_rss_dialog();
+      } break;
+      case DLG_NEW_POP: {
+        w[dlg] = create_new_pop_dialog();
+      } break;
+      case DLG_BRONSON_WIZARD: {
+        w[dlg] = create_bronson_wizard();
+        g_signal_connect ((gpointer) bronson_wizard("wizard_new_board_bt"), "clicked",
+                          G_CALLBACK (run_new_board_dialog), NULL);
+        g_signal_connect ((gpointer) bronson_wizard("wizard_new_feed_bt"), "clicked",
+                          G_CALLBACK (run_new_rss_dialog), NULL);
+        g_signal_connect ((gpointer) bronson_wizard("wizard_new_pop_bt"), "clicked",
+                          G_CALLBACK (run_new_pop_dialog), NULL);
+        g_signal_connect ((gpointer) bronson_wizard("edit_options_bt"), "clicked",
+                          G_CALLBACK (run_edit_dialog), NULL);
+      } break;
+      case DLG_EDIT_OPTIONS: {
+        w[dlg] = create_edit_dialog();
+      } break;
+      case DLG_CHANGE_BOARD_SETTINGS: {
+        w[dlg] = create_change_board_settings_dialog();
+      } break;
+      case DLG_CHANGE_RSS_SETTINGS: {
+        w[dlg] = create_change_rss_settings_dialog();
+      } break;
+      case DLG_CHANGE_POP_SETTINGS: {
+        w[dlg] = create_change_pop_settings_dialog();
+      } break;
+      case DLG_SITE_COLORS: {
+        w[dlg] = create_pinnipede_site_colors_dialog();
+      } break;
+      case DLG_GLOBAL_PINNIPEDE_OPTIONS: {
+        w[dlg] = create_global_pinnipede_options_dialog();
+      } break;
+      case DLG_PROXY: {
+        w[dlg] = create_proxy_dialog();
+      } break;
+    default: assert(0);
+    } /* switch */
+  }
+  return w[dlg];
+}
+
+GtkWidget *getdlg(wmccc_dialog_t dlg) { return getdlg_(dlg,FALSE); }
+
+GtkWidget *releasedlg(wmccc_dialog_t dlg) { return getdlg_(dlg,TRUE); }
+
+void wmccc_dialog_response_cb(GtkWidget *dlg, gint response, int idx);
+
+void global_pinnipede_options_font_bt_cb() {
+  GtkFontSelectionDialog *w = GTK_FONT_SELECTION_DIALOG(create_fontselectiondialog());
+  /*char oldfnname[512];
+    snprintf(oldfnname, sizeof oldfnname, "%s %d", Prefs->pp_fn_family, Prefs->pp_fn_size);*/
+
+  PangoFontDescription *oldpfn = pango_font_description_new();
+  pango_font_description_set_family(oldpfn, Prefs->pp_fn_family);
+  pango_font_description_set_size(oldpfn, Prefs->pp_fn_size * PANGO_SCALE);
+  //printf("old pango font selection : %s\n", pango_font_description_to_string(oldpfn));
+
+  gtk_font_selection_dialog_set_font_name(w, pango_font_description_to_string(oldpfn));
+  pango_font_description_free(oldpfn);
+  if (gtk_dialog_run(GTK_DIALOG(w)) == GTK_RESPONSE_OK) {
+    char *newfnname = gtk_font_selection_dialog_get_font_name(w);
+    PangoFontDescription* pfn = pango_font_description_from_string(newfnname);
+    //printf("new selection : %s:pixelsize=%d\n", pango_font_description_get_family(pfn), pango_font_description_get_size(pfn)/PANGO_SCALE);
+    gtk_entry_set_text(GTK_ENTRY(lookup_widget(getdlg(DLG_GLOBAL_PINNIPEDE_OPTIONS), "pp_fn_family")), 
+                       pango_font_description_get_family(pfn));
+    gtk_spin_button_set_value(GTK_SPIN_BUTTON(lookup_widget(getdlg(DLG_GLOBAL_PINNIPEDE_OPTIONS), "pp_fn_size")), 
+                              pango_font_description_get_size(pfn)/PANGO_SCALE);
+    pango_font_description_free(pfn);
+  }
+  gtk_widget_destroy(GTK_WIDGET(w));
+}
+
+static void wmccc_initialize_dialog(wmccc_dialog_t dlg) {
+  static int isinit[NB_DLG] = {0,};
+  GtkWidget *w = getdlg(dlg);
+  if (!isinit[dlg]) {
+    g_signal_connect ((gpointer) getdlg(dlg), "response",
+                      G_CALLBACK (wmccc_dialog_response_cb),
+                      (gpointer)dlgstack.sz);
+  }
+  if (dlg != DLG_EDIT_OPTIONS && 
+      my_lookup_widget(w, "apply_bt") && (dlgstack.sz > 1 || glob.wmcc_pid == 0)) {    
+    gtk_widget_hide(my_lookup_widget(w, "apply_bt"));
+  }
+  switch (dlg) {
+    case DLG_SITELIST: prepare_sitelist_dialog(isinit[dlg]); break;
+    case DLG_NEW_BOARD: prepare_new_board_dialog(); break;
+    case DLG_NEW_RSS: prepare_new_rss_dialog(); break;
+    case DLG_NEW_POP: prepare_new_pop_dialog(); break;
+    case DLG_BRONSON_WIZARD: prepare_bronson_wizard(isinit[dlg]); break;
+    case DLG_EDIT_OPTIONS: prepare_edit_dialog(isinit[dlg]); break;
+    case DLG_CHANGE_BOARD_SETTINGS: 
+    case DLG_CHANGE_POP_SETTINGS: 
+    case DLG_CHANGE_RSS_SETTINGS: 
+      prepare_conf_dialog(w);
+      assert(lookup_widget(w,"all_names_0_"));
+      assert(my_lookup_widget(w,"all_names[0]"));
+      break;
+    case DLG_SITE_COLORS:  prepare_conf_dialog(w); break;
+    case DLG_GLOBAL_PINNIPEDE_OPTIONS: 
+      prepare_conf_dialog(w); 
+      g_signal_connect(G_OBJECT(lookup_widget(w, "font_bt")), "clicked",
+                       G_CALLBACK(global_pinnipede_options_font_bt_cb),
+                       NULL);
+      break;
+    case DLG_PROXY:
+      prepare_conf_dialog(w);
+      break;
+    default: assert(0);
+  }
+  isinit[dlg] = 1;
+}
+
+
+void wmccc_dialog_response_cb(GtkWidget *dlg, gint response, int idx) {
+  //printf("wmccc_dialog_response_cb : response = %d , idx = %d\n", response, idx);
+  assert(idx>= 0 && idx < dlgstack.sz);
+  //if (idx == dlgstack.sz) { printf("PUTAIN DE BUG!\n"); return; }
+  wmccc_dialog_t dlg_type = dlgstack.lst[idx];
+  gboolean closedlg = TRUE;
+  switch (dlg_type) {
+    case DLG_SITELIST: {
+      if (response == GTK_RESPONSE_CANCEL) {        
+      } else if (response >= 0) {
+        wmccc_initialize_dialog(dlg_type);
+        closedlg = FALSE;
+      }
+      if (response != 1) {
+        sitelist_update_site_order(); /* ne pas appeler apres un remove, ou explosion */
+      }
+    } break;
+    case DLG_NEW_BOARD: {
+      if (response == GTK_RESPONSE_OK) {
+        closedlg = validate_new_board_dialog() ? FALSE : TRUE;
+      }
+    } break;
+    case DLG_NEW_RSS: {
+      if (response == GTK_RESPONSE_OK) {
+        closedlg = validate_new_rss_dialog() ? FALSE : TRUE;
+      }
+    } break;
+    case DLG_NEW_POP: {
+      if (response == GTK_RESPONSE_OK) {
+        closedlg = validate_new_pop_dialog() ? FALSE : TRUE;
+      }
+    } break;      
+    case DLG_CHANGE_BOARD_SETTINGS:
+    case DLG_CHANGE_RSS_SETTINGS:
+    case DLG_CHANGE_POP_SETTINGS:
+    case DLG_GLOBAL_PINNIPEDE_OPTIONS:
+    case DLG_PROXY:
+    case DLG_SITE_COLORS: {
+      if (response == GTK_RESPONSE_OK || response == GTK_RESPONSE_APPLY) {
+        finalize_conf_dialog(dlg);
+      }
+    } break;
+    case DLG_EDIT_OPTIONS: {
+      if (response == GTK_RESPONSE_OK || response == GTK_RESPONSE_APPLY) {
+        if (edit_options_dialog_commit_changes_to_wmccc() == 0) {
+          if (response == GTK_RESPONSE_OK) save_prefs();
+          else apply_prefs();
+        }
+        closedlg = FALSE;
+      }
+    } break;
+    default: break;
+  }
+  if (closedlg && dlgstack.sz == 1 && response == GTK_RESPONSE_APPLY) {
+    closedlg = 0; apply_prefs();
+  } else if (closedlg && dlgstack.sz == 1 && response == GTK_RESPONSE_OK) {
+    closedlg = save_prefs() == 0;
+  }
+  //printf(" -> response = %d -- closedlg = %d\n", response, closedlg);
+  if (closedlg) {
+    if (idx >= 1) {
+      dlgstack.sz = idx;
+      GtkWidget *parent = getdlg(dlgstack.lst[dlgstack.sz-1]);
+      //printf(" -> show dlg %d\n", dlgstack.lst[dlgstack.sz-1]);
+      gtk_widget_show(parent); gtk_widget_set_sensitive(parent,TRUE);
+    } else { gtk_main_quit(); }
+    wmccc_initialize_dialog(dlgstack.lst[dlgstack.sz-1]);
+    gtk_widget_hide(dlg); releasedlg(dlg_type);
+  }
+}
+
+void wmccc_run_dialog(wmccc_dialog_t dlg, gboolean hide_parent) {
+  GtkWidget *parent = dlgstack.sz > 0 ? getdlg(dlgstack.lst[dlgstack.sz-1]) : NULL;
+  wmccc_initialize_dialog(dlg);
+  if (hide_parent && parent) {
+    gtk_widget_set_sensitive(parent, FALSE);
+    gtk_widget_hide(parent);
+  }
+  
+  g_signal_connect ((gpointer) getdlg(dlg), "response",
+                    G_CALLBACK (wmccc_dialog_response_cb),
+                    (gpointer)dlgstack.sz);
+  dlgstack.lst[dlgstack.sz++] = dlg;
+  gtk_widget_show(getdlg(dlg));
+}
diff --git a/src/wmccc_interface.c b/src/wmccc_interface.c
new file mode 100644
index 0000000..6015b2d
--- /dev/null
+++ b/src/wmccc_interface.c
@@ -0,0 +1,3584 @@
+/*
+ * DO NOT EDIT THIS FILE - it is generated by Glade.
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <string.h>
+#include <stdio.h>
+
+#include <gdk/gdkkeysyms.h>
+#include <gtk/gtk.h>
+
+#include "wmccc_callbacks.h"
+#include "wmccc_interface.h"
+#include "wmccc_support.h"
+
+#define GLADE_HOOKUP_OBJECT(component,widget,name) \
+  g_object_set_data_full (G_OBJECT (component), name, \
+    gtk_widget_ref (widget), (GDestroyNotify) gtk_widget_unref)
+
+#define GLADE_HOOKUP_OBJECT_NO_REF(component,widget,name) \
+  g_object_set_data (G_OBJECT (component), name, widget)
+
+GtkWidget*
+create_messagebox_dialog (void)
+{
+  GtkWidget *messagebox_dialog;
+  GtkWidget *dialog_vbox1;
+  GtkWidget *hbox5;
+  GtkWidget *image2;
+  GtkWidget *messagebox_label;
+  GtkWidget *dialog_action_area1;
+  GtkWidget *ok_button;
+
+  messagebox_dialog = gtk_dialog_new ();
+  gtk_window_set_title (GTK_WINDOW (messagebox_dialog), _("Message from wmccc"));
+  gtk_window_set_type_hint (GTK_WINDOW (messagebox_dialog), GDK_WINDOW_TYPE_HINT_DIALOG);
+
+  dialog_vbox1 = GTK_DIALOG (messagebox_dialog)->vbox;
+  gtk_widget_show (dialog_vbox1);
+
+  hbox5 = gtk_hbox_new (FALSE, 0);
+  gtk_widget_show (hbox5);
+  gtk_box_pack_start (GTK_BOX (dialog_vbox1), hbox5, TRUE, TRUE, 0);
+
+  image2 = create_pixmap (messagebox_dialog, "badnews.xpm");
+  gtk_widget_show (image2);
+  gtk_box_pack_start (GTK_BOX (hbox5), image2, FALSE, FALSE, 0);
+
+  messagebox_label = gtk_label_new (_("plop"));
+  gtk_widget_show (messagebox_label);
+  gtk_box_pack_start (GTK_BOX (hbox5), messagebox_label, TRUE, TRUE, 0);
+  gtk_label_set_line_wrap (GTK_LABEL (messagebox_label), TRUE);
+  gtk_misc_set_padding (GTK_MISC (messagebox_label), 7, 7);
+
+  dialog_action_area1 = GTK_DIALOG (messagebox_dialog)->action_area;
+  gtk_widget_show (dialog_action_area1);
+  gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area1), GTK_BUTTONBOX_END);
+
+  ok_button = gtk_button_new_from_stock ("gtk-ok");
+  gtk_widget_show (ok_button);
+  gtk_dialog_add_action_widget (GTK_DIALOG (messagebox_dialog), ok_button, GTK_RESPONSE_OK);
+  GTK_WIDGET_SET_FLAGS (ok_button, GTK_CAN_DEFAULT);
+
+  g_signal_connect_swapped ((gpointer) ok_button, "clicked",
+                            G_CALLBACK (gtk_widget_hide),
+                            GTK_OBJECT (messagebox_dialog));
+
+  /* Store pointers to all widgets, for use by lookup_widget(). */
+  GLADE_HOOKUP_OBJECT_NO_REF (messagebox_dialog, messagebox_dialog, "messagebox_dialog");
+  GLADE_HOOKUP_OBJECT_NO_REF (messagebox_dialog, dialog_vbox1, "dialog_vbox1");
+  GLADE_HOOKUP_OBJECT (messagebox_dialog, hbox5, "hbox5");
+  GLADE_HOOKUP_OBJECT (messagebox_dialog, image2, "image2");
+  GLADE_HOOKUP_OBJECT (messagebox_dialog, messagebox_label, "messagebox_label");
+  GLADE_HOOKUP_OBJECT_NO_REF (messagebox_dialog, dialog_action_area1, "dialog_action_area1");
+  GLADE_HOOKUP_OBJECT (messagebox_dialog, ok_button, "ok_button");
+
+  return messagebox_dialog;
+}
+
+GtkWidget*
+create_new_rss_dialog (void)
+{
+  GtkWidget *new_rss_dialog;
+  GtkWidget *dialog_vbox2;
+  GtkWidget *vbox3;
+  GtkWidget *hbox13;
+  GtkWidget *image4;
+  GtkWidget *edit_options_bt;
+  GtkWidget *alignment3;
+  GtkWidget *hbox14;
+  GtkWidget *image3;
+  GtkWidget *label39;
+  GtkWidget *vbox4;
+  GtkWidget *frame1;
+  GtkWidget *alignment2;
+  GtkWidget *hbox4;
+  GtkWidget *label37;
+  GtkWidget *all_names_0_;
+  GtkWidget *label36;
+  GtkWidget *pp_bgcolor;
+  GtkWidget *label6;
+  GtkWidget *frame2;
+  GtkWidget *table1;
+  GtkWidget *label8;
+  GtkWidget *backend_url;
+  GtkWidget *label9;
+  GtkWidget *backend_type;
+  GtkWidget *menu1;
+  GtkWidget *backend_type_1;
+  GtkWidget *backend_type_2;
+  GtkWidget *backend_type_3;
+  GtkWidget *label10;
+  GtkObject *board_check_delay_adj;
+  GtkWidget *board_check_delay;
+  GtkWidget *checkbutton2;
+  GtkWidget *label7;
+  GtkWidget *dialog_action_area2;
+  GtkWidget *cancel_bt;
+  GtkWidget *apply_bt;
+  GtkWidget *ok_bt;
+  GtkTooltips *tooltips;
+
+  tooltips = gtk_tooltips_new ();
+
+  new_rss_dialog = gtk_dialog_new ();
+  gtk_window_set_title (GTK_WINDOW (new_rss_dialog), _("New RSS Feed"));
+  gtk_window_set_type_hint (GTK_WINDOW (new_rss_dialog), GDK_WINDOW_TYPE_HINT_DIALOG);
+
+  dialog_vbox2 = GTK_DIALOG (new_rss_dialog)->vbox;
+  gtk_widget_show (dialog_vbox2);
+
+  vbox3 = gtk_vbox_new (FALSE, 0);
+  gtk_widget_show (vbox3);
+  gtk_box_pack_start (GTK_BOX (dialog_vbox2), vbox3, TRUE, TRUE, 0);
+
+  hbox13 = gtk_hbox_new (FALSE, 0);
+  gtk_widget_show (hbox13);
+  gtk_box_pack_start (GTK_BOX (vbox3), hbox13, FALSE, FALSE, 0);
+
+  image4 = create_pixmap (new_rss_dialog, "logoh.png");
+  gtk_widget_show (image4);
+  gtk_box_pack_start (GTK_BOX (hbox13), image4, FALSE, TRUE, 0);
+  gtk_misc_set_alignment (GTK_MISC (image4), 0, 0.5);
+
+  edit_options_bt = gtk_button_new ();
+  gtk_widget_show (edit_options_bt);
+  gtk_box_pack_start (GTK_BOX (hbox13), edit_options_bt, TRUE, TRUE, 0);
+
+  alignment3 = gtk_alignment_new (0.5, 0.5, 0, 0);
+  gtk_widget_show (alignment3);
+  gtk_container_add (GTK_CONTAINER (edit_options_bt), alignment3);
+
+  hbox14 = gtk_hbox_new (FALSE, 2);
+  gtk_widget_show (hbox14);
+  gtk_container_add (GTK_CONTAINER (alignment3), hbox14);
+
+  image3 = gtk_image_new_from_stock ("gtk-convert", GTK_ICON_SIZE_BUTTON);
+  gtk_widget_show (image3);
+  gtk_box_pack_start (GTK_BOX (hbox14), image3, FALSE, FALSE, 0);
+
+  label39 = gtk_label_new_with_mnemonic (_("Click here to edit the options file"));
+  gtk_widget_show (label39);
+  gtk_box_pack_start (GTK_BOX (hbox14), label39, FALSE, FALSE, 0);
+
+  vbox4 = gtk_vbox_new (FALSE, 0);
+  gtk_widget_show (vbox4);
+  gtk_box_pack_start (GTK_BOX (vbox3), vbox4, TRUE, TRUE, 0);
+
+  frame1 = gtk_frame_new (NULL);
+  gtk_widget_show (frame1);
+  gtk_box_pack_start (GTK_BOX (vbox4), frame1, TRUE, TRUE, 2);
+
+  alignment2 = gtk_alignment_new (0.5, 0.5, 1, 1);
+  gtk_widget_show (alignment2);
+  gtk_container_add (GTK_CONTAINER (frame1), alignment2);
+
+  hbox4 = gtk_hbox_new (FALSE, 4);
+  gtk_widget_show (hbox4);
+  gtk_container_add (GTK_CONTAINER (alignment2), hbox4);
+  gtk_container_set_border_width (GTK_CONTAINER (hbox4), 2);
+
+  label37 = gtk_label_new (_("Give a (short) name for the RSS feed:"));
+  gtk_widget_show (label37);
+  gtk_box_pack_start (GTK_BOX (hbox4), label37, FALSE, FALSE, 0);
+
+  all_names_0_ = gtk_entry_new ();
+  gtk_widget_show (all_names_0_);
+  gtk_box_pack_start (GTK_BOX (hbox4), all_names_0_, TRUE, TRUE, 0);
+  gtk_tooltips_set_tip (tooltips, all_names_0_, _("Try to be short"), NULL);
+  gtk_entry_set_text (GTK_ENTRY (all_names_0_), _("dlfp"));
+
+  label36 = gtk_label_new (_("Background color: "));
+  gtk_widget_show (label36);
+  gtk_box_pack_start (GTK_BOX (hbox4), label36, FALSE, FALSE, 0);
+  gtk_label_set_justify (GTK_LABEL (label36), GTK_JUSTIFY_RIGHT);
+  gtk_misc_set_alignment (GTK_MISC (label36), 1, 0.5);
+
+  pp_bgcolor = gtk_button_new_with_mnemonic (_("pp_bgcolor_bt"));
+  gtk_widget_show (pp_bgcolor);
+  gtk_box_pack_start (GTK_BOX (hbox4), pp_bgcolor, FALSE, FALSE, 0);
+  gtk_tooltips_set_tip (tooltips, pp_bgcolor, _("You can customize the background color of the messages for this new site"), NULL);
+
+  label6 = gtk_label_new (_("Basic settings"));
+  gtk_widget_show (label6);
+  gtk_frame_set_label_widget (GTK_FRAME (frame1), label6);
+
+  frame2 = gtk_frame_new (NULL);
+  gtk_widget_show (frame2);
+  gtk_box_pack_start (GTK_BOX (vbox4), frame2, TRUE, TRUE, 2);
+
+  table1 = gtk_table_new (4, 2, FALSE);
+  gtk_widget_show (table1);
+  gtk_container_add (GTK_CONTAINER (frame2), table1);
+  gtk_container_set_border_width (GTK_CONTAINER (table1), 2);
+
+  label8 = gtk_label_new (_("Backend URL:"));
+  gtk_widget_show (label8);
+  gtk_table_attach (GTK_TABLE (table1), label8, 0, 1, 0, 1,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (label8), 0, 0.5);
+
+  backend_url = gtk_entry_new ();
+  gtk_widget_show (backend_url);
+  gtk_table_attach (GTK_TABLE (table1), backend_url, 1, 2, 0, 1,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_widget_set_size_request (backend_url, 500, -1);
+  gtk_entry_set_text (GTK_ENTRY (backend_url), _("http://linuxfr.org/board/backend.xml"));
+
+  label9 = gtk_label_new (_("Backend flavour:"));
+  gtk_widget_show (label9);
+  gtk_table_attach (GTK_TABLE (table1), label9, 0, 1, 1, 2,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (label9), 0, 0.5);
+
+  backend_type = gtk_option_menu_new ();
+  gtk_widget_show (backend_type);
+  gtk_table_attach (GTK_TABLE (table1), backend_type, 1, 2, 1, 2,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+
+  menu1 = gtk_menu_new ();
+
+  backend_type_1 = gtk_menu_item_new_with_mnemonic (_("message tags are \"htmlentitised\""));
+  gtk_widget_show (backend_type_1);
+  gtk_container_add (GTK_CONTAINER (menu1), backend_type_1);
+
+  backend_type_2 = gtk_menu_item_new_with_mnemonic (_("message tags are raw"));
+  gtk_widget_show (backend_type_2);
+  gtk_container_add (GTK_CONTAINER (menu1), backend_type_2);
+
+  backend_type_3 = gtk_menu_item_new_with_mnemonic (_("the backend has no pants"));
+  gtk_widget_show (backend_type_3);
+  gtk_container_add (GTK_CONTAINER (menu1), backend_type_3);
+
+  gtk_option_menu_set_menu (GTK_OPTION_MENU (backend_type), menu1);
+
+  label10 = gtk_label_new (_("Refresh frequency\n (seconds): "));
+  gtk_widget_show (label10);
+  gtk_table_attach (GTK_TABLE (table1), label10, 0, 1, 2, 3,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (label10), 0, 0.5);
+
+  board_check_delay_adj = gtk_adjustment_new (10, 10, 10000, 1, 10, 10);
+  board_check_delay = gtk_spin_button_new (GTK_ADJUSTMENT (board_check_delay_adj), 1, 0);
+  gtk_widget_show (board_check_delay);
+  gtk_table_attach (GTK_TABLE (table1), board_check_delay, 1, 2, 2, 3,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+
+  checkbutton2 = gtk_check_button_new_with_mnemonic (_("Ignore <description> content (some links-only feeds contain ads in this field)"));
+  gtk_widget_show (checkbutton2);
+  gtk_table_attach (GTK_TABLE (table1), checkbutton2, 0, 2, 3, 4,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+
+  label7 = gtk_label_new (_("RSS Backend information"));
+  gtk_widget_show (label7);
+  gtk_frame_set_label_widget (GTK_FRAME (frame2), label7);
+
+  dialog_action_area2 = GTK_DIALOG (new_rss_dialog)->action_area;
+  gtk_widget_show (dialog_action_area2);
+  gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area2), GTK_BUTTONBOX_END);
+
+  cancel_bt = gtk_button_new_from_stock ("gtk-cancel");
+  gtk_widget_show (cancel_bt);
+  gtk_dialog_add_action_widget (GTK_DIALOG (new_rss_dialog), cancel_bt, GTK_RESPONSE_CANCEL);
+  GTK_WIDGET_SET_FLAGS (cancel_bt, GTK_CAN_DEFAULT);
+
+  apply_bt = gtk_button_new_from_stock ("gtk-apply");
+  gtk_widget_show (apply_bt);
+  gtk_dialog_add_action_widget (GTK_DIALOG (new_rss_dialog), apply_bt, GTK_RESPONSE_APPLY);
+  GTK_WIDGET_SET_FLAGS (apply_bt, GTK_CAN_DEFAULT);
+
+  ok_bt = gtk_button_new_from_stock ("gtk-ok");
+  gtk_widget_show (ok_bt);
+  gtk_dialog_add_action_widget (GTK_DIALOG (new_rss_dialog), ok_bt, GTK_RESPONSE_OK);
+  GTK_WIDGET_SET_FLAGS (ok_bt, GTK_CAN_DEFAULT);
+
+  /* Store pointers to all widgets, for use by lookup_widget(). */
+  GLADE_HOOKUP_OBJECT_NO_REF (new_rss_dialog, new_rss_dialog, "new_rss_dialog");
+  GLADE_HOOKUP_OBJECT_NO_REF (new_rss_dialog, dialog_vbox2, "dialog_vbox2");
+  GLADE_HOOKUP_OBJECT (new_rss_dialog, vbox3, "vbox3");
+  GLADE_HOOKUP_OBJECT (new_rss_dialog, hbox13, "hbox13");
+  GLADE_HOOKUP_OBJECT (new_rss_dialog, image4, "image4");
+  GLADE_HOOKUP_OBJECT (new_rss_dialog, edit_options_bt, "edit_options_bt");
+  GLADE_HOOKUP_OBJECT (new_rss_dialog, alignment3, "alignment3");
+  GLADE_HOOKUP_OBJECT (new_rss_dialog, hbox14, "hbox14");
+  GLADE_HOOKUP_OBJECT (new_rss_dialog, image3, "image3");
+  GLADE_HOOKUP_OBJECT (new_rss_dialog, label39, "label39");
+  GLADE_HOOKUP_OBJECT (new_rss_dialog, vbox4, "vbox4");
+  GLADE_HOOKUP_OBJECT (new_rss_dialog, frame1, "frame1");
+  GLADE_HOOKUP_OBJECT (new_rss_dialog, alignment2, "alignment2");
+  GLADE_HOOKUP_OBJECT (new_rss_dialog, hbox4, "hbox4");
+  GLADE_HOOKUP_OBJECT (new_rss_dialog, label37, "label37");
+  GLADE_HOOKUP_OBJECT (new_rss_dialog, all_names_0_, "all_names_0_");
+  GLADE_HOOKUP_OBJECT (new_rss_dialog, label36, "label36");
+  GLADE_HOOKUP_OBJECT (new_rss_dialog, pp_bgcolor, "pp_bgcolor");
+  GLADE_HOOKUP_OBJECT (new_rss_dialog, label6, "label6");
+  GLADE_HOOKUP_OBJECT (new_rss_dialog, frame2, "frame2");
+  GLADE_HOOKUP_OBJECT (new_rss_dialog, table1, "table1");
+  GLADE_HOOKUP_OBJECT (new_rss_dialog, label8, "label8");
+  GLADE_HOOKUP_OBJECT (new_rss_dialog, backend_url, "backend_url");
+  GLADE_HOOKUP_OBJECT (new_rss_dialog, label9, "label9");
+  GLADE_HOOKUP_OBJECT (new_rss_dialog, backend_type, "backend_type");
+  GLADE_HOOKUP_OBJECT (new_rss_dialog, menu1, "menu1");
+  GLADE_HOOKUP_OBJECT (new_rss_dialog, backend_type_1, "backend_type_1");
+  GLADE_HOOKUP_OBJECT (new_rss_dialog, backend_type_2, "backend_type_2");
+  GLADE_HOOKUP_OBJECT (new_rss_dialog, backend_type_3, "backend_type_3");
+  GLADE_HOOKUP_OBJECT (new_rss_dialog, label10, "label10");
+  GLADE_HOOKUP_OBJECT (new_rss_dialog, board_check_delay, "board_check_delay");
+  GLADE_HOOKUP_OBJECT (new_rss_dialog, checkbutton2, "checkbutton2");
+  GLADE_HOOKUP_OBJECT (new_rss_dialog, label7, "label7");
+  GLADE_HOOKUP_OBJECT_NO_REF (new_rss_dialog, dialog_action_area2, "dialog_action_area2");
+  GLADE_HOOKUP_OBJECT (new_rss_dialog, cancel_bt, "cancel_bt");
+  GLADE_HOOKUP_OBJECT (new_rss_dialog, apply_bt, "apply_bt");
+  GLADE_HOOKUP_OBJECT (new_rss_dialog, ok_bt, "ok_bt");
+  GLADE_HOOKUP_OBJECT_NO_REF (new_rss_dialog, tooltips, "tooltips");
+
+  return new_rss_dialog;
+}
+
+GtkWidget*
+create_new_board_dialog (void)
+{
+  GtkWidget *new_board_dialog;
+  GtkWidget *dialog_vbox2;
+  GtkWidget *vbox3;
+  GtkWidget *hbox13;
+  GtkWidget *image4;
+  GtkWidget *edit_options_bt;
+  GtkWidget *alignment3;
+  GtkWidget *hbox14;
+  GtkWidget *image3;
+  GtkWidget *label39;
+  GtkWidget *vbox4;
+  GtkWidget *frame1;
+  GtkWidget *alignment2;
+  GtkWidget *hbox4;
+  GtkWidget *label37;
+  GtkWidget *all_names_0_;
+  GtkWidget *label36;
+  GtkWidget *pp_bgcolor;
+  GtkWidget *label6;
+  GtkWidget *frame2;
+  GtkWidget *table1;
+  GtkWidget *label8;
+  GtkWidget *backend_url;
+  GtkWidget *label9;
+  GtkWidget *backend_type;
+  GtkWidget *menu1;
+  GtkWidget *backend_type_1;
+  GtkWidget *backend_type_2;
+  GtkWidget *backend_type_3;
+  GtkWidget *label10;
+  GtkObject *board_check_delay_adj;
+  GtkWidget *board_check_delay;
+  GtkWidget *label7;
+  GtkWidget *frame3;
+  GtkWidget *alignment1;
+  GtkWidget *table2;
+  GtkWidget *label12;
+  GtkWidget *post_url;
+  GtkWidget *label13;
+  GtkWidget *post_template;
+  GtkWidget *scrolledwindow2;
+  GtkWidget *viewport1;
+  GtkWidget *user_cookie;
+  GtkWidget *grab_cookie_bt;
+  GtkWidget *alignment9;
+  GtkWidget *hbox29;
+  GtkWidget *image12;
+  GtkWidget *label78;
+  GtkWidget *label14;
+  GtkWidget *hunt_opened_on_site;
+  GtkWidget *label11;
+  GtkWidget *dialog_action_area2;
+  GtkWidget *cancel_bt;
+  GtkWidget *apply_bt;
+  GtkWidget *ok_bt;
+  GtkTooltips *tooltips;
+
+  tooltips = gtk_tooltips_new ();
+
+  new_board_dialog = gtk_dialog_new ();
+  gtk_window_set_title (GTK_WINDOW (new_board_dialog), _("New Board"));
+  gtk_window_set_type_hint (GTK_WINDOW (new_board_dialog), GDK_WINDOW_TYPE_HINT_DIALOG);
+
+  dialog_vbox2 = GTK_DIALOG (new_board_dialog)->vbox;
+  gtk_widget_show (dialog_vbox2);
+
+  vbox3 = gtk_vbox_new (FALSE, 0);
+  gtk_widget_show (vbox3);
+  gtk_box_pack_start (GTK_BOX (dialog_vbox2), vbox3, TRUE, TRUE, 0);
+
+  hbox13 = gtk_hbox_new (FALSE, 0);
+  gtk_widget_show (hbox13);
+  gtk_box_pack_start (GTK_BOX (vbox3), hbox13, FALSE, FALSE, 0);
+
+  image4 = create_pixmap (new_board_dialog, "logoh.png");
+  gtk_widget_show (image4);
+  gtk_box_pack_start (GTK_BOX (hbox13), image4, FALSE, TRUE, 0);
+  gtk_misc_set_alignment (GTK_MISC (image4), 0, 0.5);
+
+  edit_options_bt = gtk_button_new ();
+  gtk_widget_show (edit_options_bt);
+  gtk_box_pack_start (GTK_BOX (hbox13), edit_options_bt, TRUE, TRUE, 0);
+
+  alignment3 = gtk_alignment_new (0.5, 0.5, 0, 0);
+  gtk_widget_show (alignment3);
+  gtk_container_add (GTK_CONTAINER (edit_options_bt), alignment3);
+
+  hbox14 = gtk_hbox_new (FALSE, 2);
+  gtk_widget_show (hbox14);
+  gtk_container_add (GTK_CONTAINER (alignment3), hbox14);
+
+  image3 = gtk_image_new_from_stock ("gtk-convert", GTK_ICON_SIZE_BUTTON);
+  gtk_widget_show (image3);
+  gtk_box_pack_start (GTK_BOX (hbox14), image3, FALSE, FALSE, 0);
+
+  label39 = gtk_label_new_with_mnemonic (_("Click here to edit the options file"));
+  gtk_widget_show (label39);
+  gtk_box_pack_start (GTK_BOX (hbox14), label39, FALSE, FALSE, 0);
+
+  vbox4 = gtk_vbox_new (FALSE, 0);
+  gtk_widget_show (vbox4);
+  gtk_box_pack_start (GTK_BOX (vbox3), vbox4, TRUE, TRUE, 0);
+
+  frame1 = gtk_frame_new (NULL);
+  gtk_widget_show (frame1);
+  gtk_box_pack_start (GTK_BOX (vbox4), frame1, TRUE, TRUE, 2);
+
+  alignment2 = gtk_alignment_new (0.5, 0.5, 1, 1);
+  gtk_widget_show (alignment2);
+  gtk_container_add (GTK_CONTAINER (frame1), alignment2);
+
+  hbox4 = gtk_hbox_new (FALSE, 4);
+  gtk_widget_show (hbox4);
+  gtk_container_add (GTK_CONTAINER (alignment2), hbox4);
+  gtk_container_set_border_width (GTK_CONTAINER (hbox4), 2);
+
+  label37 = gtk_label_new (_("Give a (short) name for the board:"));
+  gtk_widget_show (label37);
+  gtk_box_pack_start (GTK_BOX (hbox4), label37, FALSE, FALSE, 0);
+
+  all_names_0_ = gtk_entry_new ();
+  gtk_widget_show (all_names_0_);
+  gtk_box_pack_start (GTK_BOX (hbox4), all_names_0_, TRUE, TRUE, 0);
+  gtk_tooltips_set_tip (tooltips, all_names_0_, _("Try to be short"), NULL);
+  gtk_entry_set_text (GTK_ENTRY (all_names_0_), _("dlfp"));
+
+  label36 = gtk_label_new (_("Background color: "));
+  gtk_widget_show (label36);
+  gtk_box_pack_start (GTK_BOX (hbox4), label36, FALSE, FALSE, 0);
+  gtk_label_set_justify (GTK_LABEL (label36), GTK_JUSTIFY_RIGHT);
+  gtk_misc_set_alignment (GTK_MISC (label36), 1, 0.5);
+
+  pp_bgcolor = gtk_button_new_with_mnemonic (_("pp_bgcolor_bt"));
+  gtk_widget_show (pp_bgcolor);
+  gtk_box_pack_start (GTK_BOX (hbox4), pp_bgcolor, FALSE, FALSE, 0);
+  gtk_tooltips_set_tip (tooltips, pp_bgcolor, _("You can customize the background color of the messages for this new site"), NULL);
+
+  label6 = gtk_label_new (_("Basic settings"));
+  gtk_widget_show (label6);
+  gtk_frame_set_label_widget (GTK_FRAME (frame1), label6);
+
+  frame2 = gtk_frame_new (NULL);
+  gtk_widget_show (frame2);
+  gtk_box_pack_start (GTK_BOX (vbox4), frame2, TRUE, TRUE, 2);
+
+  table1 = gtk_table_new (3, 2, FALSE);
+  gtk_widget_show (table1);
+  gtk_container_add (GTK_CONTAINER (frame2), table1);
+  gtk_container_set_border_width (GTK_CONTAINER (table1), 2);
+
+  label8 = gtk_label_new (_("Backend URL:"));
+  gtk_widget_show (label8);
+  gtk_table_attach (GTK_TABLE (table1), label8, 0, 1, 0, 1,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (label8), 0, 0.5);
+
+  backend_url = gtk_entry_new ();
+  gtk_widget_show (backend_url);
+  gtk_table_attach (GTK_TABLE (table1), backend_url, 1, 2, 0, 1,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_widget_set_size_request (backend_url, 500, -1);
+  gtk_entry_set_text (GTK_ENTRY (backend_url), _("http://linuxfr.org/board/backend.xml"));
+
+  label9 = gtk_label_new (_("Backend flavour:"));
+  gtk_widget_show (label9);
+  gtk_table_attach (GTK_TABLE (table1), label9, 0, 1, 1, 2,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (label9), 0, 0.5);
+
+  backend_type = gtk_option_menu_new ();
+  gtk_widget_show (backend_type);
+  gtk_table_attach (GTK_TABLE (table1), backend_type, 1, 2, 1, 2,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+
+  menu1 = gtk_menu_new ();
+
+  backend_type_1 = gtk_menu_item_new_with_mnemonic (_("message tags are \"htmlentitised\""));
+  gtk_widget_show (backend_type_1);
+  gtk_container_add (GTK_CONTAINER (menu1), backend_type_1);
+
+  backend_type_2 = gtk_menu_item_new_with_mnemonic (_("message tags are raw"));
+  gtk_widget_show (backend_type_2);
+  gtk_container_add (GTK_CONTAINER (menu1), backend_type_2);
+
+  backend_type_3 = gtk_menu_item_new_with_mnemonic (_("the backend has no pants"));
+  gtk_widget_show (backend_type_3);
+  gtk_container_add (GTK_CONTAINER (menu1), backend_type_3);
+
+  gtk_option_menu_set_menu (GTK_OPTION_MENU (backend_type), menu1);
+
+  label10 = gtk_label_new (_("Refresh frequency\n (seconds): "));
+  gtk_widget_show (label10);
+  gtk_table_attach (GTK_TABLE (table1), label10, 0, 1, 2, 3,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (label10), 0, 0.5);
+
+  board_check_delay_adj = gtk_adjustment_new (10, 10, 10000, 1, 10, 10);
+  board_check_delay = gtk_spin_button_new (GTK_ADJUSTMENT (board_check_delay_adj), 1, 0);
+  gtk_widget_show (board_check_delay);
+  gtk_table_attach (GTK_TABLE (table1), board_check_delay, 1, 2, 2, 3,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+
+  label7 = gtk_label_new (_("XML Backend information"));
+  gtk_widget_show (label7);
+  gtk_frame_set_label_widget (GTK_FRAME (frame2), label7);
+
+  frame3 = gtk_frame_new (NULL);
+  gtk_widget_show (frame3);
+  gtk_box_pack_start (GTK_BOX (vbox4), frame3, TRUE, TRUE, 2);
+
+  alignment1 = gtk_alignment_new (0.5, 0.5, 1, 1);
+  gtk_widget_show (alignment1);
+  gtk_container_add (GTK_CONTAINER (frame3), alignment1);
+
+  table2 = gtk_table_new (4, 3, FALSE);
+  gtk_widget_show (table2);
+  gtk_container_add (GTK_CONTAINER (alignment1), table2);
+  gtk_container_set_border_width (GTK_CONTAINER (table2), 2);
+
+  label12 = gtk_label_new (_("Post URL:"));
+  gtk_widget_show (label12);
+  gtk_table_attach (GTK_TABLE (table2), label12, 0, 1, 0, 1,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (label12), 0, 0.5);
+
+  post_url = gtk_entry_new ();
+  gtk_widget_show (post_url);
+  gtk_table_attach (GTK_TABLE (table2), post_url, 2, 3, 0, 1,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+
+  label13 = gtk_label_new (_("Post Template:"));
+  gtk_widget_show (label13);
+  gtk_table_attach (GTK_TABLE (table2), label13, 0, 1, 1, 2,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (label13), 0, 0.5);
+
+  post_template = gtk_entry_new ();
+  gtk_widget_show (post_template);
+  gtk_table_attach (GTK_TABLE (table2), post_template, 2, 3, 1, 2,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+
+  scrolledwindow2 = gtk_scrolled_window_new (NULL, NULL);
+  gtk_widget_show (scrolledwindow2);
+  gtk_table_attach (GTK_TABLE (table2), scrolledwindow2, 2, 3, 2, 3,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (GTK_FILL), 0, 0);
+  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow2), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
+
+  viewport1 = gtk_viewport_new (NULL, NULL);
+  gtk_widget_show (viewport1);
+  gtk_container_add (GTK_CONTAINER (scrolledwindow2), viewport1);
+
+  user_cookie = gtk_entry_new ();
+  gtk_widget_show (user_cookie);
+  gtk_container_add (GTK_CONTAINER (viewport1), user_cookie);
+
+  grab_cookie_bt = gtk_button_new ();
+  gtk_widget_show (grab_cookie_bt);
+  gtk_table_attach (GTK_TABLE (table2), grab_cookie_bt, 1, 2, 2, 3,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_tooltips_set_tip (tooltips, grab_cookie_bt, _("attempt to get the cookie from the cookies stored in your browsers"), NULL);
+
+  alignment9 = gtk_alignment_new (0.5, 0.5, 0, 0);
+  gtk_widget_show (alignment9);
+  gtk_container_add (GTK_CONTAINER (grab_cookie_bt), alignment9);
+
+  hbox29 = gtk_hbox_new (FALSE, 2);
+  gtk_widget_show (hbox29);
+  gtk_container_add (GTK_CONTAINER (alignment9), hbox29);
+
+  image12 = gtk_image_new_from_stock ("gtk-find", GTK_ICON_SIZE_BUTTON);
+  gtk_widget_show (image12);
+  gtk_box_pack_start (GTK_BOX (hbox29), image12, FALSE, FALSE, 0);
+
+  label78 = gtk_label_new_with_mnemonic (_("(grab cookie)"));
+  gtk_widget_show (label78);
+  gtk_box_pack_start (GTK_BOX (hbox29), label78, FALSE, FALSE, 0);
+
+  label14 = gtk_label_new (_("Cookie(s)"));
+  gtk_widget_show (label14);
+  gtk_table_attach (GTK_TABLE (table2), label14, 0, 1, 2, 3,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (label14), 0, 0.5);
+
+  hunt_opened_on_site = gtk_check_button_new_with_mnemonic (_("balltrap is allowed on this board"));
+  gtk_widget_show (hunt_opened_on_site);
+  gtk_table_attach (GTK_TABLE (table2), hunt_opened_on_site, 2, 3, 3, 4,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_tooltips_set_tip (tooltips, hunt_opened_on_site, _("you can enable/disable the balltrap for each site. Note that there is also a global switch for the balltrap in the pinnipede button bar."), NULL);
+
+  label11 = gtk_label_new (_("Sending messages to the board"));
+  gtk_widget_show (label11);
+  gtk_frame_set_label_widget (GTK_FRAME (frame3), label11);
+
+  dialog_action_area2 = GTK_DIALOG (new_board_dialog)->action_area;
+  gtk_widget_show (dialog_action_area2);
+  gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area2), GTK_BUTTONBOX_END);
+
+  cancel_bt = gtk_button_new_from_stock ("gtk-cancel");
+  gtk_widget_show (cancel_bt);
+  gtk_dialog_add_action_widget (GTK_DIALOG (new_board_dialog), cancel_bt, GTK_RESPONSE_CANCEL);
+  GTK_WIDGET_SET_FLAGS (cancel_bt, GTK_CAN_DEFAULT);
+
+  apply_bt = gtk_button_new_from_stock ("gtk-apply");
+  gtk_widget_show (apply_bt);
+  gtk_dialog_add_action_widget (GTK_DIALOG (new_board_dialog), apply_bt, GTK_RESPONSE_APPLY);
+  GTK_WIDGET_SET_FLAGS (apply_bt, GTK_CAN_DEFAULT);
+
+  ok_bt = gtk_button_new_from_stock ("gtk-ok");
+  gtk_widget_show (ok_bt);
+  gtk_dialog_add_action_widget (GTK_DIALOG (new_board_dialog), ok_bt, GTK_RESPONSE_OK);
+  GTK_WIDGET_SET_FLAGS (ok_bt, GTK_CAN_DEFAULT);
+
+  /* Store pointers to all widgets, for use by lookup_widget(). */
+  GLADE_HOOKUP_OBJECT_NO_REF (new_board_dialog, new_board_dialog, "new_board_dialog");
+  GLADE_HOOKUP_OBJECT_NO_REF (new_board_dialog, dialog_vbox2, "dialog_vbox2");
+  GLADE_HOOKUP_OBJECT (new_board_dialog, vbox3, "vbox3");
+  GLADE_HOOKUP_OBJECT (new_board_dialog, hbox13, "hbox13");
+  GLADE_HOOKUP_OBJECT (new_board_dialog, image4, "image4");
+  GLADE_HOOKUP_OBJECT (new_board_dialog, edit_options_bt, "edit_options_bt");
+  GLADE_HOOKUP_OBJECT (new_board_dialog, alignment3, "alignment3");
+  GLADE_HOOKUP_OBJECT (new_board_dialog, hbox14, "hbox14");
+  GLADE_HOOKUP_OBJECT (new_board_dialog, image3, "image3");
+  GLADE_HOOKUP_OBJECT (new_board_dialog, label39, "label39");
+  GLADE_HOOKUP_OBJECT (new_board_dialog, vbox4, "vbox4");
+  GLADE_HOOKUP_OBJECT (new_board_dialog, frame1, "frame1");
+  GLADE_HOOKUP_OBJECT (new_board_dialog, alignment2, "alignment2");
+  GLADE_HOOKUP_OBJECT (new_board_dialog, hbox4, "hbox4");
+  GLADE_HOOKUP_OBJECT (new_board_dialog, label37, "label37");
+  GLADE_HOOKUP_OBJECT (new_board_dialog, all_names_0_, "all_names_0_");
+  GLADE_HOOKUP_OBJECT (new_board_dialog, label36, "label36");
+  GLADE_HOOKUP_OBJECT (new_board_dialog, pp_bgcolor, "pp_bgcolor");
+  GLADE_HOOKUP_OBJECT (new_board_dialog, label6, "label6");
+  GLADE_HOOKUP_OBJECT (new_board_dialog, frame2, "frame2");
+  GLADE_HOOKUP_OBJECT (new_board_dialog, table1, "table1");
+  GLADE_HOOKUP_OBJECT (new_board_dialog, label8, "label8");
+  GLADE_HOOKUP_OBJECT (new_board_dialog, backend_url, "backend_url");
+  GLADE_HOOKUP_OBJECT (new_board_dialog, label9, "label9");
+  GLADE_HOOKUP_OBJECT (new_board_dialog, backend_type, "backend_type");
+  GLADE_HOOKUP_OBJECT (new_board_dialog, menu1, "menu1");
+  GLADE_HOOKUP_OBJECT (new_board_dialog, backend_type_1, "backend_type_1");
+  GLADE_HOOKUP_OBJECT (new_board_dialog, backend_type_2, "backend_type_2");
+  GLADE_HOOKUP_OBJECT (new_board_dialog, backend_type_3, "backend_type_3");
+  GLADE_HOOKUP_OBJECT (new_board_dialog, label10, "label10");
+  GLADE_HOOKUP_OBJECT (new_board_dialog, board_check_delay, "board_check_delay");
+  GLADE_HOOKUP_OBJECT (new_board_dialog, label7, "label7");
+  GLADE_HOOKUP_OBJECT (new_board_dialog, frame3, "frame3");
+  GLADE_HOOKUP_OBJECT (new_board_dialog, alignment1, "alignment1");
+  GLADE_HOOKUP_OBJECT (new_board_dialog, table2, "table2");
+  GLADE_HOOKUP_OBJECT (new_board_dialog, label12, "label12");
+  GLADE_HOOKUP_OBJECT (new_board_dialog, post_url, "post_url");
+  GLADE_HOOKUP_OBJECT (new_board_dialog, label13, "label13");
+  GLADE_HOOKUP_OBJECT (new_board_dialog, post_template, "post_template");
+  GLADE_HOOKUP_OBJECT (new_board_dialog, scrolledwindow2, "scrolledwindow2");
+  GLADE_HOOKUP_OBJECT (new_board_dialog, viewport1, "viewport1");
+  GLADE_HOOKUP_OBJECT (new_board_dialog, user_cookie, "user_cookie");
+  GLADE_HOOKUP_OBJECT (new_board_dialog, grab_cookie_bt, "grab_cookie_bt");
+  GLADE_HOOKUP_OBJECT (new_board_dialog, alignment9, "alignment9");
+  GLADE_HOOKUP_OBJECT (new_board_dialog, hbox29, "hbox29");
+  GLADE_HOOKUP_OBJECT (new_board_dialog, image12, "image12");
+  GLADE_HOOKUP_OBJECT (new_board_dialog, label78, "label78");
+  GLADE_HOOKUP_OBJECT (new_board_dialog, label14, "label14");
+  GLADE_HOOKUP_OBJECT (new_board_dialog, hunt_opened_on_site, "hunt_opened_on_site");
+  GLADE_HOOKUP_OBJECT (new_board_dialog, label11, "label11");
+  GLADE_HOOKUP_OBJECT_NO_REF (new_board_dialog, dialog_action_area2, "dialog_action_area2");
+  GLADE_HOOKUP_OBJECT (new_board_dialog, cancel_bt, "cancel_bt");
+  GLADE_HOOKUP_OBJECT (new_board_dialog, apply_bt, "apply_bt");
+  GLADE_HOOKUP_OBJECT (new_board_dialog, ok_bt, "ok_bt");
+  GLADE_HOOKUP_OBJECT_NO_REF (new_board_dialog, tooltips, "tooltips");
+
+  return new_board_dialog;
+}
+
+GtkWidget*
+create_new_pop_dialog (void)
+{
+  GtkWidget *new_pop_dialog;
+  GtkWidget *dialog_vbox2;
+  GtkWidget *vbox3;
+  GtkWidget *hbox13;
+  GtkWidget *image4;
+  GtkWidget *edit_options_bt;
+  GtkWidget *alignment3;
+  GtkWidget *hbox14;
+  GtkWidget *image3;
+  GtkWidget *label39;
+  GtkWidget *vbox4;
+  GtkWidget *frame1;
+  GtkWidget *alignment2;
+  GtkWidget *hbox4;
+  GtkWidget *label37;
+  GtkWidget *all_names_0_;
+  GtkWidget *label36;
+  GtkWidget *pp_bgcolor;
+  GtkWidget *label6;
+  GtkWidget *frame2;
+  GtkWidget *table1;
+  GtkWidget *label8;
+  GtkWidget *backend_url;
+  GtkWidget *label10;
+  GtkObject *board_check_delay_adj;
+  GtkWidget *board_check_delay;
+  GtkWidget *label62;
+  GtkWidget *pop3_user;
+  GtkWidget *label63;
+  GtkWidget *pop3_pass;
+  GtkWidget *label7;
+  GtkWidget *dialog_action_area2;
+  GtkWidget *cancel_bt;
+  GtkWidget *apply_bt;
+  GtkWidget *ok_bt;
+  GtkTooltips *tooltips;
+
+  tooltips = gtk_tooltips_new ();
+
+  new_pop_dialog = gtk_dialog_new ();
+  gtk_window_set_title (GTK_WINDOW (new_pop_dialog), _("New POP"));
+  gtk_window_set_type_hint (GTK_WINDOW (new_pop_dialog), GDK_WINDOW_TYPE_HINT_DIALOG);
+
+  dialog_vbox2 = GTK_DIALOG (new_pop_dialog)->vbox;
+  gtk_widget_show (dialog_vbox2);
+
+  vbox3 = gtk_vbox_new (FALSE, 0);
+  gtk_widget_show (vbox3);
+  gtk_box_pack_start (GTK_BOX (dialog_vbox2), vbox3, TRUE, TRUE, 0);
+
+  hbox13 = gtk_hbox_new (FALSE, 0);
+  gtk_widget_show (hbox13);
+  gtk_box_pack_start (GTK_BOX (vbox3), hbox13, FALSE, FALSE, 0);
+
+  image4 = create_pixmap (new_pop_dialog, "logoh.png");
+  gtk_widget_show (image4);
+  gtk_box_pack_start (GTK_BOX (hbox13), image4, FALSE, TRUE, 0);
+  gtk_misc_set_alignment (GTK_MISC (image4), 0, 0.5);
+
+  edit_options_bt = gtk_button_new ();
+  gtk_widget_show (edit_options_bt);
+  gtk_box_pack_start (GTK_BOX (hbox13), edit_options_bt, TRUE, TRUE, 0);
+
+  alignment3 = gtk_alignment_new (0.5, 0.5, 0, 0);
+  gtk_widget_show (alignment3);
+  gtk_container_add (GTK_CONTAINER (edit_options_bt), alignment3);
+
+  hbox14 = gtk_hbox_new (FALSE, 2);
+  gtk_widget_show (hbox14);
+  gtk_container_add (GTK_CONTAINER (alignment3), hbox14);
+
+  image3 = gtk_image_new_from_stock ("gtk-convert", GTK_ICON_SIZE_BUTTON);
+  gtk_widget_show (image3);
+  gtk_box_pack_start (GTK_BOX (hbox14), image3, FALSE, FALSE, 0);
+
+  label39 = gtk_label_new_with_mnemonic (_("Click here to edit the options file"));
+  gtk_widget_show (label39);
+  gtk_box_pack_start (GTK_BOX (hbox14), label39, FALSE, FALSE, 0);
+
+  vbox4 = gtk_vbox_new (FALSE, 0);
+  gtk_widget_show (vbox4);
+  gtk_box_pack_start (GTK_BOX (vbox3), vbox4, TRUE, TRUE, 0);
+
+  frame1 = gtk_frame_new (NULL);
+  gtk_widget_show (frame1);
+  gtk_box_pack_start (GTK_BOX (vbox4), frame1, TRUE, TRUE, 2);
+
+  alignment2 = gtk_alignment_new (0.5, 0.5, 1, 1);
+  gtk_widget_show (alignment2);
+  gtk_container_add (GTK_CONTAINER (frame1), alignment2);
+
+  hbox4 = gtk_hbox_new (FALSE, 4);
+  gtk_widget_show (hbox4);
+  gtk_container_add (GTK_CONTAINER (alignment2), hbox4);
+  gtk_container_set_border_width (GTK_CONTAINER (hbox4), 2);
+
+  label37 = gtk_label_new (_("Give a (short) name for the board:"));
+  gtk_widget_show (label37);
+  gtk_box_pack_start (GTK_BOX (hbox4), label37, FALSE, FALSE, 0);
+
+  all_names_0_ = gtk_entry_new ();
+  gtk_widget_show (all_names_0_);
+  gtk_box_pack_start (GTK_BOX (hbox4), all_names_0_, TRUE, TRUE, 0);
+  gtk_tooltips_set_tip (tooltips, all_names_0_, _("Try to be short"), NULL);
+  gtk_entry_set_text (GTK_ENTRY (all_names_0_), _("altern"));
+
+  label36 = gtk_label_new (_("Background color: "));
+  gtk_widget_show (label36);
+  gtk_box_pack_start (GTK_BOX (hbox4), label36, FALSE, FALSE, 0);
+  gtk_label_set_justify (GTK_LABEL (label36), GTK_JUSTIFY_RIGHT);
+  gtk_misc_set_alignment (GTK_MISC (label36), 1, 0.5);
+
+  pp_bgcolor = gtk_button_new_with_mnemonic (_("pp_bgcolor_bt"));
+  gtk_widget_show (pp_bgcolor);
+  gtk_box_pack_start (GTK_BOX (hbox4), pp_bgcolor, FALSE, FALSE, 0);
+  gtk_tooltips_set_tip (tooltips, pp_bgcolor, _("You can customize the background color of the messages for this new site"), NULL);
+
+  label6 = gtk_label_new (_("Basic settings"));
+  gtk_widget_show (label6);
+  gtk_frame_set_label_widget (GTK_FRAME (frame1), label6);
+
+  frame2 = gtk_frame_new (NULL);
+  gtk_widget_show (frame2);
+  gtk_box_pack_start (GTK_BOX (vbox4), frame2, TRUE, TRUE, 2);
+
+  table1 = gtk_table_new (4, 2, FALSE);
+  gtk_widget_show (table1);
+  gtk_container_add (GTK_CONTAINER (frame2), table1);
+  gtk_container_set_border_width (GTK_CONTAINER (table1), 2);
+
+  label8 = gtk_label_new (_("POP3 URL:"));
+  gtk_widget_show (label8);
+  gtk_table_attach (GTK_TABLE (table1), label8, 0, 1, 0, 1,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (label8), 0, 0.5);
+
+  backend_url = gtk_entry_new ();
+  gtk_widget_show (backend_url);
+  gtk_table_attach (GTK_TABLE (table1), backend_url, 1, 2, 0, 1,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_widget_set_size_request (backend_url, 500, -1);
+  gtk_entry_set_text (GTK_ENTRY (backend_url), _("pop3://"));
+
+  label10 = gtk_label_new (_("Refresh frequency\n (seconds): "));
+  gtk_widget_show (label10);
+  gtk_table_attach (GTK_TABLE (table1), label10, 0, 1, 3, 4,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (label10), 0, 0.5);
+
+  board_check_delay_adj = gtk_adjustment_new (300, 10, 10000, 1, 10, 10);
+  board_check_delay = gtk_spin_button_new (GTK_ADJUSTMENT (board_check_delay_adj), 1, 0);
+  gtk_widget_show (board_check_delay);
+  gtk_table_attach (GTK_TABLE (table1), board_check_delay, 1, 2, 3, 4,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+
+  label62 = gtk_label_new (_("Login"));
+  gtk_widget_show (label62);
+  gtk_table_attach (GTK_TABLE (table1), label62, 0, 1, 1, 2,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (label62), 0, 0.5);
+
+  pop3_user = gtk_entry_new ();
+  gtk_widget_show (pop3_user);
+  gtk_table_attach (GTK_TABLE (table1), pop3_user, 1, 2, 1, 2,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+
+  label63 = gtk_label_new (_("Password"));
+  gtk_widget_show (label63);
+  gtk_table_attach (GTK_TABLE (table1), label63, 0, 1, 2, 3,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (label63), 0, 0.5);
+
+  pop3_pass = gtk_entry_new ();
+  gtk_widget_show (pop3_pass);
+  gtk_table_attach (GTK_TABLE (table1), pop3_pass, 1, 2, 2, 3,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_entry_set_visibility (GTK_ENTRY (pop3_pass), FALSE);
+
+  label7 = gtk_label_new (_("Mail account information"));
+  gtk_widget_show (label7);
+  gtk_frame_set_label_widget (GTK_FRAME (frame2), label7);
+
+  dialog_action_area2 = GTK_DIALOG (new_pop_dialog)->action_area;
+  gtk_widget_show (dialog_action_area2);
+  gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area2), GTK_BUTTONBOX_END);
+
+  cancel_bt = gtk_button_new_from_stock ("gtk-cancel");
+  gtk_widget_show (cancel_bt);
+  gtk_dialog_add_action_widget (GTK_DIALOG (new_pop_dialog), cancel_bt, GTK_RESPONSE_CANCEL);
+  GTK_WIDGET_SET_FLAGS (cancel_bt, GTK_CAN_DEFAULT);
+
+  apply_bt = gtk_button_new_from_stock ("gtk-apply");
+  gtk_widget_show (apply_bt);
+  gtk_dialog_add_action_widget (GTK_DIALOG (new_pop_dialog), apply_bt, GTK_RESPONSE_APPLY);
+  GTK_WIDGET_SET_FLAGS (apply_bt, GTK_CAN_DEFAULT);
+
+  ok_bt = gtk_button_new_from_stock ("gtk-ok");
+  gtk_widget_show (ok_bt);
+  gtk_dialog_add_action_widget (GTK_DIALOG (new_pop_dialog), ok_bt, GTK_RESPONSE_OK);
+  GTK_WIDGET_SET_FLAGS (ok_bt, GTK_CAN_DEFAULT);
+
+  /* Store pointers to all widgets, for use by lookup_widget(). */
+  GLADE_HOOKUP_OBJECT_NO_REF (new_pop_dialog, new_pop_dialog, "new_pop_dialog");
+  GLADE_HOOKUP_OBJECT_NO_REF (new_pop_dialog, dialog_vbox2, "dialog_vbox2");
+  GLADE_HOOKUP_OBJECT (new_pop_dialog, vbox3, "vbox3");
+  GLADE_HOOKUP_OBJECT (new_pop_dialog, hbox13, "hbox13");
+  GLADE_HOOKUP_OBJECT (new_pop_dialog, image4, "image4");
+  GLADE_HOOKUP_OBJECT (new_pop_dialog, edit_options_bt, "edit_options_bt");
+  GLADE_HOOKUP_OBJECT (new_pop_dialog, alignment3, "alignment3");
+  GLADE_HOOKUP_OBJECT (new_pop_dialog, hbox14, "hbox14");
+  GLADE_HOOKUP_OBJECT (new_pop_dialog, image3, "image3");
+  GLADE_HOOKUP_OBJECT (new_pop_dialog, label39, "label39");
+  GLADE_HOOKUP_OBJECT (new_pop_dialog, vbox4, "vbox4");
+  GLADE_HOOKUP_OBJECT (new_pop_dialog, frame1, "frame1");
+  GLADE_HOOKUP_OBJECT (new_pop_dialog, alignment2, "alignment2");
+  GLADE_HOOKUP_OBJECT (new_pop_dialog, hbox4, "hbox4");
+  GLADE_HOOKUP_OBJECT (new_pop_dialog, label37, "label37");
+  GLADE_HOOKUP_OBJECT (new_pop_dialog, all_names_0_, "all_names_0_");
+  GLADE_HOOKUP_OBJECT (new_pop_dialog, label36, "label36");
+  GLADE_HOOKUP_OBJECT (new_pop_dialog, pp_bgcolor, "pp_bgcolor");
+  GLADE_HOOKUP_OBJECT (new_pop_dialog, label6, "label6");
+  GLADE_HOOKUP_OBJECT (new_pop_dialog, frame2, "frame2");
+  GLADE_HOOKUP_OBJECT (new_pop_dialog, table1, "table1");
+  GLADE_HOOKUP_OBJECT (new_pop_dialog, label8, "label8");
+  GLADE_HOOKUP_OBJECT (new_pop_dialog, backend_url, "backend_url");
+  GLADE_HOOKUP_OBJECT (new_pop_dialog, label10, "label10");
+  GLADE_HOOKUP_OBJECT (new_pop_dialog, board_check_delay, "board_check_delay");
+  GLADE_HOOKUP_OBJECT (new_pop_dialog, label62, "label62");
+  GLADE_HOOKUP_OBJECT (new_pop_dialog, pop3_user, "pop3_user");
+  GLADE_HOOKUP_OBJECT (new_pop_dialog, label63, "label63");
+  GLADE_HOOKUP_OBJECT (new_pop_dialog, pop3_pass, "pop3_pass");
+  GLADE_HOOKUP_OBJECT (new_pop_dialog, label7, "label7");
+  GLADE_HOOKUP_OBJECT_NO_REF (new_pop_dialog, dialog_action_area2, "dialog_action_area2");
+  GLADE_HOOKUP_OBJECT (new_pop_dialog, cancel_bt, "cancel_bt");
+  GLADE_HOOKUP_OBJECT (new_pop_dialog, apply_bt, "apply_bt");
+  GLADE_HOOKUP_OBJECT (new_pop_dialog, ok_bt, "ok_bt");
+  GLADE_HOOKUP_OBJECT_NO_REF (new_pop_dialog, tooltips, "tooltips");
+
+  return new_pop_dialog;
+}
+
+GtkWidget*
+create_colorselection_dialog (void)
+{
+  GtkWidget *colorselection_dialog;
+  GtkWidget *ok_button1;
+  GtkWidget *cancel_button1;
+  GtkWidget *help_button1;
+  GtkWidget *color_selection1;
+
+  colorselection_dialog = gtk_color_selection_dialog_new (_("Choix de la couleur"));
+  gtk_window_set_resizable (GTK_WINDOW (colorselection_dialog), FALSE);
+  gtk_window_set_type_hint (GTK_WINDOW (colorselection_dialog), GDK_WINDOW_TYPE_HINT_DIALOG);
+
+  ok_button1 = GTK_COLOR_SELECTION_DIALOG (colorselection_dialog)->ok_button;
+  gtk_widget_show (ok_button1);
+  GTK_WIDGET_SET_FLAGS (ok_button1, GTK_CAN_DEFAULT);
+
+  cancel_button1 = GTK_COLOR_SELECTION_DIALOG (colorselection_dialog)->cancel_button;
+  gtk_widget_show (cancel_button1);
+  GTK_WIDGET_SET_FLAGS (cancel_button1, GTK_CAN_DEFAULT);
+
+  help_button1 = GTK_COLOR_SELECTION_DIALOG (colorselection_dialog)->help_button;
+  gtk_widget_show (help_button1);
+  GTK_WIDGET_SET_FLAGS (help_button1, GTK_CAN_DEFAULT);
+
+  color_selection1 = GTK_COLOR_SELECTION_DIALOG (colorselection_dialog)->colorsel;
+  gtk_widget_show (color_selection1);
+  gtk_color_selection_set_has_opacity_control (GTK_COLOR_SELECTION (color_selection1), FALSE);
+
+  /* Store pointers to all widgets, for use by lookup_widget(). */
+  GLADE_HOOKUP_OBJECT_NO_REF (colorselection_dialog, colorselection_dialog, "colorselection_dialog");
+  GLADE_HOOKUP_OBJECT_NO_REF (colorselection_dialog, ok_button1, "ok_button1");
+  GLADE_HOOKUP_OBJECT_NO_REF (colorselection_dialog, cancel_button1, "cancel_button1");
+  GLADE_HOOKUP_OBJECT_NO_REF (colorselection_dialog, help_button1, "help_button1");
+  GLADE_HOOKUP_OBJECT_NO_REF (colorselection_dialog, color_selection1, "color_selection1");
+
+  return colorselection_dialog;
+}
+
+GtkWidget*
+create_global_pinnipede_options_dialog (void)
+{
+  GtkWidget *global_pinnipede_options_dialog;
+  GtkWidget *dialog_vbox3;
+  GtkWidget *notebook1;
+  GtkWidget *vbox5;
+  GtkWidget *label15;
+  GtkWidget *frame4;
+  GtkWidget *vbox6;
+  GtkWidget *hbox9;
+  GtkWidget *pinnipede_open_on_start;
+  GtkWidget *pinnipede_open_on_start_fb;
+  GtkWidget *frame6;
+  GtkWidget *vbox24;
+  GtkWidget *hbox6;
+  GtkWidget *label19;
+  GtkWidget *combo1;
+  GList *combo1_items = NULL;
+  GtkWidget *pp_fn_family;
+  GtkWidget *label20;
+  GtkObject *pp_fn_size_adj;
+  GtkWidget *pp_fn_size;
+  GtkWidget *font_bt;
+  GtkWidget *hbox18;
+  GtkWidget *disable_xft_antialiasing;
+  GtkWidget *disable_xft_antialiasing_fb;
+  GtkWidget *label18;
+  GtkWidget *frame12;
+  GtkWidget *hbox42;
+  GtkWidget *hbox43;
+  GtkWidget *label107;
+  GtkWidget *pp_tabs_pos;
+  GtkWidget *menu3;
+  GtkWidget *bottom1;
+  GtkWidget *left1;
+  GtkWidget *right1;
+  GtkWidget *vbox26;
+  GtkWidget *hbox10;
+  GtkWidget *pp_use_classical_tabs;
+  GtkWidget *pp_use_classical_tabs_fb;
+  GtkWidget *hbox11;
+  GtkWidget *pp_use_colored_tabs;
+  GtkWidget *pp_use_colored_tabs_fb;
+  GtkWidget *label106;
+  GtkWidget *hbox12;
+  GtkWidget *hungry_boitakon;
+  GtkWidget *hungry_boitakon_fb;
+  GtkWidget *hbox23;
+  GtkWidget *auto_swallow;
+  GtkWidget *auto_swallow_fb;
+  GtkWidget *hbox32;
+  GtkWidget *enable_troll_detector;
+  GtkWidget *enable_troll_detector_fb;
+  GtkWidget *label16;
+  GtkWidget *hbox36;
+  GtkWidget *image15;
+  GtkWidget *label95;
+  GtkWidget *label87;
+  GtkWidget *vbox17;
+  GtkWidget *table6;
+  GtkWidget *label81;
+  GtkWidget *label82;
+  GtkWidget *combo2;
+  GList *combo2_items = NULL;
+  GtkWidget *browser_cmd;
+  GtkWidget *combo3;
+  GList *combo3_items = NULL;
+  GtkWidget *browser2_cmd;
+  GtkWidget *browser_cmd_fb;
+  GtkWidget *browser2_cmd_fb;
+  GtkWidget *label85;
+  GtkWidget *label88;
+  GtkWidget *vbox19;
+  GtkWidget *hbox33;
+  GtkWidget *image14;
+  GtkWidget *vbox20;
+  GtkWidget *hbox34;
+  GtkWidget *board_enable_hfr_pictures;
+  GtkWidget *board_enable_hfr_pictures_fb;
+  GtkWidget *hbox35;
+  GtkWidget *board_auto_dl_pictures;
+  GtkWidget *board_auto_dl_pictures_fb;
+  GtkWidget *hseparator7;
+  GtkWidget *label94;
+  GtkWidget *label92;
+  GtkWidget *vbox18;
+  GtkWidget *hunt_opened;
+  GtkWidget *hbox31;
+  GtkWidget *label90;
+  GtkObject *hunt_max_duck_adj;
+  GtkWidget *hunt_max_duck;
+  GtkWidget *hseparator6;
+  GtkWidget *label91;
+  GtkWidget *label89;
+  GtkWidget *dialog_action_area3;
+  GtkWidget *cancel_bt;
+  GtkWidget *apply_bt;
+  GtkWidget *ok_bt;
+  GtkTooltips *tooltips;
+
+  tooltips = gtk_tooltips_new ();
+
+  global_pinnipede_options_dialog = gtk_dialog_new ();
+  gtk_window_set_title (GTK_WINDOW (global_pinnipede_options_dialog), _("Change pinnipede settings"));
+  gtk_window_set_type_hint (GTK_WINDOW (global_pinnipede_options_dialog), GDK_WINDOW_TYPE_HINT_DIALOG);
+
+  dialog_vbox3 = GTK_DIALOG (global_pinnipede_options_dialog)->vbox;
+  gtk_widget_show (dialog_vbox3);
+
+  notebook1 = gtk_notebook_new ();
+  gtk_widget_show (notebook1);
+  gtk_box_pack_start (GTK_BOX (dialog_vbox3), notebook1, TRUE, TRUE, 0);
+
+  vbox5 = gtk_vbox_new (FALSE, 2);
+  gtk_widget_show (vbox5);
+  gtk_container_add (GTK_CONTAINER (notebook1), vbox5);
+
+  label15 = gtk_label_new (_("Change pinnipede options"));
+  gtk_widget_show (label15);
+  gtk_box_pack_start (GTK_BOX (vbox5), label15, FALSE, FALSE, 0);
+
+  frame4 = gtk_frame_new (NULL);
+  gtk_widget_show (frame4);
+  gtk_box_pack_start (GTK_BOX (vbox5), frame4, TRUE, TRUE, 0);
+
+  vbox6 = gtk_vbox_new (FALSE, 0);
+  gtk_widget_show (vbox6);
+  gtk_container_add (GTK_CONTAINER (frame4), vbox6);
+
+  hbox9 = gtk_hbox_new (FALSE, 0);
+  gtk_widget_show (hbox9);
+  gtk_box_pack_start (GTK_BOX (vbox6), hbox9, TRUE, TRUE, 0);
+
+  pinnipede_open_on_start = gtk_check_button_new_with_mnemonic (_("Auto-open on startup "));
+  gtk_widget_show (pinnipede_open_on_start);
+  gtk_box_pack_start (GTK_BOX (hbox9), pinnipede_open_on_start, FALSE, FALSE, 0);
+  gtk_tooltips_set_tip (tooltips, pinnipede_open_on_start, _("The pinnipede window will show up as soon as wmcoincoin is started"), NULL);
+
+  pinnipede_open_on_start_fb = gtk_label_new (_("label32"));
+  gtk_widget_show (pinnipede_open_on_start_fb);
+  gtk_box_pack_start (GTK_BOX (hbox9), pinnipede_open_on_start_fb, FALSE, FALSE, 0);
+
+  frame6 = gtk_frame_new (NULL);
+  gtk_widget_show (frame6);
+  gtk_box_pack_start (GTK_BOX (vbox6), frame6, TRUE, TRUE, 0);
+  gtk_container_set_border_width (GTK_CONTAINER (frame6), 2);
+
+  vbox24 = gtk_vbox_new (FALSE, 0);
+  gtk_widget_show (vbox24);
+  gtk_container_add (GTK_CONTAINER (frame6), vbox24);
+  gtk_container_set_border_width (GTK_CONTAINER (vbox24), 1);
+
+  hbox6 = gtk_hbox_new (FALSE, 0);
+  gtk_widget_show (hbox6);
+  gtk_box_pack_start (GTK_BOX (vbox24), hbox6, TRUE, TRUE, 0);
+
+  label19 = gtk_label_new (_("Font family "));
+  gtk_widget_show (label19);
+  gtk_box_pack_start (GTK_BOX (hbox6), label19, FALSE, FALSE, 0);
+
+  combo1 = gtk_combo_new ();
+  g_object_set_data (G_OBJECT (GTK_COMBO (combo1)->popwin),
+                     "GladeParentKey", combo1);
+  gtk_widget_show (combo1);
+  gtk_box_pack_start (GTK_BOX (hbox6), combo1, FALSE, FALSE, 0);
+  combo1_items = g_list_append (combo1_items, (gpointer) _("sans"));
+  combo1_items = g_list_append (combo1_items, (gpointer) _("verdana"));
+  gtk_combo_set_popdown_strings (GTK_COMBO (combo1), combo1_items);
+  g_list_free (combo1_items);
+
+  pp_fn_family = GTK_COMBO (combo1)->entry;
+  gtk_widget_show (pp_fn_family);
+
+  label20 = gtk_label_new (_("Font size"));
+  gtk_widget_show (label20);
+  gtk_box_pack_start (GTK_BOX (hbox6), label20, FALSE, FALSE, 0);
+
+  pp_fn_size_adj = gtk_adjustment_new (2, 0, 100, 1, 10, 10);
+  pp_fn_size = gtk_spin_button_new (GTK_ADJUSTMENT (pp_fn_size_adj), 1, 0);
+  gtk_widget_show (pp_fn_size);
+  gtk_box_pack_start (GTK_BOX (hbox6), pp_fn_size, FALSE, FALSE, 0);
+
+  font_bt = gtk_button_new_from_stock ("gtk-select-font");
+  gtk_widget_show (font_bt);
+  gtk_box_pack_start (GTK_BOX (hbox6), font_bt, FALSE, FALSE, 0);
+
+  hbox18 = gtk_hbox_new (FALSE, 0);
+  gtk_widget_show (hbox18);
+  gtk_box_pack_start (GTK_BOX (vbox24), hbox18, TRUE, TRUE, 0);
+
+  disable_xft_antialiasing = gtk_check_button_new_with_mnemonic (_("Disable antialiasing "));
+  gtk_widget_show (disable_xft_antialiasing);
+  gtk_box_pack_start (GTK_BOX (hbox18), disable_xft_antialiasing, FALSE, FALSE, 0);
+
+  disable_xft_antialiasing_fb = gtk_label_new (_("label32"));
+  gtk_widget_show (disable_xft_antialiasing_fb);
+  gtk_box_pack_start (GTK_BOX (hbox18), disable_xft_antialiasing_fb, FALSE, FALSE, 0);
+
+  label18 = gtk_label_new (_("Font"));
+  gtk_widget_show (label18);
+  gtk_frame_set_label_widget (GTK_FRAME (frame6), label18);
+
+  frame12 = gtk_frame_new (NULL);
+  gtk_widget_show (frame12);
+  gtk_box_pack_start (GTK_BOX (vbox6), frame12, FALSE, FALSE, 0);
+
+  hbox42 = gtk_hbox_new (FALSE, 0);
+  gtk_widget_show (hbox42);
+  gtk_container_add (GTK_CONTAINER (frame12), hbox42);
+  gtk_container_set_border_width (GTK_CONTAINER (hbox42), 1);
+
+  hbox43 = gtk_hbox_new (FALSE, 0);
+  gtk_widget_show (hbox43);
+  gtk_box_pack_start (GTK_BOX (hbox42), hbox43, TRUE, TRUE, 0);
+
+  label107 = gtk_label_new (_("Tabs position "));
+  gtk_widget_show (label107);
+  gtk_box_pack_start (GTK_BOX (hbox43), label107, FALSE, FALSE, 0);
+
+  pp_tabs_pos = gtk_option_menu_new ();
+  gtk_widget_show (pp_tabs_pos);
+  gtk_box_pack_start (GTK_BOX (hbox43), pp_tabs_pos, FALSE, FALSE, 0);
+  gtk_container_set_border_width (GTK_CONTAINER (pp_tabs_pos), 3);
+
+  menu3 = gtk_menu_new ();
+
+  bottom1 = gtk_menu_item_new_with_mnemonic (_("bottom"));
+  gtk_widget_show (bottom1);
+  gtk_container_add (GTK_CONTAINER (menu3), bottom1);
+
+  left1 = gtk_menu_item_new_with_mnemonic (_("left"));
+  gtk_widget_show (left1);
+  gtk_container_add (GTK_CONTAINER (menu3), left1);
+
+  right1 = gtk_menu_item_new_with_mnemonic (_("right"));
+  gtk_widget_show (right1);
+  gtk_container_add (GTK_CONTAINER (menu3), right1);
+
+  gtk_option_menu_set_menu (GTK_OPTION_MENU (pp_tabs_pos), menu3);
+
+  vbox26 = gtk_vbox_new (FALSE, 0);
+  gtk_widget_show (vbox26);
+  gtk_box_pack_start (GTK_BOX (hbox42), vbox26, TRUE, TRUE, 0);
+
+  hbox10 = gtk_hbox_new (FALSE, 0);
+  gtk_widget_show (hbox10);
+  gtk_box_pack_start (GTK_BOX (vbox26), hbox10, TRUE, TRUE, 0);
+
+  pp_use_classical_tabs = gtk_check_button_new_with_mnemonic (_("Use 'classical' tabs behaviour "));
+  gtk_widget_show (pp_use_classical_tabs);
+  gtk_box_pack_start (GTK_BOX (hbox10), pp_use_classical_tabs, FALSE, FALSE, 0);
+  gtk_tooltips_set_tip (tooltips, pp_use_classical_tabs, _("if you think that the default behaviour of the tabs sucks.."), NULL);
+
+  pp_use_classical_tabs_fb = gtk_label_new (_("label32"));
+  gtk_widget_show (pp_use_classical_tabs_fb);
+  gtk_box_pack_start (GTK_BOX (hbox10), pp_use_classical_tabs_fb, FALSE, FALSE, 0);
+
+  hbox11 = gtk_hbox_new (FALSE, 0);
+  gtk_widget_show (hbox11);
+  gtk_box_pack_start (GTK_BOX (vbox26), hbox11, TRUE, TRUE, 0);
+
+  pp_use_colored_tabs = gtk_check_button_new_with_mnemonic (_("Colored tabs "));
+  gtk_widget_show (pp_use_colored_tabs);
+  gtk_box_pack_start (GTK_BOX (hbox11), pp_use_colored_tabs, FALSE, FALSE, 0);
+  gtk_tooltips_set_tip (tooltips, pp_use_colored_tabs, _("if used, the \"tabs\" will be colored accordingly to the background color of the messages in the pinnipede"), NULL);
+
+  pp_use_colored_tabs_fb = gtk_label_new (_("label32"));
+  gtk_widget_show (pp_use_colored_tabs_fb);
+  gtk_box_pack_start (GTK_BOX (hbox11), pp_use_colored_tabs_fb, FALSE, FALSE, 0);
+
+  label106 = gtk_label_new (_("tabs"));
+  gtk_widget_show (label106);
+  gtk_frame_set_label_widget (GTK_FRAME (frame12), label106);
+
+  hbox12 = gtk_hbox_new (FALSE, 0);
+  gtk_widget_show (hbox12);
+  gtk_box_pack_start (GTK_BOX (vbox6), hbox12, TRUE, TRUE, 0);
+
+  hungry_boitakon = gtk_check_button_new_with_mnemonic (_("Very Hungry boitakon (eats answers to messages in boitakon) "));
+  gtk_widget_show (hungry_boitakon);
+  gtk_box_pack_start (GTK_BOX (hbox12), hungry_boitakon, FALSE, FALSE, 0);
+  gtk_tooltips_set_tip (tooltips, hungry_boitakon, _("If a message replies to a message in the hungry boitakon and another one which is not in the boitakon, it will be put in the boitakon only if this option is toggled"), NULL);
+
+  hungry_boitakon_fb = gtk_label_new (_("label32"));
+  gtk_widget_show (hungry_boitakon_fb);
+  gtk_box_pack_start (GTK_BOX (hbox12), hungry_boitakon_fb, FALSE, FALSE, 0);
+
+  hbox23 = gtk_hbox_new (FALSE, 0);
+  gtk_widget_show (hbox23);
+  gtk_box_pack_start (GTK_BOX (vbox6), hbox23, TRUE, TRUE, 0);
+
+  auto_swallow = gtk_check_button_new_with_mnemonic (_("Auto-swallow the dock applet (disable if you want wmcoincoin as a real dock app) "));
+  gtk_widget_show (auto_swallow);
+  gtk_box_pack_start (GTK_BOX (hbox23), auto_swallow, FALSE, FALSE, 0);
+  gtk_tooltips_set_tip (tooltips, auto_swallow, _("When enabled, the 64x64 dockapp will be embedded into the pinnipede"), NULL);
+
+  auto_swallow_fb = gtk_label_new (_("label32"));
+  gtk_widget_show (auto_swallow_fb);
+  gtk_box_pack_start (GTK_BOX (hbox23), auto_swallow_fb, FALSE, FALSE, 0);
+
+  hbox32 = gtk_hbox_new (FALSE, 0);
+  gtk_widget_show (hbox32);
+  gtk_box_pack_start (GTK_BOX (vbox6), hbox32, FALSE, FALSE, 0);
+
+  enable_troll_detector = gtk_check_button_new_with_mnemonic (_("Enable the troll-detector "));
+  gtk_widget_show (enable_troll_detector);
+  gtk_box_pack_start (GTK_BOX (hbox32), enable_troll_detector, FALSE, FALSE, 0);
+
+  enable_troll_detector_fb = gtk_label_new (_("enable_troll_detector"));
+  gtk_widget_show (enable_troll_detector_fb);
+  gtk_box_pack_start (GTK_BOX (hbox32), enable_troll_detector_fb, FALSE, FALSE, 0);
+
+  label16 = gtk_label_new (_("<b>Global settings</b>"));
+  gtk_widget_show (label16);
+  gtk_frame_set_label_widget (GTK_FRAME (frame4), label16);
+  gtk_label_set_use_markup (GTK_LABEL (label16), TRUE);
+
+  hbox36 = gtk_hbox_new (FALSE, 0);
+  gtk_widget_show (hbox36);
+  gtk_box_pack_start (GTK_BOX (vbox5), hbox36, TRUE, TRUE, 0);
+
+  image15 = create_pixmap (global_pinnipede_options_dialog, "cbronson.jpg");
+  gtk_widget_show (image15);
+  gtk_box_pack_start (GTK_BOX (hbox36), image15, FALSE, FALSE, 0);
+
+  label95 = gtk_label_new (_("Hello, this is Charles Bronson. I wish you a good coincoin"));
+  gtk_widget_show (label95);
+  gtk_box_pack_start (GTK_BOX (hbox36), label95, FALSE, FALSE, 0);
+
+  label87 = gtk_label_new (_("Appearance"));
+  gtk_widget_show (label87);
+  gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook1), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 0), label87);
+
+  vbox17 = gtk_vbox_new (FALSE, 0);
+  gtk_widget_show (vbox17);
+  gtk_container_add (GTK_CONTAINER (notebook1), vbox17);
+
+  table6 = gtk_table_new (2, 3, FALSE);
+  gtk_widget_show (table6);
+  gtk_box_pack_start (GTK_BOX (vbox17), table6, FALSE, TRUE, 0);
+
+  label81 = gtk_label_new (_("Main Browser"));
+  gtk_widget_show (label81);
+  gtk_table_attach (GTK_TABLE (table6), label81, 0, 1, 0, 1,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (label81), 0, 0.5);
+
+  label82 = gtk_label_new (_("Secondary Browser"));
+  gtk_widget_show (label82);
+  gtk_table_attach (GTK_TABLE (table6), label82, 0, 1, 1, 2,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (label82), 0, 0.5);
+
+  combo2 = gtk_combo_new ();
+  g_object_set_data (G_OBJECT (GTK_COMBO (combo2)->popwin),
+                     "GladeParentKey", combo2);
+  gtk_widget_show (combo2);
+  gtk_table_attach (GTK_TABLE (table6), combo2, 1, 2, 0, 1,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  combo2_items = g_list_append (combo2_items, (gpointer) _("xdg-open %s &"));
+  gtk_combo_set_popdown_strings (GTK_COMBO (combo2), combo2_items);
+  g_list_free (combo2_items);
+
+  browser_cmd = GTK_COMBO (combo2)->entry;
+  gtk_widget_show (browser_cmd);
+  gtk_widget_set_size_request (browser_cmd, 400, -1);
+
+  combo3 = gtk_combo_new ();
+  g_object_set_data (G_OBJECT (GTK_COMBO (combo3)->popwin),
+                     "GladeParentKey", combo3);
+  gtk_widget_show (combo3);
+  gtk_table_attach (GTK_TABLE (table6), combo3, 1, 2, 1, 2,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  combo3_items = g_list_append (combo3_items, (gpointer) _("xdg-open %s &"));
+  gtk_combo_set_popdown_strings (GTK_COMBO (combo3), combo3_items);
+  g_list_free (combo3_items);
+
+  browser2_cmd = GTK_COMBO (combo3)->entry;
+  gtk_widget_show (browser2_cmd);
+
+  browser_cmd_fb = gtk_label_new (_("label83"));
+  gtk_widget_show (browser_cmd_fb);
+  gtk_table_attach (GTK_TABLE (table6), browser_cmd_fb, 2, 3, 0, 1,
+                    (GtkAttachOptions) (0),
+                    (GtkAttachOptions) (0), 1, 0);
+  gtk_widget_set_size_request (browser_cmd_fb, 80, -1);
+  gtk_label_set_justify (GTK_LABEL (browser_cmd_fb), GTK_JUSTIFY_CENTER);
+  gtk_misc_set_alignment (GTK_MISC (browser_cmd_fb), 0, 0.5);
+
+  browser2_cmd_fb = gtk_label_new (_("label84"));
+  gtk_widget_show (browser2_cmd_fb);
+  gtk_table_attach (GTK_TABLE (table6), browser2_cmd_fb, 2, 3, 1, 2,
+                    (GtkAttachOptions) (0),
+                    (GtkAttachOptions) (0), 1, 0);
+  gtk_widget_set_size_request (browser2_cmd_fb, 80, -1);
+  gtk_label_set_justify (GTK_LABEL (browser2_cmd_fb), GTK_JUSTIFY_CENTER);
+  gtk_misc_set_alignment (GTK_MISC (browser2_cmd_fb), 0, 0.5);
+
+  label85 = gtk_label_new (_("<span size=\"medium\">These options allows you to launch an external browser from wmcoincoin, this is used for reading the news, the comments detected by the flamophone, the personnal messages, the [url]s of the pinnipede teletype.\n<b>be careful</b>: this kind of 'external' command might be a great source of vulnerability since the urls can contain ANY caracter (think of 'http://plop.org; reboot' ..\nFor this reason, dangerous caracter are carefully escappe [...]
+  gtk_widget_show (label85);
+  gtk_box_pack_start (GTK_BOX (vbox17), label85, FALSE, FALSE, 0);
+  gtk_label_set_use_markup (GTK_LABEL (label85), TRUE);
+  gtk_label_set_line_wrap (GTK_LABEL (label85), TRUE);
+
+  label88 = gtk_label_new (_("Browser"));
+  gtk_widget_show (label88);
+  gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook1), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 1), label88);
+
+  vbox19 = gtk_vbox_new (FALSE, 0);
+  gtk_widget_show (vbox19);
+  gtk_container_add (GTK_CONTAINER (notebook1), vbox19);
+
+  hbox33 = gtk_hbox_new (FALSE, 0);
+  gtk_widget_show (hbox33);
+  gtk_box_pack_start (GTK_BOX (vbox19), hbox33, FALSE, TRUE, 0);
+
+  image14 = create_pixmap (global_pinnipede_options_dialog, "totoz.xpm");
+  gtk_widget_show (image14);
+  gtk_box_pack_start (GTK_BOX (hbox33), image14, FALSE, FALSE, 0);
+
+  vbox20 = gtk_vbox_new (FALSE, 0);
+  gtk_widget_show (vbox20);
+  gtk_box_pack_start (GTK_BOX (hbox33), vbox20, TRUE, TRUE, 0);
+
+  hbox34 = gtk_hbox_new (FALSE, 0);
+  gtk_widget_show (hbox34);
+  gtk_box_pack_start (GTK_BOX (vbox20), hbox34, FALSE, FALSE, 0);
+
+  board_enable_hfr_pictures = gtk_check_button_new_with_mnemonic (_("Enable this feature "));
+  gtk_widget_show (board_enable_hfr_pictures);
+  gtk_box_pack_start (GTK_BOX (hbox34), board_enable_hfr_pictures, FALSE, FALSE, 0);
+
+  board_enable_hfr_pictures_fb = gtk_label_new (_("label98"));
+  gtk_widget_show (board_enable_hfr_pictures_fb);
+  gtk_box_pack_start (GTK_BOX (hbox34), board_enable_hfr_pictures_fb, FALSE, FALSE, 0);
+
+  hbox35 = gtk_hbox_new (FALSE, 0);
+  gtk_widget_show (hbox35);
+  gtk_box_pack_start (GTK_BOX (vbox20), hbox35, TRUE, TRUE, 0);
+
+  board_auto_dl_pictures = gtk_check_button_new_with_mnemonic (_("Automatically download [:totoz] pictures \n(may fill your harddrive with dumb GIFs) "));
+  gtk_widget_show (board_auto_dl_pictures);
+  gtk_box_pack_start (GTK_BOX (hbox35), board_auto_dl_pictures, FALSE, FALSE, 0);
+
+  board_auto_dl_pictures_fb = gtk_label_new (_("label97"));
+  gtk_widget_show (board_auto_dl_pictures_fb);
+  gtk_box_pack_start (GTK_BOX (hbox35), board_auto_dl_pictures_fb, FALSE, FALSE, 0);
+
+  hseparator7 = gtk_hseparator_new ();
+  gtk_widget_show (hseparator7);
+  gtk_box_pack_start (GTK_BOX (vbox19), hseparator7, FALSE, FALSE, 0);
+
+  label94 = gtk_label_new (_("The totoz module requires wmcoincoin_player support. It searches for occurences of [:totoz] etc in the pinnipede, and displays a correspounding picture from the set of smileys of http://totoz.eu\n\nThis pictures may be bookmarked in the pinnipede (via right clic), and the bookmark ( stored in ~/.wmcoincoin/totoz/bookmarks.{txt,html} ) can be opened from the totoz button in the palmipede."));
+  gtk_widget_show (label94);
+  gtk_box_pack_start (GTK_BOX (vbox19), label94, FALSE, FALSE, 0);
+  gtk_label_set_line_wrap (GTK_LABEL (label94), TRUE);
+
+  label92 = gtk_label_new (_("Totoz"));
+  gtk_widget_show (label92);
+  gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook1), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 2), label92);
+
+  vbox18 = gtk_vbox_new (FALSE, 0);
+  gtk_widget_show (vbox18);
+  gtk_container_add (GTK_CONTAINER (notebook1), vbox18);
+
+  hunt_opened = gtk_check_button_new_with_mnemonic (_("Enable balltrap on startup"));
+  gtk_widget_show (hunt_opened);
+  gtk_box_pack_start (GTK_BOX (vbox18), hunt_opened, FALSE, FALSE, 0);
+  gtk_tooltips_set_tip (tooltips, hunt_opened, _("this is the global switch for the balltrap (look at the duck in the pinnipede button bar)"), NULL);
+
+  hbox31 = gtk_hbox_new (FALSE, 0);
+  gtk_widget_show (hbox31);
+  gtk_box_pack_start (GTK_BOX (vbox18), hbox31, FALSE, FALSE, 0);
+
+  label90 = gtk_label_new (_("Max. number of simultaneous ducks"));
+  gtk_widget_show (label90);
+  gtk_box_pack_start (GTK_BOX (hbox31), label90, FALSE, FALSE, 0);
+  gtk_misc_set_padding (GTK_MISC (label90), 3, 0);
+
+  hunt_max_duck_adj = gtk_adjustment_new (1, 0, 100, 1, 10, 10);
+  hunt_max_duck = gtk_spin_button_new (GTK_ADJUSTMENT (hunt_max_duck_adj), 1, 0);
+  gtk_widget_show (hunt_max_duck);
+  gtk_box_pack_start (GTK_BOX (hbox31), hunt_max_duck, FALSE, FALSE, 0);
+
+  hseparator6 = gtk_hseparator_new ();
+  gtk_widget_show (hseparator6);
+  gtk_box_pack_start (GTK_BOX (vbox18), hseparator6, FALSE, FALSE, 0);
+
+  label91 = gtk_label_new (_("Hunting is fun.  Everybody enjoys shooting ducks with a bazooka. Lower your stress and improve your productivity with the balltrap module.\n\nNote that since X sucks with respect to moving windows, the balltrap may consume all your CPU, especially when ducks are flying over a slow-refresh window.. \n\nThe balltrap can be disabled for some sites, and enabled on other sites (see the switch in the site settings dialog). For example, it is recommended to disable [...]
+  gtk_widget_show (label91);
+  gtk_box_pack_start (GTK_BOX (vbox18), label91, FALSE, FALSE, 0);
+  gtk_label_set_line_wrap (GTK_LABEL (label91), TRUE);
+
+  label89 = gtk_label_new (_("Balltrap"));
+  gtk_widget_show (label89);
+  gtk_notebook_set_tab_label (GTK_NOTEBOOK (notebook1), gtk_notebook_get_nth_page (GTK_NOTEBOOK (notebook1), 3), label89);
+
+  dialog_action_area3 = GTK_DIALOG (global_pinnipede_options_dialog)->action_area;
+  gtk_widget_show (dialog_action_area3);
+  gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area3), GTK_BUTTONBOX_END);
+
+  cancel_bt = gtk_button_new_from_stock ("gtk-cancel");
+  gtk_widget_show (cancel_bt);
+  gtk_dialog_add_action_widget (GTK_DIALOG (global_pinnipede_options_dialog), cancel_bt, GTK_RESPONSE_CANCEL);
+  GTK_WIDGET_SET_FLAGS (cancel_bt, GTK_CAN_DEFAULT);
+
+  apply_bt = gtk_button_new_from_stock ("gtk-apply");
+  gtk_widget_show (apply_bt);
+  gtk_dialog_add_action_widget (GTK_DIALOG (global_pinnipede_options_dialog), apply_bt, GTK_RESPONSE_APPLY);
+  GTK_WIDGET_SET_FLAGS (apply_bt, GTK_CAN_DEFAULT);
+
+  ok_bt = gtk_button_new_from_stock ("gtk-ok");
+  gtk_widget_show (ok_bt);
+  gtk_dialog_add_action_widget (GTK_DIALOG (global_pinnipede_options_dialog), ok_bt, GTK_RESPONSE_OK);
+  GTK_WIDGET_SET_FLAGS (ok_bt, GTK_CAN_DEFAULT);
+
+  /* Store pointers to all widgets, for use by lookup_widget(). */
+  GLADE_HOOKUP_OBJECT_NO_REF (global_pinnipede_options_dialog, global_pinnipede_options_dialog, "global_pinnipede_options_dialog");
+  GLADE_HOOKUP_OBJECT_NO_REF (global_pinnipede_options_dialog, dialog_vbox3, "dialog_vbox3");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, notebook1, "notebook1");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, vbox5, "vbox5");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, label15, "label15");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, frame4, "frame4");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, vbox6, "vbox6");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, hbox9, "hbox9");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, pinnipede_open_on_start, "pinnipede_open_on_start");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, pinnipede_open_on_start_fb, "pinnipede_open_on_start_fb");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, frame6, "frame6");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, vbox24, "vbox24");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, hbox6, "hbox6");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, label19, "label19");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, combo1, "combo1");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, pp_fn_family, "pp_fn_family");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, label20, "label20");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, pp_fn_size, "pp_fn_size");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, font_bt, "font_bt");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, hbox18, "hbox18");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, disable_xft_antialiasing, "disable_xft_antialiasing");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, disable_xft_antialiasing_fb, "disable_xft_antialiasing_fb");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, label18, "label18");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, frame12, "frame12");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, hbox42, "hbox42");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, hbox43, "hbox43");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, label107, "label107");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, pp_tabs_pos, "pp_tabs_pos");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, menu3, "menu3");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, bottom1, "bottom1");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, left1, "left1");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, right1, "right1");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, vbox26, "vbox26");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, hbox10, "hbox10");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, pp_use_classical_tabs, "pp_use_classical_tabs");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, pp_use_classical_tabs_fb, "pp_use_classical_tabs_fb");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, hbox11, "hbox11");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, pp_use_colored_tabs, "pp_use_colored_tabs");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, pp_use_colored_tabs_fb, "pp_use_colored_tabs_fb");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, label106, "label106");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, hbox12, "hbox12");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, hungry_boitakon, "hungry_boitakon");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, hungry_boitakon_fb, "hungry_boitakon_fb");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, hbox23, "hbox23");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, auto_swallow, "auto_swallow");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, auto_swallow_fb, "auto_swallow_fb");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, hbox32, "hbox32");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, enable_troll_detector, "enable_troll_detector");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, enable_troll_detector_fb, "enable_troll_detector_fb");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, label16, "label16");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, hbox36, "hbox36");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, image15, "image15");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, label95, "label95");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, label87, "label87");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, vbox17, "vbox17");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, table6, "table6");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, label81, "label81");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, label82, "label82");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, combo2, "combo2");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, browser_cmd, "browser_cmd");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, combo3, "combo3");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, browser2_cmd, "browser2_cmd");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, browser_cmd_fb, "browser_cmd_fb");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, browser2_cmd_fb, "browser2_cmd_fb");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, label85, "label85");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, label88, "label88");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, vbox19, "vbox19");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, hbox33, "hbox33");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, image14, "image14");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, vbox20, "vbox20");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, hbox34, "hbox34");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, board_enable_hfr_pictures, "board_enable_hfr_pictures");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, board_enable_hfr_pictures_fb, "board_enable_hfr_pictures_fb");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, hbox35, "hbox35");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, board_auto_dl_pictures, "board_auto_dl_pictures");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, board_auto_dl_pictures_fb, "board_auto_dl_pictures_fb");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, hseparator7, "hseparator7");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, label94, "label94");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, label92, "label92");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, vbox18, "vbox18");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, hunt_opened, "hunt_opened");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, hbox31, "hbox31");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, label90, "label90");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, hunt_max_duck, "hunt_max_duck");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, hseparator6, "hseparator6");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, label91, "label91");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, label89, "label89");
+  GLADE_HOOKUP_OBJECT_NO_REF (global_pinnipede_options_dialog, dialog_action_area3, "dialog_action_area3");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, cancel_bt, "cancel_bt");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, apply_bt, "apply_bt");
+  GLADE_HOOKUP_OBJECT (global_pinnipede_options_dialog, ok_bt, "ok_bt");
+  GLADE_HOOKUP_OBJECT_NO_REF (global_pinnipede_options_dialog, tooltips, "tooltips");
+
+  return global_pinnipede_options_dialog;
+}
+
+GtkWidget*
+create_edit_dialog (void)
+{
+  GtkWidget *edit_dialog;
+  GtkWidget *dialog_vbox4;
+  GtkWidget *vbox8;
+  GtkWidget *label38;
+  GtkWidget *scrolledwindow3;
+  GtkWidget *textview;
+  GtkWidget *dialog_action_area4;
+  GtkWidget *cancel_bt;
+  GtkWidget *apply_bt;
+  GtkWidget *ok_bt;
+  GtkTooltips *tooltips;
+
+  tooltips = gtk_tooltips_new ();
+
+  edit_dialog = gtk_dialog_new ();
+  gtk_window_set_title (GTK_WINDOW (edit_dialog), _("Options edit"));
+  gtk_window_set_modal (GTK_WINDOW (edit_dialog), TRUE);
+  gtk_window_set_default_size (GTK_WINDOW (edit_dialog), 600, 450);
+  gtk_window_set_type_hint (GTK_WINDOW (edit_dialog), GDK_WINDOW_TYPE_HINT_DIALOG);
+
+  dialog_vbox4 = GTK_DIALOG (edit_dialog)->vbox;
+  gtk_widget_show (dialog_vbox4);
+
+  vbox8 = gtk_vbox_new (FALSE, 0);
+  gtk_widget_show (vbox8);
+  gtk_box_pack_start (GTK_BOX (dialog_vbox4), vbox8, TRUE, TRUE, 0);
+
+  label38 = gtk_label_new (_("wmccc \"do it yourself\" flavor"));
+  gtk_widget_show (label38);
+  gtk_box_pack_start (GTK_BOX (vbox8), label38, FALSE, FALSE, 0);
+
+  scrolledwindow3 = gtk_scrolled_window_new (NULL, NULL);
+  gtk_widget_show (scrolledwindow3);
+  gtk_box_pack_start (GTK_BOX (vbox8), scrolledwindow3, TRUE, TRUE, 0);
+  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow3), GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS);
+
+  textview = gtk_text_view_new ();
+  gtk_widget_show (textview);
+  gtk_container_add (GTK_CONTAINER (scrolledwindow3), textview);
+
+  dialog_action_area4 = GTK_DIALOG (edit_dialog)->action_area;
+  gtk_widget_show (dialog_action_area4);
+  gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area4), GTK_BUTTONBOX_END);
+
+  cancel_bt = gtk_button_new_from_stock ("gtk-cancel");
+  gtk_widget_show (cancel_bt);
+  gtk_dialog_add_action_widget (GTK_DIALOG (edit_dialog), cancel_bt, GTK_RESPONSE_CANCEL);
+  GTK_WIDGET_SET_FLAGS (cancel_bt, GTK_CAN_DEFAULT);
+
+  apply_bt = gtk_button_new_from_stock ("gtk-apply");
+  gtk_widget_show (apply_bt);
+  gtk_dialog_add_action_widget (GTK_DIALOG (edit_dialog), apply_bt, GTK_RESPONSE_APPLY);
+  GTK_WIDGET_SET_FLAGS (apply_bt, GTK_CAN_DEFAULT);
+  gtk_tooltips_set_tip (tooltips, apply_bt, _("Apply changes to wmcoincoin but do not save them"), NULL);
+
+  ok_bt = gtk_button_new_from_stock ("gtk-save");
+  gtk_widget_show (ok_bt);
+  gtk_dialog_add_action_widget (GTK_DIALOG (edit_dialog), ok_bt, GTK_RESPONSE_OK);
+  GTK_WIDGET_SET_FLAGS (ok_bt, GTK_CAN_DEFAULT);
+  gtk_tooltips_set_tip (tooltips, ok_bt, _("Save changes to the options file, but do not apply them"), NULL);
+
+  /* Store pointers to all widgets, for use by lookup_widget(). */
+  GLADE_HOOKUP_OBJECT_NO_REF (edit_dialog, edit_dialog, "edit_dialog");
+  GLADE_HOOKUP_OBJECT_NO_REF (edit_dialog, dialog_vbox4, "dialog_vbox4");
+  GLADE_HOOKUP_OBJECT (edit_dialog, vbox8, "vbox8");
+  GLADE_HOOKUP_OBJECT (edit_dialog, label38, "label38");
+  GLADE_HOOKUP_OBJECT (edit_dialog, scrolledwindow3, "scrolledwindow3");
+  GLADE_HOOKUP_OBJECT (edit_dialog, textview, "textview");
+  GLADE_HOOKUP_OBJECT_NO_REF (edit_dialog, dialog_action_area4, "dialog_action_area4");
+  GLADE_HOOKUP_OBJECT (edit_dialog, cancel_bt, "cancel_bt");
+  GLADE_HOOKUP_OBJECT (edit_dialog, apply_bt, "apply_bt");
+  GLADE_HOOKUP_OBJECT (edit_dialog, ok_bt, "ok_bt");
+  GLADE_HOOKUP_OBJECT_NO_REF (edit_dialog, tooltips, "tooltips");
+
+  return edit_dialog;
+}
+
+GtkWidget*
+create_bronson_wizard (void)
+{
+  GtkWidget *bronson_wizard;
+  GtkWidget *dialog_vbox5;
+  GtkWidget *vbox9;
+  GtkWidget *hbox15;
+  GtkWidget *image5;
+  GtkWidget *label40;
+  GtkWidget *hseparator1;
+  GtkWidget *hbox16;
+  GtkWidget *label41;
+  GtkWidget *vbox11;
+  GtkWidget *wizard_new_board_bt;
+  GtkWidget *alignment8;
+  GtkWidget *hbox28;
+  GtkWidget *image11;
+  GtkWidget *label77;
+  GtkWidget *wizard_new_feed_bt;
+  GtkWidget *alignment7;
+  GtkWidget *hbox27;
+  GtkWidget *image10;
+  GtkWidget *label76;
+  GtkWidget *wizard_new_pop_bt;
+  GtkWidget *alignment6;
+  GtkWidget *hbox26;
+  GtkWidget *image9;
+  GtkWidget *label75;
+  GtkWidget *edit_options_bt;
+  GtkWidget *alignment5;
+  GtkWidget *hbox25;
+  GtkWidget *image8;
+  GtkWidget *label74;
+  GtkWidget *dialog_action_area5;
+  GtkWidget *button2;
+
+  bronson_wizard = gtk_dialog_new ();
+  gtk_window_set_title (GTK_WINDOW (bronson_wizard), _("the wmccc wizard"));
+  gtk_window_set_type_hint (GTK_WINDOW (bronson_wizard), GDK_WINDOW_TYPE_HINT_DIALOG);
+
+  dialog_vbox5 = GTK_DIALOG (bronson_wizard)->vbox;
+  gtk_widget_show (dialog_vbox5);
+
+  vbox9 = gtk_vbox_new (FALSE, 0);
+  gtk_widget_show (vbox9);
+  gtk_box_pack_start (GTK_BOX (dialog_vbox5), vbox9, TRUE, TRUE, 0);
+
+  hbox15 = gtk_hbox_new (FALSE, 0);
+  gtk_widget_show (hbox15);
+  gtk_box_pack_start (GTK_BOX (vbox9), hbox15, FALSE, TRUE, 0);
+
+  image5 = create_pixmap (bronson_wizard, "cbronson.jpg");
+  gtk_widget_show (image5);
+  gtk_box_pack_start (GTK_BOX (hbox15), image5, FALSE, FALSE, 0);
+
+  label40 = gtk_label_new (_("Hello, I am Charles Bronson and I am going to guide you during the configuration of wmcoincoin.\nDon't fuck with me or I'll kick your ass with a mammoth's cubitus"));
+  gtk_widget_show (label40);
+  gtk_box_pack_start (GTK_BOX (hbox15), label40, FALSE, FALSE, 8);
+  gtk_label_set_line_wrap (GTK_LABEL (label40), TRUE);
+
+  hseparator1 = gtk_hseparator_new ();
+  gtk_widget_show (hseparator1);
+  gtk_box_pack_start (GTK_BOX (vbox9), hseparator1, TRUE, TRUE, 0);
+
+  hbox16 = gtk_hbox_new (FALSE, 0);
+  gtk_widget_show (hbox16);
+  gtk_box_pack_start (GTK_BOX (vbox9), hbox16, TRUE, TRUE, 0);
+
+  label41 = gtk_label_new (_("Where do you want to go today ?"));
+  gtk_widget_show (label41);
+  gtk_box_pack_start (GTK_BOX (hbox16), label41, TRUE, FALSE, 0);
+
+  vbox11 = gtk_vbox_new (FALSE, 0);
+  gtk_widget_show (vbox11);
+  gtk_box_pack_start (GTK_BOX (hbox16), vbox11, FALSE, FALSE, 23);
+
+  wizard_new_board_bt = gtk_button_new ();
+  gtk_widget_show (wizard_new_board_bt);
+  gtk_box_pack_start (GTK_BOX (vbox11), wizard_new_board_bt, FALSE, FALSE, 0);
+
+  alignment8 = gtk_alignment_new (0.5, 0.5, 0, 0);
+  gtk_widget_show (alignment8);
+  gtk_container_add (GTK_CONTAINER (wizard_new_board_bt), alignment8);
+
+  hbox28 = gtk_hbox_new (FALSE, 2);
+  gtk_widget_show (hbox28);
+  gtk_container_add (GTK_CONTAINER (alignment8), hbox28);
+
+  image11 = gtk_image_new_from_stock ("gtk-add", GTK_ICON_SIZE_BUTTON);
+  gtk_widget_show (image11);
+  gtk_box_pack_start (GTK_BOX (hbox28), image11, FALSE, FALSE, 0);
+
+  label77 = gtk_label_new_with_mnemonic (_("I want to add a new board"));
+  gtk_widget_show (label77);
+  gtk_box_pack_start (GTK_BOX (hbox28), label77, FALSE, FALSE, 0);
+
+  wizard_new_feed_bt = gtk_button_new ();
+  gtk_widget_show (wizard_new_feed_bt);
+  gtk_box_pack_start (GTK_BOX (vbox11), wizard_new_feed_bt, FALSE, FALSE, 0);
+
+  alignment7 = gtk_alignment_new (0.5, 0.5, 0, 0);
+  gtk_widget_show (alignment7);
+  gtk_container_add (GTK_CONTAINER (wizard_new_feed_bt), alignment7);
+
+  hbox27 = gtk_hbox_new (FALSE, 2);
+  gtk_widget_show (hbox27);
+  gtk_container_add (GTK_CONTAINER (alignment7), hbox27);
+
+  image10 = gtk_image_new_from_stock ("gtk-add", GTK_ICON_SIZE_BUTTON);
+  gtk_widget_show (image10);
+  gtk_box_pack_start (GTK_BOX (hbox27), image10, FALSE, FALSE, 0);
+
+  label76 = gtk_label_new_with_mnemonic (_("I want to add a new RSS feed"));
+  gtk_widget_show (label76);
+  gtk_box_pack_start (GTK_BOX (hbox27), label76, FALSE, FALSE, 0);
+
+  wizard_new_pop_bt = gtk_button_new ();
+  gtk_widget_show (wizard_new_pop_bt);
+  gtk_box_pack_start (GTK_BOX (vbox11), wizard_new_pop_bt, FALSE, FALSE, 0);
+
+  alignment6 = gtk_alignment_new (0.5, 0.5, 0, 0);
+  gtk_widget_show (alignment6);
+  gtk_container_add (GTK_CONTAINER (wizard_new_pop_bt), alignment6);
+
+  hbox26 = gtk_hbox_new (FALSE, 2);
+  gtk_widget_show (hbox26);
+  gtk_container_add (GTK_CONTAINER (alignment6), hbox26);
+
+  image9 = gtk_image_new_from_stock ("gtk-add", GTK_ICON_SIZE_BUTTON);
+  gtk_widget_show (image9);
+  gtk_box_pack_start (GTK_BOX (hbox26), image9, FALSE, FALSE, 0);
+
+  label75 = gtk_label_new_with_mnemonic (_("I want to add a new POP3 account"));
+  gtk_widget_show (label75);
+  gtk_box_pack_start (GTK_BOX (hbox26), label75, FALSE, FALSE, 0);
+
+  edit_options_bt = gtk_button_new ();
+  gtk_widget_show (edit_options_bt);
+  gtk_box_pack_start (GTK_BOX (vbox11), edit_options_bt, FALSE, FALSE, 0);
+
+  alignment5 = gtk_alignment_new (0.5, 0.5, 0, 0);
+  gtk_widget_show (alignment5);
+  gtk_container_add (GTK_CONTAINER (edit_options_bt), alignment5);
+
+  hbox25 = gtk_hbox_new (FALSE, 2);
+  gtk_widget_show (hbox25);
+  gtk_container_add (GTK_CONTAINER (alignment5), hbox25);
+
+  image8 = gtk_image_new_from_stock ("gtk-convert", GTK_ICON_SIZE_BUTTON);
+  gtk_widget_show (image8);
+  gtk_box_pack_start (GTK_BOX (hbox25), image8, FALSE, FALSE, 0);
+
+  label74 = gtk_label_new_with_mnemonic (_("I want to edit the options"));
+  gtk_widget_show (label74);
+  gtk_box_pack_start (GTK_BOX (hbox25), label74, FALSE, FALSE, 0);
+
+  dialog_action_area5 = GTK_DIALOG (bronson_wizard)->action_area;
+  gtk_widget_show (dialog_action_area5);
+  gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area5), GTK_BUTTONBOX_END);
+
+  button2 = gtk_button_new_from_stock ("gtk-close");
+  gtk_widget_show (button2);
+  gtk_dialog_add_action_widget (GTK_DIALOG (bronson_wizard), button2, GTK_RESPONSE_CLOSE);
+  GTK_WIDGET_SET_FLAGS (button2, GTK_CAN_DEFAULT);
+
+  /* Store pointers to all widgets, for use by lookup_widget(). */
+  GLADE_HOOKUP_OBJECT_NO_REF (bronson_wizard, bronson_wizard, "bronson_wizard");
+  GLADE_HOOKUP_OBJECT_NO_REF (bronson_wizard, dialog_vbox5, "dialog_vbox5");
+  GLADE_HOOKUP_OBJECT (bronson_wizard, vbox9, "vbox9");
+  GLADE_HOOKUP_OBJECT (bronson_wizard, hbox15, "hbox15");
+  GLADE_HOOKUP_OBJECT (bronson_wizard, image5, "image5");
+  GLADE_HOOKUP_OBJECT (bronson_wizard, label40, "label40");
+  GLADE_HOOKUP_OBJECT (bronson_wizard, hseparator1, "hseparator1");
+  GLADE_HOOKUP_OBJECT (bronson_wizard, hbox16, "hbox16");
+  GLADE_HOOKUP_OBJECT (bronson_wizard, label41, "label41");
+  GLADE_HOOKUP_OBJECT (bronson_wizard, vbox11, "vbox11");
+  GLADE_HOOKUP_OBJECT (bronson_wizard, wizard_new_board_bt, "wizard_new_board_bt");
+  GLADE_HOOKUP_OBJECT (bronson_wizard, alignment8, "alignment8");
+  GLADE_HOOKUP_OBJECT (bronson_wizard, hbox28, "hbox28");
+  GLADE_HOOKUP_OBJECT (bronson_wizard, image11, "image11");
+  GLADE_HOOKUP_OBJECT (bronson_wizard, label77, "label77");
+  GLADE_HOOKUP_OBJECT (bronson_wizard, wizard_new_feed_bt, "wizard_new_feed_bt");
+  GLADE_HOOKUP_OBJECT (bronson_wizard, alignment7, "alignment7");
+  GLADE_HOOKUP_OBJECT (bronson_wizard, hbox27, "hbox27");
+  GLADE_HOOKUP_OBJECT (bronson_wizard, image10, "image10");
+  GLADE_HOOKUP_OBJECT (bronson_wizard, label76, "label76");
+  GLADE_HOOKUP_OBJECT (bronson_wizard, wizard_new_pop_bt, "wizard_new_pop_bt");
+  GLADE_HOOKUP_OBJECT (bronson_wizard, alignment6, "alignment6");
+  GLADE_HOOKUP_OBJECT (bronson_wizard, hbox26, "hbox26");
+  GLADE_HOOKUP_OBJECT (bronson_wizard, image9, "image9");
+  GLADE_HOOKUP_OBJECT (bronson_wizard, label75, "label75");
+  GLADE_HOOKUP_OBJECT (bronson_wizard, edit_options_bt, "edit_options_bt");
+  GLADE_HOOKUP_OBJECT (bronson_wizard, alignment5, "alignment5");
+  GLADE_HOOKUP_OBJECT (bronson_wizard, hbox25, "hbox25");
+  GLADE_HOOKUP_OBJECT (bronson_wizard, image8, "image8");
+  GLADE_HOOKUP_OBJECT (bronson_wizard, label74, "label74");
+  GLADE_HOOKUP_OBJECT_NO_REF (bronson_wizard, dialog_action_area5, "dialog_action_area5");
+  GLADE_HOOKUP_OBJECT (bronson_wizard, button2, "button2");
+
+  return bronson_wizard;
+}
+
+GtkWidget*
+create_sitelist_dialog (void)
+{
+  GtkWidget *sitelist_dialog;
+  GtkWidget *dialog_vbox7;
+  GtkWidget *vbox12;
+  GtkWidget *hseparator2;
+  GtkWidget *title_lbl;
+  GtkWidget *label71;
+  GtkWidget *hbox17;
+  GtkWidget *vseparator2;
+  GtkWidget *scrolledwindow4;
+  GtkWidget *treeview;
+  GtkWidget *vseparator1;
+  GtkWidget *vbox22;
+  GtkWidget *frame10;
+  GtkWidget *vbox13;
+  GtkWidget *edit_bt;
+  GtkWidget *colors_bt;
+  GtkWidget *alignment14;
+  GtkWidget *hbox41;
+  GtkWidget *image20;
+  GtkWidget *label105;
+  GtkWidget *proxy_bt;
+  GtkWidget *remove_bt;
+  GtkWidget *alignment13;
+  GtkWidget *hbox40;
+  GtkWidget *image19;
+  GtkWidget *label_remoev;
+  GtkWidget *label103;
+  GtkWidget *frame11;
+  GtkWidget *vbox23;
+  GtkWidget *new_site_bt;
+  GtkWidget *alignment11;
+  GtkWidget *hbox38;
+  GtkWidget *image17;
+  GtkWidget *label102;
+  GtkWidget *pinnipede_settings_bt;
+  GtkWidget *alignment12;
+  GtkWidget *hbox39;
+  GtkWidget *image18;
+  GtkWidget *label_pini;
+  GtkWidget *edit_options_bt;
+  GtkWidget *alignment4;
+  GtkWidget *hbox24;
+  GtkWidget *image7;
+  GtkWidget *label73;
+  GtkWidget *label104;
+  GtkWidget *hseparator3;
+  GtkWidget *dialog_action_area7;
+  GtkWidget *cancel_bt;
+  GtkWidget *apply_bt;
+  GtkWidget *save_bt;
+  GtkTooltips *tooltips;
+
+  tooltips = gtk_tooltips_new ();
+
+  sitelist_dialog = gtk_dialog_new ();
+  gtk_window_set_title (GTK_WINDOW (sitelist_dialog), _("WMCCC"));
+  gtk_window_set_position (GTK_WINDOW (sitelist_dialog), GTK_WIN_POS_CENTER);
+  gtk_window_set_default_size (GTK_WINDOW (sitelist_dialog), 640, 460);
+  gtk_window_set_type_hint (GTK_WINDOW (sitelist_dialog), GDK_WINDOW_TYPE_HINT_DIALOG);
+
+  dialog_vbox7 = GTK_DIALOG (sitelist_dialog)->vbox;
+  gtk_widget_show (dialog_vbox7);
+
+  vbox12 = gtk_vbox_new (FALSE, 0);
+  gtk_widget_show (vbox12);
+  gtk_box_pack_start (GTK_BOX (dialog_vbox7), vbox12, TRUE, TRUE, 0);
+
+  hseparator2 = gtk_hseparator_new ();
+  gtk_widget_show (hseparator2);
+  gtk_box_pack_start (GTK_BOX (vbox12), hseparator2, FALSE, FALSE, 0);
+
+  title_lbl = gtk_label_new (_("Editing options file:"));
+  gtk_widget_show (title_lbl);
+  gtk_box_pack_start (GTK_BOX (vbox12), title_lbl, FALSE, FALSE, 0);
+  gtk_label_set_use_markup (GTK_LABEL (title_lbl), TRUE);
+
+  label71 = gtk_label_new (_("<span size=\"small\"><b>PLEASE DO A SAUVEGARDE OF YOUR OPTIONS IT IS TOUT A FAIT POSSIBLE \nTHAT THE NEW WMCCC FUCK YOUR OPTIONS,\nYOU HAVE BEEN WARNED</b></span>"));
+  gtk_widget_show (label71);
+  gtk_box_pack_start (GTK_BOX (vbox12), label71, FALSE, FALSE, 0);
+  gtk_label_set_use_markup (GTK_LABEL (label71), TRUE);
+
+  hbox17 = gtk_hbox_new (FALSE, 0);
+  gtk_widget_show (hbox17);
+  gtk_box_pack_start (GTK_BOX (vbox12), hbox17, TRUE, TRUE, 0);
+
+  vseparator2 = gtk_vseparator_new ();
+  gtk_widget_show (vseparator2);
+  gtk_box_pack_start (GTK_BOX (hbox17), vseparator2, FALSE, FALSE, 0);
+
+  scrolledwindow4 = gtk_scrolled_window_new (NULL, NULL);
+  gtk_widget_show (scrolledwindow4);
+  gtk_box_pack_start (GTK_BOX (hbox17), scrolledwindow4, TRUE, TRUE, 0);
+  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow4), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+
+  treeview = gtk_tree_view_new ();
+  gtk_widget_show (treeview);
+  gtk_container_add (GTK_CONTAINER (scrolledwindow4), treeview);
+
+  vseparator1 = gtk_vseparator_new ();
+  gtk_widget_show (vseparator1);
+  gtk_box_pack_start (GTK_BOX (hbox17), vseparator1, FALSE, FALSE, 0);
+
+  vbox22 = gtk_vbox_new (FALSE, 0);
+  gtk_widget_show (vbox22);
+  gtk_box_pack_start (GTK_BOX (hbox17), vbox22, FALSE, FALSE, 0);
+
+  frame10 = gtk_frame_new (NULL);
+  gtk_widget_show (frame10);
+  gtk_box_pack_start (GTK_BOX (vbox22), frame10, FALSE, FALSE, 0);
+
+  vbox13 = gtk_vbox_new (FALSE, 0);
+  gtk_widget_show (vbox13);
+  gtk_container_add (GTK_CONTAINER (frame10), vbox13);
+
+  edit_bt = gtk_button_new_with_mnemonic (_("Edit the \nselected sites"));
+  gtk_widget_show (edit_bt);
+  gtk_box_pack_start (GTK_BOX (vbox13), edit_bt, FALSE, FALSE, 0);
+  gtk_tooltips_set_tip (tooltips, edit_bt, _("Change various settings for the selected sites (name and aliases, backend, etc)"), NULL);
+
+  colors_bt = gtk_button_new ();
+  gtk_widget_show (colors_bt);
+  gtk_box_pack_start (GTK_BOX (vbox13), colors_bt, FALSE, FALSE, 0);
+  gtk_tooltips_set_tip (tooltips, colors_bt, _("Change color settings (background etc) for the selected sites"), NULL);
+
+  alignment14 = gtk_alignment_new (0.5, 0.5, 0, 0);
+  gtk_widget_show (alignment14);
+  gtk_container_add (GTK_CONTAINER (colors_bt), alignment14);
+
+  hbox41 = gtk_hbox_new (FALSE, 2);
+  gtk_widget_show (hbox41);
+  gtk_container_add (GTK_CONTAINER (alignment14), hbox41);
+
+  image20 = gtk_image_new_from_stock ("gtk-select-color", GTK_ICON_SIZE_BUTTON);
+  gtk_widget_show (image20);
+  gtk_box_pack_start (GTK_BOX (hbox41), image20, FALSE, FALSE, 0);
+
+  label105 = gtk_label_new_with_mnemonic (_("Change colors for\n selected sites"));
+  gtk_widget_show (label105);
+  gtk_box_pack_start (GTK_BOX (hbox41), label105, FALSE, FALSE, 0);
+
+  proxy_bt = gtk_button_new_with_mnemonic (_("Proxy settings"));
+  gtk_widget_show (proxy_bt);
+  gtk_box_pack_start (GTK_BOX (vbox13), proxy_bt, FALSE, FALSE, 0);
+  gtk_tooltips_set_tip (tooltips, proxy_bt, _("Change proxy settings for the selected sites"), NULL);
+
+  remove_bt = gtk_button_new ();
+  gtk_widget_show (remove_bt);
+  gtk_box_pack_start (GTK_BOX (vbox13), remove_bt, FALSE, FALSE, 0);
+  gtk_tooltips_set_tip (tooltips, remove_bt, _("Removes permanently the site -- you may prefer to uncheck the check-box in the site list to remove the site temporarily from the pinnipede"), NULL);
+
+  alignment13 = gtk_alignment_new (0.5, 0.5, 0, 0);
+  gtk_widget_show (alignment13);
+  gtk_container_add (GTK_CONTAINER (remove_bt), alignment13);
+
+  hbox40 = gtk_hbox_new (FALSE, 2);
+  gtk_widget_show (hbox40);
+  gtk_container_add (GTK_CONTAINER (alignment13), hbox40);
+
+  image19 = gtk_image_new_from_stock ("gtk-remove", GTK_ICON_SIZE_BUTTON);
+  gtk_widget_show (image19);
+  gtk_box_pack_start (GTK_BOX (hbox40), image19, FALSE, FALSE, 0);
+
+  label_remoev = gtk_label_new_with_mnemonic (_("Remove the\n selected sites"));
+  gtk_widget_show (label_remoev);
+  gtk_box_pack_start (GTK_BOX (hbox40), label_remoev, FALSE, FALSE, 0);
+
+  label103 = gtk_label_new (_("Site actions"));
+  gtk_widget_show (label103);
+  gtk_frame_set_label_widget (GTK_FRAME (frame10), label103);
+
+  frame11 = gtk_frame_new (NULL);
+  gtk_widget_show (frame11);
+  gtk_box_pack_end (GTK_BOX (vbox22), frame11, FALSE, FALSE, 0);
+
+  vbox23 = gtk_vbox_new (FALSE, 0);
+  gtk_widget_show (vbox23);
+  gtk_container_add (GTK_CONTAINER (frame11), vbox23);
+
+  new_site_bt = gtk_button_new ();
+  gtk_widget_show (new_site_bt);
+  gtk_box_pack_start (GTK_BOX (vbox23), new_site_bt, FALSE, FALSE, 0);
+  gtk_tooltips_set_tip (tooltips, new_site_bt, _("Create a new site (board, rss, etc), with the help of Charles Bronson"), NULL);
+
+  alignment11 = gtk_alignment_new (0.5, 0.5, 0, 0);
+  gtk_widget_show (alignment11);
+  gtk_container_add (GTK_CONTAINER (new_site_bt), alignment11);
+
+  hbox38 = gtk_hbox_new (FALSE, 2);
+  gtk_widget_show (hbox38);
+  gtk_container_add (GTK_CONTAINER (alignment11), hbox38);
+
+  image17 = gtk_image_new_from_stock ("gtk-add", GTK_ICON_SIZE_BUTTON);
+  gtk_widget_show (image17);
+  gtk_box_pack_start (GTK_BOX (hbox38), image17, FALSE, FALSE, 0);
+
+  label102 = gtk_label_new_with_mnemonic (_("Insert a new site"));
+  gtk_widget_show (label102);
+  gtk_box_pack_start (GTK_BOX (hbox38), label102, FALSE, FALSE, 0);
+
+  pinnipede_settings_bt = gtk_button_new ();
+  gtk_widget_show (pinnipede_settings_bt);
+  gtk_box_pack_start (GTK_BOX (vbox23), pinnipede_settings_bt, FALSE, FALSE, 0);
+  gtk_tooltips_set_tip (tooltips, pinnipede_settings_bt, _("Change various (non site-specific) settings"), NULL);
+
+  alignment12 = gtk_alignment_new (0.5, 0.5, 0, 0);
+  gtk_widget_show (alignment12);
+  gtk_container_add (GTK_CONTAINER (pinnipede_settings_bt), alignment12);
+
+  hbox39 = gtk_hbox_new (FALSE, 2);
+  gtk_widget_show (hbox39);
+  gtk_container_add (GTK_CONTAINER (alignment12), hbox39);
+
+  image18 = gtk_image_new_from_stock ("gtk-select-color", GTK_ICON_SIZE_BUTTON);
+  gtk_widget_show (image18);
+  gtk_box_pack_start (GTK_BOX (hbox39), image18, FALSE, FALSE, 0);
+
+  label_pini = gtk_label_new_with_mnemonic (_("Pinnipede Settings"));
+  gtk_widget_show (label_pini);
+  gtk_box_pack_start (GTK_BOX (hbox39), label_pini, FALSE, FALSE, 0);
+
+  edit_options_bt = gtk_button_new ();
+  gtk_widget_show (edit_options_bt);
+  gtk_box_pack_start (GTK_BOX (vbox23), edit_options_bt, FALSE, FALSE, 0);
+  gtk_tooltips_set_tip (tooltips, edit_options_bt, _("Edit the options as a text file"), NULL);
+
+  alignment4 = gtk_alignment_new (0.5, 0.5, 0, 0);
+  gtk_widget_show (alignment4);
+  gtk_container_add (GTK_CONTAINER (edit_options_bt), alignment4);
+
+  hbox24 = gtk_hbox_new (FALSE, 2);
+  gtk_widget_show (hbox24);
+  gtk_container_add (GTK_CONTAINER (alignment4), hbox24);
+
+  image7 = gtk_image_new_from_stock ("gtk-convert", GTK_ICON_SIZE_BUTTON);
+  gtk_widget_show (image7);
+  gtk_box_pack_start (GTK_BOX (hbox24), image7, FALSE, FALSE, 0);
+
+  label73 = gtk_label_new_with_mnemonic (_("Do It Yourself"));
+  gtk_widget_show (label73);
+  gtk_box_pack_start (GTK_BOX (hbox24), label73, FALSE, FALSE, 0);
+
+  label104 = gtk_label_new (_("Global actions"));
+  gtk_widget_show (label104);
+  gtk_frame_set_label_widget (GTK_FRAME (frame11), label104);
+
+  hseparator3 = gtk_hseparator_new ();
+  gtk_widget_show (hseparator3);
+  gtk_box_pack_start (GTK_BOX (vbox12), hseparator3, FALSE, FALSE, 0);
+
+  dialog_action_area7 = GTK_DIALOG (sitelist_dialog)->action_area;
+  gtk_widget_show (dialog_action_area7);
+  gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area7), GTK_BUTTONBOX_END);
+
+  cancel_bt = gtk_button_new_from_stock ("gtk-cancel");
+  gtk_widget_show (cancel_bt);
+  gtk_dialog_add_action_widget (GTK_DIALOG (sitelist_dialog), cancel_bt, GTK_RESPONSE_CANCEL);
+  GTK_WIDGET_SET_FLAGS (cancel_bt, GTK_CAN_DEFAULT);
+  gtk_tooltips_set_tip (tooltips, cancel_bt, _("Ignore changes and exit"), NULL);
+
+  apply_bt = gtk_button_new_from_stock ("gtk-apply");
+  gtk_widget_show (apply_bt);
+  gtk_dialog_add_action_widget (GTK_DIALOG (sitelist_dialog), apply_bt, GTK_RESPONSE_APPLY);
+  GTK_WIDGET_SET_FLAGS (apply_bt, GTK_CAN_DEFAULT);
+  gtk_tooltips_set_tip (tooltips, apply_bt, _("Apply the changes to wmcc (but the changes are NOT saved in the options file!)"), NULL);
+
+  save_bt = gtk_button_new_from_stock ("gtk-save");
+  gtk_widget_show (save_bt);
+  gtk_dialog_add_action_widget (GTK_DIALOG (sitelist_dialog), save_bt, GTK_RESPONSE_OK);
+  GTK_WIDGET_SET_FLAGS (save_bt, GTK_CAN_DEFAULT);
+  gtk_tooltips_set_tip (tooltips, save_bt, _("Save and exit (if wmccc was invoked from wmcc, the changes are NOT applied !)"), NULL);
+
+  /* Store pointers to all widgets, for use by lookup_widget(). */
+  GLADE_HOOKUP_OBJECT_NO_REF (sitelist_dialog, sitelist_dialog, "sitelist_dialog");
+  GLADE_HOOKUP_OBJECT_NO_REF (sitelist_dialog, dialog_vbox7, "dialog_vbox7");
+  GLADE_HOOKUP_OBJECT (sitelist_dialog, vbox12, "vbox12");
+  GLADE_HOOKUP_OBJECT (sitelist_dialog, hseparator2, "hseparator2");
+  GLADE_HOOKUP_OBJECT (sitelist_dialog, title_lbl, "title_lbl");
+  GLADE_HOOKUP_OBJECT (sitelist_dialog, label71, "label71");
+  GLADE_HOOKUP_OBJECT (sitelist_dialog, hbox17, "hbox17");
+  GLADE_HOOKUP_OBJECT (sitelist_dialog, vseparator2, "vseparator2");
+  GLADE_HOOKUP_OBJECT (sitelist_dialog, scrolledwindow4, "scrolledwindow4");
+  GLADE_HOOKUP_OBJECT (sitelist_dialog, treeview, "treeview");
+  GLADE_HOOKUP_OBJECT (sitelist_dialog, vseparator1, "vseparator1");
+  GLADE_HOOKUP_OBJECT (sitelist_dialog, vbox22, "vbox22");
+  GLADE_HOOKUP_OBJECT (sitelist_dialog, frame10, "frame10");
+  GLADE_HOOKUP_OBJECT (sitelist_dialog, vbox13, "vbox13");
+  GLADE_HOOKUP_OBJECT (sitelist_dialog, edit_bt, "edit_bt");
+  GLADE_HOOKUP_OBJECT (sitelist_dialog, colors_bt, "colors_bt");
+  GLADE_HOOKUP_OBJECT (sitelist_dialog, alignment14, "alignment14");
+  GLADE_HOOKUP_OBJECT (sitelist_dialog, hbox41, "hbox41");
+  GLADE_HOOKUP_OBJECT (sitelist_dialog, image20, "image20");
+  GLADE_HOOKUP_OBJECT (sitelist_dialog, label105, "label105");
+  GLADE_HOOKUP_OBJECT (sitelist_dialog, proxy_bt, "proxy_bt");
+  GLADE_HOOKUP_OBJECT (sitelist_dialog, remove_bt, "remove_bt");
+  GLADE_HOOKUP_OBJECT (sitelist_dialog, alignment13, "alignment13");
+  GLADE_HOOKUP_OBJECT (sitelist_dialog, hbox40, "hbox40");
+  GLADE_HOOKUP_OBJECT (sitelist_dialog, image19, "image19");
+  GLADE_HOOKUP_OBJECT (sitelist_dialog, label_remoev, "label_remoev");
+  GLADE_HOOKUP_OBJECT (sitelist_dialog, label103, "label103");
+  GLADE_HOOKUP_OBJECT (sitelist_dialog, frame11, "frame11");
+  GLADE_HOOKUP_OBJECT (sitelist_dialog, vbox23, "vbox23");
+  GLADE_HOOKUP_OBJECT (sitelist_dialog, new_site_bt, "new_site_bt");
+  GLADE_HOOKUP_OBJECT (sitelist_dialog, alignment11, "alignment11");
+  GLADE_HOOKUP_OBJECT (sitelist_dialog, hbox38, "hbox38");
+  GLADE_HOOKUP_OBJECT (sitelist_dialog, image17, "image17");
+  GLADE_HOOKUP_OBJECT (sitelist_dialog, label102, "label102");
+  GLADE_HOOKUP_OBJECT (sitelist_dialog, pinnipede_settings_bt, "pinnipede_settings_bt");
+  GLADE_HOOKUP_OBJECT (sitelist_dialog, alignment12, "alignment12");
+  GLADE_HOOKUP_OBJECT (sitelist_dialog, hbox39, "hbox39");
+  GLADE_HOOKUP_OBJECT (sitelist_dialog, image18, "image18");
+  GLADE_HOOKUP_OBJECT (sitelist_dialog, label_pini, "label_pini");
+  GLADE_HOOKUP_OBJECT (sitelist_dialog, edit_options_bt, "edit_options_bt");
+  GLADE_HOOKUP_OBJECT (sitelist_dialog, alignment4, "alignment4");
+  GLADE_HOOKUP_OBJECT (sitelist_dialog, hbox24, "hbox24");
+  GLADE_HOOKUP_OBJECT (sitelist_dialog, image7, "image7");
+  GLADE_HOOKUP_OBJECT (sitelist_dialog, label73, "label73");
+  GLADE_HOOKUP_OBJECT (sitelist_dialog, label104, "label104");
+  GLADE_HOOKUP_OBJECT (sitelist_dialog, hseparator3, "hseparator3");
+  GLADE_HOOKUP_OBJECT_NO_REF (sitelist_dialog, dialog_action_area7, "dialog_action_area7");
+  GLADE_HOOKUP_OBJECT (sitelist_dialog, cancel_bt, "cancel_bt");
+  GLADE_HOOKUP_OBJECT (sitelist_dialog, apply_bt, "apply_bt");
+  GLADE_HOOKUP_OBJECT (sitelist_dialog, save_bt, "save_bt");
+  GLADE_HOOKUP_OBJECT_NO_REF (sitelist_dialog, tooltips, "tooltips");
+
+  return sitelist_dialog;
+}
+
+GtkWidget*
+create_pinnipede_site_colors_dialog (void)
+{
+  GtkWidget *pinnipede_site_colors_dialog;
+  GtkWidget *dialog_vbox9;
+  GtkWidget *frame8;
+  GtkWidget *vbox14;
+  GtkWidget *blah;
+  GtkWidget *mark_id_gaps;
+  GtkWidget *mark_id_gaps_fb;
+  GtkWidget *frame9;
+  GtkWidget *table4;
+  GtkWidget *label43;
+  GtkWidget *pp_bgcolor;
+  GtkWidget *label44;
+  GtkWidget *label45;
+  GtkWidget *label46;
+  GtkWidget *label47;
+  GtkWidget *label48;
+  GtkWidget *label49;
+  GtkWidget *label50;
+  GtkWidget *pp_fgcolor_opaque;
+  GtkWidget *pp_trollscore_color_opaque;
+  GtkWidget *pp_login_color_opaque;
+  GtkWidget *pp_useragent_color_opaque;
+  GtkWidget *pp_tstamp_color_opaque;
+  GtkWidget *pp_url_color_opaque;
+  GtkWidget *pp_visited_url_color_opaque;
+  GtkWidget *pp_trollscore_color_transp;
+  GtkWidget *pp_useragent_color_transp;
+  GtkWidget *pp_tstamp_color_transp;
+  GtkWidget *pp_url_color_transp;
+  GtkWidget *pp_visited_url_color_transp;
+  GtkWidget *pp_login_color_transp;
+  GtkWidget *pp_fgcolor_transp;
+  GtkWidget *label51;
+  GtkWidget *label52;
+  GtkWidget *dialog_action_area9;
+  GtkWidget *cancelbutton2;
+  GtkWidget *apply_bt;
+  GtkWidget *okbutton2;
+
+  pinnipede_site_colors_dialog = gtk_dialog_new ();
+  gtk_window_set_title (GTK_WINDOW (pinnipede_site_colors_dialog), _("Change some colors"));
+  gtk_window_set_type_hint (GTK_WINDOW (pinnipede_site_colors_dialog), GDK_WINDOW_TYPE_HINT_DIALOG);
+
+  dialog_vbox9 = GTK_DIALOG (pinnipede_site_colors_dialog)->vbox;
+  gtk_widget_show (dialog_vbox9);
+
+  frame8 = gtk_frame_new (NULL);
+  gtk_widget_show (frame8);
+  gtk_box_pack_start (GTK_BOX (dialog_vbox9), frame8, TRUE, TRUE, 0);
+
+  vbox14 = gtk_vbox_new (FALSE, 0);
+  gtk_widget_show (vbox14);
+  gtk_container_add (GTK_CONTAINER (frame8), vbox14);
+
+  blah = gtk_hbox_new (FALSE, 0);
+  gtk_widget_show (blah);
+  gtk_box_pack_start (GTK_BOX (vbox14), blah, FALSE, FALSE, 0);
+
+  mark_id_gaps = gtk_check_button_new_with_mnemonic (_("View id gaps (red dotted line)"));
+  gtk_widget_show (mark_id_gaps);
+  gtk_box_pack_start (GTK_BOX (blah), mark_id_gaps, FALSE, FALSE, 0);
+
+  mark_id_gaps_fb = gtk_label_new (_("xx"));
+  gtk_widget_show (mark_id_gaps_fb);
+  gtk_box_pack_start (GTK_BOX (blah), mark_id_gaps_fb, FALSE, FALSE, 0);
+
+  frame9 = gtk_frame_new (NULL);
+  gtk_widget_show (frame9);
+  gtk_box_pack_start (GTK_BOX (vbox14), frame9, TRUE, TRUE, 0);
+  gtk_container_set_border_width (GTK_CONTAINER (frame9), 2);
+
+  table4 = gtk_table_new (3, 9, FALSE);
+  gtk_widget_show (table4);
+  gtk_container_add (GTK_CONTAINER (frame9), table4);
+  gtk_table_set_col_spacings (GTK_TABLE (table4), 5);
+
+  label43 = gtk_label_new (_("Background color"));
+  gtk_widget_show (label43);
+  gtk_table_attach (GTK_TABLE (table4), label43, 0, 1, 0, 1,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (label43), 0, 0.5);
+
+  pp_bgcolor = gtk_button_new_with_mnemonic (_("pp_bgcolor_bt"));
+  gtk_widget_show (pp_bgcolor);
+  gtk_table_attach (GTK_TABLE (table4), pp_bgcolor, 1, 2, 0, 1,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+
+  label44 = gtk_label_new (_("Text foreground"));
+  gtk_widget_show (label44);
+  gtk_table_attach (GTK_TABLE (table4), label44, 0, 1, 1, 2,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (label44), 0, 0.5);
+
+  label45 = gtk_label_new (_("Logins"));
+  gtk_widget_show (label45);
+  gtk_table_attach (GTK_TABLE (table4), label45, 3, 4, 0, 1,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_label_set_justify (GTK_LABEL (label45), GTK_JUSTIFY_RIGHT);
+  gtk_misc_set_alignment (GTK_MISC (label45), 0, 0.5);
+
+  label46 = gtk_label_new (_("Useragents"));
+  gtk_widget_show (label46);
+  gtk_table_attach (GTK_TABLE (table4), label46, 3, 4, 1, 2,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_label_set_justify (GTK_LABEL (label46), GTK_JUSTIFY_RIGHT);
+  gtk_misc_set_alignment (GTK_MISC (label46), 0, 0.5);
+
+  label47 = gtk_label_new (_("Urls"));
+  gtk_widget_show (label47);
+  gtk_table_attach (GTK_TABLE (table4), label47, 6, 7, 0, 1,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (label47), 0, 0.5);
+
+  label48 = gtk_label_new (_("Visited Urls"));
+  gtk_widget_show (label48);
+  gtk_table_attach (GTK_TABLE (table4), label48, 6, 7, 1, 2,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (label48), 0, 0.5);
+
+  label49 = gtk_label_new (_("Clocks"));
+  gtk_widget_show (label49);
+  gtk_table_attach (GTK_TABLE (table4), label49, 3, 4, 2, 3,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_label_set_justify (GTK_LABEL (label49), GTK_JUSTIFY_RIGHT);
+  gtk_misc_set_alignment (GTK_MISC (label49), 0, 0.5);
+
+  label50 = gtk_label_new (_("Troll score"));
+  gtk_widget_show (label50);
+  gtk_table_attach (GTK_TABLE (table4), label50, 0, 1, 2, 3,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (label50), 0, 0.5);
+
+  pp_fgcolor_opaque = gtk_button_new_with_mnemonic (_("button4"));
+  gtk_widget_show (pp_fgcolor_opaque);
+  gtk_table_attach (GTK_TABLE (table4), pp_fgcolor_opaque, 1, 2, 1, 2,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+
+  pp_trollscore_color_opaque = gtk_button_new_with_mnemonic (_("button5"));
+  gtk_widget_show (pp_trollscore_color_opaque);
+  gtk_table_attach (GTK_TABLE (table4), pp_trollscore_color_opaque, 1, 2, 2, 3,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+
+  pp_login_color_opaque = gtk_button_new_with_mnemonic (_("button5"));
+  gtk_widget_show (pp_login_color_opaque);
+  gtk_table_attach (GTK_TABLE (table4), pp_login_color_opaque, 4, 5, 0, 1,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+
+  pp_useragent_color_opaque = gtk_button_new_with_mnemonic (_("button5"));
+  gtk_widget_show (pp_useragent_color_opaque);
+  gtk_table_attach (GTK_TABLE (table4), pp_useragent_color_opaque, 4, 5, 1, 2,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+
+  pp_tstamp_color_opaque = gtk_button_new_with_mnemonic (_("button5"));
+  gtk_widget_show (pp_tstamp_color_opaque);
+  gtk_table_attach (GTK_TABLE (table4), pp_tstamp_color_opaque, 4, 5, 2, 3,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+
+  pp_url_color_opaque = gtk_button_new_with_mnemonic (_("button5"));
+  gtk_widget_show (pp_url_color_opaque);
+  gtk_table_attach (GTK_TABLE (table4), pp_url_color_opaque, 7, 8, 0, 1,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+
+  pp_visited_url_color_opaque = gtk_button_new_with_mnemonic (_("button5"));
+  gtk_widget_show (pp_visited_url_color_opaque);
+  gtk_table_attach (GTK_TABLE (table4), pp_visited_url_color_opaque, 7, 8, 1, 2,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+
+  pp_trollscore_color_transp = gtk_button_new_with_mnemonic (_("button4"));
+  gtk_widget_show (pp_trollscore_color_transp);
+  gtk_table_attach (GTK_TABLE (table4), pp_trollscore_color_transp, 2, 3, 2, 3,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+
+  pp_useragent_color_transp = gtk_button_new_with_mnemonic (_("button4"));
+  gtk_widget_show (pp_useragent_color_transp);
+  gtk_table_attach (GTK_TABLE (table4), pp_useragent_color_transp, 5, 6, 1, 2,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+
+  pp_tstamp_color_transp = gtk_button_new_with_mnemonic (_("button4"));
+  gtk_widget_show (pp_tstamp_color_transp);
+  gtk_table_attach (GTK_TABLE (table4), pp_tstamp_color_transp, 5, 6, 2, 3,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+
+  pp_url_color_transp = gtk_button_new_with_mnemonic (_("button4"));
+  gtk_widget_show (pp_url_color_transp);
+  gtk_table_attach (GTK_TABLE (table4), pp_url_color_transp, 8, 9, 0, 1,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+
+  pp_visited_url_color_transp = gtk_button_new_with_mnemonic (_("button4"));
+  gtk_widget_show (pp_visited_url_color_transp);
+  gtk_table_attach (GTK_TABLE (table4), pp_visited_url_color_transp, 8, 9, 1, 2,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+
+  pp_login_color_transp = gtk_button_new_with_mnemonic (_("button4"));
+  gtk_widget_show (pp_login_color_transp);
+  gtk_table_attach (GTK_TABLE (table4), pp_login_color_transp, 5, 6, 0, 1,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+
+  pp_fgcolor_transp = gtk_button_new_with_mnemonic (_("button4"));
+  gtk_widget_show (pp_fgcolor_transp);
+  gtk_table_attach (GTK_TABLE (table4), pp_fgcolor_transp, 2, 3, 1, 2,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+
+  label51 = gtk_label_new (_("Various colors"));
+  gtk_widget_show (label51);
+  gtk_frame_set_label_widget (GTK_FRAME (frame9), label51);
+
+  label52 = gtk_label_new (_("Visual settings applied to selected sites"));
+  gtk_widget_show (label52);
+  gtk_frame_set_label_widget (GTK_FRAME (frame8), label52);
+
+  dialog_action_area9 = GTK_DIALOG (pinnipede_site_colors_dialog)->action_area;
+  gtk_widget_show (dialog_action_area9);
+  gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area9), GTK_BUTTONBOX_END);
+
+  cancelbutton2 = gtk_button_new_from_stock ("gtk-cancel");
+  gtk_widget_show (cancelbutton2);
+  gtk_dialog_add_action_widget (GTK_DIALOG (pinnipede_site_colors_dialog), cancelbutton2, GTK_RESPONSE_CANCEL);
+  GTK_WIDGET_SET_FLAGS (cancelbutton2, GTK_CAN_DEFAULT);
+
+  apply_bt = gtk_button_new_from_stock ("gtk-apply");
+  gtk_widget_show (apply_bt);
+  gtk_dialog_add_action_widget (GTK_DIALOG (pinnipede_site_colors_dialog), apply_bt, GTK_RESPONSE_APPLY);
+  GTK_WIDGET_SET_FLAGS (apply_bt, GTK_CAN_DEFAULT);
+
+  okbutton2 = gtk_button_new_from_stock ("gtk-ok");
+  gtk_widget_show (okbutton2);
+  gtk_dialog_add_action_widget (GTK_DIALOG (pinnipede_site_colors_dialog), okbutton2, GTK_RESPONSE_OK);
+  GTK_WIDGET_SET_FLAGS (okbutton2, GTK_CAN_DEFAULT);
+
+  /* Store pointers to all widgets, for use by lookup_widget(). */
+  GLADE_HOOKUP_OBJECT_NO_REF (pinnipede_site_colors_dialog, pinnipede_site_colors_dialog, "pinnipede_site_colors_dialog");
+  GLADE_HOOKUP_OBJECT_NO_REF (pinnipede_site_colors_dialog, dialog_vbox9, "dialog_vbox9");
+  GLADE_HOOKUP_OBJECT (pinnipede_site_colors_dialog, frame8, "frame8");
+  GLADE_HOOKUP_OBJECT (pinnipede_site_colors_dialog, vbox14, "vbox14");
+  GLADE_HOOKUP_OBJECT (pinnipede_site_colors_dialog, blah, "blah");
+  GLADE_HOOKUP_OBJECT (pinnipede_site_colors_dialog, mark_id_gaps, "mark_id_gaps");
+  GLADE_HOOKUP_OBJECT (pinnipede_site_colors_dialog, mark_id_gaps_fb, "mark_id_gaps_fb");
+  GLADE_HOOKUP_OBJECT (pinnipede_site_colors_dialog, frame9, "frame9");
+  GLADE_HOOKUP_OBJECT (pinnipede_site_colors_dialog, table4, "table4");
+  GLADE_HOOKUP_OBJECT (pinnipede_site_colors_dialog, label43, "label43");
+  GLADE_HOOKUP_OBJECT (pinnipede_site_colors_dialog, pp_bgcolor, "pp_bgcolor");
+  GLADE_HOOKUP_OBJECT (pinnipede_site_colors_dialog, label44, "label44");
+  GLADE_HOOKUP_OBJECT (pinnipede_site_colors_dialog, label45, "label45");
+  GLADE_HOOKUP_OBJECT (pinnipede_site_colors_dialog, label46, "label46");
+  GLADE_HOOKUP_OBJECT (pinnipede_site_colors_dialog, label47, "label47");
+  GLADE_HOOKUP_OBJECT (pinnipede_site_colors_dialog, label48, "label48");
+  GLADE_HOOKUP_OBJECT (pinnipede_site_colors_dialog, label49, "label49");
+  GLADE_HOOKUP_OBJECT (pinnipede_site_colors_dialog, label50, "label50");
+  GLADE_HOOKUP_OBJECT (pinnipede_site_colors_dialog, pp_fgcolor_opaque, "pp_fgcolor_opaque");
+  GLADE_HOOKUP_OBJECT (pinnipede_site_colors_dialog, pp_trollscore_color_opaque, "pp_trollscore_color_opaque");
+  GLADE_HOOKUP_OBJECT (pinnipede_site_colors_dialog, pp_login_color_opaque, "pp_login_color_opaque");
+  GLADE_HOOKUP_OBJECT (pinnipede_site_colors_dialog, pp_useragent_color_opaque, "pp_useragent_color_opaque");
+  GLADE_HOOKUP_OBJECT (pinnipede_site_colors_dialog, pp_tstamp_color_opaque, "pp_tstamp_color_opaque");
+  GLADE_HOOKUP_OBJECT (pinnipede_site_colors_dialog, pp_url_color_opaque, "pp_url_color_opaque");
+  GLADE_HOOKUP_OBJECT (pinnipede_site_colors_dialog, pp_visited_url_color_opaque, "pp_visited_url_color_opaque");
+  GLADE_HOOKUP_OBJECT (pinnipede_site_colors_dialog, pp_trollscore_color_transp, "pp_trollscore_color_transp");
+  GLADE_HOOKUP_OBJECT (pinnipede_site_colors_dialog, pp_useragent_color_transp, "pp_useragent_color_transp");
+  GLADE_HOOKUP_OBJECT (pinnipede_site_colors_dialog, pp_tstamp_color_transp, "pp_tstamp_color_transp");
+  GLADE_HOOKUP_OBJECT (pinnipede_site_colors_dialog, pp_url_color_transp, "pp_url_color_transp");
+  GLADE_HOOKUP_OBJECT (pinnipede_site_colors_dialog, pp_visited_url_color_transp, "pp_visited_url_color_transp");
+  GLADE_HOOKUP_OBJECT (pinnipede_site_colors_dialog, pp_login_color_transp, "pp_login_color_transp");
+  GLADE_HOOKUP_OBJECT (pinnipede_site_colors_dialog, pp_fgcolor_transp, "pp_fgcolor_transp");
+  GLADE_HOOKUP_OBJECT (pinnipede_site_colors_dialog, label51, "label51");
+  GLADE_HOOKUP_OBJECT (pinnipede_site_colors_dialog, label52, "label52");
+  GLADE_HOOKUP_OBJECT_NO_REF (pinnipede_site_colors_dialog, dialog_action_area9, "dialog_action_area9");
+  GLADE_HOOKUP_OBJECT (pinnipede_site_colors_dialog, cancelbutton2, "cancelbutton2");
+  GLADE_HOOKUP_OBJECT (pinnipede_site_colors_dialog, apply_bt, "apply_bt");
+  GLADE_HOOKUP_OBJECT (pinnipede_site_colors_dialog, okbutton2, "okbutton2");
+
+  return pinnipede_site_colors_dialog;
+}
+
+GtkWidget*
+create_change_board_settings_dialog (void)
+{
+  GtkWidget *change_board_settings_dialog;
+  GtkWidget *dialog_vbox10;
+  GtkWidget *table5;
+  GtkWidget *label55;
+  GtkWidget *hbox20;
+  GtkWidget *all_names_0_;
+  GtkWidget *all_names_1_;
+  GtkWidget *all_names_2_;
+  GtkWidget *all_names_3_;
+  GtkWidget *label57;
+  GtkWidget *label58;
+  GtkWidget *hbox21;
+  GtkObject *board_check_delay_adj;
+  GtkWidget *board_check_delay;
+  GtkWidget *label59;
+  GtkWidget *board_check_delay_fb;
+  GtkWidget *backend_url;
+  GtkWidget *post_url;
+  GtkWidget *user_cookie;
+  GtkWidget *label66;
+  GtkWidget *label67;
+  GtkWidget *backend_flavour;
+  GtkWidget *menu2;
+  GtkWidget *menuitem5;
+  GtkWidget *menuitem6;
+  GtkWidget *menuitem7;
+  GtkWidget *hbox22;
+  GtkWidget *label60;
+  GtkWidget *grab_cookie_bt;
+  GtkWidget *alignment10;
+  GtkWidget *hbox30;
+  GtkWidget *image13;
+  GtkWidget *label79;
+  GtkWidget *post_template;
+  GtkWidget *label68;
+  GtkWidget *label70;
+  GtkWidget *user_login;
+  GtkWidget *label86;
+  GtkWidget *user_agent;
+  GtkWidget *hunt_opened_on_site;
+  GtkWidget *dialog_action_area10;
+  GtkWidget *cancelbutton3;
+  GtkWidget *apply_bt;
+  GtkWidget *okbutton3;
+  GtkTooltips *tooltips;
+
+  tooltips = gtk_tooltips_new ();
+
+  change_board_settings_dialog = gtk_dialog_new ();
+  gtk_window_set_title (GTK_WINDOW (change_board_settings_dialog), _("Change board settings"));
+  gtk_window_set_type_hint (GTK_WINDOW (change_board_settings_dialog), GDK_WINDOW_TYPE_HINT_DIALOG);
+
+  dialog_vbox10 = GTK_DIALOG (change_board_settings_dialog)->vbox;
+  gtk_widget_show (dialog_vbox10);
+
+  table5 = gtk_table_new (10, 2, FALSE);
+  gtk_widget_show (table5);
+  gtk_box_pack_start (GTK_BOX (dialog_vbox10), table5, TRUE, TRUE, 0);
+
+  label55 = gtk_label_new (_("Site name, and aliases:"));
+  gtk_widget_show (label55);
+  gtk_table_attach (GTK_TABLE (table5), label55, 0, 1, 0, 1,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (label55), 0, 0.5);
+
+  hbox20 = gtk_hbox_new (FALSE, 0);
+  gtk_widget_show (hbox20);
+  gtk_table_attach (GTK_TABLE (table5), hbox20, 1, 2, 0, 1,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (GTK_FILL), 0, 0);
+
+  all_names_0_ = gtk_entry_new ();
+  gtk_widget_show (all_names_0_);
+  gtk_box_pack_start (GTK_BOX (hbox20), all_names_0_, FALSE, TRUE, 0);
+
+  all_names_1_ = gtk_entry_new ();
+  gtk_widget_show (all_names_1_);
+  gtk_box_pack_start (GTK_BOX (hbox20), all_names_1_, FALSE, TRUE, 0);
+  gtk_widget_set_size_request (all_names_1_, 120, -1);
+
+  all_names_2_ = gtk_entry_new ();
+  gtk_widget_show (all_names_2_);
+  gtk_box_pack_start (GTK_BOX (hbox20), all_names_2_, FALSE, FALSE, 0);
+  gtk_widget_set_size_request (all_names_2_, 120, -1);
+
+  all_names_3_ = gtk_entry_new ();
+  gtk_widget_show (all_names_3_);
+  gtk_box_pack_start (GTK_BOX (hbox20), all_names_3_, FALSE, TRUE, 0);
+  gtk_widget_set_size_request (all_names_3_, 120, -1);
+
+  label57 = gtk_label_new (_("Post URL:"));
+  gtk_widget_show (label57);
+  gtk_table_attach (GTK_TABLE (table5), label57, 0, 1, 3, 4,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (label57), 0, 0.5);
+
+  label58 = gtk_label_new (_("Refresh frequency:"));
+  gtk_widget_show (label58);
+  gtk_table_attach (GTK_TABLE (table5), label58, 0, 1, 5, 6,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (label58), 0, 0.5);
+
+  hbox21 = gtk_hbox_new (FALSE, 0);
+  gtk_widget_show (hbox21);
+  gtk_table_attach (GTK_TABLE (table5), hbox21, 1, 2, 5, 6,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (GTK_FILL), 0, 0);
+
+  board_check_delay_adj = gtk_adjustment_new (100, 10, 10000, 1, 10, 10);
+  board_check_delay = gtk_spin_button_new (GTK_ADJUSTMENT (board_check_delay_adj), 1, 0);
+  gtk_widget_show (board_check_delay);
+  gtk_box_pack_start (GTK_BOX (hbox21), board_check_delay, FALSE, TRUE, 0);
+
+  label59 = gtk_label_new (_("seconds  "));
+  gtk_widget_show (label59);
+  gtk_box_pack_start (GTK_BOX (hbox21), label59, FALSE, FALSE, 0);
+
+  board_check_delay_fb = gtk_label_new (_("  "));
+  gtk_widget_show (board_check_delay_fb);
+  gtk_box_pack_start (GTK_BOX (hbox21), board_check_delay_fb, FALSE, FALSE, 0);
+
+  backend_url = gtk_entry_new ();
+  gtk_widget_show (backend_url);
+  gtk_table_attach (GTK_TABLE (table5), backend_url, 1, 2, 1, 2,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+
+  post_url = gtk_entry_new ();
+  gtk_widget_show (post_url);
+  gtk_table_attach (GTK_TABLE (table5), post_url, 1, 2, 3, 4,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+
+  user_cookie = gtk_entry_new ();
+  gtk_widget_show (user_cookie);
+  gtk_table_attach (GTK_TABLE (table5), user_cookie, 1, 2, 6, 7,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+
+  label66 = gtk_label_new (_("Backend URL:"));
+  gtk_widget_show (label66);
+  gtk_table_attach (GTK_TABLE (table5), label66, 0, 1, 1, 2,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (label66), 0, 0.5);
+
+  label67 = gtk_label_new (_("Backend flavour:"));
+  gtk_widget_show (label67);
+  gtk_table_attach (GTK_TABLE (table5), label67, 0, 1, 2, 3,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (label67), 0, 0.5);
+
+  backend_flavour = gtk_option_menu_new ();
+  gtk_widget_show (backend_flavour);
+  gtk_table_attach (GTK_TABLE (table5), backend_flavour, 1, 2, 2, 3,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+
+  menu2 = gtk_menu_new ();
+
+  menuitem5 = gtk_menu_item_new_with_mnemonic (_("message tags are \"htmlentitised\""));
+  gtk_widget_show (menuitem5);
+  gtk_container_add (GTK_CONTAINER (menu2), menuitem5);
+
+  menuitem6 = gtk_menu_item_new_with_mnemonic (_("message tags are raw"));
+  gtk_widget_show (menuitem6);
+  gtk_container_add (GTK_CONTAINER (menu2), menuitem6);
+
+  menuitem7 = gtk_menu_item_new_with_mnemonic (_("the backend has no pants"));
+  gtk_widget_show (menuitem7);
+  gtk_container_add (GTK_CONTAINER (menu2), menuitem7);
+
+  gtk_option_menu_set_menu (GTK_OPTION_MENU (backend_flavour), menu2);
+
+  hbox22 = gtk_hbox_new (FALSE, 0);
+  gtk_widget_show (hbox22);
+  gtk_table_attach (GTK_TABLE (table5), hbox22, 0, 1, 6, 7,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (GTK_FILL), 0, 0);
+
+  label60 = gtk_label_new (_("Cookie(s)"));
+  gtk_widget_show (label60);
+  gtk_box_pack_start (GTK_BOX (hbox22), label60, FALSE, FALSE, 0);
+  gtk_misc_set_alignment (GTK_MISC (label60), 0, 0.5);
+
+  grab_cookie_bt = gtk_button_new ();
+  gtk_widget_show (grab_cookie_bt);
+  gtk_box_pack_start (GTK_BOX (hbox22), grab_cookie_bt, FALSE, FALSE, 0);
+  gtk_tooltips_set_tip (tooltips, grab_cookie_bt, _("attempt to get the cookie from the cookies stored in your browsers"), NULL);
+
+  alignment10 = gtk_alignment_new (0.5, 0.5, 0, 0);
+  gtk_widget_show (alignment10);
+  gtk_container_add (GTK_CONTAINER (grab_cookie_bt), alignment10);
+
+  hbox30 = gtk_hbox_new (FALSE, 2);
+  gtk_widget_show (hbox30);
+  gtk_container_add (GTK_CONTAINER (alignment10), hbox30);
+
+  image13 = gtk_image_new_from_stock ("gtk-find", GTK_ICON_SIZE_BUTTON);
+  gtk_widget_show (image13);
+  gtk_box_pack_start (GTK_BOX (hbox30), image13, FALSE, FALSE, 0);
+
+  label79 = gtk_label_new_with_mnemonic (_("(grab cookie)"));
+  gtk_widget_show (label79);
+  gtk_box_pack_start (GTK_BOX (hbox30), label79, FALSE, FALSE, 0);
+
+  post_template = gtk_entry_new ();
+  gtk_widget_show (post_template);
+  gtk_table_attach (GTK_TABLE (table5), post_template, 1, 2, 4, 5,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+
+  label68 = gtk_label_new (_("Post Template:"));
+  gtk_widget_show (label68);
+  gtk_table_attach (GTK_TABLE (table5), label68, 0, 1, 4, 5,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (label68), 0, 0.5);
+
+  label70 = gtk_label_new (_("Optional login:"));
+  gtk_widget_show (label70);
+  gtk_table_attach (GTK_TABLE (table5), label70, 0, 1, 7, 8,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (label70), 0, 0.5);
+
+  user_login = gtk_entry_new ();
+  gtk_widget_show (user_login);
+  gtk_table_attach (GTK_TABLE (table5), user_login, 1, 2, 7, 8,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+
+  label86 = gtk_label_new (_("Default useragent:"));
+  gtk_widget_show (label86);
+  gtk_table_attach (GTK_TABLE (table5), label86, 0, 1, 8, 9,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (label86), 0, 0.5);
+
+  user_agent = gtk_entry_new ();
+  gtk_widget_show (user_agent);
+  gtk_table_attach (GTK_TABLE (table5), user_agent, 1, 2, 8, 9,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_tooltips_set_tip (tooltips, user_agent, _("$v will be replaced by the wmcoincoin version, and $s, $r, $m will be replaced by the output of the command uname -a"), NULL);
+
+  hunt_opened_on_site = gtk_check_button_new_with_mnemonic (_("balltrap is allowed on this board"));
+  gtk_widget_show (hunt_opened_on_site);
+  gtk_table_attach (GTK_TABLE (table5), hunt_opened_on_site, 1, 2, 9, 10,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_tooltips_set_tip (tooltips, hunt_opened_on_site, _("you can enable/disable the balltrap for each site. Note that there is also a global switch for the balltrap in the pinnipede button bar."), NULL);
+
+  dialog_action_area10 = GTK_DIALOG (change_board_settings_dialog)->action_area;
+  gtk_widget_show (dialog_action_area10);
+  gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area10), GTK_BUTTONBOX_END);
+
+  cancelbutton3 = gtk_button_new_from_stock ("gtk-cancel");
+  gtk_widget_show (cancelbutton3);
+  gtk_dialog_add_action_widget (GTK_DIALOG (change_board_settings_dialog), cancelbutton3, GTK_RESPONSE_CANCEL);
+  GTK_WIDGET_SET_FLAGS (cancelbutton3, GTK_CAN_DEFAULT);
+
+  apply_bt = gtk_button_new_from_stock ("gtk-apply");
+  gtk_widget_show (apply_bt);
+  gtk_dialog_add_action_widget (GTK_DIALOG (change_board_settings_dialog), apply_bt, GTK_RESPONSE_APPLY);
+  GTK_WIDGET_SET_FLAGS (apply_bt, GTK_CAN_DEFAULT);
+
+  okbutton3 = gtk_button_new_from_stock ("gtk-ok");
+  gtk_widget_show (okbutton3);
+  gtk_dialog_add_action_widget (GTK_DIALOG (change_board_settings_dialog), okbutton3, GTK_RESPONSE_OK);
+  GTK_WIDGET_SET_FLAGS (okbutton3, GTK_CAN_DEFAULT);
+
+  /* Store pointers to all widgets, for use by lookup_widget(). */
+  GLADE_HOOKUP_OBJECT_NO_REF (change_board_settings_dialog, change_board_settings_dialog, "change_board_settings_dialog");
+  GLADE_HOOKUP_OBJECT_NO_REF (change_board_settings_dialog, dialog_vbox10, "dialog_vbox10");
+  GLADE_HOOKUP_OBJECT (change_board_settings_dialog, table5, "table5");
+  GLADE_HOOKUP_OBJECT (change_board_settings_dialog, label55, "label55");
+  GLADE_HOOKUP_OBJECT (change_board_settings_dialog, hbox20, "hbox20");
+  GLADE_HOOKUP_OBJECT (change_board_settings_dialog, all_names_0_, "all_names_0_");
+  GLADE_HOOKUP_OBJECT (change_board_settings_dialog, all_names_1_, "all_names_1_");
+  GLADE_HOOKUP_OBJECT (change_board_settings_dialog, all_names_2_, "all_names_2_");
+  GLADE_HOOKUP_OBJECT (change_board_settings_dialog, all_names_3_, "all_names_3_");
+  GLADE_HOOKUP_OBJECT (change_board_settings_dialog, label57, "label57");
+  GLADE_HOOKUP_OBJECT (change_board_settings_dialog, label58, "label58");
+  GLADE_HOOKUP_OBJECT (change_board_settings_dialog, hbox21, "hbox21");
+  GLADE_HOOKUP_OBJECT (change_board_settings_dialog, board_check_delay, "board_check_delay");
+  GLADE_HOOKUP_OBJECT (change_board_settings_dialog, label59, "label59");
+  GLADE_HOOKUP_OBJECT (change_board_settings_dialog, board_check_delay_fb, "board_check_delay_fb");
+  GLADE_HOOKUP_OBJECT (change_board_settings_dialog, backend_url, "backend_url");
+  GLADE_HOOKUP_OBJECT (change_board_settings_dialog, post_url, "post_url");
+  GLADE_HOOKUP_OBJECT (change_board_settings_dialog, user_cookie, "user_cookie");
+  GLADE_HOOKUP_OBJECT (change_board_settings_dialog, label66, "label66");
+  GLADE_HOOKUP_OBJECT (change_board_settings_dialog, label67, "label67");
+  GLADE_HOOKUP_OBJECT (change_board_settings_dialog, backend_flavour, "backend_flavour");
+  GLADE_HOOKUP_OBJECT (change_board_settings_dialog, menu2, "menu2");
+  GLADE_HOOKUP_OBJECT (change_board_settings_dialog, menuitem5, "menuitem5");
+  GLADE_HOOKUP_OBJECT (change_board_settings_dialog, menuitem6, "menuitem6");
+  GLADE_HOOKUP_OBJECT (change_board_settings_dialog, menuitem7, "menuitem7");
+  GLADE_HOOKUP_OBJECT (change_board_settings_dialog, hbox22, "hbox22");
+  GLADE_HOOKUP_OBJECT (change_board_settings_dialog, label60, "label60");
+  GLADE_HOOKUP_OBJECT (change_board_settings_dialog, grab_cookie_bt, "grab_cookie_bt");
+  GLADE_HOOKUP_OBJECT (change_board_settings_dialog, alignment10, "alignment10");
+  GLADE_HOOKUP_OBJECT (change_board_settings_dialog, hbox30, "hbox30");
+  GLADE_HOOKUP_OBJECT (change_board_settings_dialog, image13, "image13");
+  GLADE_HOOKUP_OBJECT (change_board_settings_dialog, label79, "label79");
+  GLADE_HOOKUP_OBJECT (change_board_settings_dialog, post_template, "post_template");
+  GLADE_HOOKUP_OBJECT (change_board_settings_dialog, label68, "label68");
+  GLADE_HOOKUP_OBJECT (change_board_settings_dialog, label70, "label70");
+  GLADE_HOOKUP_OBJECT (change_board_settings_dialog, user_login, "user_login");
+  GLADE_HOOKUP_OBJECT (change_board_settings_dialog, label86, "label86");
+  GLADE_HOOKUP_OBJECT (change_board_settings_dialog, user_agent, "user_agent");
+  GLADE_HOOKUP_OBJECT (change_board_settings_dialog, hunt_opened_on_site, "hunt_opened_on_site");
+  GLADE_HOOKUP_OBJECT_NO_REF (change_board_settings_dialog, dialog_action_area10, "dialog_action_area10");
+  GLADE_HOOKUP_OBJECT (change_board_settings_dialog, cancelbutton3, "cancelbutton3");
+  GLADE_HOOKUP_OBJECT (change_board_settings_dialog, apply_bt, "apply_bt");
+  GLADE_HOOKUP_OBJECT (change_board_settings_dialog, okbutton3, "okbutton3");
+  GLADE_HOOKUP_OBJECT_NO_REF (change_board_settings_dialog, tooltips, "tooltips");
+
+  return change_board_settings_dialog;
+}
+
+GtkWidget*
+create_change_rss_settings_dialog (void)
+{
+  GtkWidget *change_rss_settings_dialog;
+  GtkWidget *dialog_vbox10;
+  GtkWidget *table5;
+  GtkWidget *label55;
+  GtkWidget *hbox20;
+  GtkWidget *all_names_0_;
+  GtkWidget *all_names_1_;
+  GtkWidget *all_names_2_;
+  GtkWidget *all_names_3_;
+  GtkWidget *label58;
+  GtkWidget *hbox21;
+  GtkObject *board_check_delay_adj;
+  GtkWidget *board_check_delay;
+  GtkWidget *label59;
+  GtkWidget *board_check_delay_fb;
+  GtkWidget *backend_url;
+  GtkWidget *user_cookie;
+  GtkWidget *label66;
+  GtkWidget *label67;
+  GtkWidget *backend_flavour;
+  GtkWidget *menu2;
+  GtkWidget *menuitem5;
+  GtkWidget *menuitem6;
+  GtkWidget *menuitem7;
+  GtkWidget *hbox22;
+  GtkWidget *label60;
+  GtkWidget *grab_cookie_bt;
+  GtkWidget *rss_ignore_description;
+  GtkWidget *dialog_action_area10;
+  GtkWidget *cancelbutton3;
+  GtkWidget *apply_bt;
+  GtkWidget *okbutton3;
+  GtkTooltips *tooltips;
+
+  tooltips = gtk_tooltips_new ();
+
+  change_rss_settings_dialog = gtk_dialog_new ();
+  gtk_window_set_title (GTK_WINDOW (change_rss_settings_dialog), _("Change RSS Feed settings"));
+  gtk_window_set_type_hint (GTK_WINDOW (change_rss_settings_dialog), GDK_WINDOW_TYPE_HINT_DIALOG);
+
+  dialog_vbox10 = GTK_DIALOG (change_rss_settings_dialog)->vbox;
+  gtk_widget_show (dialog_vbox10);
+
+  table5 = gtk_table_new (9, 2, FALSE);
+  gtk_widget_show (table5);
+  gtk_box_pack_start (GTK_BOX (dialog_vbox10), table5, TRUE, TRUE, 0);
+
+  label55 = gtk_label_new (_("Site name, and aliases:"));
+  gtk_widget_show (label55);
+  gtk_table_attach (GTK_TABLE (table5), label55, 0, 1, 0, 1,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (label55), 0, 0.5);
+
+  hbox20 = gtk_hbox_new (FALSE, 0);
+  gtk_widget_show (hbox20);
+  gtk_table_attach (GTK_TABLE (table5), hbox20, 1, 2, 0, 1,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (GTK_FILL), 0, 0);
+
+  all_names_0_ = gtk_entry_new ();
+  gtk_widget_show (all_names_0_);
+  gtk_box_pack_start (GTK_BOX (hbox20), all_names_0_, FALSE, TRUE, 0);
+  gtk_widget_set_size_request (all_names_0_, 158, -1);
+
+  all_names_1_ = gtk_entry_new ();
+  gtk_widget_show (all_names_1_);
+  gtk_box_pack_start (GTK_BOX (hbox20), all_names_1_, FALSE, TRUE, 0);
+  gtk_widget_set_size_request (all_names_1_, 120, -1);
+
+  all_names_2_ = gtk_entry_new ();
+  gtk_widget_show (all_names_2_);
+  gtk_box_pack_start (GTK_BOX (hbox20), all_names_2_, FALSE, FALSE, 0);
+  gtk_widget_set_size_request (all_names_2_, 120, -1);
+
+  all_names_3_ = gtk_entry_new ();
+  gtk_widget_show (all_names_3_);
+  gtk_box_pack_start (GTK_BOX (hbox20), all_names_3_, FALSE, TRUE, 0);
+  gtk_widget_set_size_request (all_names_3_, 120, -1);
+
+  label58 = gtk_label_new (_("Refresh frequency:"));
+  gtk_widget_show (label58);
+  gtk_table_attach (GTK_TABLE (table5), label58, 0, 1, 5, 6,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (label58), 0, 0.5);
+
+  hbox21 = gtk_hbox_new (FALSE, 0);
+  gtk_widget_show (hbox21);
+  gtk_table_attach (GTK_TABLE (table5), hbox21, 1, 2, 5, 6,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (GTK_FILL), 0, 0);
+
+  board_check_delay_adj = gtk_adjustment_new (1, 1, 10000, 1, 10, 10);
+  board_check_delay = gtk_spin_button_new (GTK_ADJUSTMENT (board_check_delay_adj), 1, 0);
+  gtk_widget_show (board_check_delay);
+  gtk_box_pack_start (GTK_BOX (hbox21), board_check_delay, FALSE, TRUE, 0);
+
+  label59 = gtk_label_new (_("seconds  "));
+  gtk_widget_show (label59);
+  gtk_box_pack_start (GTK_BOX (hbox21), label59, FALSE, FALSE, 0);
+
+  board_check_delay_fb = gtk_label_new (_("  "));
+  gtk_widget_show (board_check_delay_fb);
+  gtk_box_pack_start (GTK_BOX (hbox21), board_check_delay_fb, FALSE, FALSE, 0);
+
+  backend_url = gtk_entry_new ();
+  gtk_widget_show (backend_url);
+  gtk_table_attach (GTK_TABLE (table5), backend_url, 1, 2, 1, 2,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+
+  user_cookie = gtk_entry_new ();
+  gtk_widget_show (user_cookie);
+  gtk_table_attach (GTK_TABLE (table5), user_cookie, 1, 2, 6, 7,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+
+  label66 = gtk_label_new (_("Backend URL:"));
+  gtk_widget_show (label66);
+  gtk_table_attach (GTK_TABLE (table5), label66, 0, 1, 1, 2,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (label66), 0, 0.5);
+
+  label67 = gtk_label_new (_("Backend flavour:"));
+  gtk_widget_show (label67);
+  gtk_table_attach (GTK_TABLE (table5), label67, 0, 1, 2, 3,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (label67), 0, 0.5);
+
+  backend_flavour = gtk_option_menu_new ();
+  gtk_widget_show (backend_flavour);
+  gtk_table_attach (GTK_TABLE (table5), backend_flavour, 1, 2, 2, 3,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+
+  menu2 = gtk_menu_new ();
+
+  menuitem5 = gtk_menu_item_new_with_mnemonic (_("message tags are \"htmlentitised\""));
+  gtk_widget_show (menuitem5);
+  gtk_container_add (GTK_CONTAINER (menu2), menuitem5);
+
+  menuitem6 = gtk_menu_item_new_with_mnemonic (_("message tags are raw"));
+  gtk_widget_show (menuitem6);
+  gtk_container_add (GTK_CONTAINER (menu2), menuitem6);
+
+  menuitem7 = gtk_menu_item_new_with_mnemonic (_("the backend has no pants"));
+  gtk_widget_show (menuitem7);
+  gtk_container_add (GTK_CONTAINER (menu2), menuitem7);
+
+  gtk_option_menu_set_menu (GTK_OPTION_MENU (backend_flavour), menu2);
+
+  hbox22 = gtk_hbox_new (FALSE, 0);
+  gtk_widget_show (hbox22);
+  gtk_table_attach (GTK_TABLE (table5), hbox22, 0, 1, 6, 7,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (GTK_FILL), 0, 0);
+
+  label60 = gtk_label_new (_("Cookie(s)"));
+  gtk_widget_show (label60);
+  gtk_box_pack_start (GTK_BOX (hbox22), label60, FALSE, FALSE, 0);
+  gtk_misc_set_alignment (GTK_MISC (label60), 0, 0.5);
+
+  grab_cookie_bt = gtk_button_new_with_mnemonic (_("(grab cookie)"));
+  gtk_widget_show (grab_cookie_bt);
+  gtk_box_pack_start (GTK_BOX (hbox22), grab_cookie_bt, FALSE, FALSE, 0);
+  gtk_tooltips_set_tip (tooltips, grab_cookie_bt, _("attempt to get the cookie from the cookies stored in your browsers"), NULL);
+
+  rss_ignore_description = gtk_check_button_new_with_mnemonic (_("Ignore <description> content (some links-only feeds contain ads in this field)"));
+  gtk_widget_show (rss_ignore_description);
+  gtk_table_attach (GTK_TABLE (table5), rss_ignore_description, 0, 2, 3, 4,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+
+  dialog_action_area10 = GTK_DIALOG (change_rss_settings_dialog)->action_area;
+  gtk_widget_show (dialog_action_area10);
+  gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area10), GTK_BUTTONBOX_END);
+
+  cancelbutton3 = gtk_button_new_from_stock ("gtk-cancel");
+  gtk_widget_show (cancelbutton3);
+  gtk_dialog_add_action_widget (GTK_DIALOG (change_rss_settings_dialog), cancelbutton3, GTK_RESPONSE_CANCEL);
+  GTK_WIDGET_SET_FLAGS (cancelbutton3, GTK_CAN_DEFAULT);
+
+  apply_bt = gtk_button_new_from_stock ("gtk-apply");
+  gtk_widget_show (apply_bt);
+  gtk_dialog_add_action_widget (GTK_DIALOG (change_rss_settings_dialog), apply_bt, GTK_RESPONSE_APPLY);
+  GTK_WIDGET_SET_FLAGS (apply_bt, GTK_CAN_DEFAULT);
+
+  okbutton3 = gtk_button_new_from_stock ("gtk-ok");
+  gtk_widget_show (okbutton3);
+  gtk_dialog_add_action_widget (GTK_DIALOG (change_rss_settings_dialog), okbutton3, GTK_RESPONSE_OK);
+  GTK_WIDGET_SET_FLAGS (okbutton3, GTK_CAN_DEFAULT);
+
+  /* Store pointers to all widgets, for use by lookup_widget(). */
+  GLADE_HOOKUP_OBJECT_NO_REF (change_rss_settings_dialog, change_rss_settings_dialog, "change_rss_settings_dialog");
+  GLADE_HOOKUP_OBJECT_NO_REF (change_rss_settings_dialog, dialog_vbox10, "dialog_vbox10");
+  GLADE_HOOKUP_OBJECT (change_rss_settings_dialog, table5, "table5");
+  GLADE_HOOKUP_OBJECT (change_rss_settings_dialog, label55, "label55");
+  GLADE_HOOKUP_OBJECT (change_rss_settings_dialog, hbox20, "hbox20");
+  GLADE_HOOKUP_OBJECT (change_rss_settings_dialog, all_names_0_, "all_names_0_");
+  GLADE_HOOKUP_OBJECT (change_rss_settings_dialog, all_names_1_, "all_names_1_");
+  GLADE_HOOKUP_OBJECT (change_rss_settings_dialog, all_names_2_, "all_names_2_");
+  GLADE_HOOKUP_OBJECT (change_rss_settings_dialog, all_names_3_, "all_names_3_");
+  GLADE_HOOKUP_OBJECT (change_rss_settings_dialog, label58, "label58");
+  GLADE_HOOKUP_OBJECT (change_rss_settings_dialog, hbox21, "hbox21");
+  GLADE_HOOKUP_OBJECT (change_rss_settings_dialog, board_check_delay, "board_check_delay");
+  GLADE_HOOKUP_OBJECT (change_rss_settings_dialog, label59, "label59");
+  GLADE_HOOKUP_OBJECT (change_rss_settings_dialog, board_check_delay_fb, "board_check_delay_fb");
+  GLADE_HOOKUP_OBJECT (change_rss_settings_dialog, backend_url, "backend_url");
+  GLADE_HOOKUP_OBJECT (change_rss_settings_dialog, user_cookie, "user_cookie");
+  GLADE_HOOKUP_OBJECT (change_rss_settings_dialog, label66, "label66");
+  GLADE_HOOKUP_OBJECT (change_rss_settings_dialog, label67, "label67");
+  GLADE_HOOKUP_OBJECT (change_rss_settings_dialog, backend_flavour, "backend_flavour");
+  GLADE_HOOKUP_OBJECT (change_rss_settings_dialog, menu2, "menu2");
+  GLADE_HOOKUP_OBJECT (change_rss_settings_dialog, menuitem5, "menuitem5");
+  GLADE_HOOKUP_OBJECT (change_rss_settings_dialog, menuitem6, "menuitem6");
+  GLADE_HOOKUP_OBJECT (change_rss_settings_dialog, menuitem7, "menuitem7");
+  GLADE_HOOKUP_OBJECT (change_rss_settings_dialog, hbox22, "hbox22");
+  GLADE_HOOKUP_OBJECT (change_rss_settings_dialog, label60, "label60");
+  GLADE_HOOKUP_OBJECT (change_rss_settings_dialog, grab_cookie_bt, "grab_cookie_bt");
+  GLADE_HOOKUP_OBJECT (change_rss_settings_dialog, rss_ignore_description, "rss_ignore_description");
+  GLADE_HOOKUP_OBJECT_NO_REF (change_rss_settings_dialog, dialog_action_area10, "dialog_action_area10");
+  GLADE_HOOKUP_OBJECT (change_rss_settings_dialog, cancelbutton3, "cancelbutton3");
+  GLADE_HOOKUP_OBJECT (change_rss_settings_dialog, apply_bt, "apply_bt");
+  GLADE_HOOKUP_OBJECT (change_rss_settings_dialog, okbutton3, "okbutton3");
+  GLADE_HOOKUP_OBJECT_NO_REF (change_rss_settings_dialog, tooltips, "tooltips");
+
+  return change_rss_settings_dialog;
+}
+
+GtkWidget*
+create_change_pop_settings_dialog (void)
+{
+  GtkWidget *change_pop_settings_dialog;
+  GtkWidget *dialog_vbox10;
+  GtkWidget *table5;
+  GtkWidget *label55;
+  GtkWidget *hbox20;
+  GtkWidget *all_names_0_;
+  GtkWidget *all_names_1_;
+  GtkWidget *all_names_2_;
+  GtkWidget *all_names_3_;
+  GtkWidget *label58;
+  GtkWidget *hbox21;
+  GtkObject *board_check_delay_adj;
+  GtkWidget *board_check_delay;
+  GtkWidget *label59;
+  GtkWidget *board_check_delay_fb;
+  GtkWidget *backend_url;
+  GtkWidget *label66;
+  GtkWidget *label68;
+  GtkWidget *pop3_user;
+  GtkWidget *label69;
+  GtkWidget *pop3_pass;
+  GtkWidget *dialog_action_area10;
+  GtkWidget *cancelbutton3;
+  GtkWidget *apply_bt;
+  GtkWidget *okbutton3;
+
+  change_pop_settings_dialog = gtk_dialog_new ();
+  gtk_window_set_title (GTK_WINDOW (change_pop_settings_dialog), _("Change POP account settings"));
+  gtk_window_set_type_hint (GTK_WINDOW (change_pop_settings_dialog), GDK_WINDOW_TYPE_HINT_DIALOG);
+
+  dialog_vbox10 = GTK_DIALOG (change_pop_settings_dialog)->vbox;
+  gtk_widget_show (dialog_vbox10);
+
+  table5 = gtk_table_new (9, 2, FALSE);
+  gtk_widget_show (table5);
+  gtk_box_pack_start (GTK_BOX (dialog_vbox10), table5, TRUE, TRUE, 0);
+
+  label55 = gtk_label_new (_("Site name, and aliases:"));
+  gtk_widget_show (label55);
+  gtk_table_attach (GTK_TABLE (table5), label55, 0, 1, 0, 1,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (label55), 0, 0.5);
+
+  hbox20 = gtk_hbox_new (FALSE, 0);
+  gtk_widget_show (hbox20);
+  gtk_table_attach (GTK_TABLE (table5), hbox20, 1, 2, 0, 1,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (GTK_FILL), 0, 0);
+
+  all_names_0_ = gtk_entry_new ();
+  gtk_widget_show (all_names_0_);
+  gtk_box_pack_start (GTK_BOX (hbox20), all_names_0_, FALSE, TRUE, 0);
+
+  all_names_1_ = gtk_entry_new ();
+  gtk_widget_show (all_names_1_);
+  gtk_box_pack_start (GTK_BOX (hbox20), all_names_1_, FALSE, TRUE, 0);
+  gtk_widget_set_size_request (all_names_1_, 120, -1);
+
+  all_names_2_ = gtk_entry_new ();
+  gtk_widget_show (all_names_2_);
+  gtk_box_pack_start (GTK_BOX (hbox20), all_names_2_, FALSE, FALSE, 0);
+  gtk_widget_set_size_request (all_names_2_, 120, -1);
+
+  all_names_3_ = gtk_entry_new ();
+  gtk_widget_show (all_names_3_);
+  gtk_box_pack_start (GTK_BOX (hbox20), all_names_3_, FALSE, TRUE, 0);
+  gtk_widget_set_size_request (all_names_3_, 120, -1);
+
+  label58 = gtk_label_new (_("Refresh frequency:"));
+  gtk_widget_show (label58);
+  gtk_table_attach (GTK_TABLE (table5), label58, 0, 1, 5, 6,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (label58), 0, 0.5);
+
+  hbox21 = gtk_hbox_new (FALSE, 0);
+  gtk_widget_show (hbox21);
+  gtk_table_attach (GTK_TABLE (table5), hbox21, 1, 2, 5, 6,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (GTK_FILL), 0, 0);
+
+  board_check_delay_adj = gtk_adjustment_new (1, 1, 10000, 1, 10, 10);
+  board_check_delay = gtk_spin_button_new (GTK_ADJUSTMENT (board_check_delay_adj), 1, 0);
+  gtk_widget_show (board_check_delay);
+  gtk_box_pack_start (GTK_BOX (hbox21), board_check_delay, FALSE, TRUE, 0);
+
+  label59 = gtk_label_new (_("seconds  "));
+  gtk_widget_show (label59);
+  gtk_box_pack_start (GTK_BOX (hbox21), label59, FALSE, FALSE, 0);
+
+  board_check_delay_fb = gtk_label_new (_("  "));
+  gtk_widget_show (board_check_delay_fb);
+  gtk_box_pack_start (GTK_BOX (hbox21), board_check_delay_fb, FALSE, FALSE, 0);
+
+  backend_url = gtk_entry_new ();
+  gtk_widget_show (backend_url);
+  gtk_table_attach (GTK_TABLE (table5), backend_url, 1, 2, 1, 2,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+
+  label66 = gtk_label_new (_("Pop3 server:"));
+  gtk_widget_show (label66);
+  gtk_table_attach (GTK_TABLE (table5), label66, 0, 1, 1, 2,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (label66), 0, 0.5);
+
+  label68 = gtk_label_new (_("Login"));
+  gtk_widget_show (label68);
+  gtk_table_attach (GTK_TABLE (table5), label68, 0, 1, 7, 8,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (label68), 0, 0.5);
+
+  pop3_user = gtk_entry_new ();
+  gtk_widget_show (pop3_user);
+  gtk_table_attach (GTK_TABLE (table5), pop3_user, 1, 2, 7, 8,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+
+  label69 = gtk_label_new (_("Password"));
+  gtk_widget_show (label69);
+  gtk_table_attach (GTK_TABLE (table5), label69, 0, 1, 8, 9,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (label69), 0, 0.5);
+
+  pop3_pass = gtk_entry_new ();
+  gtk_widget_show (pop3_pass);
+  gtk_table_attach (GTK_TABLE (table5), pop3_pass, 1, 2, 8, 9,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_entry_set_visibility (GTK_ENTRY (pop3_pass), FALSE);
+
+  dialog_action_area10 = GTK_DIALOG (change_pop_settings_dialog)->action_area;
+  gtk_widget_show (dialog_action_area10);
+  gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area10), GTK_BUTTONBOX_END);
+
+  cancelbutton3 = gtk_button_new_from_stock ("gtk-cancel");
+  gtk_widget_show (cancelbutton3);
+  gtk_dialog_add_action_widget (GTK_DIALOG (change_pop_settings_dialog), cancelbutton3, GTK_RESPONSE_CANCEL);
+  GTK_WIDGET_SET_FLAGS (cancelbutton3, GTK_CAN_DEFAULT);
+
+  apply_bt = gtk_button_new_from_stock ("gtk-apply");
+  gtk_widget_show (apply_bt);
+  gtk_dialog_add_action_widget (GTK_DIALOG (change_pop_settings_dialog), apply_bt, GTK_RESPONSE_APPLY);
+  GTK_WIDGET_SET_FLAGS (apply_bt, GTK_CAN_DEFAULT);
+
+  okbutton3 = gtk_button_new_from_stock ("gtk-ok");
+  gtk_widget_show (okbutton3);
+  gtk_dialog_add_action_widget (GTK_DIALOG (change_pop_settings_dialog), okbutton3, GTK_RESPONSE_OK);
+  GTK_WIDGET_SET_FLAGS (okbutton3, GTK_CAN_DEFAULT);
+
+  /* Store pointers to all widgets, for use by lookup_widget(). */
+  GLADE_HOOKUP_OBJECT_NO_REF (change_pop_settings_dialog, change_pop_settings_dialog, "change_pop_settings_dialog");
+  GLADE_HOOKUP_OBJECT_NO_REF (change_pop_settings_dialog, dialog_vbox10, "dialog_vbox10");
+  GLADE_HOOKUP_OBJECT (change_pop_settings_dialog, table5, "table5");
+  GLADE_HOOKUP_OBJECT (change_pop_settings_dialog, label55, "label55");
+  GLADE_HOOKUP_OBJECT (change_pop_settings_dialog, hbox20, "hbox20");
+  GLADE_HOOKUP_OBJECT (change_pop_settings_dialog, all_names_0_, "all_names_0_");
+  GLADE_HOOKUP_OBJECT (change_pop_settings_dialog, all_names_1_, "all_names_1_");
+  GLADE_HOOKUP_OBJECT (change_pop_settings_dialog, all_names_2_, "all_names_2_");
+  GLADE_HOOKUP_OBJECT (change_pop_settings_dialog, all_names_3_, "all_names_3_");
+  GLADE_HOOKUP_OBJECT (change_pop_settings_dialog, label58, "label58");
+  GLADE_HOOKUP_OBJECT (change_pop_settings_dialog, hbox21, "hbox21");
+  GLADE_HOOKUP_OBJECT (change_pop_settings_dialog, board_check_delay, "board_check_delay");
+  GLADE_HOOKUP_OBJECT (change_pop_settings_dialog, label59, "label59");
+  GLADE_HOOKUP_OBJECT (change_pop_settings_dialog, board_check_delay_fb, "board_check_delay_fb");
+  GLADE_HOOKUP_OBJECT (change_pop_settings_dialog, backend_url, "backend_url");
+  GLADE_HOOKUP_OBJECT (change_pop_settings_dialog, label66, "label66");
+  GLADE_HOOKUP_OBJECT (change_pop_settings_dialog, label68, "label68");
+  GLADE_HOOKUP_OBJECT (change_pop_settings_dialog, pop3_user, "pop3_user");
+  GLADE_HOOKUP_OBJECT (change_pop_settings_dialog, label69, "label69");
+  GLADE_HOOKUP_OBJECT (change_pop_settings_dialog, pop3_pass, "pop3_pass");
+  GLADE_HOOKUP_OBJECT_NO_REF (change_pop_settings_dialog, dialog_action_area10, "dialog_action_area10");
+  GLADE_HOOKUP_OBJECT (change_pop_settings_dialog, cancelbutton3, "cancelbutton3");
+  GLADE_HOOKUP_OBJECT (change_pop_settings_dialog, apply_bt, "apply_bt");
+  GLADE_HOOKUP_OBJECT (change_pop_settings_dialog, okbutton3, "okbutton3");
+
+  return change_pop_settings_dialog;
+}
+
+GtkWidget*
+create_grab_cookie_dialog (void)
+{
+  GtkWidget *grab_cookie_dialog;
+  GtkWidget *dialog_vbox11;
+  GtkWidget *vbox15;
+  GtkWidget *label61;
+  GtkWidget *hseparator4;
+  GtkWidget *scrolledwindow6;
+  GtkWidget *cookies;
+  GtkWidget *dialog_action_area11;
+  GtkWidget *close_bt;
+
+  grab_cookie_dialog = gtk_dialog_new ();
+  gtk_widget_set_size_request (grab_cookie_dialog, 786, 470);
+  gtk_window_set_title (GTK_WINDOW (grab_cookie_dialog), _("grab a cookie from your browsers"));
+  gtk_window_set_type_hint (GTK_WINDOW (grab_cookie_dialog), GDK_WINDOW_TYPE_HINT_DIALOG);
+
+  dialog_vbox11 = GTK_DIALOG (grab_cookie_dialog)->vbox;
+  gtk_widget_show (dialog_vbox11);
+
+  vbox15 = gtk_vbox_new (FALSE, 0);
+  gtk_widget_show (vbox15);
+  gtk_box_pack_start (GTK_BOX (dialog_vbox11), vbox15, TRUE, TRUE, 0);
+
+  label61 = gtk_label_new (_("Cut and paste the selected cookies."));
+  gtk_widget_show (label61);
+  gtk_box_pack_start (GTK_BOX (vbox15), label61, FALSE, FALSE, 0);
+
+  hseparator4 = gtk_hseparator_new ();
+  gtk_widget_show (hseparator4);
+  gtk_box_pack_start (GTK_BOX (vbox15), hseparator4, FALSE, FALSE, 0);
+
+  scrolledwindow6 = gtk_scrolled_window_new (NULL, NULL);
+  gtk_widget_show (scrolledwindow6);
+  gtk_box_pack_start (GTK_BOX (vbox15), scrolledwindow6, TRUE, TRUE, 0);
+  gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolledwindow6), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
+
+  cookies = gtk_text_view_new ();
+  gtk_widget_show (cookies);
+  gtk_container_add (GTK_CONTAINER (scrolledwindow6), cookies);
+  gtk_text_view_set_editable (GTK_TEXT_VIEW (cookies), FALSE);
+
+  dialog_action_area11 = GTK_DIALOG (grab_cookie_dialog)->action_area;
+  gtk_widget_show (dialog_action_area11);
+  gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area11), GTK_BUTTONBOX_END);
+
+  close_bt = gtk_button_new_from_stock ("gtk-close");
+  gtk_widget_show (close_bt);
+  gtk_dialog_add_action_widget (GTK_DIALOG (grab_cookie_dialog), close_bt, GTK_RESPONSE_CLOSE);
+  GTK_WIDGET_SET_FLAGS (close_bt, GTK_CAN_DEFAULT);
+
+  /* Store pointers to all widgets, for use by lookup_widget(). */
+  GLADE_HOOKUP_OBJECT_NO_REF (grab_cookie_dialog, grab_cookie_dialog, "grab_cookie_dialog");
+  GLADE_HOOKUP_OBJECT_NO_REF (grab_cookie_dialog, dialog_vbox11, "dialog_vbox11");
+  GLADE_HOOKUP_OBJECT (grab_cookie_dialog, vbox15, "vbox15");
+  GLADE_HOOKUP_OBJECT (grab_cookie_dialog, label61, "label61");
+  GLADE_HOOKUP_OBJECT (grab_cookie_dialog, hseparator4, "hseparator4");
+  GLADE_HOOKUP_OBJECT (grab_cookie_dialog, scrolledwindow6, "scrolledwindow6");
+  GLADE_HOOKUP_OBJECT (grab_cookie_dialog, cookies, "cookies");
+  GLADE_HOOKUP_OBJECT_NO_REF (grab_cookie_dialog, dialog_action_area11, "dialog_action_area11");
+  GLADE_HOOKUP_OBJECT (grab_cookie_dialog, close_bt, "close_bt");
+
+  return grab_cookie_dialog;
+}
+
+GtkWidget*
+create_fontselectiondialog (void)
+{
+  GtkWidget *fontselectiondialog;
+  GtkWidget *ok_button2;
+  GtkWidget *cancel_button2;
+  GtkWidget *apply_button1;
+  GtkWidget *font_selection1;
+
+  fontselectiondialog = gtk_font_selection_dialog_new (_("Select Font"));
+  gtk_container_set_border_width (GTK_CONTAINER (fontselectiondialog), 4);
+  gtk_window_set_type_hint (GTK_WINDOW (fontselectiondialog), GDK_WINDOW_TYPE_HINT_DIALOG);
+
+  ok_button2 = GTK_FONT_SELECTION_DIALOG (fontselectiondialog)->ok_button;
+  gtk_widget_show (ok_button2);
+  GTK_WIDGET_SET_FLAGS (ok_button2, GTK_CAN_DEFAULT);
+
+  cancel_button2 = GTK_FONT_SELECTION_DIALOG (fontselectiondialog)->cancel_button;
+  gtk_widget_show (cancel_button2);
+  GTK_WIDGET_SET_FLAGS (cancel_button2, GTK_CAN_DEFAULT);
+
+  apply_button1 = GTK_FONT_SELECTION_DIALOG (fontselectiondialog)->apply_button;
+  GTK_WIDGET_SET_FLAGS (apply_button1, GTK_CAN_DEFAULT);
+
+  font_selection1 = GTK_FONT_SELECTION_DIALOG (fontselectiondialog)->fontsel;
+  gtk_widget_show (font_selection1);
+  gtk_container_set_border_width (GTK_CONTAINER (font_selection1), 4);
+
+  /* Store pointers to all widgets, for use by lookup_widget(). */
+  GLADE_HOOKUP_OBJECT_NO_REF (fontselectiondialog, fontselectiondialog, "fontselectiondialog");
+  GLADE_HOOKUP_OBJECT_NO_REF (fontselectiondialog, ok_button2, "ok_button2");
+  GLADE_HOOKUP_OBJECT_NO_REF (fontselectiondialog, cancel_button2, "cancel_button2");
+  GLADE_HOOKUP_OBJECT_NO_REF (fontselectiondialog, apply_button1, "apply_button1");
+  GLADE_HOOKUP_OBJECT_NO_REF (fontselectiondialog, font_selection1, "font_selection1");
+
+  return fontselectiondialog;
+}
+
+GtkWidget*
+create_proxy_dialog (void)
+{
+  GtkWidget *proxy_dialog;
+  GtkWidget *dialog_vbox12;
+  GtkWidget *vbox21;
+  GtkWidget *label101;
+  GtkWidget *hbox37;
+  GtkWidget *image16;
+  GtkWidget *label100;
+  GtkWidget *hseparator8;
+  GtkWidget *table7;
+  GtkWidget *label96;
+  GtkWidget *label97;
+  GtkWidget *label98;
+  GtkWidget *label99;
+  GtkWidget *proxy_nocache;
+  GtkWidget *use_if_modified_since;
+  GtkWidget *proxy_name;
+  GtkObject *proxy_port_adj;
+  GtkWidget *proxy_port;
+  GtkWidget *proxy_auth_user;
+  GtkWidget *proxy_auth_pass;
+  GtkWidget *dialog_action_area12;
+  GtkWidget *cancelbutton4;
+  GtkWidget *okbutton4;
+
+  proxy_dialog = gtk_dialog_new ();
+  gtk_window_set_title (GTK_WINDOW (proxy_dialog), _("Proxy or not proxy"));
+  gtk_window_set_type_hint (GTK_WINDOW (proxy_dialog), GDK_WINDOW_TYPE_HINT_DIALOG);
+
+  dialog_vbox12 = GTK_DIALOG (proxy_dialog)->vbox;
+  gtk_widget_show (dialog_vbox12);
+
+  vbox21 = gtk_vbox_new (FALSE, 0);
+  gtk_widget_show (vbox21);
+  gtk_box_pack_start (GTK_BOX (dialog_vbox12), vbox21, TRUE, TRUE, 0);
+
+  label101 = gtk_label_new (_("<b>The Charles Bronson's Advice</b>:"));
+  gtk_widget_show (label101);
+  gtk_box_pack_start (GTK_BOX (vbox21), label101, FALSE, FALSE, 0);
+  gtk_label_set_use_markup (GTK_LABEL (label101), TRUE);
+
+  hbox37 = gtk_hbox_new (FALSE, 0);
+  gtk_widget_show (hbox37);
+  gtk_box_pack_start (GTK_BOX (vbox21), hbox37, FALSE, FALSE, 0);
+
+  image16 = create_pixmap (proxy_dialog, "cbronson.jpg");
+  gtk_widget_show (image16);
+  gtk_box_pack_start (GTK_BOX (hbox37), image16, FALSE, FALSE, 0);
+
+  label100 = gtk_label_new (_("Here you may change the proxy settings for the selected sites.\n\nNote that '<i>disable proxy caching</i>' might be useful even if you do not have filled a proxy (i.e. if your ISP uses a transparent proxy) (well I am not 100% sure of that)\n\nThe '<i>if modified since</i>' check-box is not proxy related and should always be checked.\n\nIf you don't specify any proxy, then wmcoincoin will use the content of the environment variable <tt><b>http_proxy</b></tt> [...]
+  gtk_widget_show (label100);
+  gtk_box_pack_start (GTK_BOX (hbox37), label100, TRUE, TRUE, 5);
+  gtk_label_set_use_markup (GTK_LABEL (label100), TRUE);
+  gtk_label_set_line_wrap (GTK_LABEL (label100), TRUE);
+
+  hseparator8 = gtk_hseparator_new ();
+  gtk_widget_show (hseparator8);
+  gtk_box_pack_start (GTK_BOX (vbox21), hseparator8, TRUE, TRUE, 0);
+
+  table7 = gtk_table_new (3, 4, FALSE);
+  gtk_widget_show (table7);
+  gtk_box_pack_start (GTK_BOX (vbox21), table7, TRUE, TRUE, 0);
+
+  label96 = gtk_label_new (_("Proxy: "));
+  gtk_widget_show (label96);
+  gtk_table_attach (GTK_TABLE (table7), label96, 0, 1, 0, 1,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (label96), 0, 0.5);
+
+  label97 = gtk_label_new (_("Port: "));
+  gtk_widget_show (label97);
+  gtk_table_attach (GTK_TABLE (table7), label97, 2, 3, 0, 1,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (label97), 0, 0.5);
+
+  label98 = gtk_label_new (_("User: "));
+  gtk_widget_show (label98);
+  gtk_table_attach (GTK_TABLE (table7), label98, 0, 1, 1, 2,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (label98), 0, 0.5);
+
+  label99 = gtk_label_new (_("Password: "));
+  gtk_widget_show (label99);
+  gtk_table_attach (GTK_TABLE (table7), label99, 2, 3, 1, 2,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_misc_set_alignment (GTK_MISC (label99), 0, 0.5);
+
+  proxy_nocache = gtk_check_button_new_with_mnemonic (_("Disable proxy caching"));
+  gtk_widget_show (proxy_nocache);
+  gtk_table_attach (GTK_TABLE (table7), proxy_nocache, 1, 2, 2, 3,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+
+  use_if_modified_since = gtk_check_button_new_with_mnemonic (_("Use 'if-modified-since' "));
+  gtk_widget_show (use_if_modified_since);
+  gtk_table_attach (GTK_TABLE (table7), use_if_modified_since, 3, 4, 2, 3,
+                    (GtkAttachOptions) (GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+
+  proxy_name = gtk_entry_new ();
+  gtk_widget_show (proxy_name);
+  gtk_table_attach (GTK_TABLE (table7), proxy_name, 1, 2, 0, 1,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+
+  proxy_port_adj = gtk_adjustment_new (1, 0, 65535, 1, 10, 10);
+  proxy_port = gtk_spin_button_new (GTK_ADJUSTMENT (proxy_port_adj), 1, 0);
+  gtk_widget_show (proxy_port);
+  gtk_table_attach (GTK_TABLE (table7), proxy_port, 3, 4, 0, 1,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+
+  proxy_auth_user = gtk_entry_new ();
+  gtk_widget_show (proxy_auth_user);
+  gtk_table_attach (GTK_TABLE (table7), proxy_auth_user, 1, 2, 1, 2,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+
+  proxy_auth_pass = gtk_entry_new ();
+  gtk_widget_show (proxy_auth_pass);
+  gtk_table_attach (GTK_TABLE (table7), proxy_auth_pass, 3, 4, 1, 2,
+                    (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
+                    (GtkAttachOptions) (0), 0, 0);
+  gtk_entry_set_visibility (GTK_ENTRY (proxy_auth_pass), FALSE);
+
+  dialog_action_area12 = GTK_DIALOG (proxy_dialog)->action_area;
+  gtk_widget_show (dialog_action_area12);
+  gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area12), GTK_BUTTONBOX_END);
+
+  cancelbutton4 = gtk_button_new_from_stock ("gtk-cancel");
+  gtk_widget_show (cancelbutton4);
+  gtk_dialog_add_action_widget (GTK_DIALOG (proxy_dialog), cancelbutton4, GTK_RESPONSE_CANCEL);
+  GTK_WIDGET_SET_FLAGS (cancelbutton4, GTK_CAN_DEFAULT);
+
+  okbutton4 = gtk_button_new_from_stock ("gtk-ok");
+  gtk_widget_show (okbutton4);
+  gtk_dialog_add_action_widget (GTK_DIALOG (proxy_dialog), okbutton4, GTK_RESPONSE_OK);
+  GTK_WIDGET_SET_FLAGS (okbutton4, GTK_CAN_DEFAULT);
+
+  /* Store pointers to all widgets, for use by lookup_widget(). */
+  GLADE_HOOKUP_OBJECT_NO_REF (proxy_dialog, proxy_dialog, "proxy_dialog");
+  GLADE_HOOKUP_OBJECT_NO_REF (proxy_dialog, dialog_vbox12, "dialog_vbox12");
+  GLADE_HOOKUP_OBJECT (proxy_dialog, vbox21, "vbox21");
+  GLADE_HOOKUP_OBJECT (proxy_dialog, label101, "label101");
+  GLADE_HOOKUP_OBJECT (proxy_dialog, hbox37, "hbox37");
+  GLADE_HOOKUP_OBJECT (proxy_dialog, image16, "image16");
+  GLADE_HOOKUP_OBJECT (proxy_dialog, label100, "label100");
+  GLADE_HOOKUP_OBJECT (proxy_dialog, hseparator8, "hseparator8");
+  GLADE_HOOKUP_OBJECT (proxy_dialog, table7, "table7");
+  GLADE_HOOKUP_OBJECT (proxy_dialog, label96, "label96");
+  GLADE_HOOKUP_OBJECT (proxy_dialog, label97, "label97");
+  GLADE_HOOKUP_OBJECT (proxy_dialog, label98, "label98");
+  GLADE_HOOKUP_OBJECT (proxy_dialog, label99, "label99");
+  GLADE_HOOKUP_OBJECT (proxy_dialog, proxy_nocache, "proxy_nocache");
+  GLADE_HOOKUP_OBJECT (proxy_dialog, use_if_modified_since, "use_if_modified_since");
+  GLADE_HOOKUP_OBJECT (proxy_dialog, proxy_name, "proxy_name");
+  GLADE_HOOKUP_OBJECT (proxy_dialog, proxy_port, "proxy_port");
+  GLADE_HOOKUP_OBJECT (proxy_dialog, proxy_auth_user, "proxy_auth_user");
+  GLADE_HOOKUP_OBJECT (proxy_dialog, proxy_auth_pass, "proxy_auth_pass");
+  GLADE_HOOKUP_OBJECT_NO_REF (proxy_dialog, dialog_action_area12, "dialog_action_area12");
+  GLADE_HOOKUP_OBJECT (proxy_dialog, cancelbutton4, "cancelbutton4");
+  GLADE_HOOKUP_OBJECT (proxy_dialog, okbutton4, "okbutton4");
+
+  return proxy_dialog;
+}
+
diff --git a/src/wmccc_interface.h b/src/wmccc_interface.h
new file mode 100644
index 0000000..93176b3
--- /dev/null
+++ b/src/wmccc_interface.h
@@ -0,0 +1,20 @@
+/*
+ * DO NOT EDIT THIS FILE - it is generated by Glade.
+ */
+
+GtkWidget* create_messagebox_dialog (void);
+GtkWidget* create_new_rss_dialog (void);
+GtkWidget* create_new_board_dialog (void);
+GtkWidget* create_new_pop_dialog (void);
+GtkWidget* create_colorselection_dialog (void);
+GtkWidget* create_global_pinnipede_options_dialog (void);
+GtkWidget* create_edit_dialog (void);
+GtkWidget* create_bronson_wizard (void);
+GtkWidget* create_sitelist_dialog (void);
+GtkWidget* create_pinnipede_site_colors_dialog (void);
+GtkWidget* create_change_board_settings_dialog (void);
+GtkWidget* create_change_rss_settings_dialog (void);
+GtkWidget* create_change_pop_settings_dialog (void);
+GtkWidget* create_grab_cookie_dialog (void);
+GtkWidget* create_fontselectiondialog (void);
+GtkWidget* create_proxy_dialog (void);
diff --git a/src/wmccc_save_prefs.c b/src/wmccc_save_prefs.c
new file mode 100644
index 0000000..14b0d15
--- /dev/null
+++ b/src/wmccc_save_prefs.c
@@ -0,0 +1,413 @@
+#include <signal.h>
+#include "wmccc.h"
+#include "options_list.h"
+#include "coin_util.h"
+#include <errno.h>
+
+char *
+miniuarule_to_string(MiniUARule *r) {
+  int n = 0;
+  char s[1024];
+  int sz = 0;
+  s[0] = 0; 
+  if (r->site_name) { 
+    sz += g_snprintf(s+sz, 1024-sz, "site:\"%s\"", r->site_name); n++; 
+  }
+  if (r->user_login) {
+    sz += g_snprintf(s+sz, 1024-sz, "%slogin:\"%s\"", n?", ":"", r->user_login); n++; 
+  }
+  if (r->rgx) { 
+    sz += g_snprintf(s+sz, 1024-sz, "%sua:\"%s\"", n?", ":"", r->s_rgx); n++; 
+  }
+  sz +=   g_snprintf(s+sz, 1024-sz, " => ");
+  n = 0;
+  if (r->color != -1) { 
+    sz += g_snprintf(s+sz, 1024-sz, "color%s=\"#%06x\"", r->color_terminal?":":"", r->color); n++;
+  }
+  if (r->symb != -1) {
+    sz += g_snprintf(s+sz, 1024-sz, "%ssymb%s=\"%s\"", n?", ":"", r->symb_terminal?":":"", symboles[r->symb].name); n++; 
+  }
+  if (r->rua) {
+    sz += g_snprintf(s+sz, 1024-sz, "%sua%s=\"%s\"", n?", ":"", r->ua_terminal?":":"", r->rua); 
+  }
+  return g_strndup(s,1024);
+}
+
+void 
+prefs_write_to_file_keylist(FILE *f, int opt, KeyList *hk) {
+  if (hk == NULL) return;
+  fprintf(f, "%s: ", wmcc_options_strings[opt]);
+  for (; hk; hk = hk->next) {
+    switch (hk->type) {
+    case HK_UA: fprintf(f, "UA:"); break;
+    case HK_LOGIN: fprintf(f, "LOGIN:"); break;
+    case HK_WORD: fprintf(f, "WORD:"); break;
+    case HK_ID: fprintf(f, "ID:"); break;
+    case HK_THREAD: fprintf(f, "THREAD:"); break;
+    case HK_UA_NOLOGIN: fprintf(f, "UA_NOLOGIN:"); break;
+    default: g_assert(0); break;
+    }
+    fprintf(f, "%d:\"%s\"%s\n", hk->num, hk->key, hk->next ? ", \\" : "");
+  }
+}
+
+void
+prefs_savestr(FILE *f, const char *o, int with_dot, const char *s, const char *default_s) {
+  if (s && s[0] && (default_s == NULL || strcmp(s,default_s))) {
+    if (with_dot) fprintf(f, ".");
+    fprintf(f, "%s: %s\n", o, s);
+  }
+}
+
+void
+prefs_savefontstyle(FILE *f, const char *o, int with_dot, FontStyle *fs, FontStyle *default_fs) {
+  if (memcmp(fs,default_fs,sizeof(FontStyle))) {
+    if (with_dot) fprintf(f, ".");
+    fprintf(f, "%s: %s%s%s%s\n", o, 
+            (fs->underlined ? "U" : "."), 
+            (fs->slanted ? "I" : "."), 
+            (fs->bold ? "B" : "."),
+            (fs->teletype ? "T" : "."));
+  }
+}
+
+#define SAVESTR(o,_s, p) if (p->_s && p->_s[0]) { fprintf(f, "%s: %s\n", o, p->_s); }
+#define SAVEBOOL(o,_b, p) fprintf(f, "%s: %s\n", o, (p->_b)?"on":"off");
+#define SAVEINT(o,_i, p) fprintf(f, "%s: %d\n", o, p->_i);
+#define SAVEPOS(o,_x,_y, p) fprintf(f, "%s: %d:%d\n", o, p->_x, p->_y);
+#define SAVECOL(o,_c, p) fprintf(f, "%s: %06x\n", o, p->_c);
+#define SAVEBICOL(o, _bic, p) fprintf(f, "%s: %06x %06x\n", o, p->_bic.opaque, p->_bic.transp);
+
+
+#define G_SAVESTR(o,_s) prefs_savestr(f, wmcc_options_strings[o], 0, p->_s, default_p->_s)
+#define G_SAVEBOOL(o,_b) if (p->_b != default_p->_b) { SAVEBOOL(wmcc_options_strings[o], _b, p);}
+#define G_SAVEINT(o,_i) if (p->_i != default_p->_i) { SAVEINT(wmcc_options_strings[o], _i, p); }
+#define G_SAVEPOS(o,_x,_y) if (p->_x != default_p->_x || p->_y != default_p->_y) \
+                           { SAVEPOS(wmcc_options_strings[o],_x,_y, p); }
+#define G_SAVECOL(o,_c) if (p->_c != default_p->_c) { SAVECOL(wmcc_options_strings[o],_c, p); }
+#define G_SAVEBICOL(o, _bic) if (p->_bic.opaque != default_p->_bic.opaque || p->_bic.transp != default_p->_bic.transp) { SAVEBICOL(wmcc_options_strings[o], _bic, p); }
+#define G_SAVEFONTSTYLE(o, _fs) prefs_savefontstyle(f, wmcc_options_strings[o], 0, &(p->_fs), &(default_p->_fs))
+#define G_SAVESTRLST(o,lst,nb) if (p->nb) { int i; fprintf(f, "%s: ", wmcc_options_strings[o]); \
+      for (i=0; i < (int)p->nb; i++) { fprintf(f, "\"%s\"%s", p->lst[i], (i==(int)p->nb-1)?"\n":", \\\n"); } }
+#define G_SAVEKL(o, hk) { prefs_write_to_file_keylist(f, o, p->hk); }
+
+#define DOTIFY(o) (wmcc_options_strings[o]+1)
+
+#define SP_SAVESTR(o,_s) prefs_savestr(f, DOTIFY(o), 1, sp->_s, default_sp->_s)
+#define SP_SAVEBOOL(o,_b) if (sp->_b != default_sp->_b) { fprintf(f, ".");  SAVEBOOL(DOTIFY(o),_b, sp); }
+#define SP_SAVEINT(o,_i) if (sp->_i != default_sp->_i) { fprintf(f, "."); SAVEINT(DOTIFY(o),_i, sp); }
+#define SP_SAVEPOS(o,_x,_y) if (sp->_x != default_sp->_x || sp->_y != default_sp->_y) { fprintf(f, "."); SAVEPOS(DOTIFY(o),_x,_y, sp); }
+#define SP_SAVECOL(o,_c) if (sp->_c != default_sp->_c) { fprintf(f, "."); SAVECOL(DOTIFY(o),_c, sp); }
+#define SP_SAVEBICOL(o, _bic) if (sp->_bic.opaque != default_sp->_bic.opaque || sp->_bic.transp != default_sp->_bic.transp) { fprintf(f, "."); SAVEBICOL(DOTIFY(o), _bic, sp); }
+#define SP_SAVEFONTSTYLE(o, _fs) prefs_savefontstyle(f, DOTIFY(o), 1, &(sp->_fs), &(default_sp->_fs))
+void
+auth_prefs_write_to_file(GeneralPrefs *p, FILE *f) {
+  int site_num;
+  for (site_num = 0; site_num < p->nb_sites; site_num++) {
+    SitePrefs *sp = p->site[site_num];
+    char *s = sp->user_cookie;
+    while (s && *s) {
+      char *ck, *s2;
+      s2 = strchr(s, '\n');
+      if (s2 == NULL) {
+        ck = strdup(s);
+      } else ck = g_strndup(s, s2-s);	
+      g_assert(ck);
+      if (*ck) {
+        fprintf(f, "\"%s\" cookie: \"%s\"\n", sp->all_names[0], sp->user_cookie);
+      }
+      g_free(ck);
+      s = s2 ? s2+1 : NULL;
+    }
+    if (sp->backend_type == BACKEND_TYPE_POP && !str_is_empty(sp->pop3_user)) {
+      fprintf(f, "\"%s\" user: \"%s\" pass:\"%s\"\n", sp->all_names[0], sp->pop3_user, sp->pop3_pass);
+    }
+  }
+}
+
+void
+prefs_write_to_file(GeneralPrefs *p, FILE *f) {
+  char default_ua[1024];
+  GeneralPrefs _default_p, *default_p;
+  SitePrefs _default_sp, *default_sp;
+  int site_num;
+
+  /* prefs par defaut, pour reperer les valeurs modifi�es */
+  memset(&_default_p, 0, sizeof(_default_p));
+  memset(&_default_sp, 0, sizeof(_default_sp));
+  wmcc_prefs_set_default(&_default_p);
+  wmcc_site_prefs_set_default(&_default_sp, 1);
+  default_p = &_default_p; default_sp = &_default_sp;
+
+  coincoin_default_useragent(default_ua, 1024);
+  G_SAVEINT(OPT_verbosity_underpants, verbosity_underpants);
+  G_SAVEINT(OPT_verbosity_http, verbosity_http);
+  G_SAVESTR(OPT_font_encoding, font_encoding);
+  G_SAVEINT(OPT_tribunenews_max_refresh_delay, max_refresh_delay);
+  G_SAVEINT(OPT_tribunenews_switch_off_coincoin_delay, switch_off_coincoin_delay);
+  G_SAVEBOOL(OPT_tribune_troll_detector, enable_troll_detector);
+#ifdef HAVE_WMCOINCOIN_PLAYER  
+  G_SAVEBOOL(OPT_board_auto_dl_pictures, board_auto_dl_pictures);
+  G_SAVEBOOL(OPT_board_enable_hfr_pictures, board_enable_hfr_pictures);
+#endif
+  G_SAVESTR(OPT_tribune_post_cmd, post_cmd[0]);
+  G_SAVEBOOL(OPT_tribune_post_cmd_enabled, post_cmd_enabled[0]);
+  G_SAVESTR(OPT_tribune_post_cmd2, post_cmd[1]);
+  G_SAVEBOOL(OPT_tribune_post_cmd2_enabled, post_cmd_enabled[1]);
+  G_SAVESTR(OPT_tribune_archive, board_scrinechote);
+  G_SAVECOL(OPT_dock_bg_color, dock_bgcolor);
+  G_SAVESTR(OPT_dock_bg_pixmap, dock_bgpixmap);
+  G_SAVESTR(OPT_dock_skin_pixmap, dock_skin_pixmap);
+  G_SAVECOL(OPT_dock_fg_color, dock_fgcolor);
+  G_SAVEBOOL(OPT_dock_draw_border,draw_border);
+  G_SAVEBOOL(OPT_dock_iconwin,use_iconwin);
+  G_SAVEBOOL(OPT_palmipede_override_wmanager, palmipede_override_redirect);
+  G_SAVEBOOL(OPT_palmipede_enable_scroll_wheel_for_boulets, palmipede_enable_scroll_wheel_for_boulets);
+  G_SAVEBOOL(OPT_dock_use_balloons,use_balloons);
+  G_SAVEBOOL(OPT_dock_auto_swallow,auto_swallow);
+  G_SAVESTR(OPT_dock_balloons_font_family,balloon_fn_family);
+  G_SAVEINT(OPT_dock_balloons_font_size,balloon_fn_size);
+
+  G_SAVEBOOL(OPT_balltrap_enable, hunt_opened);
+  G_SAVEINT(OPT_balltrap_max_ducks, hunt_max_duck);
+
+  G_SAVEPOS(OPT_dock_pos, dock_xpos, dock_ypos);
+
+  G_SAVEBOOL(OPT_dock_start_in_boss_mode, start_in_boss_mode);
+  G_SAVESTR(OPT_palmipede_default_message, coin_coin_message);
+  G_SAVESTR(OPT_http_browser,browser_cmd);
+  G_SAVESTR(OPT_http_browser2,browser2_cmd);
+  G_SAVESTR(OPT_http_gogole_search_url, gogole_search_url);
+  G_SAVESTR(OPT_http_wikipedia_search_url, wikipedia_search_url);
+  G_SAVEINT(OPT_http_timeout, http_timeout);
+  G_SAVEINT(OPT_http_inet_ip_version, http_inet_ip_version);
+  G_SAVESTR(OPT_pinnipede_font_family,pp_fn_family);
+  G_SAVEINT(OPT_pinnipede_font_size,pp_fn_size);
+  G_SAVEBOOL(OPT_dock_disable_xft_antialiasing, disable_xft_antialiasing);
+  G_SAVEBOOL(OPT_pinnipede_start_in_transparency_mode,pp_start_in_transparency_mode);
+  G_SAVEBOOL(OPT_pinnipede_use_fake_real_transparency,use_fake_real_transparency);
+  G_SAVEBOOL(OPT_pinnipede_use_classical_tabs,pp_use_classical_tabs);
+  G_SAVEBOOL(OPT_pinnipede_use_colored_tabs,pp_use_colored_tabs);
+  G_SAVEINT(OPT_pinnipede_tabs_position,pp_tabs_pos);
+  G_SAVEBOOL(OPT_pinnipede_hungry_boitakon,hungry_boitakon);
+
+  if (memcmp(&p->pp_transparency, &default_p->pp_transparency, sizeof(p->pp_transparency))) {
+    fprintf(f, "%s: ", wmcc_options_strings[OPT_pinnipede_transparency]);
+    switch (p->pp_transparency.type) {
+    case FULL_TRANSPARENCY: fprintf(f, "full\n"); break;
+    case SHADING: fprintf(f, "shading %d %d\n", 
+			  p->pp_transparency.shade.luminosite,
+			  p->pp_transparency.shade.assombrissement); break;
+    case TINTING: fprintf(f, "tinting %06x %06x\n", 
+			  p->pp_transparency.tint.black,
+			  p->pp_transparency.tint.white); break;
+    default: g_assert(0); break;
+    }
+  }
+  G_SAVEBICOL(OPT_pinnipede_emph_color, pp_emph_color);
+  G_SAVEBICOL(OPT_pinnipede_sel_bgcolor, pp_sel_bgcolor);
+  G_SAVEBICOL(OPT_pinnipede_popup_fgcolor, pp_popup_fgcolor);
+  G_SAVEBICOL(OPT_pinnipede_popup_bgcolor, pp_popup_bgcolor);
+  G_SAVEBICOL(OPT_pinnipede_buttonbar_bgcolor, pp_buttonbar_bgcolor);
+  G_SAVEBICOL(OPT_pinnipede_buttonbar_fgcolor, pp_buttonbar_fgcolor);
+  G_SAVEBICOL(OPT_pinnipede_buttonbar_msgcnt_color, pp_buttonbar_msgcnt_color);
+  G_SAVEBICOL(OPT_pinnipede_buttonbar_updlcnt_color, pp_buttonbar_updlcnt_color);
+  G_SAVEBICOL(OPT_pinnipede_buttonbar_progressbar_color, pp_buttonbar_progressbar_color);
+  G_SAVEBICOL(OPT_pinnipede_hilight_my_msg_color, pp_my_msg_color);
+  G_SAVEBICOL(OPT_pinnipede_hilight_answer_my_msg_color, pp_answer_my_msg_color);
+  G_SAVEBICOL(OPT_pinnipede_hilight_keyword_color0, pp_keyword_color[0]);
+  G_SAVEBICOL(OPT_pinnipede_hilight_keyword_color1, pp_keyword_color[1]);
+  G_SAVEBICOL(OPT_pinnipede_hilight_keyword_color2, pp_keyword_color[2]);
+  G_SAVEBICOL(OPT_pinnipede_hilight_keyword_color3, pp_keyword_color[3]);
+  G_SAVEBICOL(OPT_pinnipede_hilight_keyword_color4, pp_keyword_color[4]);
+  G_SAVEBICOL(OPT_pinnipede_plopify_color, pp_plopify_color);
+  G_SAVEBICOL(OPT_scrollcoin_bg_color,sc_bg_color);
+  G_SAVEBICOL(OPT_scrollcoin_bg_light_color,sc_bg_light_color);
+  G_SAVEBICOL(OPT_scrollcoin_bg_dark_color,sc_bg_dark_color);
+  G_SAVEBICOL(OPT_scrollcoin_arrow_normal_color,sc_arrow_normal_color);
+  G_SAVEBICOL(OPT_scrollcoin_arrow_emphasized_color,sc_arrow_emphasized_color);
+  G_SAVEBICOL(OPT_scrollcoin_bar_color,sc_bar_color);
+  G_SAVEBICOL(OPT_scrollcoin_bar_light_color,sc_bar_light_color);
+  G_SAVEBICOL(OPT_scrollcoin_bar_dark_color, sc_bar_dark_color);
+  G_SAVEPOS(OPT_pinnipede_location,pp_xpos, pp_ypos);
+  G_SAVEPOS(OPT_pinnipede_dimensions,pp_width, pp_height);
+  G_SAVEBOOL(OPT_pinnipede_buttons,pp_minibar_on);
+  G_SAVEBOOL(OPT_pinnipede_show_tags,pp_html_mode);
+  G_SAVEBOOL(OPT_pinnipede_show_seconds,pp_show_sec_mode);
+  G_SAVEINT(OPT_pinnipede_nick_mode,pp_nick_mode);
+  G_SAVEBOOL(OPT_pinnipede_show_troll_score,pp_trollscore_mode);
+  G_SAVEKL(OPT_pinnipede_plop_keywords,plopify_key_list);
+  G_SAVEKL(OPT_pinnipede_hilight_keywords,hilight_key_list);
+  G_SAVESTRLST(OPT_pinnipede_plop_words,plop_words,nb_plop_words);
+
+  {
+    MiniUARule *r;
+    for (r = p->miniuarules.first; r; r=r->next) {
+      char *s = miniuarule_to_string(r);
+      fprintf(f, "%s: %s\n", wmcc_options_strings[OPT_board_miniua_rule], s);
+      g_free(s);
+    }
+  }
+
+  {
+    URLReplacement *ur;
+    for (ur = p->url_repl.first; ur; ur=ur->next) {
+      fprintf(f, "%s: \"%s\" => \"%s\"\n", wmcc_options_strings[OPT_pinnipede_url_replace], 
+	      ur->key, ur->repl);
+    }
+  }
+
+  G_SAVEBOOL(OPT_pinnipede_auto_open,pinnipede_open_on_start);
+
+  G_SAVEBOOL(OPT_spell_enable,ew_do_spell);
+  G_SAVESTR(OPT_spell_cmd,ew_spell_cmd);
+  G_SAVESTR(OPT_spell_dict,ew_spell_dict);
+
+  //g_print("nb_sites = %d\n", Prefs->nb_sites);
+  for (site_num = 0; site_num < Prefs->nb_sites; site_num++) {
+    SitePrefs *sp = Prefs->site[site_num];
+    int i;
+    //g_print("site = %s\n", sp->all_names[0]);
+    switch (sp->backend_type) {
+    case BACKEND_TYPE_BOARD:
+      fprintf(f, "%s: ", wmcc_options_strings[OPT_board_site]); break;
+    case BACKEND_TYPE_RSS:
+      fprintf(f, "%s: ", wmcc_options_strings[OPT_rss_site]); break;
+    case BACKEND_TYPE_POP:
+      fprintf(f, "%s: ", wmcc_options_strings[OPT_pop_site]); break;
+    default: assert(0);
+    }
+    for (i=0; i < MAX(4,sp->nb_names); i++) if (sp->all_names[i] && strlen(sp->all_names[i])) { fprintf(f, "%s \"%s\" ", i==0?"":",",sp->all_names[i]); }
+    fprintf(f,"\n");
+    
+    SP_SAVEBOOL(OPTS_check_board, check_board);
+    SP_SAVEBOOL(OPTSG_rss_ignore_description, rss_ignore_description);
+    if (sp->locale != default_sp->locale) 
+      fprintf(f, ".%s: %s\n", DOTIFY(OPTSG_locale), sp->locale == locFR ? "fr" : "en");
+    SP_SAVEINT(OPTSG_tribune_delay, board_check_delay);
+    SP_SAVEINT(OPTSG_tribune_max_messages, board_max_msg);
+    SP_SAVEINT(OPTSG_backend_flavour, backend_flavour);
+    SP_SAVESTR(OPTSG_tribune_wiki_emulation, board_wiki_emulation);
+    SP_SAVESTR(OPTSG_palmipede_username, user_name);
+    SP_SAVESTR(OPTSG_palmipede_userlogin, user_login);
+    if (sp->user_agent == NULL || 
+        (strcmp(sp->user_agent, default_ua) && strcmp(sp->user_agent, default_sp->user_agent))) {
+      SP_SAVESTR(OPTSG_palmipede_useragent, user_agent);
+    }
+    SP_SAVEINT(OPTSG_palmipede_msg_max_length, palmi_msg_max_len);
+    SP_SAVEINT(OPTSG_palmipede_useragent_max_length, palmi_ua_max_len);
+    SP_SAVESTR(OPTSG_backend_url, backend_url);
+    SP_SAVESTR(OPTSG_post_url, post_url);
+    SP_SAVESTR(OPTSG_post_template, post_template);
+    if (sp->proxy_name && strlen(sp->proxy_name)) {
+      fprintf(f, ".%s: %s:%d\n", DOTIFY(OPTSG_http_proxy), sp->proxy_name, sp->proxy_port);
+      if (sp->proxy_auth_user && strlen(sp->proxy_auth_user) &&
+	  sp->proxy_auth_pass && strlen(sp->proxy_auth_pass)) {
+	fprintf(f, ".%s: %s:%s\n", DOTIFY(OPTSG_http_proxy_auth), sp->proxy_auth_user, sp->proxy_auth_pass);
+      } 
+    }
+    SP_SAVEBOOL(OPTSG_http_proxy_use_nocache, proxy_nocache);
+    SP_SAVEBOOL(OPTSG_http_use_if_modified_since, use_if_modified_since);
+    SP_SAVECOL(OPTSG_pinnipede_bg_color, pp_bgcolor);
+    SP_SAVEBICOL(OPTSG_pinnipede_fg_color, pp_fgcolor);
+    SP_SAVEBICOL(OPTSG_pinnipede_clock_color, pp_tstamp_color);
+    SP_SAVEBICOL(OPTSG_pinnipede_useragent_color, pp_useragent_color);
+    SP_SAVEBICOL(OPTSG_pinnipede_login_color, pp_login_color);
+    SP_SAVEBICOL(OPTSG_pinnipede_url_color, pp_url_color);
+    SP_SAVEBICOL(OPTSG_pinnipede_visited_url_color, pp_visited_url_color);
+    SP_SAVEBICOL(OPTSG_pinnipede_trollscore_color, pp_trollscore_color);
+    SP_SAVEBICOL(OPTSG_pinnipede_strike_color, pp_strike_color);
+    SP_SAVEFONTSTYLE(OPTSG_pinnipede_clock_style, pp_clock_style);
+    SP_SAVEFONTSTYLE(OPTSG_pinnipede_login_style, pp_login_style);
+    SP_SAVEFONTSTYLE(OPTSG_pinnipede_useragent_style, pp_ua_style);
+    SP_SAVEBOOL(OPTSG_pinnipede_use_AM_PM, use_AM_PM);
+    //SP_SAVEBOOL(OPTSG_board_auto_refresh, board_auto_refresh);
+    SP_SAVEBOOL(OPTSG_pinnipede_mark_id_gaps, mark_id_gaps);
+    SP_SAVEBOOL(OPTS_balltrap_enable, hunt_opened_on_site);
+  }
+}
+
+int
+save_prefs_as(gchar *filename, int do_backup) {
+  FILE *f, *f_auth;
+  char *tmpfname, *tmpfname_auth;
+  char *filename_auth = g_strdup_printf("%s.auth", filename);
+  if (do_backup) {
+    tmpfname = g_strdup_printf("%s_wmccc_tmp", filename);
+    tmpfname_auth = g_strdup_printf("%s_wmccc_tmp.auth", filename);
+  } else {
+    tmpfname = strdup(filename);
+    tmpfname_auth = strdup(filename_auth);
+  }
+
+
+  f = open_wfile(tmpfname);f_auth = open_wfile(tmpfname_auth);
+  if (f == NULL) {
+    char *errmsg = g_strdup_printf("Can't save '%s' : %s", tmpfname, strerror(errno));
+    quick_message(errmsg);
+    g_free(errmsg);
+    return -1;
+  } else if (f_auth == NULL) {
+    char *errmsg = g_strdup_printf("Can't save '%s' : %s", tmpfname_auth, strerror(errno));
+    quick_message(errmsg);
+    g_free(errmsg);
+    return -1;
+  } else {
+    char *backup[4], *backup_auth[4];
+    int i;
+    fprintf(f, "### -*- mode: wmccoptions -*-\n### edited by wmccc -- look for *.wmccc.*.bak for backups\n");
+    prefs_write_to_file(Prefs, f);
+    fclose(f);
+    fprintf(f_auth, "### -*- mode: wmccoptions -*-\n#\n");
+    auth_prefs_write_to_file(Prefs, f_auth);
+    fclose(f_auth);
+    if (do_backup) {
+      backup[0] = filename; backup_auth[0] = filename_auth;
+      backup[1] = g_strdup_printf("%s.wmccc.bak", filename);
+      backup[2] = g_strdup_printf("%s.wmccc.2.bak", filename);
+      backup[3] = g_strdup_printf("%s.wmccc.3.bak", filename);
+      backup_auth[1] = g_strdup_printf("%s.wmccc.auth.bak", filename);
+      backup_auth[2] = g_strdup_printf("%s.wmccc.auth.2.bak", filename);
+      backup_auth[3] = g_strdup_printf("%s.wmccc.auth.3.bak", filename);
+      for (i=3; i >= 1; i--) {
+	rename(backup[i-1], backup[i]);
+	rename(backup_auth[i-1], backup_auth[i]);
+      }
+    
+      if (rename(tmpfname, filename) == -1) {
+	char *errmsg = g_strdup_printf("Couldn't rename '%s' to '%s' : %s", tmpfname, filename, strerror(errno));
+	quick_message(errmsg);
+	g_free(errmsg);
+	rename(backup[1], backup[0]);
+      }
+      if (rename(tmpfname_auth, filename_auth) == -1) {
+	char *errmsg = g_strdup_printf("Couldn't rename '%s' to '%s' : %s", tmpfname_auth, filename_auth, strerror(errno));
+	quick_message(errmsg);
+	g_free(errmsg);
+	rename(backup_auth[1], backup_auth[0]);
+      }
+      for (i=1; i < 4; i++) {
+	g_free(backup[i]);
+	g_free(backup_auth[i]);
+      }
+    }
+  }
+  g_free(tmpfname);
+  g_free(tmpfname_auth);
+  g_free(filename_auth);
+  return 0;
+}
+
+int apply_prefs() {
+  if (save_prefs_as(glob.tmp_options_file, 0) == 0) {
+    g_assert(glob.wmcc_pid > 0);
+    kill(glob.wmcc_pid, SIGUSR2);
+    return 0;
+  } else g_assert(0);
+  return 1;
+}
+
+int save_prefs() {
+  return save_prefs_as(glob.options_file,1);
+}
+
diff --git a/src/wmccc_support.c b/src/wmccc_support.c
new file mode 100644
index 0000000..16c56a1
--- /dev/null
+++ b/src/wmccc_support.c
@@ -0,0 +1,144 @@
+/*
+ * DO NOT EDIT THIS FILE - it is generated by Glade.
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <string.h>
+#include <stdio.h>
+
+#include <gtk/gtk.h>
+
+#include "wmccc_support.h"
+
+GtkWidget*
+lookup_widget                          (GtkWidget       *widget,
+                                        const gchar     *widget_name)
+{
+  GtkWidget *parent, *found_widget;
+
+  for (;;)
+    {
+      if (GTK_IS_MENU (widget))
+        parent = gtk_menu_get_attach_widget (GTK_MENU (widget));
+      else
+        parent = widget->parent;
+      if (!parent)
+        parent = (GtkWidget*) g_object_get_data (G_OBJECT (widget), "GladeParentKey");
+      if (parent == NULL)
+        break;
+      widget = parent;
+    }
+
+  found_widget = (GtkWidget*) g_object_get_data (G_OBJECT (widget),
+                                                 widget_name);
+  if (!found_widget)
+    g_warning ("Widget not found: %s", widget_name);
+  return found_widget;
+}
+
+static GList *pixmaps_directories = NULL;
+
+/* Use this function to set the directory containing installed pixmaps. */
+void
+add_pixmap_directory                   (const gchar     *directory)
+{
+  pixmaps_directories = g_list_prepend (pixmaps_directories,
+                                        g_strdup (directory));
+}
+
+/* This is an internally used function to find pixmap files. */
+static gchar*
+find_pixmap_file                       (const gchar     *filename)
+{
+  GList *elem;
+
+  /* We step through each of the pixmaps directory to find it. */
+  elem = pixmaps_directories;
+  while (elem)
+    {
+      gchar *pathname = g_strdup_printf ("%s%s%s", (gchar*)elem->data,
+                                         G_DIR_SEPARATOR_S, filename);
+      if (g_file_test (pathname, G_FILE_TEST_EXISTS))
+        return pathname;
+      g_free (pathname);
+      elem = elem->next;
+    }
+  return NULL;
+}
+
+/* This is an internally used function to create pixmaps. */
+GtkWidget*
+create_pixmap                          (GtkWidget       *widget,
+                                        const gchar     *filename)
+{
+  gchar *pathname = NULL;
+  GtkWidget *pixmap;
+
+  if (!filename || !filename[0])
+      return gtk_image_new ();
+
+  pathname = find_pixmap_file (filename);
+
+  if (!pathname)
+    {
+      g_warning (_("Couldn't find pixmap file: %s"), filename);
+      return gtk_image_new ();
+    }
+
+  pixmap = gtk_image_new_from_file (pathname);
+  g_free (pathname);
+  return pixmap;
+}
+
+/* This is an internally used function to create pixmaps. */
+GdkPixbuf*
+create_pixbuf                          (const gchar     *filename)
+{
+  gchar *pathname = NULL;
+  GdkPixbuf *pixbuf;
+  GError *error = NULL;
+
+  if (!filename || !filename[0])
+      return NULL;
+
+  pathname = find_pixmap_file (filename);
+
+  if (!pathname)
+    {
+      g_warning (_("Couldn't find pixmap file: %s"), filename);
+      return NULL;
+    }
+
+  pixbuf = gdk_pixbuf_new_from_file (pathname, &error);
+  if (!pixbuf)
+    {
+      fprintf (stderr, "Failed to load pixbuf file: %s: %s\n",
+               pathname, error->message);
+      g_error_free (error);
+    }
+  g_free (pathname);
+  return pixbuf;
+}
+
+/* This is used to set ATK action descriptions. */
+void
+glade_set_atk_action_description       (AtkAction       *action,
+                                        const gchar     *action_name,
+                                        const gchar     *description)
+{
+  gint n_actions, i;
+
+  n_actions = atk_action_get_n_actions (action);
+  for (i = 0; i < n_actions; i++)
+    {
+      if (!strcmp (atk_action_get_name (action, i), action_name))
+        atk_action_set_description (action, i, description);
+    }
+}
+
diff --git a/src/wmccc_support.h b/src/wmccc_support.h
new file mode 100644
index 0000000..a32649e
--- /dev/null
+++ b/src/wmccc_support.h
@@ -0,0 +1,69 @@
+/*
+ * DO NOT EDIT THIS FILE - it is generated by Glade.
+ */
+
+#ifdef HAVE_CONFIG_H
+#  include <config.h>
+#endif
+
+#include <gtk/gtk.h>
+
+/*
+ * Standard gettext macros.
+ */
+#ifdef ENABLE_NLS
+#  include <libintl.h>
+#  undef _
+#  define _(String) dgettext (PACKAGE, String)
+#  define Q_(String) g_strip_context ((String), gettext (String))
+#  ifdef gettext_noop
+#    define N_(String) gettext_noop (String)
+#  else
+#    define N_(String) (String)
+#  endif
+#else
+#  define textdomain(String) (String)
+#  define gettext(String) (String)
+#  define dgettext(Domain,Message) (Message)
+#  define dcgettext(Domain,Message,Type) (Message)
+#  define bindtextdomain(Domain,Directory) (Domain)
+#  define _(String) (String)
+#  define Q_(String) g_strip_context ((String), (String))
+#  define N_(String) (String)
+#endif
+
+
+/*
+ * Public Functions.
+ */
+
+/*
+ * This function returns a widget in a component created by Glade.
+ * Call it with the toplevel widget in the component (i.e. a window/dialog),
+ * or alternatively any widget in the component, and the name of the widget
+ * you want returned.
+ */
+GtkWidget*  lookup_widget              (GtkWidget       *widget,
+                                        const gchar     *widget_name);
+
+
+/* Use this function to set the directory containing installed pixmaps. */
+void        add_pixmap_directory       (const gchar     *directory);
+
+
+/*
+ * Private Functions.
+ */
+
+/* This is used to create the pixmaps used in the interface. */
+GtkWidget*  create_pixmap              (GtkWidget       *widget,
+                                        const gchar     *filename);
+
+/* This is used to create the pixbufs used in the interface. */
+GdkPixbuf*  create_pixbuf              (const gchar     *filename);
+
+/* This is used to set ATK action descriptions. */
+void        glade_set_atk_action_description (AtkAction       *action,
+                                              const gchar     *action_name,
+                                              const gchar     *description);
+
diff --git a/src/wmcoincoin.c b/src/wmcoincoin.c
new file mode 100644
index 0000000..429210d
--- /dev/null
+++ b/src/wmcoincoin.c
@@ -0,0 +1,2349 @@
+
+/*
+    wmCoinCoin, the stupidest WindowMaker dock applet
+    Copyright (C) 2001  Julien Pommier
+
+    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., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA
+
+
+
+ */
+/*
+  rcsid=$Id: wmcoincoin.c,v 1.97 2005/09/27 16:59:13 pouaite Exp $
+  ChangeLog:
+  $Log: wmcoincoin.c,v $
+  Revision 1.97  2005/09/27 16:59:13  pouaite
+  2.5.1c
+
+  Revision 1.96  2005/09/26 21:40:24  pouaite
+  v 2.5.1b
+
+  Revision 1.95  2005/09/25 12:08:55  pouaite
+  ca marche encore ca ?
+
+  Revision 1.94  2004/05/16 12:54:30  pouaite
+  250c
+
+  Revision 1.93  2004/04/28 22:19:01  pouaite
+  bugfixes dae + des trucs que j'ai oublie
+
+  Revision 1.92  2004/04/26 20:32:33  pouaite
+  roger demande le commit
+
+  Revision 1.91  2004/04/18 15:37:29  pouaite
+  un deux un deux
+
+  Revision 1.90  2004/03/07 13:51:12  pouaite
+  commit du dimanche
+
+  Revision 1.89  2004/03/03 23:00:40  pouaite
+  commit du soir
+
+  Revision 1.88  2004/02/29 19:01:27  pouaite
+  et hop
+
+  Revision 1.87  2004/02/29 15:01:20  pouaite
+  May the charles bronson spirit be with you
+
+  Revision 1.86  2003/08/26 21:50:48  pouaite
+  2.6.4b au mastic
+
+  Revision 1.85  2003/07/20 22:22:28  pouaite
+  ce commit est dedie a Pierre Tramo
+
+  Revision 1.84  2003/06/29 23:58:39  pouaite
+  suppression de l'overrideredirect du palmi et ajout de pinnipede_totoz.c et wmcoincoin-totoz-get etc
+
+  Revision 1.83  2003/06/25 20:18:21  pouaite
+  support xinerama qui marche
+
+  Revision 1.82  2003/06/24 22:27:57  pouaite
+  speciale dedicace a nos amis de l'ile de beaute
+
+  Revision 1.81  2003/06/21 14:48:45  pouaite
+  g cho
+
+  Revision 1.80  2003/06/09 16:42:29  pouaite
+  pan pan
+
+  Revision 1.79  2003/03/12 21:09:50  pouaite
+  mega patch de gle + micro fix du referer
+
+  Revision 1.78  2003/03/02 17:56:26  pouaite
+  wmcoincoin-2.4.4a.tar.gz is ready for distribution
+
+  Revision 1.77  2003/03/02 14:41:22  pouaite
+  ce commit est d�di� � la m�moire de jacques martin
+
+  Revision 1.76  2003/03/01 17:31:22  pouaite
+  compat ipv6 a tester
+
+  Revision 1.75  2003/02/28 19:08:44  pouaite
+  trucs divers
+
+  Revision 1.74  2003/01/12 18:42:19  pouaite
+  et une baguette bien cuite pour le monsieur avec l'ornythorinque
+
+  Revision 1.73  2003/01/11 17:44:10  pouaite
+  ajout de stats/coinping sur les sites
+
+  Revision 1.72  2003/01/11 14:10:07  pouaite
+  fix du palmi pour xf 4.3
+
+  Revision 1.71  2002/12/20 15:49:53  pouaite
+  prout 2.4.2b ?
+
+  Revision 1.70  2002/12/20 11:26:35  pouaite
+  deux trois conneries
+
+  Revision 1.69  2002/11/11 15:26:43  pouaite
+  fix soulignement et strike avec les span
+
+  Revision 1.68  2002/10/16 20:41:45  pouaite
+  killall toto
+
+  Revision 1.67  2002/10/13 23:30:49  pouaite
+  plop
+
+  Revision 1.66  2002/10/05 18:08:15  pouaite
+  ajout menu contextuel + fix de la coloration des boutons du wmccc
+
+  Revision 1.65  2002/09/21 22:51:01  pouaite
+  ajout du patch de shift pour le pdfm
+
+  Revision 1.64  2002/09/08 18:44:08  pouaite
+  mouaissssss
+
+  Revision 1.63  2002/09/08 14:28:45  pouaite
+  bugfixes salutaires
+
+  Revision 1.62  2002/09/07 16:21:16  pouaite
+  �a va releaser en douce
+
+  Revision 1.61  2002/09/05 23:11:58  pouaite
+  <blog>ce soir g mang� une omelette</blog>
+
+  Revision 1.60  2002/09/02 23:24:41  pouaite
+  bugfixes de la soiree
+
+  Revision 1.59  2002/09/01 23:54:56  pouaite
+  completurage du wmc3 et compatibilitation avec new.linuxfr
+
+  Revision 1.58  2002/08/31 21:26:46  pouaite
+  ajout du wmccc
+
+  Revision 1.57  2002/08/29 00:15:53  pouaite
+  cosm�tique et capillotraction
+
+  Revision 1.56  2002/08/28 00:42:32  pouaite
+  wmccc aware
+
+  Revision 1.55  2002/08/26 00:52:22  pouaite
+  coin coin coin
+
+  Revision 1.54  2002/08/22 00:10:14  pouaite
+  prout
+
+  Revision 1.53  2002/08/21 23:20:57  pouaite
+  coin
+
+  Revision 1.52  2002/08/21 01:11:49  pouaite
+  commit du soir, espoir
+
+  Revision 1.51  2002/08/19 00:21:29  pouaite
+  "troll du soir, espoir"
+
+  Revision 1.50  2002/08/18 20:52:15  pouaite
+  les locales des sites fonctionnent (c bon pour les news)
+
+  Revision 1.49  2002/08/18 19:00:28  pouaite
+  plop
+
+  Revision 1.48  2002/08/17 18:33:40  pouaite
+  grosse commition
+
+  Revision 1.47  2002/06/26 22:19:49  pouaite
+  ptit fix pour la tribune de f-cpu + patch de lordoric
+
+  Revision 1.46  2002/06/23 22:26:01  pouaite
+  bugfixes+support � deux francs des visuals pseudocolor
+
+  Revision 1.45  2002/06/23 10:44:05  pouaite
+  i18n-isation of the coincoin(kwakkwak), thanks to the incredible jjb !
+
+  Revision 1.44  2002/06/01 17:54:04  pouaite
+  nettoyage
+
+  Revision 1.43  2002/05/27 18:39:14  pouaite
+  trucs du week-end + patch de binny
+
+  Revision 1.42  2002/05/13 05:52:18  pouaite
+  bugfix anti-segfault
+
+  Revision 1.41  2002/05/12 22:06:27  pouaite
+  grosses modifs dans http.c
+
+  Revision 1.40  2002/04/14 23:24:22  pouaite
+  re-fix pour kde ..
+
+  Revision 1.39  2002/04/13 11:55:19  pouaite
+  fix kde3 + deux trois conneries
+
+  Revision 1.38  2002/04/10 22:53:44  pouaite
+  un commit et au lit
+
+  Revision 1.37  2002/04/09 00:28:19  pouaite
+  quelques modifs faites dans un �tat d'h�b�tude avanc� /!\ travaux en cours /!\
+
+  Revision 1.36  2002/04/03 20:15:11  pouaite
+  plop
+
+  Revision 1.35  2002/04/01 22:56:03  pouaite
+  la pseudo-transparence du pinni, bugfixes divers, option tribune.backend_type
+
+  Revision 1.34  2002/04/01 01:39:38  pouaite
+  grosse grosse commition (cf changelog)
+
+  Revision 1.33  2002/03/23 10:37:29  pouaite
+  retournement de slip, merci lordoric
+
+  Revision 1.32  2002/03/21 22:53:07  pouaite
+  ajout d'une icone pour la fenetre du pinnipede et des news
+
+  Revision 1.31  2002/03/19 09:55:58  pouaite
+  bugfixes compilation
+
+  Revision 1.30  2002/03/18 22:46:49  pouaite
+  1 ou 2 bugfix mineurs, et surtout suppression de la dependance avec la libXpm .. un premier pas vers wmc� en 8bits
+
+  Revision 1.29  2002/03/10 22:45:36  pouaite
+  <mavie>dernier commit avant de passer la nuit dans le train</mavie> , sp�ciale d�dicace � shift et � son patch ;)
+
+  Revision 1.28  2002/03/09 19:45:52  pouaite
+  microbugfix du plopifieur et ajout d'une macro PATCH_LEVEL
+
+  Revision 1.27  2002/03/08 23:53:40  pouaite
+  derniers bugfixes pour la v2.3.6
+
+  Revision 1.26  2002/03/07 18:54:34  pouaite
+  raaa .. fix login_color (jjb) patch plop_words (estian) et bidouille pour le chunk encoding (a tester)
+
+  Revision 1.24  2002/03/05 21:04:28  pouaite
+  bugfixes suite � l'upgrade de dlfp [et retour au comportement � l'ancienne du clic sur les horloges pour les moules ronchonnes]
+
+  Revision 1.23  2002/03/03 10:10:04  pouaite
+  bugfixes divers et vari�s
+
+  Revision 1.22  2002/02/27 00:32:19  pouaite
+  modifs velues
+
+  Revision 1.21  2002/02/26 22:02:07  pouaite
+  bugfix gruikissime pour les pbs de lag sous cygwin
+
+  Revision 1.20  2002/02/26 09:18:23  pouaite
+  bugfixes divers
+
+  Revision 1.19  2002/02/24 22:13:57  pouaite
+  modifs pour la v2.3.5 (selection, scrollcoin, plopification, bugfixes)
+
+  Revision 1.18  2002/02/06 21:34:17  pouaite
+  coin coin
+
+  Revision 1.17  2002/02/02 23:49:17  pouaite
+  plop
+
+  Revision 1.16  2002/01/31 23:45:00  pouaite
+  plop
+
+  Revision 1.15  2002/01/20 22:49:38  pouaite
+  �a va releaser
+
+  Revision 1.14  2002/01/20 02:17:13  pouaite
+  modifs d'ordre esthetique (!) sans grand interet
+
+  Revision 1.13  2002/01/16 21:27:35  pouaite
+  gros coup de balai dans wmcoincoin.c qui s'est du coup splitt� en trois: wmcoincoin.c, dock.c et useragents_file.c
+
+  Revision 1.12  2002/01/16 10:34:21  pouaite
+  ptit patch glandium
+
+  Revision 1.11  2002/01/15 15:30:17  pouaite
+  rien d'interessant
+
+  Revision 1.10  2002/01/14 23:54:06  pouaite
+  reconnaissance des posts effectu� par l'utilisateur du canard (� suivre...)
+
+  Revision 1.9  2002/01/12 17:29:08  pouaite
+  support de l'iso8859-15 (euro..)
+
+  Revision 1.8  2002/01/10 09:18:23  pouaite
+  patch de jjb (ralentissement progressif des updates de la tribune en cas d'inactivit� du coincoin)
+
+  Revision 1.7  2002/01/10 09:03:06  pouaite
+  integration du patch de glandium (requetes http/1.1 avec header 'If-Modified-Since' --> coincoin plus gentil avec dacode)
+
+  Revision 1.6  2001/12/17 17:58:58  pouaite
+  bugfix plutot gruik du flamometre qui partait en nouille
+
+  Revision 1.5  2001/12/16 01:43:33  pouaite
+  filtrage des posts, meilleure gestion des posts multiples
+
+  Revision 1.4  2001/12/06 22:41:11  pouaite
+  patch de glandium (bugfix du mode asclock)
+
+  Revision 1.3  2001/12/02 18:07:03  pouaite
+  am�lioration du support de ispell avec un vilain hack + correction(..pas sur..) d'un bug de clignotement du flammometre
+
+*/
+
+/*
+  avertissement au lecteur...
+  c'est un bordel monstrueux, ce fichier est BEAUCOUP TROP GROS
+*/
+
+#define GLOBALS_HERE
+//#include <getopt.h>
+#include <signal.h>
+#include <time.h>
+#include <sys/time.h>
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <sys/stat.h>
+//#include <regex.h>
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+#include <X11/cursorfont.h>
+#include <X11/extensions/shape.h>
+#include <locale.h>
+#include <langinfo.h>
+#include <libintl.h>
+#define _(String) gettext (String)
+#include <stdarg.h>
+#include "coincoin.h"
+#include "spell_coin.h"
+#include "scrollcoin.h"
+#include "balltrap.h"
+
+#ifdef __CYGWIN__
+#include <pthread.h>
+#endif
+
+#include <sys/utsname.h> /* pour la fonction uname */
+
+#include "coin_util.h"
+#include "coin_xutil.h"
+#include "fontcoincoin.h"
+#include "http.h"
+#include "dock.h"
+#include "site.h"
+#include "kbcoincoin.h"
+
+/* quelques images */
+#include "../xpms/coin.xpm"
+#include "../xpms/weekday.xpm"
+#include "../xpms/month.xpm"
+#include "../xpms/clock.xpm"
+#include "../xpms/date.xpm"
+#include "../xpms/led.xpm"
+
+/* des vieilles variables globales qui feraient mieux de rentrer dans une jolie structure */
+
+GeneralPrefs Prefs;
+
+int opened_cnt; /* �a c'est de la bonne vieille variable qui date de la v0.9...*/
+
+Dock *_dock;
+
+Dock *get_dock() { return _dock; } /* et merde j'ai fini par la faire pour la chasse aux canards */
+/*
+   la fonction de la honte ...
+
+   ouverture d'une url dans un browser externe (avec une commande du type 'mozilla url &', execut�e par le shell)
+
+   url est une chaine de carateres (termin�e par un zero), de longueur
+   raisonnable, mais susceptible de contenir absolument n'importe quels caract�res.
+   Le principe est d'�chapper tous ceux qui sont susceptible d'etre interpretes par le shell.
+
+
+
+extrait de RATIONALE FOR SECURITY FILTER, d.wheeler
+
+
+les arguments bidons sont:
+  ballon_{x,y} : position d'affichage du ballon d'aide quand aucun browser externe n'a �t� d�fini
+  browser_num = 1 ou 2 -> utilisation de la commande Prefs.browser_cmd ou de la commande
+  alternative Prefs.browser2_cmd
+*/
+void
+open_url(const unsigned char *url, int balloon_x, int balloon_y, int browser_num)
+{
+  char hex[16] = "0123456789ABCDEF";
+#define CMDSZ 4096
+  char s[CMDSZ];
+#define SECSZ 2048
+  char secure_url[SECSZ];
+  int i,j;
+  char *bcmd;
+  static int wmcc_tic_cnt_last = 0;
+
+  if (ABS(wmcc_tic_cnt - wmcc_tic_cnt_last) < 10) {
+    myprintf("h� on se calme sur les urls !\n"); /* capote � souris qui cliquent 100 fois de suite */
+    return;
+  }
+  wmcc_tic_cnt_last = wmcc_tic_cnt;
+
+  if (url == NULL) return;
+
+  bcmd = ((browser_num & (~URL_YES_I_KNOW_WHAT_I_DO)) == 1) ? Prefs.browser_cmd : Prefs.browser2_cmd;
+
+  /* maintenant on est facho */
+  if (is_url(url) == -1 && (browser_num & URL_YES_I_KNOW_WHAT_I_DO) == 0) {
+    snprintf(s, CMDSZ, _("this url STINKS ! <b>%s</b> (neither ftp://, nor http://)<br>"
+           "You will have to launch it by hand (copy to the clipboard with a right click, etc.)"), url);
+    if (balloon_x != -1 && balloon_y != -1) {
+      balloon_show(_dock, balloon_x, balloon_y, 10, 10, s, 300);
+    } else {
+      fprintf(stderr, "wmcoincoin: %s\n", s);
+    }
+    return;
+  }
+
+  if (bcmd == NULL) {
+    snprintf(s, CMDSZ, _("You didn't define the external browser in ~/.wmcoincoin/options (%s), no need to click on the <b>[url]</b>..."),
+	     (browser_num == 1) ? "http.browser: thecommand" : "http.browser2: thecommand");
+    if (balloon_x > 0 && balloon_y > 0) {
+      balloon_show(_dock, balloon_x, balloon_y, 10, 10, s, 300);
+    } else {
+      fprintf(stderr, "wmcoincoin: %s\n", s);
+    }
+    return;
+  }
+
+
+      /* d'apres d.wheeler (et la rfc 1738,2396), une url est form�e de caract�res
+       - r�serv�s:                                ; / ? : @ & = + $ ,
+       - non r�serv�s:    A-Z, a-z, 0-9, et | | | | | | - _ . ! ~ * ' ( )
+
+       tous les caract�res qui ne sont pas 'r�serv�s' peuvent �tre hexencod�s en %XX.
+
+       toujours selon lui, la liste des caract�res interpr�tables par le shell est
+       (http://www.dwheeler.com/secure-programs/Secure-Programs-HOWTO/limit-call) :
+       & ; ` ' \ " | * ? ~ < > ^ ( ) [ ] { } $ \n \r
+
+
+       Les virgules et les parenth�ses fermantes dans une url sont susceptible d'etre mal interpret�es
+       par netscape quand on lui passe l'url en ligne de commande avec nestcape -remote openURL(http://blahblah, ddfdjh)
+      */
+
+  /*
+     FILTRE DEUX-EN-UN:
+     on hex-encode tous les caract�re qui ne sont pas les suivants:
+     ; / ? : @ & = + $ # % A-Z a-z 0-9 - _ . , et tout ce qui est inf�rieur � 0x20 est gicl�
+
+     ceci dit, on pourrait aussi refuser toute url contenant des caract�re devant �tre hexencod�s...
+
+     puis, les charact�res non alphanum�riques qui n'ont pas �t� hexencod�s sont backslash�s pour ne surtout pas
+     �tre interpret�s par /bin/sh
+  */
+  for (i=0, j=0; url[i] && j < SECSZ-3; i++) {
+    if (url[i] > ' ') { /* tout ce qui est ' ', '\r' '\n' '\t' passe � la trappe */
+      int alnum;
+      alnum = ((url[i]>='a' && url[i] <= 'z') ||
+             (url[i]>='A' && url[i] <= 'Z') ||
+             (url[i]>='0' && url[i] <= '9')) ? 1 : 0;
+      /* remarque: on hexencode un caract�re r�serv�, la virgule, mais ce n'est apparament pas g�nant */
+      if (alnum || strchr(";/?:@&=+$#%-_.", url[i])) {
+      if (alnum == 0 && url[i] != '.' && url[i] != '_' && url[i] != '/' && url[i] != ':') {
+        secure_url[j++] = '\\'; // on insere le backslash
+      }
+      secure_url[j++] = url[i];
+      } else {
+      secure_url[j++] = '%';
+      secure_url[j++] = hex[(url[i]>>4) & 0x0f];
+      secure_url[j++] = hex[(url[i]   ) & 0x0f];
+      }
+    }
+  }
+  secure_url[j] = 0;
+
+  assert(j>0 && j < SECSZ); //rhoo
+
+  /*
+    donc maintenant on a une jolie url toute propre, et qui *marche* contrairement
+     � la bouillie que j'avais fait dans coincoin 2.01
+  */
+
+  snprintf(s, CMDSZ, bcmd, secure_url, secure_url, secure_url, secure_url); /* on autorise au max 4 repetitions du '%s' dans le browser_cmd */
+
+  myfprintf(stderr, _("Spawning \"%<YEL %s>\"\n"), s);
+  /*
+    system fait appel � /bin/sh , mais on a backslash� tous les caract�res embetants
+  */
+  system(s);
+}
+
+int
+dock_find_xiscreen_num(Dock *dock, int x, int y) {
+  int i;
+  for (i=0; i < dock->nb_xiscreen; ++i) {
+    if (x >= dock->xiscreen[i].x_org && x < dock->xiscreen[i].x_org + dock->xiscreen[i].width &&
+        y >= dock->xiscreen[i].y_org && y < dock->xiscreen[i].y_org + dock->xiscreen[i].height)
+      return i;
+  }
+  return -1;
+}
+
+int
+dock_get_icon_pos(Dock *dock, int *iconx, int *icony)
+{
+  Window junkwin;
+  XWindowAttributes wa;
+
+  /* lecture de la position de wmcoincoin */
+  if (!XGetWindowAttributes(dock->display, DOCK_WIN(dock), &wa))
+    fprintf(stderr, _("Can't get window attributes.\n"));
+  XTranslateCoordinates (dock->display, DOCK_WIN(dock), wa.root, 
+			 -wa.border_width,
+			 -wa.border_width,
+			 iconx, icony, &junkwin);
+  return dock_find_xiscreen_num(dock,*iconx+32,*icony+32);
+}
+
+
+/* d�clenche la mise � jour du trolloscope, du pinnipede etc.. */
+void
+check_if_board_was_updated(Dock *dock)
+{
+  static int pix_trolloscope_refresh_cnt = 0;
+  if (flag_updating_board == 0) {
+    if (flag_board_updated) {
+      Site *s;
+      int i;
+
+      dock->trib_trollo_rate = 0;
+      dock->trib_trollo_score = 0;
+      for (s = dock->sites->list; s; s = s->next) {
+	if (s->board) {
+	  float tr, ts;
+	  board_get_trollo_rate(s->board, &tr, &ts);
+	  i++;
+	  dock->trib_trollo_rate  = MAX(dock->trib_trollo_rate, tr);
+	  dock->trib_trollo_score = MAX(dock->trib_trollo_score, ts);
+	}
+      }
+      BLAHBLAH(2,myprintf("%<red checkout_tribune>: %<WHT trollo_rate <- %f, trollo_score <- %f>\n", dock->trib_trollo_rate, dock->trib_trollo_score));
+
+      pix_trolloscope_refresh_cnt = 1000;
+
+      pp_set_board_updated(dock);
+
+      flag_board_updated = 0;
+    } 
+    if (++pix_trolloscope_refresh_cnt > 100) {
+      dock_update_pix_trolloscope(dock); pix_trolloscope_refresh_cnt = 0;
+    }
+  }
+}
+
+void
+wmcc_init_http_request(HttpRequest *r, SitePrefs *sp, char *url)
+{
+  http_request_init(r);
+  SplittedURL su;
+  int i;
+  if (str_startswith(url, "fucking_brocken")) {
+    myprintf("%<RED FIX THIS URL>: %<MAG %s>\n", url); exit(1);
+  }
+  if (split_url(url,&su)) assert(0);
+  
+  r->type = HTTP_GET;
+  r->telnet.host = strdup(su.host);
+  r->telnet.port = su.port;
+  r->host_path = NULL;
+  for (i=0; i < su.path_len; ++i) r->host_path = str_cat_printf(r->host_path, "/%s", su.path[i]);
+  if (r->host_path == NULL) r->host_path = strdup("/");
+  if (sp->proxy_name) {
+    r->proxy_name = strdup(sp->proxy_name);
+    if (sp->proxy_auth_user && sp->proxy_auth_pass) 
+      r->proxy_user_pass = str_printf("%s:%s", sp->proxy_auth_user, sp->proxy_auth_pass);
+    r->proxy_port = sp->proxy_port;
+  }
+  r->pragma_nocache = sp->proxy_nocache;
+  r->use_if_modified_since = sp->use_if_modified_since;
+  r->user_agent = strdup(app_useragent);
+  r->cookie = NULL;
+  r->p_last_modified = NULL;
+}
+
+void
+wmcc_init_http_request_with_cookie(HttpRequest *r, SitePrefs *sp, char *url)
+{
+  wmcc_init_http_request(r, sp, url);
+  if (sp->user_cookie) {
+    r->cookie = strdup(sp->user_cookie);
+  }
+}
+
+void
+wmcc_log_http_request(Site *s, HttpRequest *r)
+{
+  if (r->telnet.tic_cnt_tstamp != -1) {
+    int i,cnt=0;
+    float sum =0.;
+    s->http_ping_stat_buf[s->http_ping_stat_i] = 
+      (wmcc_tic_cnt - r->telnet.tic_cnt_tstamp)*0.001*WMCC_TIMER_DELAY_MS;
+    s->http_ping_stat_i = (s->http_ping_stat_i+1)%NB_HTTP_PING_STAT;
+    for (i = 0; i < NB_HTTP_PING_STAT; ++i) {
+      int ii = (s->http_ping_stat_i+i)%NB_HTTP_PING_STAT;
+      if (s->http_ping_stat_buf[ii] >= 0.) {
+	sum += (NB_HTTP_PING_STAT-i)*s->http_ping_stat_buf[ii]; 
+	cnt += (NB_HTTP_PING_STAT-i);
+      }
+    }
+    if (cnt) {
+      s->http_ping_stat = sum/cnt;
+    }
+  }
+}
+
+/* cette gruikerie vous est offerte par lordoric(c)(tm) */
+/*
+ * Tente de formater potablement un message d'erreur retourn� par le serveur
+ * C'est de la bricole pour linuxfr, hein !
+ * ( et ne pas oublier le free() sur le joli_message, oui c'est crados )
+ */
+char *formate_erreur( char *tribune, char *message_ignoble )
+{
+  char *debut, *fin, *erreur;
+  int taille;
+  char *joli_message = NULL;
+  int content = 0;
+  
+  debut = strstr( message_ignoble, "<div class=\"menubar\">" );
+  
+  if ( NULL != debut ) 
+    {
+      // Chouette, c'est bien le template de linuxfr
+      debut = strstr( debut, "</div>" ) + 6;
+      if ( NULL != debut ) {	
+        fin = strstr( debut, "<div" );
+        if ( NULL != fin ) {
+          taille = MIN(fin - debut,99999); // pour �viter le petit-suicide du coincoin dans str_printf
+          erreur = strdup( debut );
+          erreur[taille] = 0;	 // j'ai honte
+          
+          if ( NULL != strstr( erreur, "XP >=" )	)
+            {
+              printf("erreur=%s\nlen=%d", erreur,(int)strlen(erreur));
+              
+              joli_message = str_printf( _("[%s] Ooops, there must have been a little problem, "
+                                           "the server answered:<p>%s<p>%s"), tribune, erreur,
+                                         _("Check your cookies !") );
+            } else {
+            printf("erreur=%s\nlen=%d", erreur,(int)strlen(erreur)); fflush(stdout);
+              joli_message = str_printf( _("[%s] Ooops, there must have been a little problem, "
+                                           "the server answered:<p>%s"), tribune, erreur );
+            }
+          
+          // Ca a marche \o/
+          content = 1;
+        }
+      }
+    }
+  
+  /*  if ( ! content && strstr(message_ignoble, "Redirection vers http://www.nofrag.com"))
+    content = 1;
+  else printf("message ignoble=%s\n",message_ignoble);
+  */
+  if ( ! content ) {
+    joli_message = str_printf( _("[%s] Ooops, there must have been a little problem, "
+                                 "the server answered:<p>%s"), tribune, message_ignoble );	
+  }
+  return joli_message;
+}
+
+/* 
+   poste le message sur la tribune -- en tant que fonction 'lente' 
+   cette fonction est execut�e par la boucle principale
+ */
+void
+exec_coin_coin(Dock *dock, int sid, const char *ua, const char *msg_)
+{
+  HttpRequest r;
+  char *msg, *urlencod_msg;
+  char path[2048];
+  Site *site;
+
+  BLAHBLAH(1, myprintf(_("message posted: '%<YEL %s>\n"), msg_));
+  BLAHBLAH(1, myprintf(_("    (useragent: '%<CYA %s>\n"), ua));
+
+  site = sl_find_site_id(dock->sites, sid);
+  if (site == NULL) {
+    myprintf("?? unable to find site id %d (bug?)\n", sid);
+    return;
+  }
+  if (site->board == NULL) {
+    myprintf("???? site %s has no board ! (bug!)\n", site->prefs->site_name);
+    return;
+  }
+  if (str_is_empty(site->prefs->post_url)) {
+    char *s = str_printf("Hello, this is the wmcoincoin delivery agent.<p>"
+                         "I'm sorry to have to inform you that the message returned "
+                         "below could not be delivered to one or more destinations.<p>"
+                         "X-Reason: %s is read-only", site->prefs->site_name);
+    msgbox_show(dock, s); free(s); return;
+  }
+
+  pp_set_download_info(site->prefs->site_name, "posting ...");
+
+  msg = strdup(msg_);
+  convert_from_iso8859(site->board->encoding, &msg);
+  urlencod_msg = http_url_encode(msg,1); assert(urlencod_msg);
+  FREE_STRING(msg);
+  snprintf(path, 2048, "%s", site->prefs->post_url);
+
+  wmcc_init_http_request_with_cookie(&r, site->prefs, path);
+  /* Triton> Euh..., je ne suis pas sur de ce que je dois mettre ici,
+             je crois que je vais repousser � plus tard.
+             Bon, tonton zorel< a dit text/xml alors je mets text/xml 
+             hop, un truc de plus qui est fait ! Patch Accept: fini. \o/ */
+  r.accept = strdup("text/xml");
+  if (dock->post_anonyme && r.cookie) { free(r.cookie); r.cookie = NULL; }
+  r.type = HTTP_POST;
+  r.referer = strdup(path); url_au_coiffeur(r.referer, 1);
+  url_au_coiffeur(r.referer, 0); 
+  if (r.referer[strlen(r.referer)-1] != '/') strcat(r.referer,"/");/*y'a la place pour et comme dlfp impose le slash a la fin.. */
+
+  if (r.user_agent) { free(r.user_agent); r.user_agent = NULL; }
+  r.user_agent = strdup(ua);
+  r.post = str_printf(site->prefs->post_template, urlencod_msg);  free(urlencod_msg);
+
+  http_request_send(&r);
+  BLAHBLAH(1,myprintf("request sent, status=%<YEL %d> (%d)\n", r.telnet.error, flag_cancel_task));
+  wmcc_log_http_request(site, &r);
+  if (http_is_ok(&r)) {
+    /* trimer servira a nettoyer les reponses pas vides de zorel< son espace est chiant */
+    unsigned char *reponse, *trimer; 
+
+    reponse = http_read_all(&r, site->prefs->site_name);
+    trimer = reponse;
+    /* nettoyage des caracteres blancs : espace, tab, CR et LF */
+    while ((*trimer == ' ') ||
+           (*trimer == '\r') ||
+           (*trimer == '\t') ||
+           (*trimer == '\n')) trimer++;
+    if ( *trimer != 0 ) {
+			char *s;
+      s = formate_erreur( site->prefs->site_name, reponse ); 
+      if (s) { msgbox_show(dock, s); free(s); }
+      free(reponse);
+    }
+    if (!site->prefs->user_cookie && r.new_cookie) {
+        site->prefs->user_cookie = strdup(r.new_cookie);
+    }
+    http_request_close(&r);
+    site->http_success_cnt++;
+    site->http_recent_error_cnt = 0;
+    site->board->last_posted_id = r.post_id;
+ } else if (r.response != 302 && r.response != 406) {
+    char *s;
+    /* si la reponse n'est pas un 302 Found */
+    s = str_printf(_("[%s] Damned ! There has been an error<p>%s"), site->prefs->site_name, http_error());
+    msgbox_show(dock, s);
+    free(s);
+    site->http_error_cnt++;
+    site->http_recent_error_cnt++;
+  }
+
+  /* pour la reconnaissance des messages de ceux qui sont g�n�ralement authentifi�s et se lachent en anonyme de temps � autre */
+  if (dock->post_anonyme) { site->board->just_posted_anonymous = 1; }
+
+  dock->coin_coin_sent_decnt = 50; /* attention cette valeur est aussi utilis�e dans palmipede.c
+                                      (intervention de clipouille pour les corses qui s'endorment sur le clavier) */
+  pp_set_download_info(NULL,NULL);
+}
+
+/*
+il parait que ce type de chose est Mal(tm)
+int 
+flush_expose(Window w) {
+  XEvent dummy;
+  int i=0;
+
+  while (XCheckTypedWindowEvent(dock->display, w, Expose, &dummy))
+    i++;
+  return i;
+}
+*/
+
+int
+launch_wmccc(Dock *dock,...)
+{
+  va_list ap;
+  char *spid = str_printf("%u", (unsigned)getpid());
+  char *stmpopt = get_wmcc_tmp_options_filename();
+  char *args[100]; int nb_args = 0;
+  args[0] = "wmccc";
+  args[1] = "-wmccpid";
+  args[2] = spid;
+  args[3] = get_wmcc_options_filename();
+  args[4] = stmpopt;  
+  nb_args = 5;
+  va_start(ap,dock);
+  do {
+    args[nb_args++] = va_arg(ap, char*);    
+  } while (args[nb_args-1]);
+
+  if (dock->wmccc_pid < 1) {
+    switch ( dock->wmccc_pid = fork() ) {
+    case -1: /* arrrrg */
+      {
+	fprintf(stderr, _("Fork failed...(%s)..\n you sux\n"), strerror(errno));
+	free(stmpopt); free(spid);
+	return -1;
+      } break;
+    case 0: /* fiston (wmccc) */
+      {
+	int retExec;      
+	/*retExec = execlp("wmccc", "wmccc", "-wmccpid", spid, 
+			 get_wmcc_options_filename(), stmpopt, 
+			 NULL);*/
+        //myprintf("\n\n%<YEL CHANGER LE PATH DU%>%<MAG WMCCC>!!!!\n\n");
+        retExec = execvp("wmccc", args);
+	if( retExec==-1 ) {
+	  fprintf(stderr, _("Exec of wmccc failed...(%s)..\n you sux (wmccc not in path?)\n"), strerror(errno));
+	}
+	exit(retExec);
+      } break;
+    default: /* p�pa (wmcc) */
+      {
+        BLAHBLAH(1,printf("forked wmccc, pid=%d\n", dock->wmccc_pid));
+      } break;
+    }
+  } else {
+    printf("wmccc is already running .. pid = %d\n", dock->wmccc_pid);
+  }
+  va_end(ap);
+  free(args[3]);
+  free(spid);
+  free(stmpopt);
+  return 0;
+}
+
+/* sauvegarde ou restaure l'�tat du wmcc
+   (position du pinnipede/newswin) 
+   decalage horaire des boards
+*/
+void
+wmcc_save_or_restore_state(Dock *dock, int do_restore)
+{
+  char *fname;
+  FILE *f;
+  Site *site;
+
+  fprintf(stderr, "%s the coincoin state\n", do_restore ? "restoring":"saving");
+  fname = str_printf("%s/.wmcoincoin/wmcc_state", getenv("HOME")); assert(fname);
+  if (do_restore) {
+    f = fopen(fname, "r");
+  } else {
+    f = open_wfile(fname);
+  }
+  if (f==NULL) {
+    myfprintf(stderr, _("Unable to open '%s' for %s the state of the beast [%s]\n"), fname, do_restore ? _("reading") : _("writing"), strerror(errno));
+  } else {
+    if (do_restore == 0) {
+      fprintf(f, "#do not edit this file (but you are free to erase it)\n");
+      pp_save_state(dock,f);
+    } else {
+      char *bidon = str_fget_line(f); free(bidon);
+      pp_restore_state(dock,f);
+    }
+    fclose(f);
+  }
+  free(fname);
+
+  for (site=dock->sites->list; site; site = site->next) {
+    fname = str_printf("%s/.wmcoincoin/wmcc_state_%s", getenv("HOME"), site->prefs->site_name); 
+    assert(fname);
+    if ((f=fopen(fname, (do_restore ? "r" : "w")))==NULL) {
+      myfprintf(stderr, _("Unable to open '%s' for writing to save the state of the beast\n"), fname);
+    } else {
+      if (do_restore == 0) {
+	fprintf(f, "#do not edit this file\n");
+	site_save_state(dock,f, site);
+      } else {
+	char *bidon = str_fget_line(f); free(bidon);
+	site_restore_state(dock,f,site);
+      }
+      fclose(f);
+    }
+    free(fname);    
+  }
+  fname = get_wmcc_tmp_options_filename();
+  unlink(fname); free(fname);
+}
+
+/* declenchement des ballons d'aide...*/
+
+void check_balloons(Dock *dock) 
+{
+#ifndef DISABLE_BALLOONS
+  if (dock->mouse_win != None && !balloon_ismapped(dock)) {
+    if (dock->mouse_cnt >= 2000) {
+      int x,y;
+      
+      x = dock->mouse_x; y = dock->mouse_y;
+      if (dock->mouse_win == dock->win || dock->mouse_win == DOCK_WIN(dock)) {
+        int iconx, icony;
+        dock_get_icon_pos(dock, &iconx, &icony);
+        
+        if (dock->door_state == CLOSED && dock->horloge_mode == 0) {
+          char s[2048];
+          snprintf(s,2048,_("If the balltrap is enabled, you can:<br>"
+                            "- launch plastic ducks with <font color=blue><tt>Left Click</tt></font><br>"
+                            "- quickly kill all ducks with a <font color=blue><tt>Right Click</tt></font><br>"));
+          balloon_test(dock,x,y,iconx,icony,0,3,3,57,11,
+                       s);
+          balloon_test(dock,x,y,iconx,icony,0,TROLLOSCOPE_X,TROLLOSCOPE_Y,TROLLOSCOPE_WIDTH,TROLLOSCOPE_HEIGHT,
+                       _("<p align=center><b>This is a professionnal <font color=#a00000><i>Trolloscope</i></font></b></p>"
+                         "It displays symbols corresponding to the user-agents of the last messages posted on the board. "
+                         "The relationships between useragent and (colour,symbol) are defined in the <tt>~/.wmcoincoin/options</tt> file<br>"
+                         "<font color=blue><tt>Left Click</tt></font><tab>: displays the useragent<br>"
+                         "<font color=blue><tt>Middle Click</tt></font><tab>: instant refresh of all boards<br>"
+                         "Note: if you have given your authentication cookie to wmCoinCoin and if it "
+                         "blinks blue, then someone just answered to one of your posts. "));
+          balloon_test(dock,x,y,iconx,icony,0,dock->leds.led[0].xpos, dock->leds.led[0].ypos, 9, 4,
+                       _("When this led is blue, a <b>http transfer</b> is underway. "
+                         "A <b><font color=red>red</font></b> blinking indicates a problem during the last transfer.<br>"
+                         "<font color=blue><tt>Left Click</tt></font>: shows the last error message<br>"));
+          balloon_test(dock,x,y,iconx,icony,0,dock->leds.led[1].xpos, dock->leds.led[1].ypos, 9, 4,
+                       _("This led does no blink anymore.<br>" //blinks when you have just sent a message on the board, and it is waiting for its delivery.<br>"
+                         "It is blue when the message is being sent by the palmipede, and green half a second after the effective sending.<br>"
+                         "A click on this led allows to change the scroll speed of the trolloscope:<br>"
+                         "<font color=blue><tt>Left Click</tt></font><tab>: slower<br>"
+                         "<font color=blue><tt>Right Click</tt></font><tab>: faster<br>"
+                         "<font color=blue><tt>Middle Click</tt></font><tab>: change the trolloscope resolution"));
+          balloon_test(dock,x,y,iconx,icony,0,dock->leds.led[2].xpos, dock->leds.led[2].ypos, 9, 4,
+                       _("When this led blinks green, a new article is available.<br>"
+                         "<font color=blue><tt>Left Click</tt></font><tab>: see the article<br>"
+                         "<font color=blue><tt>Right Click</tt></font><tab>: mark all articles as read"));
+          balloon_test(dock,x,y,iconx,icony,0,dock->leds.led[3].xpos, dock->leds.led[3].ypos, 9, 4,
+                       _("When this led blinks green, you have just received a new message.<br>"
+                         "<font color=blue><tt>Left Click</tt></font>: see the new message with the external browser 1<br>"
+                         "<font color=blue><tt>Middle Click</tt></font>: see the new message with the external browser 2<br>"
+                         "<font color=blue><tt>Right Click</tt></font>: cancel all new messages"));
+          balloon_test(dock,x,y,iconx,icony,0,dock->leds.led[4].xpos, dock->leds.led[4].ypos, 11, 5,
+                       _("When the cursor is above this led, the level of the <font color=#a00000><i>Troll-o-meter</i></font> is displayed.<br>"
+                         "<font color=blue><tt>Left Click</tt></font><tab>: INVOKE THE POWER OF <b>C01N C01N</b> !<br>"
+                         "<font color=blue><tt>Right Click</tt></font><tab>: see the statistics of the board, and your XP and votes (if you have provided your authentication cookie)<br>"
+                         "<font color=blue><tt>Middle Click</tt></font>: re-read the <tt>~/.wmcoincoin/options</tt> file"));
+          balloon_test(dock,x,y,iconx,icony,0,3,49,57,12,
+                       _("The time of the last message received on the board, and the number of seconds that have past since<br>"
+                         "<font color=blue><tt>Left Click</tt></font>: show/hide the <b>palmipede editor</b><br>"
+                         "<font color=blue><tt>Right Click</tt></font>: show/hide the <b>pinnipede teletype</b>"));
+          
+        } else if (dock->door_state == OPENED && dock->horloge_mode == 0) {
+          balloon_test(dock,x,y,iconx,icony,2000,31,30,16,16,
+                       _("<b><i>DON'T PANIC</i></b>"));
+        }
+        //} else if (newswin_is_used(dock) && dock->mouse_win == newswin_get_window(dock)) {
+      } else if (editw_ismapped(dock->editw) && dock->mouse_win == editw_get_win(dock->editw)) {
+        editw_balloon_test(dock, dock->editw, x, y);
+      } else if (pp_ismapped(dock) && dock->mouse_win == pp_get_win(dock)) {
+        pp_check_balloons(dock, x, y);
+      }
+    } else if (dock->mouse_cnt > 1000) { /* l'antibloub doit se declencher un poil plus vite quand meme */
+      if (editw_ismapped(dock->editw))
+        editw_check_bloub(dock);
+    }
+  }
+#endif
+}
+
+
+void
+wmcoincoin_dispatch_events(Dock *dock)
+{
+  XEvent event;
+
+  /* grosse boucle */
+  while (XPending(dock->display)) {
+
+    XNextEvent(dock->display, &event);
+    if (XFilterEvent(&event, None))
+      continue;
+
+    /* des que la souris bouge, le ballon disparait */
+    balloon_check_event(dock, &event);
+    
+    /* 
+       c'est pas le switch principal des evenements, 
+       juste la gestion du declenchement des ballons
+       + on ramene le focus dans editw (quand elle est active)
+       + on remet � 0 le temps depuis le dernier d�placement */
+    switch (event.type) {
+    case EnterNotify: 
+      {
+	dock->mouse_x = event.xcrossing.x;
+	dock->mouse_y = event.xcrossing.y;
+	dock->mouse_cnt = 0;
+	dock->mouse_win = event.xany.window;
+        /*	if (editw_ismapped(dock->editw))
+                editw_set_kbfocus(dock, dock->editw, 1);*/
+      } break;
+    case MotionNotify:
+      {
+	dock->mouse_x = event.xmotion.x;
+	dock->mouse_y = event.xmotion.y;
+	dock->mouse_cnt = 0;
+	dock->mouse_win = event.xany.window;
+	temps_depuis_dernier_event = 0;
+      } break;
+    case LeaveNotify:
+      {
+	dock->mouse_x = -1;
+	dock->mouse_y = -1;
+	dock->mouse_cnt = 0;
+	dock->mouse_win = None;
+      } break;
+    case ButtonRelease:
+    case KeyPress:
+      {
+	dock->mouse_cnt = 0;
+      } break;
+    }
+
+
+    if (plopup_ismapped(dock)) {
+      plopup_dispatch_event(dock, &event);
+    } else {
+      if (event.type == KeyPress) {
+        int ok = 0;
+        if (event.xany.window == pp_get_win(dock)) {
+          kb_xim_lookup_key(&event.xkey, KB_PINNIPEDE); ok = 1;
+        } else if (event.xany.window == editw_get_win(dock->editw)) {
+          kb_xim_lookup_key(&event.xkey, KB_PALMIPEDE); ok = 1;
+        }
+        if (ok) {
+          if (!pp_handle_keypress(dock,&event)) {
+            editw_handle_keypress(dock,dock->editw,&event);
+          }
+        }
+      } else if (event.type == KeyRelease) {
+        if (!pp_handle_keyrelease(dock,&event))
+          editw_handle_keyrelease(dock,dock->editw,&event);
+      } else if ((event.xany.window == dock->iconwin && dock->iconwin) || event.xany.window == dock->win) {
+	dock_dispatch_event(dock, &event);
+      } else if (event.xany.window == editw_get_win(dock->editw) && event.xany.window) {
+	editw_dispatch_event(dock, dock->editw, &event);
+      } else if (msgbox_ismapped(dock) && event.xany.window == msgbox_get_win(dock)) {
+	msgbox_dispatch_event(dock, &event);
+      } else if (pp_dispatch_event(dock, &event)) {        
+	/* plop */
+      } else if (balltrap_dispatch_event(dock, &event)) {
+        /* pika */
+      }
+        /*} else if (newswin_is_used(dock)) {
+	if (event.xany.window == newswin_get_window(dock)) {
+	  newswin_dispatch_event(dock, &event);
+          }
+      }*/
+    }
+  }
+}
+
+/* appelee ~25 fois par seconde */
+void
+timer_signal(int signum) {
+
+  if (signum == SIGUSR1) {
+    flag_discretion_request = (_dock->horloge_mode ? -1 : 1);
+    //printf("sigusr1\n"); 
+#   ifdef SIGNAUX_A_LANCIENNE // mais maintenant on utilise sigaction
+#   ifdef _XOPEN_SOURCE
+    assert(signal(SIGUSR1, timer_signal) != SIG_ERR);
+#   endif
+#   endif
+    return;
+  } else if (signum == SIGUSR2) {
+    //    flag_discretion_request = -1;
+
+    flag_update_prefs_request = 2; /* c'est wmccc qui nous cause */
+
+    //    printf("sigusr2\n"); 
+#   ifdef SIGNAUX_A_LANCIENNE // mais maintenant on utilise sigaction
+#   ifdef _XOPEN_SOURCE
+    assert(signal(SIGUSR2, timer_signal) != SIG_ERR);
+#   endif
+#   endif
+    return;
+  } else if (signum != SIGALRM) {
+    return;
+  }
+
+#ifdef SIGNAUX_A_LANCIENNE // mais maintenant on utilise sigaction
+#ifdef _XOPEN_SOURCE
+  assert(signal(SIGALRM, timer_signal) != SIG_ERR);
+#endif
+#endif
+
+  X_loop_request++; wmcc_tic_cnt++;
+}
+
+int x_error_handler(Display *d UNUSED, XErrorEvent *e UNUSED) {
+  fprintf(stderr, _("X11 Error. The coincoin is going down for halt NOW!\n"));
+  wmcc_save_or_restore_state(_dock, 0);
+  exit(0);
+}
+
+int x_io_error_handler(Display *d UNUSED) {
+  fprintf(stderr, _("X11 IO Error. The coincoin is going down for halt NOW!\n"));
+  wmcc_save_or_restore_state(_dock, 0);
+  exit(0);
+}
+
+
+/*
+  potentiellement caus� par ispell quand il y a un probl�me
+   (genre mauvais dictionnaire, malaise d'ispell ..)
+
+   update: chuis pas s�r de moi.. le sigpipe est seulement re�u quand
+   on debuggue avec gdb .. bof.. m'en fous
+*/
+void
+sigpipe_signal(int signum UNUSED) {
+  static volatile int in_sigpipe = 0;
+  if (in_sigpipe == 0) { /* bon finalement je l'ai eu le bug occasionnel de sigpipe infini quand on se delogue..
+                            �a devrait un peu aider */
+    in_sigpipe++;
+    //BLAHBLAH(1,fprintf(stderr, _("Got a SIGPIPE ! Either ispell crashed, or you have just killed\nviolently the coincoin.\n")));
+    //wmcc_save_or_restore_state(_dock, 0);
+    in_sigpipe--;
+  }
+}
+/* poreil ! */
+void
+sigchld_signal(int signum UNUSED) {
+  //  BLAHBLAH(0,fprintf(stderr, _("Got a SIGCHLD !\n")));
+  /* je comprends pas pourquoi un wait() ici n'�limine pas les zombies ... 
+     tant pis, �a marche bien comme �a avec le bon gros kill_ispell d'ours */
+}
+void
+sigint_signal(int signum UNUSED) {
+  fprintf(stderr, _("pan ! pan ! ... arg\n"));
+  wmcc_save_or_restore_state(_dock, 0);
+  exit(0);
+}
+
+
+/*
+  appel�e pour la tribune et les news (delai_base == secondes)
+   (pour la tribune, delai_base = Prefs.dlfp_tribune_check_delay,
+    pour les news,   delai_base = Prefs.dlfp_news_check_delay)
+*/
+int
+wmcc_eval_delai_rafraichissement(Dock *dock, int delay_base, int recent_err_cnt)
+{
+  int delay;
+
+  delay = 25*delay_base;
+
+  /* verifie si on a demand� d'�teindre le coincoin au bout d'un certain nb de minutes */
+  if (Prefs.switch_off_coincoin_delay != 0) {
+    if (temps_depuis_dernier_event/(25*60) > Prefs.switch_off_coincoin_delay) {
+      if (dock->horloge_mode == 0) flag_discretion_request = 1; /* passage en horloge :) */
+      delay = 10000000; return delay;
+    }
+  }
+
+  if (Prefs.max_refresh_delay == 0) return delay;
+
+  if (temps_depuis_dernier_event/25 < 300) {
+    delay = 25*delay_base;
+  } else if (temps_depuis_dernier_event/25 < 1200) {          /* cad entre 5 min et 20mind'inactivit� */
+    delay = 25*2*delay_base;                                 /* on passe � (par defaut) un refresh/min */
+  } else if (temps_depuis_dernier_event/25 < 90*60) {         /* en 20 min et 1h30 */
+    delay = 25*10*delay_base;                                /* on passe � un refresh/5min */
+  } else {                                                    /* apres 1h30 */
+    delay = 25*60*delay_base;                                /* on passe aux delai_max (qui est exprime en minutes) */ 
+  }
+  delay *= (recent_err_cnt+1);
+  delay = MIN(delay, Prefs.max_refresh_delay*25*60);
+  return delay;
+}
+
+
+/*
+  maj les differents timers et remplit la file d'attente 
+*/
+void
+update_timers(Dock *dock)
+{
+  Site *site;
+  if (dock->coin_coin_sent_decnt >= 1) dock->coin_coin_sent_decnt--; /* pour �teindre la led[1] apres un cours d�lai */
+  dock->red_button_send_cnt++;
+  if (flag_update_prefs_request) {
+    ccqueue_push_prefs_update(flag_update_prefs_request);
+    flag_update_prefs_request = 0;
+  }
+
+  /* 
+     ces 5 lignes servent � red�clencher le rafraissement lors d'un brusque retour d'activit� 
+     (si le coincoin rafraichissait 1fois/15min, il va faire tr�s rapidement un refresh) 
+     par contre, le delai ne peut �tre accru que juste apr�s un refresh (c'est mieux pour 
+     l'affichage du temps avant le prochain refresh dans le pinni, �a �vite des sauts)
+  */
+  for (site = dock->sites->list; site; site = site->next) {
+    Board *b = site->board;
+    /*site->news_refresh_delay = 
+      MIN(site->news_refresh_delay, 
+      wmcc_eval_delai_rafraichissement(dock, site->prefs->news_check_delay, site->http_recent_error_cnt));*/
+    if (b) {
+      b->board_refresh_delay = 
+	MIN(b->board_refresh_delay, 
+	    wmcc_eval_delai_rafraichissement(dock, site->prefs->board_check_delay, site->http_recent_error_cnt));
+    }
+  }
+
+  /* les tribunes */
+  for (site = dock->sites->list; site; site = site->next) {
+    Board *b = site->board;
+    if (site->prefs->check_board && ccqueue_find(Q_BOARD_UPDATE, site->site_id)==NULL) {
+      if (b->auto_refresh && b->board_refresh_decnt)
+	b->board_refresh_decnt--;
+      if (b->board_refresh_decnt == 0) {
+	ccqueue_push_board_update(site->site_id);
+	b->board_refresh_delay = 
+	  wmcc_eval_delai_rafraichissement(dock, site->prefs->board_check_delay, site->http_recent_error_cnt);
+        b->board_refresh_decnt = b->board_refresh_delay;
+      }
+      b->board_refresh_decnt = MIN(b->board_refresh_decnt, b->board_refresh_delay);
+    }
+  }
+}
+
+/* la boucle principale (appel�e 25 fois par seconde, mais uniquement aux moments 
+   propices (cad pas au milieu d'un malloc..)) */
+void X_loop()
+{
+  static int no_reentrant = 0;
+  int save_errno;
+  static int timer_cnt = 0;
+  Dock *dock = _dock;
+
+  if (no_reentrant) {
+    // apres reflexion �a peut arriver (en placant allow_x_loop dans des fonctions succeptible d'etre
+    // appellees depuis network_thread et X_loop, dans ce cas, hop
+    //printf ("REENTRANT !!!!! je vais me mordre les ***i*les\n"); exit(1); /* �a ne doit JAMAIS arriver */
+    return;
+  }
+  no_reentrant = 1;
+
+  X_loop_request = 0;
+
+  save_errno = errno; /* eh oui, si on appelle X_loop dans une periode d�licate, il vaut 
+			 mieux ne pas trop toucher � cette variable... */
+  
+  timer_cnt++;
+  dock->view_id_timer_cnt++;
+  dock->mouse_cnt+=40;
+
+  update_timers(dock);
+
+
+  /* verifie si il y a des ballons d'aide a afficher */
+  if (Prefs.use_balloons) check_balloons(dock); 
+  
+  editw_action(dock, dock->editw); /* animation du palmipede si necessaire */
+
+  /* lectures des evenements */
+  wmcoincoin_dispatch_events(dock);
+
+  timer_cnt++;
+
+  if (timer_cnt % 10 == 0) {
+    check_if_should_kill_ispell(0); /* pan ? */
+  }
+  
+  if (timer_cnt % 5 == 0) {
+    pp_animate(dock);   /* omg ! il bouge ! */
+  }
+  if (timer_cnt % 25 == 0) {
+    pp_totoz_check_updates(dock); /* met a jour l'affichage et lance les 
+                                     telechargements si Prefs.board_auto_dl_pictures */
+  }
+
+  if (timer_cnt % 1 == 0) {
+    /*
+    Window focwin;
+    int revert_to;
+    XGetInputFocus(dock->display, &focwin, &revert_to);
+    printf("focus win=%08lx [%s]\n", focwin, 
+           focwin == editw_get_win(dock->editw) ? "palmipede" : 
+           (focwin == pp_get_win(dock) ? "pinnipede" : "???"));
+    */
+    if (dock->horloge_mode == 0) {
+      dock_refresh_normal(dock);
+    } else {
+      dock_refresh_horloge_mode(dock);
+    }
+    if (timer_cnt < 400) dock_refresh_other_win(dock);
+
+    /* gestion des animations du dock */
+    if (dock->door_state == OPENING) {
+      dock->door_state_step++;
+      /* note pour les generations futures: cette partie du code est une des plus anciennes,
+	 elle remonte � la v1.0beta */
+      if (dock->door_state_step > 25+13) {
+	dock->door_state_step = 25+13;
+	dock->door_state = OPENED;
+	opened_cnt = 0;
+      }
+    } else if (dock->door_state == OPENED) {
+      if (opened_cnt++ > 200) {
+	dock->door_state = CLOSING;
+      }
+    } else if (dock->door_state == CLOSING) {
+      dock->door_state_step --;
+      if (dock->door_state_step <= 0) {
+	dock->door_state_step = 0;
+	dock->door_state = CLOSED;
+	dock->red_button_press_flag = -1;
+      }
+    }
+    if (dock->red_button_press_flag > 0) {
+      dock->red_button_press_state++;
+      if (dock->red_button_press_state >= 6) dock->red_button_press_state = 5;
+    } else if (dock->red_button_press_flag < 0) {
+      dock->red_button_press_state--;
+      if (dock->red_button_press_state <= 0) { 
+	dock->red_button_press_state = 0;
+	dock->red_button_press_flag = 0;
+	if (dock->door_state != CLOSED) dock->door_state = CLOSING;
+      }
+    }
+    
+    dock_leds_set_state(dock);
+    dock_leds_update(&dock->leds);
+
+    /* suivi du clignotement du flamometre */
+    {
+      int clign = 0;
+      if (dock->flamometre.xp_change_decnt) { dock->flamometre.xp_change_decnt--; clign = 1; }
+      if (dock->flamometre.comment_change_decnt) { dock->flamometre.comment_change_decnt--; clign = 1; }
+      if (dock->flamometre.board_answer_decnt) { dock->flamometre.board_answer_decnt--; clign = 1; }
+
+      if (clign) {
+	dock_update_pix_trolloscope(dock);
+      }
+    }
+    /* d�clenchement du clignotement du flamometre */
+    if (/*flag_updating_comments == 0 && */flag_updating_board == 0) {
+      Site *site;
+#if 0
+      if ((site = sl_find_xp_change(dock->sites))) {
+	site->xp_change_flag = 0;
+	printf("debut flamo %s\n", site->prefs->site_name);
+	/* on s'assure de rajouter une quantit� divisible par FLAMOMETRE_XP_CLIGN_SPEED */
+	dock->flamometre.xp_change_decnt += (((FLAMOMETRE_XP_DUREE*(1000/WMCC_TIMER_DELAY_MS))/
+					      FLAMOMETRE_XP_CLIGN_SPEED)*FLAMOMETRE_XP_CLIGN_SPEED);
+      }
+      if ((site = sl_find_comment_change(dock->sites))) {
+	site->comment_change_flag = 0;
+	if (site_yc_find_modified(site)) { /* les inconsistences sont possibles */
+	  dock->flamometre.comment_change_decnt += (((FLAMOMETRE_COMMENT_DUREE*(1000/WMCC_TIMER_DELAY_MS))/
+						     FLAMOMETRE_COMMENT_CLIGN_SPEED)*FLAMOMETRE_COMMENT_CLIGN_SPEED);
+	}
+      }
+#endif
+      if ((site=sl_find_board_answer_to_me(dock->sites))) {
+	site->board->flag_answer_to_me = 0;
+	pp_tabs_set_flag_answer_to_me(dock, site);
+	dock->flamometre.board_answer_decnt += (((FLAMOMETRE_TRIB_DUREE*(1000/WMCC_TIMER_DELAY_MS))/
+						   FLAMOMETRE_TRIB_CLIGN_SPEED)*FLAMOMETRE_TRIB_CLIGN_SPEED);
+      }
+    }
+
+
+    //dock_checkout_newstitles(dock);
+    check_if_board_was_updated(dock);
+
+    /* 
+       affichage effectif du coincoin 
+
+       c'est le genre de petite instruction de rien du tout qu'on met des jours � retrouver
+       et paradoxalement dont l'absence se ferait imm�diatement remarquer
+    */
+    XCopyArea(dock->display, dock->coinpix, DOCK_WIN(dock), dock->NormalGC,
+	      0,0, 64, 64, 0,0);
+
+    //    if (timer_cnt % 2048 == 0) reread_messages();
+    
+    /* aaaaaaaaaaaaaarf oula je croyais avoir mis toutes ces merdes dans dock.c */
+    if (strlen(dock->newstitles)>10) {
+      dock->newstitles_char_dec+=2;
+      if (dock->newstitles_char_dec >= 6) {
+	dock->newstitles_char_dec = 0;      
+	dock->newstitles_pos++; if (dock->newstitles_pos >= (int)strlen(dock->newstitles)) {
+	  dock->newstitles_pos = 0;
+	}
+      }
+    }
+    
+    if (dock->tl_item_clicked && dock->msginfo_defil > 0) {
+      dock->msginfo_defil+=3;
+    }
+
+    /* faut-il autoscroller le pinnipede teletype ? */
+    pp_check_board_updated(dock);
+
+    /* update la fenetre des news si necessaire */
+#if 0
+    if (newswin_is_used(dock)) {
+      if (flag_news_updated && flag_updating_news == 0) {
+	newswin_update_content(dock, 0);
+	newswin_draw(dock);
+	flag_news_updated = 0;
+      } else if (flag_updating_news) {
+	newswin_update_info(dock, 0, 0); /* juste pour afficher 'maj de news en cours' */
+      }
+    }
+#endif
+  }
+  if ((timer_cnt % 4) == 0) 
+    balltrap_animate(dock);
+
+
+  /* le chef est-il dans le bureau ? */
+  if (flag_discretion_request == +1 && !Prefs.auto_swallow) {
+    balltrap_armageddon(dock);
+    if ((dock->discretion_saved_state.palmipede_used = editw_ismapped(dock->editw))) {
+      editw_unmap(dock, dock->editw);
+    }
+
+    if ((dock->discretion_saved_state.pinnipede_used = pp_ismapped(dock))) {
+      pp_unmap(dock);
+    }
+    balloon_hide(dock); msgbox_hide(dock);
+    flag_discretion_request = 0;
+    dock->discretion_saved_state.last_sig_is_usr1 = 1;
+    dock_set_horloge_mode(dock); /* arf arf le gros camouflage ! */
+  } else if (flag_discretion_request == -1) { /* ahhh, il vient de sortir alors :) */
+    if (dock->discretion_saved_state.last_sig_is_usr1) { /* on vient de tout cacher ? */
+      if (dock->discretion_saved_state.palmipede_used &&
+	  editw_ismapped(dock->editw) == 0) {
+	editw_show(dock, NULL, 0);
+      }
+      if (dock->discretion_saved_state.pinnipede_used && 
+	  pp_ismapped(dock)==0) {
+	pp_show(dock);
+      }
+    } else { /* si on ne vient pas de tout cacher, on consid�re qu'il faut "raise" les fenetres */
+      if (editw_ismapped(dock->editw)) XRaiseWindow(dock->display, editw_get_win(dock->editw));
+      if (pp_ismapped(dock)) XRaiseWindow(dock->display, pp_get_win(dock));
+    }
+    dock_unset_horloge_mode(dock);
+    flag_discretion_request = 0;
+    dock->discretion_saved_state.last_sig_is_usr1 = 0;
+  }
+
+  /* si ispell vient de se finir, on essaye de r�afficher le palmipede pour prendre en compte les erreurs ... */
+  if (editw_ismapped(dock->editw) && flag_spell_finished) {
+    if (flag_spell_finished == 1) {
+      editw_refresh(dock, dock->editw);
+      flag_spell_finished = 0; /* remise a zero APRES le redraw histoire de ne pas relancer un ispell en plein milieu du redraw */
+    } else {
+      flag_spell_finished--; /* y'a un petit delai entre la fin de la correction et 
+				son affichage, c'est juste pour �viter un clignotement trop
+				chiant quand on tape
+			     */
+    }
+  }
+
+
+  /* verif de la 'visibilit�' de l'applet, pour masquage du palmipede si
+     necessaire. OUI, c'est gruik et nul de faire comme �a, MAIS ce salaud de
+     wmaker fout les applets en substructurenotify ce qui veut dire que wmcc ne
+     re�oit pas les unmapnotify lorsque l'applet est cach�e (par un changement
+     de bureau par ex. ...)  
+
+     Si le palmi n'est pas en mode override_redirect, on laisse le wm choisir
+     et on intercepte le unmapnotify dans palmipede.c
+  */
+  if (Prefs.palmipede_override_redirect && editw_ismapped(dock->editw)) {
+    XWindowAttributes wattr;
+    XGetWindowAttributes(dock->display, DOCK_WIN(dock), &wattr);
+    if (wattr.map_state == IsUnmapped || wattr.map_state == IsUnviewable) {
+      editw_unmap(dock, dock->editw);
+    }
+  }
+
+  no_reentrant =  0;
+
+  errno = save_errno;
+}
+
+
+/* je l'ai pompe honteuseument dans le classique 'wmgeneral.c' ... 
+ */
+void createXBMfromXPM(char *xbm, char **xpm, int sx, int sy) {
+
+  int i,j,k;
+  int width, height, numcol, depth;
+  int zero=0;
+  unsigned char	bwrite;
+  int bcount;
+  int curpixel;
+
+  sscanf(*xpm, "%d %d %d %d", &width, &height, &numcol, &depth);
+
+  for (k=0; k!=depth; k++) {
+    zero <<=8;
+    zero |= xpm[1][k];
+  }
+
+  for (i=numcol+1; i < numcol+sy+1; i++) {
+    bcount = 0;
+    bwrite = 0;
+    for (j=0; j<sx*depth; j+=depth) {
+      bwrite >>= 1;
+
+      curpixel=0;
+      for (k=0; k!=depth; k++) {
+	curpixel <<=8;
+	curpixel |= xpm[i][j+k];
+      }
+
+      if ( curpixel != zero ) {
+	bwrite += 128;
+      }
+      bcount++;
+      if (bcount == 8) {
+	*xbm = bwrite;
+	xbm++;
+	bcount = 0;
+	bwrite = 0;
+      }
+    }
+  }
+}
+
+/*
+  ben �a fait l'icone, quoi
+*/
+  
+void
+wmcc_set_wm_icon(Dock *dock) {
+  XIconSize *isz;
+  int nbsz;
+  int w,h,z,i,j,c;
+  RGBAImage *in_img, *out_img;
+#include "../xpms/icon.xpm"
+
+  /* 
+     �a a l'air super tordu, mais en fait y'a tout une partie qui sert � rien
+  */
+  w = 0; h = 0;
+  BLAHBLAH(2,fprintf(stderr,_("Creating the windows icon. Just tell me if it makes your WM crash.\n")));
+  if (XGetIconSizes(dock->display, dock->win, &isz, &nbsz) != 0) {
+    /* aucun wm ne propose de taille d'icone, ce code n'a donc jamais ete teste */
+    int i;
+    printf("nbsz=%d\n", nbsz);
+    for (i=0; i < nbsz; i++) {
+      printf("icon sz %d: [%d..%d]x[%d..%d], step=%d,%d\n", i, isz[i].min_width, isz[i].max_width, isz[i].min_height, isz[i].max_height, isz[i].width_inc, isz[i].height_inc);      
+      if (i == 0) {
+	w = (isz[i].max_width/16) * 16; h = (isz[i].max_height/16)*16;
+	w = MAX(w, isz[i].min_width); h = MAX(h, isz[i].min_height);
+      }
+    }
+    XFree(isz);
+  } else {
+    /* pas la peine de raler, *tous* les wm suxent des ours */
+    //    printf("pas de taille d'icone par d�faut, voila un wmanager qui suce des ours\n");
+    w = 48; h = 48;
+  }
+  assert(w>0 && h>0);
+
+  in_img = RGBACreateRImgFromXpmData(dock->rgba_context, icon_xpm); assert(in_img);
+  assert(in_img->w == 16 && in_img->w == 16);
+  out_img = RGBACreateImage(w, h); assert(out_img);
+  for (i=0; i < w; i++) {
+    for (j=0; j < h; j++) {
+      for (c=0; c < 4; c++) {
+	out_img->data[j][i].rgba[c] = 0;
+      }
+    }
+  }
+  z = MAX(MIN(w/16, h/16),1);
+  /* �a c'est un zoom */
+  for (i=0; i < 16; i++) {
+    for (j=0; j < 16; j++) {
+      int ii, jj;
+      for (ii = 0; ii < z; ii++) {
+	for (jj = 0; jj < z; jj++) {
+	  int di, dj;
+	  
+	  di = MIN(MAX(w/2 + ((i-8)*z+ii),0),w);
+	  dj = MIN(MAX(h/2 + ((j-8)*z+jj),0),h);
+	  for (c = 0; c < 4; c++) {
+	    out_img->data[dj][di].rgba[c] = in_img->data[j][i].rgba[c];
+	  }
+	}
+      }
+    }
+  }
+  dock->wm_icon_pix = RGBAImage2Pixmap(dock->rgba_context, out_img); assert(dock->wm_icon_pix);
+  dock->wm_icon_mask = alpha2pixmap_mask(dock->display, DOCK_WIN(dock), w, h, 
+					 (unsigned char *)out_img->data[0], 255);
+  RGBADestroyImage(in_img);
+  RGBADestroyImage(out_img);
+}
+
+/* x initialization crap , not nice */
+void initx(Dock *dock, int argc, char **argv) {
+  int i;
+
+  /* some x structs */
+  XSizeHints xsh;
+  XWMHints *xwmh;
+  XClassHint xch;
+  XGCValues xgcv;
+  XTextProperty xtp;
+  char coin_mask[64*64/8];
+  char clock_mask[64*64/8];
+  int use_iconwin = Prefs.use_iconwin && !Prefs.auto_swallow;
+	
+  /* connect to default display */
+  dock->display = XOpenDisplay(getenv("DISPLAY"));
+  if(!dock->display) {
+    fprintf(stderr, "Couldn't connect to display\n");
+    exit(1);
+  }
+  
+  /* la magie des locales */
+//  XSetLocaleModifiers("@im=none"); /* si quelqu'un sait ce que �a veut dire, je suis interess� */
+  dock->input_method = (dock->fuck_utf8 ? NULL : XOpenIM(dock->display, NULL, NULL, NULL));
+  if (!dock->input_method) {
+ //   printf("echec de XOpenIM() [locale=%s], ca pue ! -- switching to C locale\n",setlocale (LC_ALL, ""));
+ //   setlocale (LC_ALL, "C");
+    dock->input_method = XOpenIM(dock->display, NULL, NULL, NULL);
+    if (!dock->input_method) {
+   //   printf("Erreur ! echec de XOpenIM() [locale=%s], ca pue encore plus !! -- \n",setlocale (LC_ALL, ""));
+    }
+  }
+  kb_build();
+
+
+  /* get screen and root window */
+  dock->screennum = DefaultScreen(dock->display);
+  dock->rootwin = RootWindow(dock->display, dock->screennum);
+
+  dock->rgba_context = RGBACreateContext(dock->display, dock->screennum);    
+
+  ccfont_initialize(dock->display, dock->screennum, dock->rgba_context->visual , dock->rgba_context->cmap, dock->rootwin);
+
+  /* detect xinerama */
+  dock->nb_xiscreen = 0;
+#ifdef XINERAMA
+  {
+    int event_base, error_base;
+    if (XineramaQueryExtension(dock->display, &event_base, &error_base)) {
+      XineramaScreenInfo *xsi;
+      int xv1=0, xv2=0,i;
+      XineramaQueryVersion(dock->display,&xv1, &xv2);
+      myprintf("Xinerama extension %<YEL supported> by X server (version %d.%d)\n", xv1, xv2);
+      xsi = XineramaQueryScreens(dock->display, &dock->nb_xiscreen);
+      if (dock->nb_xiscreen>0) {        
+        dock->xiscreen = calloc(dock->nb_xiscreen, sizeof *(dock->xiscreen));
+        for (i = 0; i < dock->nb_xiscreen; ++i) {
+          dock->xiscreen[i].screen_number = xsi[i].screen_number;
+          dock->xiscreen[i].x_org = xsi[i].x_org;
+          dock->xiscreen[i].y_org = xsi[i].y_org;
+          dock->xiscreen[i].width = xsi[i].width;
+          dock->xiscreen[i].height= xsi[i].height;
+          myprintf("screen %d: [%<yel %d>-%<yel %d>]x[%<yel %d>-%<yel %d>]\n", 
+                   dock->xiscreen[i].screen_number,
+                   dock->xiscreen[i].x_org,
+                   dock->xiscreen[i].y_org,
+                   dock->xiscreen[i].x_org+dock->xiscreen[i].width-1,
+                   dock->xiscreen[i].y_org+dock->xiscreen[i].height-1);
+        }
+      }
+    } else myprintf("no Xinerama for this server\n");
+  }
+#endif
+  if (dock->nb_xiscreen==0) {
+    myprintf("Xinerama support disabled\n");
+    dock->nb_xiscreen = 1;
+    dock->xiscreen = calloc(1, sizeof *(dock->xiscreen));
+    dock->xiscreen[0].screen_number = 0;
+    dock->xiscreen[0].x_org = 0;
+    dock->xiscreen[0].y_org = 0;
+    dock->xiscreen[0].width = WidthOfScreen(XScreenOfDisplay(dock->display, dock->screennum));
+    dock->xiscreen[0].height= HeightOfScreen(XScreenOfDisplay(dock->display, dock->screennum));
+  }
+
+  if (Prefs.auto_swallow) {
+    /* create the pinnipede window in advance since the swallower may use it */
+    dock->pp_win = XCreateSimpleWindow (dock->display, dock->rootwin, 
+                                        0, 0, 100, 100, 0, //pp->win_width,pp->win_height, 0,
+                                        BlackPixel(dock->display, dock->screennum),
+                                        WhitePixel(dock->display, dock->screennum));
+    kb_create_input_context_for(dock, dock->pp_win, KB_PINNIPEDE);
+  } else dock->pp_win = None;
+
+
+  /* set size hints 64 x 64 */
+  xsh.flags = USSize | USPosition;
+  xsh.width = 64;
+  xsh.height = 64;
+  if (Prefs.draw_border == 0) {
+    XWMGeometry(dock->display, dock->screennum, "64x64+0+0", NULL, 0,
+		&xsh, &xsh.x, &xsh.y, &xsh.width, &xsh.height, &i);
+  } else {
+    xsh.x = Prefs.dock_xpos;
+    xsh.y = Prefs.dock_ypos;
+  }
+
+  /* create the application window */
+  dock->win = XCreateSimpleWindow(dock->display, Prefs.auto_swallow ? dock->pp_win : dock->rootwin,
+				  xsh.x, xsh.y, xsh.width, xsh.height, 0,
+				  BlackPixel(dock->display, dock->screennum),
+				  WhitePixel(dock->display, dock->screennum));
+  
+  if(!dock->win) {
+    fprintf(stderr, _("Couldn't create window\n"));
+    exit(1);
+  }
+  
+  if (use_iconwin) {
+    /* create icon window */
+    dock->iconwin = XCreateSimpleWindow(dock->display, dock->rootwin,
+					xsh.x, xsh.y, xsh.width, xsh.height, 0,
+					BlackPixel(dock->display, dock->screennum),
+					WhitePixel(dock->display, dock->screennum));
+  
+    if(!dock->iconwin) {
+      fprintf(stderr, _("Couldn't create icon window\n"));
+      exit(1);
+    }
+  } else dock->iconwin = None;
+    
+
+
+  /* load interface pixmap */
+
+  if (Prefs.dock_skin_pixmap) {
+    int w, h;
+    dock->coinpix = RGBACreatePixmapFromXpmFile(dock->rgba_context, Prefs.dock_skin_pixmap, &w, &h);
+    if (dock->coinpix != None && (h != 64 || w < 320)) {
+      printf(_("Bad dimensions for the pixmap skin (expected 64x320, found %dx%d)\n"),w,h);
+      exit(1);
+    } else if (dock->coinpix == None) {
+      myprintf(_("Unable to load the pixmap '%<grn %s>'\n"), Prefs.dock_skin_pixmap);
+      exit(1);
+    }
+  } else {
+    dock->coinpix = RGBACreatePixmapFromXpmData(dock->rgba_context, coin_xpm);
+  }
+  assert(dock->coinpix != None);
+  
+  createXBMfromXPM(coin_mask, coin_xpm, 64, 64);
+  
+  dock->coin_pixmask = XCreateBitmapFromData(dock->display, dock->win, 
+					     coin_mask, 64, 64);
+
+  dock->clockpix = RGBACreatePixmapFromXpmData(dock->rgba_context, clock_xpm);
+  
+  createXBMfromXPM(clock_mask, clock_xpm, 64, 64);
+  
+  dock->clock_pixmask = XCreateBitmapFromData(dock->display, dock->win, 
+					     clock_mask, 64, 64);
+  
+  dock->led = RGBACreatePixmapFromXpmData(dock->rgba_context, led_xpm); assert(dock->led != None);
+  
+  dock->month = RGBACreatePixmapFromXpmData(dock->rgba_context, month_xpm); assert(dock->month != None);
+  
+  dock->date = RGBACreatePixmapFromXpmData(dock->rgba_context, date_xpm); assert(dock->date != None);
+  
+  dock->weekday = RGBACreatePixmapFromXpmData(dock->rgba_context, weekday_xpm); assert(dock->weekday != None);
+  
+  if (Prefs.draw_border == 0) {
+    /* setup shaped window */
+    XShapeCombineMask(dock->display, dock->win, ShapeBounding, 
+		      0, 0, dock->coin_pixmask, ShapeSet);
+    if (use_iconwin) {
+      XShapeCombineMask(dock->display, dock->iconwin, ShapeBounding,
+			0, 0, dock->coin_pixmask, ShapeSet);
+    }
+
+    /* set window manager hints */
+    xwmh = XAllocWMHints();
+    xwmh->flags = WindowGroupHint | IconWindowHint | StateHint;
+    xwmh->icon_window = dock->iconwin;
+    xwmh->window_group = dock->win;
+    xwmh->initial_state = (use_iconwin ? WithdrawnState : NormalState);
+
+    XSetWMHints(dock->display, dock->win, xwmh);
+    
+    XFree(xwmh); xwmh = NULL;
+  } else {
+    /*    XSetWindowAttributes wattr;
+    wattr.override_redirect = True;
+  
+    XChangeWindowAttributes(dock->display, dock->win, CWOverrideRedirect, &wattr);
+    */
+    set_borderless_window_hints(dock->display, dock->win);
+  }
+
+
+  /* set class hints */
+
+
+  xch.res_name = argv[0]; //Prefs.app_name; 
+  xch.res_class = argv[0]; //Prefs.app_name; 
+  /* ca chie avec KDE:
+     quand KDE sauve la session, il sauve ce champ et execute ce nom
+     a la session suivante, donc: 
+     * rec_class doit etre le nom de l'executable
+     * et la ligne de commande, je la mets ou ?
+     
+     --> utiliser l'option "dock.iconwin: false"
+  */
+
+
+  XSetClassHint(dock->display, dock->win, &xch);
+  
+  /* set size hints */
+  XSetWMNormalHints(dock->display, dock->win, &xsh);
+  
+  /* tell window manager app name */
+  if(!XStringListToTextProperty(&argv[0], 1, &xtp)) {
+    fprintf(stderr, _("Couldn't create text property\n"));
+    exit(1);
+  }
+  XSetWMName(dock->display, dock->win, &xtp);
+
+  XFree(xtp.value); /* fait le faire � la main .. */
+
+  /* create a graphics context */
+  xgcv.foreground = RGB2PIXEL(0,0,0);
+  xgcv.background = RGB2PIXEL(255,255,255);
+
+  dock->NormalGC = XCreateGC(dock->display, dock->win, GCForeground | GCBackground, &xgcv);
+
+  if(!dock->NormalGC) {
+    fprintf(stderr, _("Couldn't create graphics context\n"));
+    exit(1);
+  }
+  
+  /* select events to catch */
+  XSelectInput(dock->display, dock->win,
+	       ExposureMask |
+	       ButtonPressMask |
+	       ButtonReleaseMask |
+	       PointerMotionMask |
+	       EnterWindowMask | 
+	       LeaveWindowMask |
+	       StructureNotifyMask);
+  if (dock->iconwin) {
+    XSelectInput(dock->display, dock->iconwin,
+		 ExposureMask |
+		 ButtonPressMask |
+		 ButtonReleaseMask |
+		 PointerMotionMask |
+		 EnterWindowMask | 
+		 LeaveWindowMask |
+		 StructureNotifyMask);
+  }
+
+  /* set the command line for restarting */
+  XSetCommand(dock->display, dock->win, argv, argc);
+  
+  /* map the main window */
+  XMapWindow(dock->display, dock->win);
+  /* affiche l'image d'initialisation (oh comme c'est userfriendly ! ) */
+  XSync(dock->display, True);
+  XCopyArea(dock->display, dock->coinpix, DOCK_WIN(dock), dock->NormalGC, 0, 0, 64, 64, 0, 0);
+  XFlush(dock->display);
+
+  wmcc_set_wm_icon(dock);
+
+  swallower_init(dock);
+}
+
+#ifdef __CYGWIN__
+void *Timer_Thread(void *arg UNUSED)
+{
+  while (1) {
+
+    /* very very ugly hack ... 
+       le but est que le coincoin ne se bloque plus sous cygwin dans
+       l'appel � 'select' de la fonction 'http_select_fd'
+
+       pour �a on l'autorise exceptionnellement � �tre appel�e depuis
+       cette thread
+
+       oui c'est laidissime mais j'ai vraiment pas envie de me pencher
+       sur les sockets non bloquants de windows
+    */
+    if (flag_cygwin_x_loop_in_thread && X_loop_request) {
+      X_loop_request = 0;
+      X_loop();
+    }
+    usleep (40000);
+    X_loop_request++; wmcc_tic_cnt++;
+  }
+}
+#endif 
+
+
+static void
+install_sighandlers()
+{
+  /* installation du gestionnaire de signal ALARM
+     c'est lui qui permet � coincoin de continuer � clignoter pendant
+     que des download sont en cours... �a n'est pas tr�s orthodoxe comme fonctionnement,
+     mais, avec quelques protections basiques, �a marche tr�s bien, au moins sous linux
+  */
+#ifdef SIGNAUX_A_LANCIENNE
+  assert(signal(SIGALRM, timer_signal) != SIG_ERR); /* le comportement de certains OS (solaris par ex. differe
+					  differe de linux (si _XOPEN_SOURCE est d�fini,
+					  le gestionnaire de signal n'est pas automatiquement r�install�
+					  apr�s le d�clenchement du signal ... y'a un bugfix dans X_loop,
+					  mais c'est mieux d'utiliser les signaux posix (sigaction..)
+				       */
+  assert(signal(SIGUSR1, timer_signal) != SIG_ERR);
+  assert(signal(SIGUSR2, timer_signal) != SIG_ERR);
+  assert(signal(SIGPIPE, sigpipe_signal) != SIG_ERR);
+  assert(signal(SIGCHLD, sigchld_signal) != SIG_ERR);
+  assert(signal(SIGINT, sigint_signal) != SIG_ERR);
+#else
+  {
+    struct sigaction action;
+    action.sa_handler = timer_signal;
+    sigemptyset(&(action.sa_mask));
+    action.sa_flags = 0;
+    if (sigaction(SIGALRM, &action, NULL) != 0) {
+     fprintf(stderr,_("sigaction: erreur %d (%s)\n essayez de recompiler en faisant un #define SIGNAUX_A_LANCIENNE...\n"),
+         errno, strerror(errno));
+     exit(1);
+    }
+    if (sigaction(SIGUSR1, &action, NULL) != 0) {
+     fprintf(stderr,_("sigaction: erreur %d (%s)\n essayez de recompiler en faisant un #define SIGNAUX_A_LANCIENNE...\n"),
+         errno, strerror(errno));
+     exit(1);
+    }
+    if (sigaction(SIGUSR2, &action, NULL) != 0) {
+     fprintf(stderr,_("sigaction: erreur %d (%s)\n essayez de recompiler en faisant un #define SIGNAUX_A_LANCIENNE...\n"),
+         errno, strerror(errno));
+     exit(1);
+    }
+    action.sa_handler = sigpipe_signal;
+    if (sigaction(SIGPIPE, &action, NULL) != 0) {
+     fprintf(stderr,_("sigaction: erreur %d (%s)\n essayez de recompiler en faisant un #define SIGNAUX_A_LANCIENNE...\n"),
+         errno, strerror(errno));
+     exit(1);
+    }
+
+    action.sa_handler = sigchld_signal;
+    if (sigaction(SIGCHLD, &action, NULL) != 0) {
+     fprintf(stderr,_("sigaction: erreur %d (%s)\n essayez de recompiler en faisant un #define SIGNAUX_A_LANCIENNE...\n"),
+         errno, strerror(errno));
+     exit(1);
+    }
+    
+    action.sa_handler = sigint_signal;
+    if (sigaction(SIGINT, &action, NULL) != 0) {
+     fprintf(stderr,_("sigaction: erreur %d (%s)\n essayez de recompiler en faisant un #define SIGNAUX_A_LANCIENNE...\n"),
+         errno, strerror(errno));
+     exit(1);
+    }
+  }
+#endif
+}
+
+
+/* fonction non utilisee */
+void
+block_sigalrm(int bloque)
+{
+#ifdef SIGNAUX_A_LANCIENNE
+#else
+  {
+    sigset_t sset;
+    sigemptyset(&sset);
+    sigaddset(&sset, SIGALRM);
+    
+    sigprocmask(bloque ? SIG_BLOCK : SIG_UNBLOCK, &sset, NULL);
+  }
+#endif
+}
+
+#ifdef TESTTIME
+void test_time_functions() {
+  time_t time1, time2, time3;
+ char *theLocalTime;
+ char *theUTCTime;
+ char *theTime;
+
+ extern char *tzname[2];
+ extern time_t timezone;
+
+ tzset();
+ printf("Local time zone name is %s %s, ", tzname[0], tzname[1]);
+ printf("%ld seconds from UTC time. daylight=%d\n", (long int)timezone, daylight);
+
+ time1 = time( NULL );
+ theLocalTime = asctime( localtime( &time1 ));
+ printf("Local time is %s", theLocalTime);
+
+ theUTCTime = asctime( gmtime( &time1 ));
+ printf("UTC time is %s", theUTCTime);
+
+ time2 = mktime( gmtime( &time1 ));
+ theTime = asctime( localtime( &time2 ));
+ printf("The time is %s", theTime);  
+  
+
+ str_to_time_t("2004-02-22T03:02-08:00", &time3);
+ printf("convert to locatime time: %s\n", asctime( localtime( &time3 )));
+ 
+ str_to_time_t("Sun, 22 Feb 2004 01:35:06 GMT", &time3);
+ printf("convert to locatime time: %s\n", asctime( localtime( &time3 )));
+
+ str_to_time_t("20040222132310", &time3);
+ printf("convert to locatime time: %s\n", asctime( localtime( &time3 )));
+
+ str_to_time_t("Sat, 21 Feb 2004 15:26:02 PDT", &time3);
+ printf("convert to locatime time: %s\n", asctime( localtime( &time3 )));
+
+ str_to_time_t("Sun, 7 Mar 2004 14:27:52 -0800", &time3);
+ printf("convert to locatime time: %s\n", asctime( localtime( &time3 )));
+ 
+ str_to_time_t("Tue, 09 Mar 2004 00:34:39 +0100", &time3); // heure locale == 00:34:39
+ printf("convert to locatime time: %s\n", asctime( localtime( &time3 )));
+ char tstamp[15];
+ time_t_to_tstamp(time3, tstamp);
+ printf("tstamp: %s\n", tstamp);
+ exit(0);
+}
+#endif
+int x_error_handler_debug(Display *dpy UNUSED, XErrorEvent *err UNUSED) {
+  fprintf(stderr, "X11 error\n");
+  dump_backtrace();
+  abort();
+}
+
+int main(int argc, char **argv)
+{
+  Dock *dock;
+#ifdef __CYGWIN__
+  pthread_t timer_thread;
+#endif
+  //setlocale (LC_ALL, "");
+  umask(077); /* allez hop */
+  /* on peut forcer la locale sans faire d'export LC_MESSAGES=blahblah
+     avec l'option -l */
+  {
+    const char *locale_dir = LOCALEDIR;
+    int i;
+    for (i=1; i < argc-1; i++) {
+      if (strcmp(argv[i],"-l")==0) {
+	setlocale(LC_MESSAGES, argv[i+1]);
+	//	printf("locale changed to '%s' (%s)\n",argv[i+1],setlocale (LC_MESSAGES, NULL));
+      }
+      if (strcmp(argv[i],"-L")==0) {
+	locale_dir = argv[i+1];
+	//	printf("locale changed to '%s' (%s)\n",argv[i+1],setlocale (LC_MESSAGES, NULL));
+      }
+    }
+    bindtextdomain (PACKAGE, locale_dir);
+  }
+
+  textdomain (PACKAGE);
+
+  tzset();
+
+
+#ifdef TESTTIME
+  test_time_functions();
+#endif
+
+  /* la structure de base */
+  ALLOC_OBJ(dock, Dock); dock->sites = NULL;
+
+  _dock = dock; /* la vilaine variable globale (pour les sighandlers) */
+
+  myprintf(_("%<GRN wmc2> v.%<WHT %s> [ built on %s ]\n"),VERSION, __DATE__);
+
+  /* contruit un useragent qui ignore la partie terminale du numero de version
+     ( '2.3.6f' --> '2.3.6') */
+  {
+    int i;
+    app_useragent = strdup("wmcoincoin/" VERSION);
+    i = strlen(app_useragent)-1;
+    while (app_useragent[i] < '0' || app_useragent[i] > '9') app_useragent[i--] = 0;
+  }
+    
+  printf(_("locale used: %s\n"), setlocale (LC_MESSAGES, NULL));
+  
+  dock->fuck_utf8 = 0;
+  {
+#ifdef CODESET
+    char *codeset = nl_langinfo(CODESET);
+    printf("codeset : %s\n", codeset);
+    if (codeset && str_case_str(codeset, "utf")) {
+      printf("utf8 puxor!\n");
+      dock->fuck_utf8 = 1;
+    }
+#endif
+  }
+
+  memset(&Prefs, 0, sizeof(Prefs));
+  wmcc_prefs_initialize(argc, argv, &Prefs);
+  
+  dock->sites = sl_create();
+
+  net_init();
+
+  ccqueue_build();
+
+  if (Prefs.debug & 1) {
+    XSetErrorHandler(x_error_handler_debug);
+    _Xdebug = 1; /* oblige la synchronisation */
+  } else {
+    XSetErrorHandler(x_error_handler);
+    XSetIOErrorHandler(x_io_error_handler);
+  }
+
+
+  {
+    Site *s;
+    myprintf("Site         Locale     Backend type       Pants\n");
+    for (s = dock->sites->list; s; s = s->next) {
+      myprintf("%<YEL %10s>   \t", s->prefs->site_name);
+      switch (s->prefs->locale) {
+      case locEN: myprintf("EN\t"); break;
+      case locFR: myprintf("FR\t"); break;
+      default: myprintf("BUG!!!!"); break;
+      }
+      if (s->prefs->check_board) {
+	switch (s->prefs->backend_type) {
+	case BACKEND_TYPE_BOARD:
+          myprintf(_("%<YEL BOARD      >")); break;
+        case BACKEND_TYPE_RSS:  
+          myprintf(_("%<YEL RSS        >")); break;
+        case BACKEND_TYPE_POP:
+          myprintf(_("%<YEL POP3       >")); break;          
+	default: myprintf(_("%<YEL prrrrrrt    >")); break;
+	}
+        switch (s->prefs->backend_flavour) {
+        case BACKEND_FLAVOUR_UNENCODED:
+          myprintf(_("%<YEL tags not encoded  >")); break;
+	case BACKEND_FLAVOUR_ENCODED:
+          myprintf(_("%<YEL tags encoded      >")); break;
+	case BACKEND_FLAVOUR_NO_PANTS:  
+          myprintf(_("%<YEL without underpants>")); break;
+        default: myprintf(_("%<YEL prrrrrrt    >")); break;
+	}
+      } else {
+	myprintf("none              ");
+      }
+      //      myprintf("    %3s     ", s->prefs->check_news ? "Yes" : "No");
+      //myprintf("    %3s     ", s->prefs->check_comments ? "Yes" : "No");
+      //myprintf("    %3s     ", s->prefs->check_messages ? "Yes" : "No");
+      myprintf("\n");
+    }
+  }
+
+  ALLOC_VEC(dock->newstitles,MAX_NEWSTITLES_LEN, unsigned char);
+  #if 0
+  ALLOC_VEC(dock->newstitles_id,MAX_NEWSTITLES_LEN, id_type);
+  {
+    int i;
+    for (i=0; i < MAX_NEWSTITLES_LEN; i++) dock->newstitles_id[i]= id_type_invalid_id();
+  }
+#endif
+  ALLOC_VEC(dock->msginfo,MAX_MSGINFO_LEN, unsigned char);
+  /* le trolloscope */
+  {
+    int i,j;
+    ALLOC_ARR(dock->trolloscope, TROLLOSCOPE_HEIGHT, TROLLOSCOPE_WIDTH, TL_item);
+    for (i=0; i < TROLLOSCOPE_HEIGHT; i++) {
+      for (j=0; j < TROLLOSCOPE_WIDTH; j++) {
+	dock->trolloscope[i][j].id = id_type_invalid_id();
+      }
+    }
+  }
+
+  /* recopie du message et du useragent des preferences */
+  strncpy(dock->coin_coin_message, Prefs.coin_coin_message, MESSAGE_MAXMAX_LEN); 
+  dock->coin_coin_message[MESSAGE_MAXMAX_LEN] = 0;
+  free(Prefs.coin_coin_message); Prefs.coin_coin_message = NULL; //dock->coin_coin_message; /* pas beau */
+
+  dock->coin_coin_site_id = -1;
+
+  /* pour les http_get, on utilisera Prefs.user_agent, qui est non modifiable
+     pour les http_post, on utilisera dock->coin_coin_useragent */
+
+  dock->tl_item_survol = NULL;
+  dock->trolloscope_resolution = 5;
+
+  dock->flamometre.xp_change_decnt = 0;
+  dock->flamometre.comment_change_decnt = 0;
+  dock->flamometre.board_answer_decnt = 0;
+
+  /*  dock->trolloscope_bgr = dock->trolloscope_bgb = dock->trolloscope_bgg = 0;
+      dock->trolloscope_clign_step = -1;*/
+
+  dock->view_id_in_newstitles = id_type_invalid_id();
+  dock->flag_survol_trollo = 0;
+  dock->flag_survol_led1 = 0;
+  dock->flag_trib_load_cursor = 0;
+  dock->mouse_x = 0; 
+  dock->mouse_y = 0;
+  dock->mouse_cnt = 0;
+  dock->mouse_win = None;
+  dock->trolloscope_speed = Prefs.default_trollo_speed;
+  dock->discretion_saved_state.palmipede_used = 0;
+  dock->discretion_saved_state.pinnipede_used = 0;
+  dock->discretion_saved_state.last_sig_is_usr1 = 0;
+  dock->horloge_mode = 0;
+
+  dock->mask_porte_haut = None;
+  dock->mask_porte_bas = None;
+
+  dock->trib_trollo_rate = 0; dock->trib_trollo_score = 0;
+
+  {
+    char *errmsg;
+    char mask[64*64];
+    
+    XGCValues xgcv;
+    
+    createXBMfromXPM(mask, coin_xpm, 64, 64);
+    
+    initx(dock,argc, argv);
+
+
+    if ((errmsg=dock_build_pixmap_porte(dock))) {
+      fprintf(stderr, errmsg);
+    }
+
+
+    dock_leds_create(dock, &dock->leds);
+
+    {
+      char fn[512];
+      snprintf(fn, 512, "%s-%s", DOCK_FIXED_FONT, Prefs.font_encoding);
+      dock->fixed_font = XLoadQueryFont(dock->display, fn);
+      if (!dock->fixed_font) {
+	myfprintf(stderr, _("Unable to load font %s , trying iso8859-1\n"), fn);
+	snprintf(fn, 512, "%s-iso8859-1", DOCK_FIXED_FONT);
+	dock->fixed_font = XLoadQueryFont(dock->display, fn);
+	if (!dock->fixed_font) {
+	  myfprintf(stderr, _("Unable to load font %s, aborting\n"), fn);
+	  exit(-1);
+	}
+      }
+    }
+
+    
+    dock->pix_trolloscope = XCreatePixmap(dock->display, dock->coinpix, TROLLOSCOPE_WIDTH, TROLLOSCOPE_HEIGHT, DefaultDepth(dock->display,dock->screennum));
+    XFillRectangle(dock->display, dock->pix_trolloscope, dock->NormalGC, 0, 0, TROLLOSCOPE_WIDTH, TROLLOSCOPE_HEIGHT);
+
+    xgcv.function = GXor;
+    xgcv.graphics_exposures = 0;
+    dock->or_GC = XCreateGC(dock->display, dock->coinpix, GCFunction| GCGraphicsExposures, &xgcv);
+
+    xgcv.function = GXand;
+    xgcv.graphics_exposures = 0;
+    dock->and_GC = XCreateGC(dock->display, dock->coinpix, GCFunction| GCGraphicsExposures, &xgcv);
+  }
+  /* selection du curseur affiche qd on survole la trib_load */
+  //  dock->trib_load_cursor = XCreateFontCursor(dock->display, XC_target);
+  //dock->trib_load_cursor = XCreateFontCursor(dock->display, XC_plus);
+  dock->trib_load_cursor = XCreateFontCursor(dock->display, XC_tcross);
+
+  dock->atom_WM_DELETE_WINDOW = XInternAtom(dock->display, "WM_DELETE_WINDOW", False);
+  dock->atom_WM_SAVE_YOURSELF = XInternAtom(dock->display, "WM_SAVE_YOURSELF", False);
+  dock->atom_WM_TAKE_FOCUS = XInternAtom(dock->display, "WM_TAKE_FOCUS", False);
+  dock->atom_WM_PROTOCOLS = XInternAtom(dock->display, "WM_PROTOCOLS", False);
+  
+  scrollcoin_build(dock->rgba_context);
+  totoz_bookmark_load(dock);
+  balloon_build(dock);
+  msgbox_build(dock);
+  editw_build(dock);
+  plopup_build(dock);
+  pp_build(dock);
+  balltrap_build(dock);
+  if (Prefs.auto_swallow)
+    swallower_autoswallow(dock);
+  //sw_swallow_win_id(dock,0x3200001);
+
+  dock->door_state = CLOSED; dock->door_state_step = 0;
+  dock->red_button_press_flag = 0; dock->red_button_press_state = 0;
+  dock->post_anonyme = 0;
+
+  dock->newstitles_pos = 0; 
+  dock->newstitles_char_dec = 0;
+  dock->newstitles[0] = 0;
+
+  if (Prefs.start_in_boss_mode == 0) {
+    dock_refresh_normal(dock);
+  } else {
+    dock_set_horloge_mode(dock);
+    dock_refresh_horloge_mode(dock);
+  }
+
+  //kb_create_input_context_for(dock, DOCK_WIN(dock));
+
+  dock->wmccc_pid = -1;
+
+  /* essaye de restorer la taille / position du pinnipede / newswin */
+  wmcc_save_or_restore_state(dock, 1);
+
+  if (Prefs.pinnipede_open_on_start == 1 || Prefs.auto_swallow) {
+    pp_show (dock);
+  }
+
+#ifndef NOSIGNALS
+  install_sighandlers();
+#endif
+
+
+#ifdef __CYGWIN__ 
+  /* signals sux under cygwin */
+  pthread_create (&timer_thread, NULL, Timer_Thread, NULL);
+#else
+#  ifndef NOSIGNALS
+  {
+    struct itimerval the_timer;
+    the_timer.it_interval.tv_sec = 0;
+    the_timer.it_interval.tv_usec = WMCC_TIMER_DELAY_MS * 1000; /* microsecondes */
+    the_timer.it_value = the_timer.it_interval;
+
+    setitimer(ITIMER_REAL, &the_timer, NULL);
+  }
+#  endif
+#endif  
+  /* launching the network update thread */
+
+  ccqueue_loop(dock);
+
+  return 0;
+}
diff --git a/src/xmlcoincoin.c b/src/xmlcoincoin.c
new file mode 100644
index 0000000..e56ceb4
--- /dev/null
+++ b/src/xmlcoincoin.c
@@ -0,0 +1,175 @@
+#include <ctype.h>
+#include "coin_util.h"
+#include "myprintf.h"
+#include "xmlcoincoin.h"
+
+/* alors attention ce qui suit est un parseur xml plutot rustique dont la
+   robustesse doit encore etre demontree
+   Il entre directement dans le top five des trucs les plus immondes de wmcc.
+*/
+
+void clear_XMLBlock(XMLBlock *b) {
+  b->attr = NULL; b->tag = NULL; b->content = NULL;
+  b->tag_len = b->content_len = 0;
+}
+
+void destroy_XMLBlock(XMLBlock *b) {
+  XMLAttr *a, *a_next;
+  for (a = b->attr; a; a = a_next) {
+    a_next = a->next; free(a);
+  }
+  clear_XMLBlock(b);
+}
+
+void print_XMLBlock(XMLBlock *b) {
+  XMLAttr *a;
+  char *s = str_ndup(b->namespace ? b->namespace : "",b->namespace_len); myprintf("XMLBlock: tag = %<CYA %s>:",s); free(s);
+  s = str_ndup(b->tag,b->tag_len);  myprintf("%<YEL %s>\n", s); free(s);
+  for (a = b->attr; a; a = a->next) {
+    s = str_ndup(a->name, a->name_len); myprintf("  Attribute: %s = ", s); free(s);
+    s = str_ndup(a->value, a->value_len); myprintf("%<GRN %s>\n", s); free(s);
+  }
+  s = str_ndup(b->content, MIN(b->content_len,100));
+  myprintf("Content: %<CYA %100s>", s);
+  if (b->content_len > 100) {
+    myprintf("[...]%<CYA %10s>", s + b->content_len - 10);
+  }
+  free(s);
+  printf("\n");
+}
+
+static int
+isxmlchar(unsigned char c) {
+  return (isalnum(c) || strchr("_.-:?",c));
+}
+
+/* bonjour je viens de d�couvrir les namespace en xml .. */
+int
+XMLBlock_search_tag(char *start, char *end, char *tagdescr, XMLBlock *b) {
+  int ok = 0;
+  do {
+    char *p, *divns;
+    while (start < end && *start != '<') ++start;    
+    ++start;
+    while (start < end && isspace(*start)) ++start;
+    p = start; divns = NULL;
+    while (p < end && isxmlchar(*p)) {
+      if (*p == ':') divns = p;
+      ++p;
+    }
+    if (p >= end) break; /* valable aussi pour start .. */
+    if (tagdescr[0] == '*' && tagdescr[1] == ':') {
+      if (divns) {
+        ok = str_case_startswith(divns, tagdescr+1);
+      } else {
+        ok = str_case_startswith(start, tagdescr);
+      }
+    } else ok = str_case_startswith(start, tagdescr);
+    if (ok) {
+      if (divns) {
+        b->tag = divns+1; b->tag_len = p-divns-1;
+        b->namespace = start; b->namespace_len = divns - start;
+      } else {
+        b->tag = start; b->tag_len = p-start;
+        b->namespace = NULL; b->namespace_len = 0;
+      }
+      return 0;
+    }
+  } while (start < end);
+  return 1;
+}
+
+/* le XML sai trai trai facile */
+int
+get_XMLBlock(char *data_start, int data_len, char *tagdescr, XMLBlock *b) {
+  char *data_end = data_start + data_len;
+  char *p;
+  int lev;
+  int self_closed = 0;
+  destroy_XMLBlock(b);
+  /* on cherche le debut, sai pas compliquai */
+  /* update: enfin si, avec les namespace �a devient tout de suite 
+     un peu plus complliquai */
+  
+  if (XMLBlock_search_tag(data_start, data_end, tagdescr, b)) return -1;
+  p = b->tag + b->tag_len;
+  b->content = strchr(p, '>'); 
+  if (!b->content || b->content >= data_end) return -2; 
+  if (tagdescr[0] == '!' || tagdescr[0] == '?' || b->content[-1] == '/') self_closed = 1;
+  b->content++; 
+
+  /* on enregistre les attributs a grands coups de pelle */
+  while (*p != '>' && p < b->content) {
+    XMLAttr attr;
+    while (p < b->content && isspace(*p)) ++p;
+    if (p == b->content) break;
+    attr.name = p;
+    while (p < b->content && isxmlchar(*p)) ++p;
+    if (p == b->content) break;
+    attr.name_len = p-attr.name;
+    while (p < b->content && (isspace(*p) || *p == '=')) ++p;
+    if (*p != '"') break;
+    attr.value = ++p;
+    while (p < b->content && *p != '"') ++p;
+    if (p == b->content) break;
+    attr.value_len = p - attr.value;
+    ++p;
+    attr.next = b->attr;
+    ALLOC_OBJ(b->attr, XMLAttr);
+    memcpy(b->attr, &attr, sizeof(XMLAttr));
+  }
+  /* on est content */
+  if (!self_closed) {
+    while(b->content < data_end && isspace(*b->content)) b->content++;
+    if (str_case_startswith(b->content, "<![CDATA[")) { /* facile .. */
+      b->content += 9;
+      p = strstr(b->content, "]]>");
+      if (p) {
+        b->content_len = p - b->content; p+=3;
+      } else return -6;
+    } else {        
+      p = b->content;      
+      lev = 1;
+      /* on cherche la sortie */
+      while (p < data_end) {
+        if (p[0] == '<') {
+          if (p[1] == '/') --lev;
+          else if (p[1]=='!') { /* raaha putain de commentaires */
+            if (str_case_startswith(p+2,"[CDATA[")) { /* merci shift pour ton backend velu */
+              p = strstr(p, "]]>");
+              if (!p || p >= data_end) return -7;
+              p += 2; 
+            } else if (strncmp(p+2, "--",2) == 0) {
+              p = strstr(p, "-->");
+              if (!p || p >= data_end) return -8;
+              p += 2;
+            }
+          } else if (p[1] == '?') { /* xml processing instructions ... tant que j'y suis .. */
+            p = strstr(p, "?>");
+            if (!p || p >= data_end) return -9;
+            p += 1;
+          } else ++lev;
+        } else if (p[0] == '/' && p[1] == '>') --lev;
+        if (lev == 0) break;
+        ++p;
+      }
+      if (p < data_end && lev == 0) {
+        b->content_len = p - b->content;
+      } else return -5;
+    }
+    /* on a fini */
+    while (*p == '<' || *p == '/' || isspace(*p)) ++p;
+    if (b->namespace_len) {
+      if (str_ncasecmp(p, b->namespace, b->namespace_len) != 0) return -9;
+      p+=b->namespace_len;
+      if (*p != ':') return -10;
+      ++p;
+    }
+    if (str_ncasecmp(p, b->tag, b->tag_len) != 0) return -3;
+    while (p < data_end && *p != '>') ++p;
+    if (p < data_end && *p == '>') {
+      //print_XMLBlock(b);
+      return p+1 - data_start;
+    } else return -4;
+  } else return b->content - data_start;
+}
diff --git a/src/xmlcoincoin.h b/src/xmlcoincoin.h
new file mode 100644
index 0000000..7cdefda
--- /dev/null
+++ b/src/xmlcoincoin.h
@@ -0,0 +1,22 @@
+#ifndef XMLCOINCOIN_H
+#define XMLCOINCOIN_H
+
+typedef struct XMLAttr {
+  char *name; int name_len;
+  char *value; int value_len;
+  struct XMLAttr *next;
+} XMLAttr;
+
+typedef struct XMLBlock {
+  char *tag; int tag_len;
+  char *namespace; int namespace_len;
+  XMLAttr *attr;
+  char *content; int content_len;
+} XMLBlock;
+
+void clear_XMLBlock(XMLBlock *b);
+void destroy_XMLBlock(XMLBlock *b);
+void print_XMLBlock(XMLBlock *b);
+int get_XMLBlock(char *data_start, int data_len, char *tagdescr, XMLBlock *b);
+
+#endif
diff --git a/wmccc.glade b/wmccc.glade
new file mode 100644
index 0000000..46b62eb
--- /dev/null
+++ b/wmccc.glade
@@ -0,0 +1,8600 @@
+<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
+<!DOCTYPE glade-interface SYSTEM "http://glade.gnome.org/glade-2.0.dtd">
+
+<glade-interface>
+
+<widget class="GtkDialog" id="messagebox_dialog">
+  <property name="visible">True</property>
+  <property name="title" translatable="yes">Message from wmccc</property>
+  <property name="type">GTK_WINDOW_TOPLEVEL</property>
+  <property name="window_position">GTK_WIN_POS_NONE</property>
+  <property name="modal">False</property>
+  <property name="resizable">True</property>
+  <property name="destroy_with_parent">False</property>
+  <property name="decorated">True</property>
+  <property name="skip_taskbar_hint">False</property>
+  <property name="skip_pager_hint">False</property>
+  <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+  <property name="focus_on_map">True</property>
+  <property name="has_separator">True</property>
+
+  <child internal-child="vbox">
+    <widget class="GtkVBox" id="dialog-vbox1">
+      <property name="visible">True</property>
+      <property name="homogeneous">False</property>
+      <property name="spacing">0</property>
+
+      <child internal-child="action_area">
+	<widget class="GtkHButtonBox" id="dialog-action_area1">
+	  <property name="visible">True</property>
+	  <property name="layout_style">GTK_BUTTONBOX_END</property>
+
+	  <child>
+	    <widget class="GtkButton" id="ok_button">
+	      <property name="visible">True</property>
+	      <property name="can_default">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label">gtk-ok</property>
+	      <property name="use_stock">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">-5</property>
+	      <signal name="clicked" handler="gtk_widget_hide" object="messagebox_dialog" last_modification_time="Sun, 22 Feb 2004 19:18:42 GMT"/>
+	    </widget>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">False</property>
+	  <property name="fill">True</property>
+	  <property name="pack_type">GTK_PACK_END</property>
+	</packing>
+      </child>
+
+      <child>
+	<widget class="GtkHBox" id="hbox5">
+	  <property name="visible">True</property>
+	  <property name="homogeneous">False</property>
+	  <property name="spacing">0</property>
+
+	  <child>
+	    <widget class="GtkImage" id="image2">
+	      <property name="visible">True</property>
+	      <property name="pixbuf">badnews.xpm</property>
+	      <property name="xalign">0.5</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">False</property>
+	      <property name="fill">False</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="messagebox_label">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">plop</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">True</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0.5</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">7</property>
+	      <property name="ypad">7</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">True</property>
+	      <property name="fill">True</property>
+	    </packing>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">True</property>
+	  <property name="fill">True</property>
+	</packing>
+      </child>
+    </widget>
+  </child>
+</widget>
+
+<widget class="GtkDialog" id="new_rss_dialog">
+  <property name="visible">True</property>
+  <property name="title" translatable="yes">New RSS Feed</property>
+  <property name="type">GTK_WINDOW_TOPLEVEL</property>
+  <property name="window_position">GTK_WIN_POS_NONE</property>
+  <property name="modal">False</property>
+  <property name="resizable">True</property>
+  <property name="destroy_with_parent">False</property>
+  <property name="decorated">True</property>
+  <property name="skip_taskbar_hint">False</property>
+  <property name="skip_pager_hint">False</property>
+  <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+  <property name="focus_on_map">True</property>
+  <property name="has_separator">True</property>
+
+  <child internal-child="vbox">
+    <widget class="GtkVBox" id="dialog-vbox2">
+      <property name="visible">True</property>
+      <property name="homogeneous">False</property>
+      <property name="spacing">0</property>
+
+      <child internal-child="action_area">
+	<widget class="GtkHButtonBox" id="dialog-action_area2">
+	  <property name="visible">True</property>
+	  <property name="layout_style">GTK_BUTTONBOX_END</property>
+
+	  <child>
+	    <widget class="GtkButton" id="cancel_bt">
+	      <property name="visible">True</property>
+	      <property name="can_default">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label">gtk-cancel</property>
+	      <property name="use_stock">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">-6</property>
+	    </widget>
+	  </child>
+
+	  <child>
+	    <widget class="GtkButton" id="apply_bt">
+	      <property name="visible">True</property>
+	      <property name="can_default">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label">gtk-apply</property>
+	      <property name="use_stock">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">-10</property>
+	    </widget>
+	  </child>
+
+	  <child>
+	    <widget class="GtkButton" id="ok_bt">
+	      <property name="visible">True</property>
+	      <property name="can_default">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label">gtk-ok</property>
+	      <property name="use_stock">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">-5</property>
+	    </widget>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">False</property>
+	  <property name="fill">True</property>
+	  <property name="pack_type">GTK_PACK_END</property>
+	</packing>
+      </child>
+
+      <child>
+	<widget class="GtkVBox" id="vbox3">
+	  <property name="visible">True</property>
+	  <property name="homogeneous">False</property>
+	  <property name="spacing">0</property>
+
+	  <child>
+	    <widget class="GtkHBox" id="hbox13">
+	      <property name="visible">True</property>
+	      <property name="homogeneous">False</property>
+	      <property name="spacing">0</property>
+
+	      <child>
+		<widget class="GtkImage" id="image4">
+		  <property name="visible">True</property>
+		  <property name="pixbuf">logoh.png</property>
+		  <property name="xalign">0</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">0</property>
+		  <property name="ypad">0</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkButton" id="edit_options_bt">
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="relief">GTK_RELIEF_NORMAL</property>
+		  <property name="focus_on_click">True</property>
+
+		  <child>
+		    <widget class="GtkAlignment" id="alignment3">
+		      <property name="visible">True</property>
+		      <property name="xalign">0.5</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xscale">0</property>
+		      <property name="yscale">0</property>
+		      <property name="top_padding">0</property>
+		      <property name="bottom_padding">0</property>
+		      <property name="left_padding">0</property>
+		      <property name="right_padding">0</property>
+
+		      <child>
+			<widget class="GtkHBox" id="hbox14">
+			  <property name="visible">True</property>
+			  <property name="homogeneous">False</property>
+			  <property name="spacing">2</property>
+
+			  <child>
+			    <widget class="GtkImage" id="image3">
+			      <property name="visible">True</property>
+			      <property name="stock">gtk-convert</property>
+			      <property name="icon_size">4</property>
+			      <property name="xalign">0.5</property>
+			      <property name="yalign">0.5</property>
+			      <property name="xpad">0</property>
+			      <property name="ypad">0</property>
+			    </widget>
+			    <packing>
+			      <property name="padding">0</property>
+			      <property name="expand">False</property>
+			      <property name="fill">False</property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkLabel" id="label39">
+			      <property name="visible">True</property>
+			      <property name="label" translatable="yes">Click here to edit the options file</property>
+			      <property name="use_underline">True</property>
+			      <property name="use_markup">False</property>
+			      <property name="justify">GTK_JUSTIFY_LEFT</property>
+			      <property name="wrap">False</property>
+			      <property name="selectable">False</property>
+			      <property name="xalign">0.5</property>
+			      <property name="yalign">0.5</property>
+			      <property name="xpad">0</property>
+			      <property name="ypad">0</property>
+			      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			      <property name="width_chars">-1</property>
+			      <property name="single_line_mode">False</property>
+			      <property name="angle">0</property>
+			    </widget>
+			    <packing>
+			      <property name="padding">0</property>
+			      <property name="expand">False</property>
+			      <property name="fill">False</property>
+			    </packing>
+			  </child>
+			</widget>
+		      </child>
+		    </widget>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">True</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">False</property>
+	      <property name="fill">False</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkVBox" id="vbox4">
+	      <property name="visible">True</property>
+	      <property name="homogeneous">False</property>
+	      <property name="spacing">0</property>
+
+	      <child>
+		<widget class="GtkFrame" id="frame1">
+		  <property name="visible">True</property>
+		  <property name="label_xalign">0</property>
+		  <property name="label_yalign">0.5</property>
+		  <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
+
+		  <child>
+		    <widget class="GtkAlignment" id="alignment2">
+		      <property name="visible">True</property>
+		      <property name="xalign">0.5</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xscale">1</property>
+		      <property name="yscale">1</property>
+		      <property name="top_padding">0</property>
+		      <property name="bottom_padding">0</property>
+		      <property name="left_padding">0</property>
+		      <property name="right_padding">0</property>
+
+		      <child>
+			<widget class="GtkHBox" id="hbox4">
+			  <property name="border_width">2</property>
+			  <property name="visible">True</property>
+			  <property name="homogeneous">False</property>
+			  <property name="spacing">4</property>
+
+			  <child>
+			    <widget class="GtkLabel" id="label37">
+			      <property name="visible">True</property>
+			      <property name="label" translatable="yes">Give a (short) name for the RSS feed:</property>
+			      <property name="use_underline">False</property>
+			      <property name="use_markup">False</property>
+			      <property name="justify">GTK_JUSTIFY_LEFT</property>
+			      <property name="wrap">False</property>
+			      <property name="selectable">False</property>
+			      <property name="xalign">0.5</property>
+			      <property name="yalign">0.5</property>
+			      <property name="xpad">0</property>
+			      <property name="ypad">0</property>
+			      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			      <property name="width_chars">-1</property>
+			      <property name="single_line_mode">False</property>
+			      <property name="angle">0</property>
+			    </widget>
+			    <packing>
+			      <property name="padding">0</property>
+			      <property name="expand">False</property>
+			      <property name="fill">False</property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkEntry" id="all_names[0]">
+			      <property name="visible">True</property>
+			      <property name="tooltip" translatable="yes">Try to be short</property>
+			      <property name="can_focus">True</property>
+			      <property name="editable">True</property>
+			      <property name="visibility">True</property>
+			      <property name="max_length">0</property>
+			      <property name="text" translatable="yes">dlfp</property>
+			      <property name="has_frame">True</property>
+			      <property name="invisible_char">*</property>
+			      <property name="activates_default">False</property>
+			    </widget>
+			    <packing>
+			      <property name="padding">0</property>
+			      <property name="expand">True</property>
+			      <property name="fill">True</property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkLabel" id="label36">
+			      <property name="visible">True</property>
+			      <property name="label" translatable="yes">Background color: </property>
+			      <property name="use_underline">False</property>
+			      <property name="use_markup">False</property>
+			      <property name="justify">GTK_JUSTIFY_RIGHT</property>
+			      <property name="wrap">False</property>
+			      <property name="selectable">False</property>
+			      <property name="xalign">1</property>
+			      <property name="yalign">0.5</property>
+			      <property name="xpad">0</property>
+			      <property name="ypad">0</property>
+			      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			      <property name="width_chars">-1</property>
+			      <property name="single_line_mode">False</property>
+			      <property name="angle">0</property>
+			    </widget>
+			    <packing>
+			      <property name="padding">0</property>
+			      <property name="expand">False</property>
+			      <property name="fill">False</property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkButton" id="pp_bgcolor">
+			      <property name="visible">True</property>
+			      <property name="tooltip" translatable="yes">You can customize the background color of the messages for this new site</property>
+			      <property name="can_focus">True</property>
+			      <property name="label" translatable="yes">pp_bgcolor_bt</property>
+			      <property name="use_underline">True</property>
+			      <property name="relief">GTK_RELIEF_NORMAL</property>
+			      <property name="focus_on_click">True</property>
+			    </widget>
+			    <packing>
+			      <property name="padding">0</property>
+			      <property name="expand">False</property>
+			      <property name="fill">False</property>
+			    </packing>
+			  </child>
+			</widget>
+		      </child>
+		    </widget>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label6">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Basic settings</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0.5</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="type">label_item</property>
+		    </packing>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="padding">2</property>
+		  <property name="expand">True</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkFrame" id="frame2">
+		  <property name="visible">True</property>
+		  <property name="label_xalign">0</property>
+		  <property name="label_yalign">0.5</property>
+		  <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
+
+		  <child>
+		    <widget class="GtkTable" id="table1">
+		      <property name="border_width">2</property>
+		      <property name="visible">True</property>
+		      <property name="n_rows">4</property>
+		      <property name="n_columns">2</property>
+		      <property name="homogeneous">False</property>
+		      <property name="row_spacing">0</property>
+		      <property name="column_spacing">0</property>
+
+		      <child>
+			<widget class="GtkLabel" id="label8">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Backend URL:</property>
+			  <property name="use_underline">False</property>
+			  <property name="use_markup">False</property>
+			  <property name="justify">GTK_JUSTIFY_LEFT</property>
+			  <property name="wrap">False</property>
+			  <property name="selectable">False</property>
+			  <property name="xalign">0</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xpad">0</property>
+			  <property name="ypad">0</property>
+			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			  <property name="width_chars">-1</property>
+			  <property name="single_line_mode">False</property>
+			  <property name="angle">0</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">0</property>
+			  <property name="right_attach">1</property>
+			  <property name="top_attach">0</property>
+			  <property name="bottom_attach">1</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkEntry" id="backend_url">
+			  <property name="width_request">500</property>
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="editable">True</property>
+			  <property name="visibility">True</property>
+			  <property name="max_length">0</property>
+			  <property name="text" translatable="yes">http://linuxfr.org/board/backend.xml</property>
+			  <property name="has_frame">True</property>
+			  <property name="invisible_char">*</property>
+			  <property name="activates_default">False</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">1</property>
+			  <property name="right_attach">2</property>
+			  <property name="top_attach">0</property>
+			  <property name="bottom_attach">1</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkLabel" id="label9">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Backend flavour:</property>
+			  <property name="use_underline">False</property>
+			  <property name="use_markup">False</property>
+			  <property name="justify">GTK_JUSTIFY_LEFT</property>
+			  <property name="wrap">False</property>
+			  <property name="selectable">False</property>
+			  <property name="xalign">0</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xpad">0</property>
+			  <property name="ypad">0</property>
+			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			  <property name="width_chars">-1</property>
+			  <property name="single_line_mode">False</property>
+			  <property name="angle">0</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">0</property>
+			  <property name="right_attach">1</property>
+			  <property name="top_attach">1</property>
+			  <property name="bottom_attach">2</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkOptionMenu" id="backend_type">
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="history">0</property>
+
+			  <child>
+			    <widget class="GtkMenu" id="menu1">
+
+			      <child>
+				<widget class="GtkMenuItem" id="backend_type_1">
+				  <property name="visible">True</property>
+				  <property name="label" translatable="yes">message tags are "htmlentitised"</property>
+				  <property name="use_underline">True</property>
+				</widget>
+			      </child>
+
+			      <child>
+				<widget class="GtkMenuItem" id="backend_type_2">
+				  <property name="visible">True</property>
+				  <property name="label" translatable="yes">message tags are raw</property>
+				  <property name="use_underline">True</property>
+				</widget>
+			      </child>
+
+			      <child>
+				<widget class="GtkMenuItem" id="backend_type_3">
+				  <property name="visible">True</property>
+				  <property name="label" translatable="yes">the backend has no pants</property>
+				  <property name="use_underline">True</property>
+				</widget>
+			      </child>
+			    </widget>
+			  </child>
+			</widget>
+			<packing>
+			  <property name="left_attach">1</property>
+			  <property name="right_attach">2</property>
+			  <property name="top_attach">1</property>
+			  <property name="bottom_attach">2</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkLabel" id="label10">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Refresh frequency
+ (seconds): </property>
+			  <property name="use_underline">False</property>
+			  <property name="use_markup">False</property>
+			  <property name="justify">GTK_JUSTIFY_LEFT</property>
+			  <property name="wrap">False</property>
+			  <property name="selectable">False</property>
+			  <property name="xalign">0</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xpad">0</property>
+			  <property name="ypad">0</property>
+			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			  <property name="width_chars">-1</property>
+			  <property name="single_line_mode">False</property>
+			  <property name="angle">0</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">0</property>
+			  <property name="right_attach">1</property>
+			  <property name="top_attach">2</property>
+			  <property name="bottom_attach">3</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkSpinButton" id="board_check_delay">
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="climb_rate">1</property>
+			  <property name="digits">0</property>
+			  <property name="numeric">False</property>
+			  <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+			  <property name="snap_to_ticks">False</property>
+			  <property name="wrap">False</property>
+			  <property name="adjustment">10 10 10000 1 10 10</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">1</property>
+			  <property name="right_attach">2</property>
+			  <property name="top_attach">2</property>
+			  <property name="bottom_attach">3</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkCheckButton" id="checkbutton2">
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="label" translatable="yes">Ignore <description> content (some links-only feeds contain ads in this field)</property>
+			  <property name="use_underline">True</property>
+			  <property name="relief">GTK_RELIEF_NORMAL</property>
+			  <property name="focus_on_click">True</property>
+			  <property name="active">False</property>
+			  <property name="inconsistent">False</property>
+			  <property name="draw_indicator">True</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">0</property>
+			  <property name="right_attach">2</property>
+			  <property name="top_attach">3</property>
+			  <property name="bottom_attach">4</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+		    </widget>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label7">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">RSS Backend information</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0.5</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="type">label_item</property>
+		    </packing>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="padding">2</property>
+		  <property name="expand">True</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<placeholder/>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">True</property>
+	      <property name="fill">True</property>
+	    </packing>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">True</property>
+	  <property name="fill">True</property>
+	</packing>
+      </child>
+    </widget>
+  </child>
+</widget>
+
+<widget class="GtkDialog" id="new_board_dialog">
+  <property name="visible">True</property>
+  <property name="title" translatable="yes">New Board</property>
+  <property name="type">GTK_WINDOW_TOPLEVEL</property>
+  <property name="window_position">GTK_WIN_POS_NONE</property>
+  <property name="modal">False</property>
+  <property name="resizable">True</property>
+  <property name="destroy_with_parent">False</property>
+  <property name="decorated">True</property>
+  <property name="skip_taskbar_hint">False</property>
+  <property name="skip_pager_hint">False</property>
+  <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+  <property name="focus_on_map">True</property>
+  <property name="has_separator">True</property>
+
+  <child internal-child="vbox">
+    <widget class="GtkVBox" id="dialog-vbox2">
+      <property name="visible">True</property>
+      <property name="homogeneous">False</property>
+      <property name="spacing">0</property>
+
+      <child internal-child="action_area">
+	<widget class="GtkHButtonBox" id="dialog-action_area2">
+	  <property name="visible">True</property>
+	  <property name="layout_style">GTK_BUTTONBOX_END</property>
+
+	  <child>
+	    <widget class="GtkButton" id="cancel_bt">
+	      <property name="visible">True</property>
+	      <property name="can_default">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label">gtk-cancel</property>
+	      <property name="use_stock">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">-6</property>
+	    </widget>
+	  </child>
+
+	  <child>
+	    <widget class="GtkButton" id="apply_bt">
+	      <property name="visible">True</property>
+	      <property name="can_default">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label">gtk-apply</property>
+	      <property name="use_stock">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">-10</property>
+	    </widget>
+	  </child>
+
+	  <child>
+	    <widget class="GtkButton" id="ok_bt">
+	      <property name="visible">True</property>
+	      <property name="can_default">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label">gtk-ok</property>
+	      <property name="use_stock">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">-5</property>
+	    </widget>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">False</property>
+	  <property name="fill">True</property>
+	  <property name="pack_type">GTK_PACK_END</property>
+	</packing>
+      </child>
+
+      <child>
+	<widget class="GtkVBox" id="vbox3">
+	  <property name="visible">True</property>
+	  <property name="homogeneous">False</property>
+	  <property name="spacing">0</property>
+
+	  <child>
+	    <widget class="GtkHBox" id="hbox13">
+	      <property name="visible">True</property>
+	      <property name="homogeneous">False</property>
+	      <property name="spacing">0</property>
+
+	      <child>
+		<widget class="GtkImage" id="image4">
+		  <property name="visible">True</property>
+		  <property name="pixbuf">logoh.png</property>
+		  <property name="xalign">0</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">0</property>
+		  <property name="ypad">0</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkButton" id="edit_options_bt">
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="relief">GTK_RELIEF_NORMAL</property>
+		  <property name="focus_on_click">True</property>
+
+		  <child>
+		    <widget class="GtkAlignment" id="alignment3">
+		      <property name="visible">True</property>
+		      <property name="xalign">0.5</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xscale">0</property>
+		      <property name="yscale">0</property>
+		      <property name="top_padding">0</property>
+		      <property name="bottom_padding">0</property>
+		      <property name="left_padding">0</property>
+		      <property name="right_padding">0</property>
+
+		      <child>
+			<widget class="GtkHBox" id="hbox14">
+			  <property name="visible">True</property>
+			  <property name="homogeneous">False</property>
+			  <property name="spacing">2</property>
+
+			  <child>
+			    <widget class="GtkImage" id="image3">
+			      <property name="visible">True</property>
+			      <property name="stock">gtk-convert</property>
+			      <property name="icon_size">4</property>
+			      <property name="xalign">0.5</property>
+			      <property name="yalign">0.5</property>
+			      <property name="xpad">0</property>
+			      <property name="ypad">0</property>
+			    </widget>
+			    <packing>
+			      <property name="padding">0</property>
+			      <property name="expand">False</property>
+			      <property name="fill">False</property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkLabel" id="label39">
+			      <property name="visible">True</property>
+			      <property name="label" translatable="yes">Click here to edit the options file</property>
+			      <property name="use_underline">True</property>
+			      <property name="use_markup">False</property>
+			      <property name="justify">GTK_JUSTIFY_LEFT</property>
+			      <property name="wrap">False</property>
+			      <property name="selectable">False</property>
+			      <property name="xalign">0.5</property>
+			      <property name="yalign">0.5</property>
+			      <property name="xpad">0</property>
+			      <property name="ypad">0</property>
+			      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			      <property name="width_chars">-1</property>
+			      <property name="single_line_mode">False</property>
+			      <property name="angle">0</property>
+			    </widget>
+			    <packing>
+			      <property name="padding">0</property>
+			      <property name="expand">False</property>
+			      <property name="fill">False</property>
+			    </packing>
+			  </child>
+			</widget>
+		      </child>
+		    </widget>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">True</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">False</property>
+	      <property name="fill">False</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkVBox" id="vbox4">
+	      <property name="visible">True</property>
+	      <property name="homogeneous">False</property>
+	      <property name="spacing">0</property>
+
+	      <child>
+		<widget class="GtkFrame" id="frame1">
+		  <property name="visible">True</property>
+		  <property name="label_xalign">0</property>
+		  <property name="label_yalign">0.5</property>
+		  <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
+
+		  <child>
+		    <widget class="GtkAlignment" id="alignment2">
+		      <property name="visible">True</property>
+		      <property name="xalign">0.5</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xscale">1</property>
+		      <property name="yscale">1</property>
+		      <property name="top_padding">0</property>
+		      <property name="bottom_padding">0</property>
+		      <property name="left_padding">0</property>
+		      <property name="right_padding">0</property>
+
+		      <child>
+			<widget class="GtkHBox" id="hbox4">
+			  <property name="border_width">2</property>
+			  <property name="visible">True</property>
+			  <property name="homogeneous">False</property>
+			  <property name="spacing">4</property>
+
+			  <child>
+			    <widget class="GtkLabel" id="label37">
+			      <property name="visible">True</property>
+			      <property name="label" translatable="yes">Give a (short) name for the board:</property>
+			      <property name="use_underline">False</property>
+			      <property name="use_markup">False</property>
+			      <property name="justify">GTK_JUSTIFY_LEFT</property>
+			      <property name="wrap">False</property>
+			      <property name="selectable">False</property>
+			      <property name="xalign">0.5</property>
+			      <property name="yalign">0.5</property>
+			      <property name="xpad">0</property>
+			      <property name="ypad">0</property>
+			      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			      <property name="width_chars">-1</property>
+			      <property name="single_line_mode">False</property>
+			      <property name="angle">0</property>
+			    </widget>
+			    <packing>
+			      <property name="padding">0</property>
+			      <property name="expand">False</property>
+			      <property name="fill">False</property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkEntry" id="all_names[0]">
+			      <property name="visible">True</property>
+			      <property name="tooltip" translatable="yes">Try to be short</property>
+			      <property name="can_focus">True</property>
+			      <property name="editable">True</property>
+			      <property name="visibility">True</property>
+			      <property name="max_length">0</property>
+			      <property name="text" translatable="yes">dlfp</property>
+			      <property name="has_frame">True</property>
+			      <property name="invisible_char">*</property>
+			      <property name="activates_default">False</property>
+			    </widget>
+			    <packing>
+			      <property name="padding">0</property>
+			      <property name="expand">True</property>
+			      <property name="fill">True</property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkLabel" id="label36">
+			      <property name="visible">True</property>
+			      <property name="label" translatable="yes">Background color: </property>
+			      <property name="use_underline">False</property>
+			      <property name="use_markup">False</property>
+			      <property name="justify">GTK_JUSTIFY_RIGHT</property>
+			      <property name="wrap">False</property>
+			      <property name="selectable">False</property>
+			      <property name="xalign">1</property>
+			      <property name="yalign">0.5</property>
+			      <property name="xpad">0</property>
+			      <property name="ypad">0</property>
+			      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			      <property name="width_chars">-1</property>
+			      <property name="single_line_mode">False</property>
+			      <property name="angle">0</property>
+			    </widget>
+			    <packing>
+			      <property name="padding">0</property>
+			      <property name="expand">False</property>
+			      <property name="fill">False</property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkButton" id="pp_bgcolor">
+			      <property name="visible">True</property>
+			      <property name="tooltip" translatable="yes">You can customize the background color of the messages for this new site</property>
+			      <property name="can_focus">True</property>
+			      <property name="label" translatable="yes">pp_bgcolor_bt</property>
+			      <property name="use_underline">True</property>
+			      <property name="relief">GTK_RELIEF_NORMAL</property>
+			      <property name="focus_on_click">True</property>
+			    </widget>
+			    <packing>
+			      <property name="padding">0</property>
+			      <property name="expand">False</property>
+			      <property name="fill">False</property>
+			    </packing>
+			  </child>
+			</widget>
+		      </child>
+		    </widget>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label6">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Basic settings</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0.5</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="type">label_item</property>
+		    </packing>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="padding">2</property>
+		  <property name="expand">True</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkFrame" id="frame2">
+		  <property name="visible">True</property>
+		  <property name="label_xalign">0</property>
+		  <property name="label_yalign">0.5</property>
+		  <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
+
+		  <child>
+		    <widget class="GtkTable" id="table1">
+		      <property name="border_width">2</property>
+		      <property name="visible">True</property>
+		      <property name="n_rows">3</property>
+		      <property name="n_columns">2</property>
+		      <property name="homogeneous">False</property>
+		      <property name="row_spacing">0</property>
+		      <property name="column_spacing">0</property>
+
+		      <child>
+			<widget class="GtkLabel" id="label8">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Backend URL:</property>
+			  <property name="use_underline">False</property>
+			  <property name="use_markup">False</property>
+			  <property name="justify">GTK_JUSTIFY_LEFT</property>
+			  <property name="wrap">False</property>
+			  <property name="selectable">False</property>
+			  <property name="xalign">0</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xpad">0</property>
+			  <property name="ypad">0</property>
+			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			  <property name="width_chars">-1</property>
+			  <property name="single_line_mode">False</property>
+			  <property name="angle">0</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">0</property>
+			  <property name="right_attach">1</property>
+			  <property name="top_attach">0</property>
+			  <property name="bottom_attach">1</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkEntry" id="backend_url">
+			  <property name="width_request">500</property>
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="editable">True</property>
+			  <property name="visibility">True</property>
+			  <property name="max_length">0</property>
+			  <property name="text" translatable="yes">http://linuxfr.org/board/backend.xml</property>
+			  <property name="has_frame">True</property>
+			  <property name="invisible_char">*</property>
+			  <property name="activates_default">False</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">1</property>
+			  <property name="right_attach">2</property>
+			  <property name="top_attach">0</property>
+			  <property name="bottom_attach">1</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkLabel" id="label9">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Backend flavour:</property>
+			  <property name="use_underline">False</property>
+			  <property name="use_markup">False</property>
+			  <property name="justify">GTK_JUSTIFY_LEFT</property>
+			  <property name="wrap">False</property>
+			  <property name="selectable">False</property>
+			  <property name="xalign">0</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xpad">0</property>
+			  <property name="ypad">0</property>
+			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			  <property name="width_chars">-1</property>
+			  <property name="single_line_mode">False</property>
+			  <property name="angle">0</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">0</property>
+			  <property name="right_attach">1</property>
+			  <property name="top_attach">1</property>
+			  <property name="bottom_attach">2</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkOptionMenu" id="backend_type">
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="history">0</property>
+
+			  <child>
+			    <widget class="GtkMenu" id="menu1">
+
+			      <child>
+				<widget class="GtkMenuItem" id="backend_type_1">
+				  <property name="visible">True</property>
+				  <property name="label" translatable="yes">message tags are "htmlentitised"</property>
+				  <property name="use_underline">True</property>
+				</widget>
+			      </child>
+
+			      <child>
+				<widget class="GtkMenuItem" id="backend_type_2">
+				  <property name="visible">True</property>
+				  <property name="label" translatable="yes">message tags are raw</property>
+				  <property name="use_underline">True</property>
+				</widget>
+			      </child>
+
+			      <child>
+				<widget class="GtkMenuItem" id="backend_type_3">
+				  <property name="visible">True</property>
+				  <property name="label" translatable="yes">the backend has no pants</property>
+				  <property name="use_underline">True</property>
+				</widget>
+			      </child>
+			    </widget>
+			  </child>
+			</widget>
+			<packing>
+			  <property name="left_attach">1</property>
+			  <property name="right_attach">2</property>
+			  <property name="top_attach">1</property>
+			  <property name="bottom_attach">2</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkLabel" id="label10">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Refresh frequency
+ (seconds): </property>
+			  <property name="use_underline">False</property>
+			  <property name="use_markup">False</property>
+			  <property name="justify">GTK_JUSTIFY_LEFT</property>
+			  <property name="wrap">False</property>
+			  <property name="selectable">False</property>
+			  <property name="xalign">0</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xpad">0</property>
+			  <property name="ypad">0</property>
+			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			  <property name="width_chars">-1</property>
+			  <property name="single_line_mode">False</property>
+			  <property name="angle">0</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">0</property>
+			  <property name="right_attach">1</property>
+			  <property name="top_attach">2</property>
+			  <property name="bottom_attach">3</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkSpinButton" id="board_check_delay">
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="climb_rate">1</property>
+			  <property name="digits">0</property>
+			  <property name="numeric">False</property>
+			  <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+			  <property name="snap_to_ticks">False</property>
+			  <property name="wrap">False</property>
+			  <property name="adjustment">10 10 10000 1 10 10</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">1</property>
+			  <property name="right_attach">2</property>
+			  <property name="top_attach">2</property>
+			  <property name="bottom_attach">3</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+		    </widget>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label7">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">XML Backend information</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0.5</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="type">label_item</property>
+		    </packing>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="padding">2</property>
+		  <property name="expand">True</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkFrame" id="frame3">
+		  <property name="visible">True</property>
+		  <property name="label_xalign">0</property>
+		  <property name="label_yalign">0.5</property>
+		  <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
+
+		  <child>
+		    <widget class="GtkAlignment" id="alignment1">
+		      <property name="visible">True</property>
+		      <property name="xalign">0.5</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xscale">1</property>
+		      <property name="yscale">1</property>
+		      <property name="top_padding">0</property>
+		      <property name="bottom_padding">0</property>
+		      <property name="left_padding">0</property>
+		      <property name="right_padding">0</property>
+
+		      <child>
+			<widget class="GtkTable" id="table2">
+			  <property name="border_width">2</property>
+			  <property name="visible">True</property>
+			  <property name="n_rows">4</property>
+			  <property name="n_columns">3</property>
+			  <property name="homogeneous">False</property>
+			  <property name="row_spacing">0</property>
+			  <property name="column_spacing">0</property>
+
+			  <child>
+			    <widget class="GtkLabel" id="label12">
+			      <property name="visible">True</property>
+			      <property name="label" translatable="yes">Post URL:</property>
+			      <property name="use_underline">False</property>
+			      <property name="use_markup">False</property>
+			      <property name="justify">GTK_JUSTIFY_LEFT</property>
+			      <property name="wrap">False</property>
+			      <property name="selectable">False</property>
+			      <property name="xalign">0</property>
+			      <property name="yalign">0.5</property>
+			      <property name="xpad">0</property>
+			      <property name="ypad">0</property>
+			      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			      <property name="width_chars">-1</property>
+			      <property name="single_line_mode">False</property>
+			      <property name="angle">0</property>
+			    </widget>
+			    <packing>
+			      <property name="left_attach">0</property>
+			      <property name="right_attach">1</property>
+			      <property name="top_attach">0</property>
+			      <property name="bottom_attach">1</property>
+			      <property name="x_options">fill</property>
+			      <property name="y_options"></property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkEntry" id="post_url">
+			      <property name="visible">True</property>
+			      <property name="can_focus">True</property>
+			      <property name="editable">True</property>
+			      <property name="visibility">True</property>
+			      <property name="max_length">0</property>
+			      <property name="text" translatable="yes"></property>
+			      <property name="has_frame">True</property>
+			      <property name="invisible_char">*</property>
+			      <property name="activates_default">False</property>
+			    </widget>
+			    <packing>
+			      <property name="left_attach">2</property>
+			      <property name="right_attach">3</property>
+			      <property name="top_attach">0</property>
+			      <property name="bottom_attach">1</property>
+			      <property name="y_options"></property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkLabel" id="label13">
+			      <property name="visible">True</property>
+			      <property name="label" translatable="yes">Post Template:</property>
+			      <property name="use_underline">False</property>
+			      <property name="use_markup">False</property>
+			      <property name="justify">GTK_JUSTIFY_LEFT</property>
+			      <property name="wrap">False</property>
+			      <property name="selectable">False</property>
+			      <property name="xalign">0</property>
+			      <property name="yalign">0.5</property>
+			      <property name="xpad">0</property>
+			      <property name="ypad">0</property>
+			      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			      <property name="width_chars">-1</property>
+			      <property name="single_line_mode">False</property>
+			      <property name="angle">0</property>
+			    </widget>
+			    <packing>
+			      <property name="left_attach">0</property>
+			      <property name="right_attach">1</property>
+			      <property name="top_attach">1</property>
+			      <property name="bottom_attach">2</property>
+			      <property name="x_options">fill</property>
+			      <property name="y_options"></property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkEntry" id="post_template">
+			      <property name="visible">True</property>
+			      <property name="can_focus">True</property>
+			      <property name="editable">True</property>
+			      <property name="visibility">True</property>
+			      <property name="max_length">0</property>
+			      <property name="text" translatable="yes"></property>
+			      <property name="has_frame">True</property>
+			      <property name="invisible_char">*</property>
+			      <property name="activates_default">False</property>
+			    </widget>
+			    <packing>
+			      <property name="left_attach">2</property>
+			      <property name="right_attach">3</property>
+			      <property name="top_attach">1</property>
+			      <property name="bottom_attach">2</property>
+			      <property name="y_options"></property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkScrolledWindow" id="scrolledwindow2">
+			      <property name="visible">True</property>
+			      <property name="can_focus">True</property>
+			      <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
+			      <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+			      <property name="shadow_type">GTK_SHADOW_NONE</property>
+			      <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
+
+			      <child>
+				<widget class="GtkViewport" id="viewport1">
+				  <property name="visible">True</property>
+				  <property name="shadow_type">GTK_SHADOW_IN</property>
+
+				  <child>
+				    <widget class="GtkEntry" id="user_cookie">
+				      <property name="visible">True</property>
+				      <property name="can_focus">True</property>
+				      <property name="editable">True</property>
+				      <property name="visibility">True</property>
+				      <property name="max_length">0</property>
+				      <property name="text" translatable="yes"></property>
+				      <property name="has_frame">True</property>
+				      <property name="invisible_char">*</property>
+				      <property name="activates_default">False</property>
+				    </widget>
+				  </child>
+				</widget>
+			      </child>
+			    </widget>
+			    <packing>
+			      <property name="left_attach">2</property>
+			      <property name="right_attach">3</property>
+			      <property name="top_attach">2</property>
+			      <property name="bottom_attach">3</property>
+			      <property name="x_options">fill</property>
+			      <property name="y_options">fill</property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkButton" id="grab_cookie_bt">
+			      <property name="visible">True</property>
+			      <property name="tooltip" translatable="yes">attempt to get the cookie from the cookies stored in your browsers</property>
+			      <property name="can_focus">True</property>
+			      <property name="relief">GTK_RELIEF_NORMAL</property>
+			      <property name="focus_on_click">True</property>
+
+			      <child>
+				<widget class="GtkAlignment" id="alignment9">
+				  <property name="visible">True</property>
+				  <property name="xalign">0.5</property>
+				  <property name="yalign">0.5</property>
+				  <property name="xscale">0</property>
+				  <property name="yscale">0</property>
+				  <property name="top_padding">0</property>
+				  <property name="bottom_padding">0</property>
+				  <property name="left_padding">0</property>
+				  <property name="right_padding">0</property>
+
+				  <child>
+				    <widget class="GtkHBox" id="hbox29">
+				      <property name="visible">True</property>
+				      <property name="homogeneous">False</property>
+				      <property name="spacing">2</property>
+
+				      <child>
+					<widget class="GtkImage" id="image12">
+					  <property name="visible">True</property>
+					  <property name="stock">gtk-find</property>
+					  <property name="icon_size">4</property>
+					  <property name="xalign">0.5</property>
+					  <property name="yalign">0.5</property>
+					  <property name="xpad">0</property>
+					  <property name="ypad">0</property>
+					</widget>
+					<packing>
+					  <property name="padding">0</property>
+					  <property name="expand">False</property>
+					  <property name="fill">False</property>
+					</packing>
+				      </child>
+
+				      <child>
+					<widget class="GtkLabel" id="label78">
+					  <property name="visible">True</property>
+					  <property name="label" translatable="yes">(grab cookie)</property>
+					  <property name="use_underline">True</property>
+					  <property name="use_markup">False</property>
+					  <property name="justify">GTK_JUSTIFY_LEFT</property>
+					  <property name="wrap">False</property>
+					  <property name="selectable">False</property>
+					  <property name="xalign">0.5</property>
+					  <property name="yalign">0.5</property>
+					  <property name="xpad">0</property>
+					  <property name="ypad">0</property>
+					  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+					  <property name="width_chars">-1</property>
+					  <property name="single_line_mode">False</property>
+					  <property name="angle">0</property>
+					</widget>
+					<packing>
+					  <property name="padding">0</property>
+					  <property name="expand">False</property>
+					  <property name="fill">False</property>
+					</packing>
+				      </child>
+				    </widget>
+				  </child>
+				</widget>
+			      </child>
+			    </widget>
+			    <packing>
+			      <property name="left_attach">1</property>
+			      <property name="right_attach">2</property>
+			      <property name="top_attach">2</property>
+			      <property name="bottom_attach">3</property>
+			      <property name="x_options">fill</property>
+			      <property name="y_options"></property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkLabel" id="label14">
+			      <property name="visible">True</property>
+			      <property name="label" translatable="yes">Cookie(s)</property>
+			      <property name="use_underline">False</property>
+			      <property name="use_markup">False</property>
+			      <property name="justify">GTK_JUSTIFY_LEFT</property>
+			      <property name="wrap">False</property>
+			      <property name="selectable">False</property>
+			      <property name="xalign">0</property>
+			      <property name="yalign">0.5</property>
+			      <property name="xpad">0</property>
+			      <property name="ypad">0</property>
+			      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			      <property name="width_chars">-1</property>
+			      <property name="single_line_mode">False</property>
+			      <property name="angle">0</property>
+			    </widget>
+			    <packing>
+			      <property name="left_attach">0</property>
+			      <property name="right_attach">1</property>
+			      <property name="top_attach">2</property>
+			      <property name="bottom_attach">3</property>
+			      <property name="x_options">fill</property>
+			      <property name="y_options"></property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkCheckButton" id="hunt_opened_on_site">
+			      <property name="visible">True</property>
+			      <property name="tooltip" translatable="yes">you can enable/disable the balltrap for each site. Note that there is also a global switch for the balltrap in the pinnipede button bar.</property>
+			      <property name="can_focus">True</property>
+			      <property name="label" translatable="yes">balltrap is allowed on this board</property>
+			      <property name="use_underline">True</property>
+			      <property name="relief">GTK_RELIEF_NORMAL</property>
+			      <property name="focus_on_click">True</property>
+			      <property name="active">False</property>
+			      <property name="inconsistent">False</property>
+			      <property name="draw_indicator">True</property>
+			    </widget>
+			    <packing>
+			      <property name="left_attach">2</property>
+			      <property name="right_attach">3</property>
+			      <property name="top_attach">3</property>
+			      <property name="bottom_attach">4</property>
+			      <property name="x_options">fill</property>
+			      <property name="y_options"></property>
+			    </packing>
+			  </child>
+			</widget>
+		      </child>
+		    </widget>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label11">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Sending messages to the board</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0.5</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="type">label_item</property>
+		    </packing>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="padding">2</property>
+		  <property name="expand">True</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">True</property>
+	      <property name="fill">True</property>
+	    </packing>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">True</property>
+	  <property name="fill">True</property>
+	</packing>
+      </child>
+    </widget>
+  </child>
+</widget>
+
+<widget class="GtkDialog" id="new_pop_dialog">
+  <property name="visible">True</property>
+  <property name="title" translatable="yes">New POP</property>
+  <property name="type">GTK_WINDOW_TOPLEVEL</property>
+  <property name="window_position">GTK_WIN_POS_NONE</property>
+  <property name="modal">False</property>
+  <property name="resizable">True</property>
+  <property name="destroy_with_parent">False</property>
+  <property name="decorated">True</property>
+  <property name="skip_taskbar_hint">False</property>
+  <property name="skip_pager_hint">False</property>
+  <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+  <property name="focus_on_map">True</property>
+  <property name="has_separator">True</property>
+
+  <child internal-child="vbox">
+    <widget class="GtkVBox" id="dialog-vbox2">
+      <property name="visible">True</property>
+      <property name="homogeneous">False</property>
+      <property name="spacing">0</property>
+
+      <child internal-child="action_area">
+	<widget class="GtkHButtonBox" id="dialog-action_area2">
+	  <property name="visible">True</property>
+	  <property name="layout_style">GTK_BUTTONBOX_END</property>
+
+	  <child>
+	    <widget class="GtkButton" id="cancel_bt">
+	      <property name="visible">True</property>
+	      <property name="can_default">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label">gtk-cancel</property>
+	      <property name="use_stock">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">-6</property>
+	    </widget>
+	  </child>
+
+	  <child>
+	    <widget class="GtkButton" id="apply_bt">
+	      <property name="visible">True</property>
+	      <property name="can_default">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label">gtk-apply</property>
+	      <property name="use_stock">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">-10</property>
+	    </widget>
+	  </child>
+
+	  <child>
+	    <widget class="GtkButton" id="ok_bt">
+	      <property name="visible">True</property>
+	      <property name="can_default">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label">gtk-ok</property>
+	      <property name="use_stock">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">-5</property>
+	    </widget>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">False</property>
+	  <property name="fill">True</property>
+	  <property name="pack_type">GTK_PACK_END</property>
+	</packing>
+      </child>
+
+      <child>
+	<widget class="GtkVBox" id="vbox3">
+	  <property name="visible">True</property>
+	  <property name="homogeneous">False</property>
+	  <property name="spacing">0</property>
+
+	  <child>
+	    <widget class="GtkHBox" id="hbox13">
+	      <property name="visible">True</property>
+	      <property name="homogeneous">False</property>
+	      <property name="spacing">0</property>
+
+	      <child>
+		<widget class="GtkImage" id="image4">
+		  <property name="visible">True</property>
+		  <property name="pixbuf">logoh.png</property>
+		  <property name="xalign">0</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">0</property>
+		  <property name="ypad">0</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkButton" id="edit_options_bt">
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="relief">GTK_RELIEF_NORMAL</property>
+		  <property name="focus_on_click">True</property>
+
+		  <child>
+		    <widget class="GtkAlignment" id="alignment3">
+		      <property name="visible">True</property>
+		      <property name="xalign">0.5</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xscale">0</property>
+		      <property name="yscale">0</property>
+		      <property name="top_padding">0</property>
+		      <property name="bottom_padding">0</property>
+		      <property name="left_padding">0</property>
+		      <property name="right_padding">0</property>
+
+		      <child>
+			<widget class="GtkHBox" id="hbox14">
+			  <property name="visible">True</property>
+			  <property name="homogeneous">False</property>
+			  <property name="spacing">2</property>
+
+			  <child>
+			    <widget class="GtkImage" id="image3">
+			      <property name="visible">True</property>
+			      <property name="stock">gtk-convert</property>
+			      <property name="icon_size">4</property>
+			      <property name="xalign">0.5</property>
+			      <property name="yalign">0.5</property>
+			      <property name="xpad">0</property>
+			      <property name="ypad">0</property>
+			    </widget>
+			    <packing>
+			      <property name="padding">0</property>
+			      <property name="expand">False</property>
+			      <property name="fill">False</property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkLabel" id="label39">
+			      <property name="visible">True</property>
+			      <property name="label" translatable="yes">Click here to edit the options file</property>
+			      <property name="use_underline">True</property>
+			      <property name="use_markup">False</property>
+			      <property name="justify">GTK_JUSTIFY_LEFT</property>
+			      <property name="wrap">False</property>
+			      <property name="selectable">False</property>
+			      <property name="xalign">0.5</property>
+			      <property name="yalign">0.5</property>
+			      <property name="xpad">0</property>
+			      <property name="ypad">0</property>
+			      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			      <property name="width_chars">-1</property>
+			      <property name="single_line_mode">False</property>
+			      <property name="angle">0</property>
+			    </widget>
+			    <packing>
+			      <property name="padding">0</property>
+			      <property name="expand">False</property>
+			      <property name="fill">False</property>
+			    </packing>
+			  </child>
+			</widget>
+		      </child>
+		    </widget>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">True</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">False</property>
+	      <property name="fill">False</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkVBox" id="vbox4">
+	      <property name="visible">True</property>
+	      <property name="homogeneous">False</property>
+	      <property name="spacing">0</property>
+
+	      <child>
+		<widget class="GtkFrame" id="frame1">
+		  <property name="visible">True</property>
+		  <property name="label_xalign">0</property>
+		  <property name="label_yalign">0.5</property>
+		  <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
+
+		  <child>
+		    <widget class="GtkAlignment" id="alignment2">
+		      <property name="visible">True</property>
+		      <property name="xalign">0.5</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xscale">1</property>
+		      <property name="yscale">1</property>
+		      <property name="top_padding">0</property>
+		      <property name="bottom_padding">0</property>
+		      <property name="left_padding">0</property>
+		      <property name="right_padding">0</property>
+
+		      <child>
+			<widget class="GtkHBox" id="hbox4">
+			  <property name="border_width">2</property>
+			  <property name="visible">True</property>
+			  <property name="homogeneous">False</property>
+			  <property name="spacing">4</property>
+
+			  <child>
+			    <widget class="GtkLabel" id="label37">
+			      <property name="visible">True</property>
+			      <property name="label" translatable="yes">Give a (short) name for the board:</property>
+			      <property name="use_underline">False</property>
+			      <property name="use_markup">False</property>
+			      <property name="justify">GTK_JUSTIFY_LEFT</property>
+			      <property name="wrap">False</property>
+			      <property name="selectable">False</property>
+			      <property name="xalign">0.5</property>
+			      <property name="yalign">0.5</property>
+			      <property name="xpad">0</property>
+			      <property name="ypad">0</property>
+			      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			      <property name="width_chars">-1</property>
+			      <property name="single_line_mode">False</property>
+			      <property name="angle">0</property>
+			    </widget>
+			    <packing>
+			      <property name="padding">0</property>
+			      <property name="expand">False</property>
+			      <property name="fill">False</property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkEntry" id="all_names[0]">
+			      <property name="visible">True</property>
+			      <property name="tooltip" translatable="yes">Try to be short</property>
+			      <property name="can_focus">True</property>
+			      <property name="editable">True</property>
+			      <property name="visibility">True</property>
+			      <property name="max_length">0</property>
+			      <property name="text" translatable="yes">altern</property>
+			      <property name="has_frame">True</property>
+			      <property name="invisible_char">*</property>
+			      <property name="activates_default">False</property>
+			    </widget>
+			    <packing>
+			      <property name="padding">0</property>
+			      <property name="expand">True</property>
+			      <property name="fill">True</property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkLabel" id="label36">
+			      <property name="visible">True</property>
+			      <property name="label" translatable="yes">Background color: </property>
+			      <property name="use_underline">False</property>
+			      <property name="use_markup">False</property>
+			      <property name="justify">GTK_JUSTIFY_RIGHT</property>
+			      <property name="wrap">False</property>
+			      <property name="selectable">False</property>
+			      <property name="xalign">1</property>
+			      <property name="yalign">0.5</property>
+			      <property name="xpad">0</property>
+			      <property name="ypad">0</property>
+			      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			      <property name="width_chars">-1</property>
+			      <property name="single_line_mode">False</property>
+			      <property name="angle">0</property>
+			    </widget>
+			    <packing>
+			      <property name="padding">0</property>
+			      <property name="expand">False</property>
+			      <property name="fill">False</property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkButton" id="pp_bgcolor">
+			      <property name="visible">True</property>
+			      <property name="tooltip" translatable="yes">You can customize the background color of the messages for this new site</property>
+			      <property name="can_focus">True</property>
+			      <property name="label" translatable="yes">pp_bgcolor_bt</property>
+			      <property name="use_underline">True</property>
+			      <property name="relief">GTK_RELIEF_NORMAL</property>
+			      <property name="focus_on_click">True</property>
+			    </widget>
+			    <packing>
+			      <property name="padding">0</property>
+			      <property name="expand">False</property>
+			      <property name="fill">False</property>
+			    </packing>
+			  </child>
+			</widget>
+		      </child>
+		    </widget>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label6">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Basic settings</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0.5</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="type">label_item</property>
+		    </packing>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="padding">2</property>
+		  <property name="expand">True</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkFrame" id="frame2">
+		  <property name="visible">True</property>
+		  <property name="label_xalign">0</property>
+		  <property name="label_yalign">0.5</property>
+		  <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
+
+		  <child>
+		    <widget class="GtkTable" id="table1">
+		      <property name="border_width">2</property>
+		      <property name="visible">True</property>
+		      <property name="n_rows">4</property>
+		      <property name="n_columns">2</property>
+		      <property name="homogeneous">False</property>
+		      <property name="row_spacing">0</property>
+		      <property name="column_spacing">0</property>
+
+		      <child>
+			<widget class="GtkLabel" id="label8">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">POP3 URL:</property>
+			  <property name="use_underline">False</property>
+			  <property name="use_markup">False</property>
+			  <property name="justify">GTK_JUSTIFY_LEFT</property>
+			  <property name="wrap">False</property>
+			  <property name="selectable">False</property>
+			  <property name="xalign">0</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xpad">0</property>
+			  <property name="ypad">0</property>
+			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			  <property name="width_chars">-1</property>
+			  <property name="single_line_mode">False</property>
+			  <property name="angle">0</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">0</property>
+			  <property name="right_attach">1</property>
+			  <property name="top_attach">0</property>
+			  <property name="bottom_attach">1</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkEntry" id="backend_url">
+			  <property name="width_request">500</property>
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="editable">True</property>
+			  <property name="visibility">True</property>
+			  <property name="max_length">0</property>
+			  <property name="text" translatable="yes">pop3://</property>
+			  <property name="has_frame">True</property>
+			  <property name="invisible_char">*</property>
+			  <property name="activates_default">False</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">1</property>
+			  <property name="right_attach">2</property>
+			  <property name="top_attach">0</property>
+			  <property name="bottom_attach">1</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkLabel" id="label10">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Refresh frequency
+ (seconds): </property>
+			  <property name="use_underline">False</property>
+			  <property name="use_markup">False</property>
+			  <property name="justify">GTK_JUSTIFY_LEFT</property>
+			  <property name="wrap">False</property>
+			  <property name="selectable">False</property>
+			  <property name="xalign">0</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xpad">0</property>
+			  <property name="ypad">0</property>
+			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			  <property name="width_chars">-1</property>
+			  <property name="single_line_mode">False</property>
+			  <property name="angle">0</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">0</property>
+			  <property name="right_attach">1</property>
+			  <property name="top_attach">3</property>
+			  <property name="bottom_attach">4</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkSpinButton" id="board_check_delay">
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="climb_rate">1</property>
+			  <property name="digits">0</property>
+			  <property name="numeric">False</property>
+			  <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+			  <property name="snap_to_ticks">False</property>
+			  <property name="wrap">False</property>
+			  <property name="adjustment">300 10 10000 1 10 10</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">1</property>
+			  <property name="right_attach">2</property>
+			  <property name="top_attach">3</property>
+			  <property name="bottom_attach">4</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkLabel" id="label62">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Login</property>
+			  <property name="use_underline">False</property>
+			  <property name="use_markup">False</property>
+			  <property name="justify">GTK_JUSTIFY_LEFT</property>
+			  <property name="wrap">False</property>
+			  <property name="selectable">False</property>
+			  <property name="xalign">0</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xpad">0</property>
+			  <property name="ypad">0</property>
+			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			  <property name="width_chars">-1</property>
+			  <property name="single_line_mode">False</property>
+			  <property name="angle">0</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">0</property>
+			  <property name="right_attach">1</property>
+			  <property name="top_attach">1</property>
+			  <property name="bottom_attach">2</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkEntry" id="pop3_user">
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="editable">True</property>
+			  <property name="visibility">True</property>
+			  <property name="max_length">0</property>
+			  <property name="text" translatable="yes"></property>
+			  <property name="has_frame">True</property>
+			  <property name="invisible_char">*</property>
+			  <property name="activates_default">False</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">1</property>
+			  <property name="right_attach">2</property>
+			  <property name="top_attach">1</property>
+			  <property name="bottom_attach">2</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkLabel" id="label63">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Password</property>
+			  <property name="use_underline">False</property>
+			  <property name="use_markup">False</property>
+			  <property name="justify">GTK_JUSTIFY_LEFT</property>
+			  <property name="wrap">False</property>
+			  <property name="selectable">False</property>
+			  <property name="xalign">0</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xpad">0</property>
+			  <property name="ypad">0</property>
+			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			  <property name="width_chars">-1</property>
+			  <property name="single_line_mode">False</property>
+			  <property name="angle">0</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">0</property>
+			  <property name="right_attach">1</property>
+			  <property name="top_attach">2</property>
+			  <property name="bottom_attach">3</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkEntry" id="pop3_pass">
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="editable">True</property>
+			  <property name="visibility">False</property>
+			  <property name="max_length">0</property>
+			  <property name="text" translatable="yes"></property>
+			  <property name="has_frame">True</property>
+			  <property name="invisible_char">*</property>
+			  <property name="activates_default">False</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">1</property>
+			  <property name="right_attach">2</property>
+			  <property name="top_attach">2</property>
+			  <property name="bottom_attach">3</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+		    </widget>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label7">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Mail account information</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0.5</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="type">label_item</property>
+		    </packing>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="padding">2</property>
+		  <property name="expand">True</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<placeholder/>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">True</property>
+	      <property name="fill">True</property>
+	    </packing>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">True</property>
+	  <property name="fill">True</property>
+	</packing>
+      </child>
+    </widget>
+  </child>
+</widget>
+
+<widget class="GtkColorSelectionDialog" id="colorselection_dialog">
+  <property name="visible">True</property>
+  <property name="title" translatable="yes">Choix de la couleur</property>
+  <property name="type">GTK_WINDOW_TOPLEVEL</property>
+  <property name="window_position">GTK_WIN_POS_NONE</property>
+  <property name="modal">False</property>
+  <property name="resizable">False</property>
+  <property name="destroy_with_parent">False</property>
+  <property name="decorated">True</property>
+  <property name="skip_taskbar_hint">False</property>
+  <property name="skip_pager_hint">False</property>
+  <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+  <property name="focus_on_map">True</property>
+
+  <child internal-child="cancel_button">
+    <widget class="GtkButton" id="cancel_button1">
+      <property name="visible">True</property>
+      <property name="can_default">True</property>
+      <property name="can_focus">True</property>
+      <property name="relief">GTK_RELIEF_NORMAL</property>
+      <property name="focus_on_click">True</property>
+    </widget>
+  </child>
+
+  <child internal-child="ok_button">
+    <widget class="GtkButton" id="ok_button1">
+      <property name="visible">True</property>
+      <property name="can_default">True</property>
+      <property name="can_focus">True</property>
+      <property name="relief">GTK_RELIEF_NORMAL</property>
+      <property name="focus_on_click">True</property>
+    </widget>
+  </child>
+
+  <child internal-child="help_button">
+    <widget class="GtkButton" id="help_button1">
+      <property name="visible">True</property>
+      <property name="can_default">True</property>
+      <property name="can_focus">True</property>
+      <property name="relief">GTK_RELIEF_NORMAL</property>
+      <property name="focus_on_click">True</property>
+    </widget>
+  </child>
+
+  <child internal-child="color_selection">
+    <widget class="GtkColorSelection" id="color_selection1">
+      <property name="visible">True</property>
+      <property name="has_opacity_control">False</property>
+      <property name="has_palette">False</property>
+    </widget>
+  </child>
+</widget>
+
+<widget class="GtkDialog" id="global_pinnipede_options_dialog">
+  <property name="visible">True</property>
+  <property name="title" translatable="yes">Change pinnipede settings</property>
+  <property name="type">GTK_WINDOW_TOPLEVEL</property>
+  <property name="window_position">GTK_WIN_POS_NONE</property>
+  <property name="modal">False</property>
+  <property name="resizable">True</property>
+  <property name="destroy_with_parent">False</property>
+  <property name="decorated">True</property>
+  <property name="skip_taskbar_hint">False</property>
+  <property name="skip_pager_hint">False</property>
+  <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+  <property name="focus_on_map">True</property>
+  <property name="has_separator">True</property>
+
+  <child internal-child="vbox">
+    <widget class="GtkVBox" id="dialog-vbox3">
+      <property name="visible">True</property>
+      <property name="homogeneous">False</property>
+      <property name="spacing">0</property>
+
+      <child internal-child="action_area">
+	<widget class="GtkHButtonBox" id="dialog-action_area3">
+	  <property name="visible">True</property>
+	  <property name="layout_style">GTK_BUTTONBOX_END</property>
+
+	  <child>
+	    <widget class="GtkButton" id="cancel_bt">
+	      <property name="visible">True</property>
+	      <property name="can_default">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label">gtk-cancel</property>
+	      <property name="use_stock">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">-6</property>
+	    </widget>
+	  </child>
+
+	  <child>
+	    <widget class="GtkButton" id="apply_bt">
+	      <property name="visible">True</property>
+	      <property name="can_default">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label">gtk-apply</property>
+	      <property name="use_stock">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">-10</property>
+	    </widget>
+	  </child>
+
+	  <child>
+	    <widget class="GtkButton" id="ok_bt">
+	      <property name="visible">True</property>
+	      <property name="can_default">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label">gtk-ok</property>
+	      <property name="use_stock">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">-5</property>
+	    </widget>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">False</property>
+	  <property name="fill">True</property>
+	  <property name="pack_type">GTK_PACK_END</property>
+	</packing>
+      </child>
+
+      <child>
+	<widget class="GtkNotebook" id="notebook1">
+	  <property name="visible">True</property>
+	  <property name="can_focus">True</property>
+	  <property name="show_tabs">True</property>
+	  <property name="show_border">True</property>
+	  <property name="tab_pos">GTK_POS_TOP</property>
+	  <property name="scrollable">False</property>
+	  <property name="enable_popup">False</property>
+
+	  <child>
+	    <widget class="GtkVBox" id="vbox5">
+	      <property name="visible">True</property>
+	      <property name="homogeneous">False</property>
+	      <property name="spacing">2</property>
+
+	      <child>
+		<widget class="GtkLabel" id="label15">
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">Change pinnipede options</property>
+		  <property name="use_underline">False</property>
+		  <property name="use_markup">False</property>
+		  <property name="justify">GTK_JUSTIFY_LEFT</property>
+		  <property name="wrap">False</property>
+		  <property name="selectable">False</property>
+		  <property name="xalign">0.5</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">0</property>
+		  <property name="ypad">0</property>
+		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		  <property name="width_chars">-1</property>
+		  <property name="single_line_mode">False</property>
+		  <property name="angle">0</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkFrame" id="frame4">
+		  <property name="visible">True</property>
+		  <property name="label_xalign">0</property>
+		  <property name="label_yalign">0.5</property>
+		  <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
+
+		  <child>
+		    <widget class="GtkVBox" id="vbox6">
+		      <property name="visible">True</property>
+		      <property name="homogeneous">False</property>
+		      <property name="spacing">0</property>
+
+		      <child>
+			<widget class="GtkHBox" id="hbox9">
+			  <property name="visible">True</property>
+			  <property name="homogeneous">False</property>
+			  <property name="spacing">0</property>
+
+			  <child>
+			    <widget class="GtkCheckButton" id="pinnipede_open_on_start">
+			      <property name="visible">True</property>
+			      <property name="tooltip" translatable="yes">The pinnipede window will show up as soon as wmcoincoin is started</property>
+			      <property name="can_focus">True</property>
+			      <property name="label" translatable="yes">Auto-open on startup </property>
+			      <property name="use_underline">True</property>
+			      <property name="relief">GTK_RELIEF_NORMAL</property>
+			      <property name="focus_on_click">True</property>
+			      <property name="active">False</property>
+			      <property name="inconsistent">False</property>
+			      <property name="draw_indicator">True</property>
+			    </widget>
+			    <packing>
+			      <property name="padding">0</property>
+			      <property name="expand">False</property>
+			      <property name="fill">False</property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkLabel" id="pinnipede_open_on_start_fb">
+			      <property name="visible">True</property>
+			      <property name="label" translatable="yes">label32</property>
+			      <property name="use_underline">False</property>
+			      <property name="use_markup">False</property>
+			      <property name="justify">GTK_JUSTIFY_LEFT</property>
+			      <property name="wrap">False</property>
+			      <property name="selectable">False</property>
+			      <property name="xalign">0.5</property>
+			      <property name="yalign">0.5</property>
+			      <property name="xpad">0</property>
+			      <property name="ypad">0</property>
+			      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			      <property name="width_chars">-1</property>
+			      <property name="single_line_mode">False</property>
+			      <property name="angle">0</property>
+			    </widget>
+			    <packing>
+			      <property name="padding">0</property>
+			      <property name="expand">False</property>
+			      <property name="fill">False</property>
+			    </packing>
+			  </child>
+			</widget>
+			<packing>
+			  <property name="padding">0</property>
+			  <property name="expand">True</property>
+			  <property name="fill">True</property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkFrame" id="frame6">
+			  <property name="border_width">2</property>
+			  <property name="visible">True</property>
+			  <property name="label_xalign">0</property>
+			  <property name="label_yalign">0.5</property>
+			  <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
+
+			  <child>
+			    <widget class="GtkVBox" id="vbox24">
+			      <property name="border_width">1</property>
+			      <property name="visible">True</property>
+			      <property name="homogeneous">False</property>
+			      <property name="spacing">0</property>
+
+			      <child>
+				<widget class="GtkHBox" id="hbox6">
+				  <property name="visible">True</property>
+				  <property name="homogeneous">False</property>
+				  <property name="spacing">0</property>
+
+				  <child>
+				    <widget class="GtkLabel" id="label19">
+				      <property name="visible">True</property>
+				      <property name="label" translatable="yes">Font family </property>
+				      <property name="use_underline">False</property>
+				      <property name="use_markup">False</property>
+				      <property name="justify">GTK_JUSTIFY_LEFT</property>
+				      <property name="wrap">False</property>
+				      <property name="selectable">False</property>
+				      <property name="xalign">0.5</property>
+				      <property name="yalign">0.5</property>
+				      <property name="xpad">0</property>
+				      <property name="ypad">0</property>
+				      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+				      <property name="width_chars">-1</property>
+				      <property name="single_line_mode">False</property>
+				      <property name="angle">0</property>
+				    </widget>
+				    <packing>
+				      <property name="padding">0</property>
+				      <property name="expand">False</property>
+				      <property name="fill">False</property>
+				    </packing>
+				  </child>
+
+				  <child>
+				    <widget class="GtkCombo" id="combo1">
+				      <property name="visible">True</property>
+				      <property name="value_in_list">False</property>
+				      <property name="allow_empty">True</property>
+				      <property name="case_sensitive">False</property>
+				      <property name="enable_arrow_keys">True</property>
+				      <property name="enable_arrows_always">False</property>
+
+				      <child internal-child="entry">
+					<widget class="GtkEntry" id="pp_fn_family">
+					  <property name="visible">True</property>
+					  <property name="can_focus">True</property>
+					  <property name="editable">True</property>
+					  <property name="visibility">True</property>
+					  <property name="max_length">0</property>
+					  <property name="text" translatable="yes"></property>
+					  <property name="has_frame">True</property>
+					  <property name="invisible_char">*</property>
+					  <property name="activates_default">False</property>
+					</widget>
+				      </child>
+
+				      <child internal-child="list">
+					<widget class="GtkList" id="combo-list1">
+					  <property name="visible">True</property>
+					  <property name="selection_mode">GTK_SELECTION_BROWSE</property>
+
+					  <child>
+					    <widget class="GtkListItem" id="listitem139">
+					      <property name="visible">True</property>
+					      <property name="can_focus">True</property>
+					      <property name="label" translatable="yes">sans</property>
+					    </widget>
+					  </child>
+
+					  <child>
+					    <widget class="GtkListItem" id="listitem140">
+					      <property name="visible">True</property>
+					      <property name="can_focus">True</property>
+					      <property name="label" translatable="yes">verdana</property>
+					    </widget>
+					  </child>
+					</widget>
+				      </child>
+				    </widget>
+				    <packing>
+				      <property name="padding">0</property>
+				      <property name="expand">False</property>
+				      <property name="fill">False</property>
+				    </packing>
+				  </child>
+
+				  <child>
+				    <widget class="GtkLabel" id="label20">
+				      <property name="visible">True</property>
+				      <property name="label" translatable="yes">Font size</property>
+				      <property name="use_underline">False</property>
+				      <property name="use_markup">False</property>
+				      <property name="justify">GTK_JUSTIFY_LEFT</property>
+				      <property name="wrap">False</property>
+				      <property name="selectable">False</property>
+				      <property name="xalign">0.5</property>
+				      <property name="yalign">0.5</property>
+				      <property name="xpad">0</property>
+				      <property name="ypad">0</property>
+				      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+				      <property name="width_chars">-1</property>
+				      <property name="single_line_mode">False</property>
+				      <property name="angle">0</property>
+				    </widget>
+				    <packing>
+				      <property name="padding">0</property>
+				      <property name="expand">False</property>
+				      <property name="fill">False</property>
+				    </packing>
+				  </child>
+
+				  <child>
+				    <widget class="GtkSpinButton" id="pp_fn_size">
+				      <property name="visible">True</property>
+				      <property name="can_focus">True</property>
+				      <property name="climb_rate">1</property>
+				      <property name="digits">0</property>
+				      <property name="numeric">False</property>
+				      <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+				      <property name="snap_to_ticks">False</property>
+				      <property name="wrap">False</property>
+				      <property name="adjustment">2 0 100 1 10 10</property>
+				    </widget>
+				    <packing>
+				      <property name="padding">0</property>
+				      <property name="expand">False</property>
+				      <property name="fill">False</property>
+				    </packing>
+				  </child>
+
+				  <child>
+				    <widget class="GtkButton" id="font_bt">
+				      <property name="visible">True</property>
+				      <property name="can_focus">True</property>
+				      <property name="label">gtk-select-font</property>
+				      <property name="use_stock">True</property>
+				      <property name="relief">GTK_RELIEF_NORMAL</property>
+				      <property name="focus_on_click">True</property>
+				    </widget>
+				    <packing>
+				      <property name="padding">0</property>
+				      <property name="expand">False</property>
+				      <property name="fill">False</property>
+				    </packing>
+				  </child>
+				</widget>
+				<packing>
+				  <property name="padding">0</property>
+				  <property name="expand">True</property>
+				  <property name="fill">True</property>
+				</packing>
+			      </child>
+
+			      <child>
+				<widget class="GtkHBox" id="hbox18">
+				  <property name="visible">True</property>
+				  <property name="homogeneous">False</property>
+				  <property name="spacing">0</property>
+
+				  <child>
+				    <widget class="GtkCheckButton" id="disable_xft_antialiasing">
+				      <property name="visible">True</property>
+				      <property name="can_focus">True</property>
+				      <property name="label" translatable="yes">Disable antialiasing </property>
+				      <property name="use_underline">True</property>
+				      <property name="relief">GTK_RELIEF_NORMAL</property>
+				      <property name="focus_on_click">True</property>
+				      <property name="active">False</property>
+				      <property name="inconsistent">False</property>
+				      <property name="draw_indicator">True</property>
+				    </widget>
+				    <packing>
+				      <property name="padding">0</property>
+				      <property name="expand">False</property>
+				      <property name="fill">False</property>
+				    </packing>
+				  </child>
+
+				  <child>
+				    <widget class="GtkLabel" id="disable_xft_antialiasing_fb">
+				      <property name="visible">True</property>
+				      <property name="label" translatable="yes">label32</property>
+				      <property name="use_underline">False</property>
+				      <property name="use_markup">False</property>
+				      <property name="justify">GTK_JUSTIFY_LEFT</property>
+				      <property name="wrap">False</property>
+				      <property name="selectable">False</property>
+				      <property name="xalign">0.5</property>
+				      <property name="yalign">0.5</property>
+				      <property name="xpad">0</property>
+				      <property name="ypad">0</property>
+				      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+				      <property name="width_chars">-1</property>
+				      <property name="single_line_mode">False</property>
+				      <property name="angle">0</property>
+				    </widget>
+				    <packing>
+				      <property name="padding">0</property>
+				      <property name="expand">False</property>
+				      <property name="fill">False</property>
+				    </packing>
+				  </child>
+				</widget>
+				<packing>
+				  <property name="padding">0</property>
+				  <property name="expand">True</property>
+				  <property name="fill">True</property>
+				</packing>
+			      </child>
+			    </widget>
+			  </child>
+
+			  <child>
+			    <widget class="GtkLabel" id="label18">
+			      <property name="visible">True</property>
+			      <property name="label" translatable="yes">Font</property>
+			      <property name="use_underline">False</property>
+			      <property name="use_markup">False</property>
+			      <property name="justify">GTK_JUSTIFY_LEFT</property>
+			      <property name="wrap">False</property>
+			      <property name="selectable">False</property>
+			      <property name="xalign">0.5</property>
+			      <property name="yalign">0.5</property>
+			      <property name="xpad">0</property>
+			      <property name="ypad">0</property>
+			      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			      <property name="width_chars">-1</property>
+			      <property name="single_line_mode">False</property>
+			      <property name="angle">0</property>
+			    </widget>
+			    <packing>
+			      <property name="type">label_item</property>
+			    </packing>
+			  </child>
+			</widget>
+			<packing>
+			  <property name="padding">0</property>
+			  <property name="expand">True</property>
+			  <property name="fill">True</property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkFrame" id="frame12">
+			  <property name="visible">True</property>
+			  <property name="label_xalign">0</property>
+			  <property name="label_yalign">0.5</property>
+			  <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
+
+			  <child>
+			    <widget class="GtkHBox" id="hbox42">
+			      <property name="border_width">1</property>
+			      <property name="visible">True</property>
+			      <property name="homogeneous">False</property>
+			      <property name="spacing">0</property>
+
+			      <child>
+				<widget class="GtkHBox" id="hbox43">
+				  <property name="visible">True</property>
+				  <property name="homogeneous">False</property>
+				  <property name="spacing">0</property>
+
+				  <child>
+				    <widget class="GtkLabel" id="label107">
+				      <property name="visible">True</property>
+				      <property name="label" translatable="yes">Tabs position </property>
+				      <property name="use_underline">False</property>
+				      <property name="use_markup">False</property>
+				      <property name="justify">GTK_JUSTIFY_LEFT</property>
+				      <property name="wrap">False</property>
+				      <property name="selectable">False</property>
+				      <property name="xalign">0.5</property>
+				      <property name="yalign">0.5</property>
+				      <property name="xpad">0</property>
+				      <property name="ypad">0</property>
+				      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+				      <property name="width_chars">-1</property>
+				      <property name="single_line_mode">False</property>
+				      <property name="angle">0</property>
+				    </widget>
+				    <packing>
+				      <property name="padding">0</property>
+				      <property name="expand">False</property>
+				      <property name="fill">False</property>
+				    </packing>
+				  </child>
+
+				  <child>
+				    <widget class="GtkOptionMenu" id="pp_tabs_pos">
+				      <property name="border_width">3</property>
+				      <property name="visible">True</property>
+				      <property name="can_focus">True</property>
+				      <property name="history">0</property>
+
+				      <child>
+					<widget class="GtkMenu" id="menu3">
+
+					  <child>
+					    <widget class="GtkMenuItem" id="bottom1">
+					      <property name="visible">True</property>
+					      <property name="label" translatable="yes">bottom</property>
+					      <property name="use_underline">True</property>
+					    </widget>
+					  </child>
+
+					  <child>
+					    <widget class="GtkMenuItem" id="left1">
+					      <property name="visible">True</property>
+					      <property name="label" translatable="yes">left</property>
+					      <property name="use_underline">True</property>
+					    </widget>
+					  </child>
+
+					  <child>
+					    <widget class="GtkMenuItem" id="right1">
+					      <property name="visible">True</property>
+					      <property name="label" translatable="yes">right</property>
+					      <property name="use_underline">True</property>
+					    </widget>
+					  </child>
+					</widget>
+				      </child>
+				    </widget>
+				    <packing>
+				      <property name="padding">0</property>
+				      <property name="expand">False</property>
+				      <property name="fill">False</property>
+				    </packing>
+				  </child>
+				</widget>
+				<packing>
+				  <property name="padding">0</property>
+				  <property name="expand">True</property>
+				  <property name="fill">True</property>
+				</packing>
+			      </child>
+
+			      <child>
+				<widget class="GtkVBox" id="vbox26">
+				  <property name="visible">True</property>
+				  <property name="homogeneous">False</property>
+				  <property name="spacing">0</property>
+
+				  <child>
+				    <widget class="GtkHBox" id="hbox10">
+				      <property name="visible">True</property>
+				      <property name="homogeneous">False</property>
+				      <property name="spacing">0</property>
+
+				      <child>
+					<widget class="GtkCheckButton" id="pp_use_classical_tabs">
+					  <property name="visible">True</property>
+					  <property name="tooltip" translatable="yes">if you think that the default behaviour of the tabs sucks..</property>
+					  <property name="can_focus">True</property>
+					  <property name="label" translatable="yes">Use 'classical' tabs behaviour </property>
+					  <property name="use_underline">True</property>
+					  <property name="relief">GTK_RELIEF_NORMAL</property>
+					  <property name="focus_on_click">True</property>
+					  <property name="active">False</property>
+					  <property name="inconsistent">False</property>
+					  <property name="draw_indicator">True</property>
+					</widget>
+					<packing>
+					  <property name="padding">0</property>
+					  <property name="expand">False</property>
+					  <property name="fill">False</property>
+					</packing>
+				      </child>
+
+				      <child>
+					<widget class="GtkLabel" id="pp_use_classical_tabs_fb">
+					  <property name="visible">True</property>
+					  <property name="label" translatable="yes">label32</property>
+					  <property name="use_underline">False</property>
+					  <property name="use_markup">False</property>
+					  <property name="justify">GTK_JUSTIFY_LEFT</property>
+					  <property name="wrap">False</property>
+					  <property name="selectable">False</property>
+					  <property name="xalign">0.5</property>
+					  <property name="yalign">0.5</property>
+					  <property name="xpad">0</property>
+					  <property name="ypad">0</property>
+					  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+					  <property name="width_chars">-1</property>
+					  <property name="single_line_mode">False</property>
+					  <property name="angle">0</property>
+					</widget>
+					<packing>
+					  <property name="padding">0</property>
+					  <property name="expand">False</property>
+					  <property name="fill">False</property>
+					</packing>
+				      </child>
+				    </widget>
+				    <packing>
+				      <property name="padding">0</property>
+				      <property name="expand">True</property>
+				      <property name="fill">True</property>
+				    </packing>
+				  </child>
+
+				  <child>
+				    <widget class="GtkHBox" id="hbox11">
+				      <property name="visible">True</property>
+				      <property name="homogeneous">False</property>
+				      <property name="spacing">0</property>
+
+				      <child>
+					<widget class="GtkCheckButton" id="pp_use_colored_tabs">
+					  <property name="visible">True</property>
+					  <property name="tooltip" translatable="yes">if used, the "tabs" will be colored accordingly to the background color of the messages in the pinnipede</property>
+					  <property name="can_focus">True</property>
+					  <property name="label" translatable="yes">Colored tabs </property>
+					  <property name="use_underline">True</property>
+					  <property name="relief">GTK_RELIEF_NORMAL</property>
+					  <property name="focus_on_click">True</property>
+					  <property name="active">False</property>
+					  <property name="inconsistent">False</property>
+					  <property name="draw_indicator">True</property>
+					</widget>
+					<packing>
+					  <property name="padding">0</property>
+					  <property name="expand">False</property>
+					  <property name="fill">False</property>
+					</packing>
+				      </child>
+
+				      <child>
+					<widget class="GtkLabel" id="pp_use_colored_tabs_fb">
+					  <property name="visible">True</property>
+					  <property name="label" translatable="yes">label32</property>
+					  <property name="use_underline">False</property>
+					  <property name="use_markup">False</property>
+					  <property name="justify">GTK_JUSTIFY_LEFT</property>
+					  <property name="wrap">False</property>
+					  <property name="selectable">False</property>
+					  <property name="xalign">0.5</property>
+					  <property name="yalign">0.5</property>
+					  <property name="xpad">0</property>
+					  <property name="ypad">0</property>
+					  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+					  <property name="width_chars">-1</property>
+					  <property name="single_line_mode">False</property>
+					  <property name="angle">0</property>
+					</widget>
+					<packing>
+					  <property name="padding">0</property>
+					  <property name="expand">False</property>
+					  <property name="fill">False</property>
+					</packing>
+				      </child>
+				    </widget>
+				    <packing>
+				      <property name="padding">0</property>
+				      <property name="expand">True</property>
+				      <property name="fill">True</property>
+				    </packing>
+				  </child>
+				</widget>
+				<packing>
+				  <property name="padding">0</property>
+				  <property name="expand">True</property>
+				  <property name="fill">True</property>
+				</packing>
+			      </child>
+			    </widget>
+			  </child>
+
+			  <child>
+			    <widget class="GtkLabel" id="label106">
+			      <property name="visible">True</property>
+			      <property name="label" translatable="yes">tabs</property>
+			      <property name="use_underline">False</property>
+			      <property name="use_markup">False</property>
+			      <property name="justify">GTK_JUSTIFY_LEFT</property>
+			      <property name="wrap">False</property>
+			      <property name="selectable">False</property>
+			      <property name="xalign">0.5</property>
+			      <property name="yalign">0.5</property>
+			      <property name="xpad">0</property>
+			      <property name="ypad">0</property>
+			      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			      <property name="width_chars">-1</property>
+			      <property name="single_line_mode">False</property>
+			      <property name="angle">0</property>
+			    </widget>
+			    <packing>
+			      <property name="type">label_item</property>
+			    </packing>
+			  </child>
+			</widget>
+			<packing>
+			  <property name="padding">0</property>
+			  <property name="expand">False</property>
+			  <property name="fill">False</property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkHBox" id="hbox12">
+			  <property name="visible">True</property>
+			  <property name="homogeneous">False</property>
+			  <property name="spacing">0</property>
+
+			  <child>
+			    <widget class="GtkCheckButton" id="hungry_boitakon">
+			      <property name="visible">True</property>
+			      <property name="tooltip" translatable="yes">If a message replies to a message in the hungry boitakon and another one which is not in the boitakon, it will be put in the boitakon only if this option is toggled</property>
+			      <property name="can_focus">True</property>
+			      <property name="label" translatable="yes">Very Hungry boitakon (eats answers to messages in boitakon) </property>
+			      <property name="use_underline">True</property>
+			      <property name="relief">GTK_RELIEF_NORMAL</property>
+			      <property name="focus_on_click">True</property>
+			      <property name="active">False</property>
+			      <property name="inconsistent">False</property>
+			      <property name="draw_indicator">True</property>
+			    </widget>
+			    <packing>
+			      <property name="padding">0</property>
+			      <property name="expand">False</property>
+			      <property name="fill">False</property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkLabel" id="hungry_boitakon_fb">
+			      <property name="visible">True</property>
+			      <property name="label" translatable="yes">label32</property>
+			      <property name="use_underline">False</property>
+			      <property name="use_markup">False</property>
+			      <property name="justify">GTK_JUSTIFY_LEFT</property>
+			      <property name="wrap">False</property>
+			      <property name="selectable">False</property>
+			      <property name="xalign">0.5</property>
+			      <property name="yalign">0.5</property>
+			      <property name="xpad">0</property>
+			      <property name="ypad">0</property>
+			      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			      <property name="width_chars">-1</property>
+			      <property name="single_line_mode">False</property>
+			      <property name="angle">0</property>
+			    </widget>
+			    <packing>
+			      <property name="padding">0</property>
+			      <property name="expand">False</property>
+			      <property name="fill">False</property>
+			    </packing>
+			  </child>
+			</widget>
+			<packing>
+			  <property name="padding">0</property>
+			  <property name="expand">True</property>
+			  <property name="fill">True</property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkHBox" id="hbox23">
+			  <property name="visible">True</property>
+			  <property name="homogeneous">False</property>
+			  <property name="spacing">0</property>
+
+			  <child>
+			    <widget class="GtkCheckButton" id="auto_swallow">
+			      <property name="visible">True</property>
+			      <property name="tooltip" translatable="yes">When enabled, the 64x64 dockapp will be embedded into the pinnipede</property>
+			      <property name="can_focus">True</property>
+			      <property name="label" translatable="yes">Auto-swallow the dock applet (disable if you want wmcoincoin as a real dock app) </property>
+			      <property name="use_underline">True</property>
+			      <property name="relief">GTK_RELIEF_NORMAL</property>
+			      <property name="focus_on_click">True</property>
+			      <property name="active">False</property>
+			      <property name="inconsistent">False</property>
+			      <property name="draw_indicator">True</property>
+			    </widget>
+			    <packing>
+			      <property name="padding">0</property>
+			      <property name="expand">False</property>
+			      <property name="fill">False</property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkLabel" id="auto_swallow_fb">
+			      <property name="visible">True</property>
+			      <property name="label" translatable="yes">label32</property>
+			      <property name="use_underline">False</property>
+			      <property name="use_markup">False</property>
+			      <property name="justify">GTK_JUSTIFY_LEFT</property>
+			      <property name="wrap">False</property>
+			      <property name="selectable">False</property>
+			      <property name="xalign">0.5</property>
+			      <property name="yalign">0.5</property>
+			      <property name="xpad">0</property>
+			      <property name="ypad">0</property>
+			      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			      <property name="width_chars">-1</property>
+			      <property name="single_line_mode">False</property>
+			      <property name="angle">0</property>
+			    </widget>
+			    <packing>
+			      <property name="padding">0</property>
+			      <property name="expand">False</property>
+			      <property name="fill">False</property>
+			    </packing>
+			  </child>
+			</widget>
+			<packing>
+			  <property name="padding">0</property>
+			  <property name="expand">True</property>
+			  <property name="fill">True</property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkHBox" id="hbox32">
+			  <property name="visible">True</property>
+			  <property name="homogeneous">False</property>
+			  <property name="spacing">0</property>
+
+			  <child>
+			    <widget class="GtkCheckButton" id="enable_troll_detector">
+			      <property name="visible">True</property>
+			      <property name="can_focus">True</property>
+			      <property name="label" translatable="yes">Enable the troll-detector </property>
+			      <property name="use_underline">True</property>
+			      <property name="relief">GTK_RELIEF_NORMAL</property>
+			      <property name="focus_on_click">True</property>
+			      <property name="active">False</property>
+			      <property name="inconsistent">False</property>
+			      <property name="draw_indicator">True</property>
+			    </widget>
+			    <packing>
+			      <property name="padding">0</property>
+			      <property name="expand">False</property>
+			      <property name="fill">False</property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkLabel" id="enable_troll_detector_fb">
+			      <property name="visible">True</property>
+			      <property name="label" translatable="yes">enable_troll_detector</property>
+			      <property name="use_underline">False</property>
+			      <property name="use_markup">False</property>
+			      <property name="justify">GTK_JUSTIFY_LEFT</property>
+			      <property name="wrap">False</property>
+			      <property name="selectable">False</property>
+			      <property name="xalign">0.5</property>
+			      <property name="yalign">0.5</property>
+			      <property name="xpad">0</property>
+			      <property name="ypad">0</property>
+			      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			      <property name="width_chars">-1</property>
+			      <property name="single_line_mode">False</property>
+			      <property name="angle">0</property>
+			    </widget>
+			    <packing>
+			      <property name="padding">0</property>
+			      <property name="expand">False</property>
+			      <property name="fill">False</property>
+			    </packing>
+			  </child>
+			</widget>
+			<packing>
+			  <property name="padding">0</property>
+			  <property name="expand">False</property>
+			  <property name="fill">False</property>
+			</packing>
+		      </child>
+		    </widget>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label16">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes"><b>Global settings</b></property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">True</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0.5</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="type">label_item</property>
+		    </packing>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">True</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkHBox" id="hbox36">
+		  <property name="visible">True</property>
+		  <property name="homogeneous">False</property>
+		  <property name="spacing">0</property>
+
+		  <child>
+		    <widget class="GtkImage" id="image15">
+		      <property name="visible">True</property>
+		      <property name="pixbuf">cbronson.jpg</property>
+		      <property name="xalign">0.5</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">False</property>
+		      <property name="fill">False</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label95">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Hello, this is Charles Bronson. I wish you a good coincoin</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0.5</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">False</property>
+		      <property name="fill">False</property>
+		    </packing>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">True</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="tab_expand">False</property>
+	      <property name="tab_fill">True</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="label87">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Appearance</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0.5</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="type">tab</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkVBox" id="vbox17">
+	      <property name="visible">True</property>
+	      <property name="homogeneous">False</property>
+	      <property name="spacing">0</property>
+
+	      <child>
+		<widget class="GtkTable" id="table6">
+		  <property name="visible">True</property>
+		  <property name="n_rows">2</property>
+		  <property name="n_columns">3</property>
+		  <property name="homogeneous">False</property>
+		  <property name="row_spacing">0</property>
+		  <property name="column_spacing">0</property>
+
+		  <child>
+		    <widget class="GtkLabel" id="label81">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Main Browser</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">0</property>
+		      <property name="bottom_attach">1</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label82">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Secondary Browser</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">0</property>
+		      <property name="right_attach">1</property>
+		      <property name="top_attach">1</property>
+		      <property name="bottom_attach">2</property>
+		      <property name="x_options">fill</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkCombo" id="combo2">
+		      <property name="visible">True</property>
+		      <property name="value_in_list">False</property>
+		      <property name="allow_empty">True</property>
+		      <property name="case_sensitive">False</property>
+		      <property name="enable_arrow_keys">True</property>
+		      <property name="enable_arrows_always">False</property>
+
+		      <child internal-child="entry">
+			<widget class="GtkEntry" id="browser_cmd">
+			  <property name="width_request">400</property>
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="editable">True</property>
+			  <property name="visibility">True</property>
+			  <property name="max_length">0</property>
+			  <property name="text" translatable="yes"></property>
+			  <property name="has_frame">True</property>
+			  <property name="invisible_char">*</property>
+			  <property name="activates_default">False</property>
+			</widget>
+		      </child>
+
+		      <child internal-child="list">
+			<widget class="GtkList" id="combo-list2">
+			  <property name="visible">True</property>
+			  <property name="selection_mode">GTK_SELECTION_BROWSE</property>
+
+			  <child>
+			    <widget class="GtkListItem" id="listitem141">
+			      <property name="visible">True</property>
+			      <property name="can_focus">True</property>
+			      <property name="label" translatable="yes">xdg-open %s &</property>
+			    </widget>
+			  </child>
+
+			</widget>
+		      </child>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">0</property>
+		      <property name="bottom_attach">1</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkCombo" id="combo3">
+		      <property name="visible">True</property>
+		      <property name="value_in_list">False</property>
+		      <property name="allow_empty">True</property>
+		      <property name="case_sensitive">False</property>
+		      <property name="enable_arrow_keys">True</property>
+		      <property name="enable_arrows_always">False</property>
+
+		      <child internal-child="entry">
+			<widget class="GtkEntry" id="browser2_cmd">
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="editable">True</property>
+			  <property name="visibility">True</property>
+			  <property name="max_length">0</property>
+			  <property name="text" translatable="yes"></property>
+			  <property name="has_frame">True</property>
+			  <property name="invisible_char">*</property>
+			  <property name="activates_default">False</property>
+			</widget>
+		      </child>
+
+		      <child internal-child="list">
+			<widget class="GtkList" id="combo-list3">
+			  <property name="visible">True</property>
+			  <property name="selection_mode">GTK_SELECTION_BROWSE</property>
+
+			  <child>
+			    <widget class="GtkListItem" id="listitem151">
+			      <property name="visible">True</property>
+			      <property name="can_focus">True</property>
+			      <property name="label" translatable="yes">xdg-open %s &</property>
+			    </widget>
+			  </child>
+			</widget>
+		      </child>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">1</property>
+		      <property name="right_attach">2</property>
+		      <property name="top_attach">1</property>
+		      <property name="bottom_attach">2</property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="browser_cmd_fb">
+		      <property name="width_request">80</property>
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">label83</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_CENTER</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">2</property>
+		      <property name="right_attach">3</property>
+		      <property name="top_attach">0</property>
+		      <property name="bottom_attach">1</property>
+		      <property name="x_padding">1</property>
+		      <property name="x_options"></property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="browser2_cmd_fb">
+		      <property name="width_request">80</property>
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">label84</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_CENTER</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="left_attach">2</property>
+		      <property name="right_attach">3</property>
+		      <property name="top_attach">1</property>
+		      <property name="bottom_attach">2</property>
+		      <property name="x_padding">1</property>
+		      <property name="x_options"></property>
+		      <property name="y_options"></property>
+		    </packing>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkLabel" id="label85">
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes"><span size="medium">These options allows you to launch an external browser from wmcoincoin, this is used for reading the news, the comments detected by the flamophone, the personnal messages, the [url]s of the pinnipede teletype.
+<b>be careful</b>: this kind of 'external' command might be a great source of vulnerability since the urls can contain ANY caracter (think of 'http://plop.org; reboot' ..
+For this reason, dangerous caracter are carefully escapped by wmcc before calling the external browser
+By default, no browser is selected. 
+In the command, the <b>%s</b> is remplaced by the <b>escaped URL</b>. <u>Do not quote it</u>, or your browser will have problems to read urls containg character such as '&amp;', '$' etc. Do not forget to put an '&amp;' at the end of the command line or wmcc will freeze until the browser is closed.</span></property>
+		  <property name="use_underline">False</property>
+		  <property name="use_markup">True</property>
+		  <property name="justify">GTK_JUSTIFY_LEFT</property>
+		  <property name="wrap">True</property>
+		  <property name="selectable">False</property>
+		  <property name="xalign">0.5</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">0</property>
+		  <property name="ypad">0</property>
+		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		  <property name="width_chars">-1</property>
+		  <property name="single_line_mode">False</property>
+		  <property name="angle">0</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<placeholder/>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="tab_expand">False</property>
+	      <property name="tab_fill">True</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="label88">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Browser</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0.5</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="type">tab</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkVBox" id="vbox19">
+	      <property name="visible">True</property>
+	      <property name="homogeneous">False</property>
+	      <property name="spacing">0</property>
+
+	      <child>
+		<widget class="GtkHBox" id="hbox33">
+		  <property name="visible">True</property>
+		  <property name="homogeneous">False</property>
+		  <property name="spacing">0</property>
+
+		  <child>
+		    <widget class="GtkImage" id="image14">
+		      <property name="visible">True</property>
+		      <property name="pixbuf">totoz.xpm</property>
+		      <property name="xalign">0.5</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">False</property>
+		      <property name="fill">False</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkVBox" id="vbox20">
+		      <property name="visible">True</property>
+		      <property name="homogeneous">False</property>
+		      <property name="spacing">0</property>
+
+		      <child>
+			<widget class="GtkHBox" id="hbox34">
+			  <property name="visible">True</property>
+			  <property name="homogeneous">False</property>
+			  <property name="spacing">0</property>
+
+			  <child>
+			    <widget class="GtkCheckButton" id="board_enable_hfr_pictures">
+			      <property name="visible">True</property>
+			      <property name="can_focus">True</property>
+			      <property name="label" translatable="yes">Enable this feature </property>
+			      <property name="use_underline">True</property>
+			      <property name="relief">GTK_RELIEF_NORMAL</property>
+			      <property name="focus_on_click">True</property>
+			      <property name="active">False</property>
+			      <property name="inconsistent">False</property>
+			      <property name="draw_indicator">True</property>
+			    </widget>
+			    <packing>
+			      <property name="padding">0</property>
+			      <property name="expand">False</property>
+			      <property name="fill">False</property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkLabel" id="board_enable_hfr_pictures_fb">
+			      <property name="visible">True</property>
+			      <property name="label" translatable="yes">label98</property>
+			      <property name="use_underline">False</property>
+			      <property name="use_markup">False</property>
+			      <property name="justify">GTK_JUSTIFY_LEFT</property>
+			      <property name="wrap">False</property>
+			      <property name="selectable">False</property>
+			      <property name="xalign">0.5</property>
+			      <property name="yalign">0.5</property>
+			      <property name="xpad">0</property>
+			      <property name="ypad">0</property>
+			      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			      <property name="width_chars">-1</property>
+			      <property name="single_line_mode">False</property>
+			      <property name="angle">0</property>
+			    </widget>
+			    <packing>
+			      <property name="padding">0</property>
+			      <property name="expand">False</property>
+			      <property name="fill">False</property>
+			    </packing>
+			  </child>
+			</widget>
+			<packing>
+			  <property name="padding">0</property>
+			  <property name="expand">False</property>
+			  <property name="fill">False</property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkHBox" id="hbox35">
+			  <property name="visible">True</property>
+			  <property name="homogeneous">False</property>
+			  <property name="spacing">0</property>
+
+			  <child>
+			    <widget class="GtkCheckButton" id="board_auto_dl_pictures">
+			      <property name="visible">True</property>
+			      <property name="can_focus">True</property>
+			      <property name="label" translatable="yes">Automatically download [:totoz] pictures 
+(may fill your harddrive with dumb GIFs) </property>
+			      <property name="use_underline">True</property>
+			      <property name="relief">GTK_RELIEF_NORMAL</property>
+			      <property name="focus_on_click">True</property>
+			      <property name="active">False</property>
+			      <property name="inconsistent">False</property>
+			      <property name="draw_indicator">True</property>
+			    </widget>
+			    <packing>
+			      <property name="padding">0</property>
+			      <property name="expand">False</property>
+			      <property name="fill">False</property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkLabel" id="board_auto_dl_pictures_fb">
+			      <property name="visible">True</property>
+			      <property name="label" translatable="yes">label97</property>
+			      <property name="use_underline">False</property>
+			      <property name="use_markup">False</property>
+			      <property name="justify">GTK_JUSTIFY_LEFT</property>
+			      <property name="wrap">False</property>
+			      <property name="selectable">False</property>
+			      <property name="xalign">0.5</property>
+			      <property name="yalign">0.5</property>
+			      <property name="xpad">0</property>
+			      <property name="ypad">0</property>
+			      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			      <property name="width_chars">-1</property>
+			      <property name="single_line_mode">False</property>
+			      <property name="angle">0</property>
+			    </widget>
+			    <packing>
+			      <property name="padding">0</property>
+			      <property name="expand">False</property>
+			      <property name="fill">False</property>
+			    </packing>
+			  </child>
+			</widget>
+			<packing>
+			  <property name="padding">0</property>
+			  <property name="expand">True</property>
+			  <property name="fill">True</property>
+			</packing>
+		      </child>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">True</property>
+		      <property name="fill">True</property>
+		    </packing>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkHSeparator" id="hseparator7">
+		  <property name="visible">True</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkLabel" id="label94">
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">The totoz module requires wmcoincoin_player support. It searches for occurences of [:totoz] etc in the pinnipede, and displays a correspounding picture from the set of smileys of http://totoz.eu
+
+This pictures may be bookmarked in the pinnipede (via right clic), and the bookmark ( stored in ~/.wmcoincoin/totoz/bookmarks.{txt,html} ) can be opened from the totoz button in the palmipede.</property>
+		  <property name="use_underline">False</property>
+		  <property name="use_markup">False</property>
+		  <property name="justify">GTK_JUSTIFY_LEFT</property>
+		  <property name="wrap">True</property>
+		  <property name="selectable">False</property>
+		  <property name="xalign">0.5</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">0</property>
+		  <property name="ypad">0</property>
+		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		  <property name="width_chars">-1</property>
+		  <property name="single_line_mode">False</property>
+		  <property name="angle">0</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="tab_expand">False</property>
+	      <property name="tab_fill">True</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="label92">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Totoz</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0.5</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="type">tab</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkVBox" id="vbox18">
+	      <property name="visible">True</property>
+	      <property name="homogeneous">False</property>
+	      <property name="spacing">0</property>
+
+	      <child>
+		<widget class="GtkCheckButton" id="hunt_opened">
+		  <property name="visible">True</property>
+		  <property name="tooltip" translatable="yes">this is the global switch for the balltrap (look at the duck in the pinnipede button bar)</property>
+		  <property name="can_focus">True</property>
+		  <property name="label" translatable="yes">Enable balltrap on startup</property>
+		  <property name="use_underline">True</property>
+		  <property name="relief">GTK_RELIEF_NORMAL</property>
+		  <property name="focus_on_click">True</property>
+		  <property name="active">False</property>
+		  <property name="inconsistent">False</property>
+		  <property name="draw_indicator">True</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkHBox" id="hbox31">
+		  <property name="visible">True</property>
+		  <property name="homogeneous">False</property>
+		  <property name="spacing">0</property>
+
+		  <child>
+		    <widget class="GtkLabel" id="label90">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Max. number of simultaneous ducks</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0.5</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">3</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">False</property>
+		      <property name="fill">False</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkSpinButton" id="hunt_max_duck">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="climb_rate">1</property>
+		      <property name="digits">0</property>
+		      <property name="numeric">False</property>
+		      <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+		      <property name="snap_to_ticks">False</property>
+		      <property name="wrap">False</property>
+		      <property name="adjustment">1 0 100 1 10 10</property>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">False</property>
+		      <property name="fill">False</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <placeholder/>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkHSeparator" id="hseparator6">
+		  <property name="visible">True</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkLabel" id="label91">
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">Hunting is fun.  Everybody enjoys shooting ducks with a bazooka. Lower your stress and improve your productivity with the balltrap module.
+
+Note that since X sucks with respect to moving windows, the balltrap may consume all your CPU, especially when ducks are flying over a slow-refresh window.. 
+
+The balltrap can be disabled for some sites, and enabled on other sites (see the switch in the site settings dialog). For example, it is recommended to disable the balltrap on woof.lu (or at least to avoid hammering the server with hundreds of pan!pan!)
+
+Training is possible with plastic ducks, launched by a left clic on the dock applet. A right clic kills silently all displayed ducks.</property>
+		  <property name="use_underline">False</property>
+		  <property name="use_markup">False</property>
+		  <property name="justify">GTK_JUSTIFY_LEFT</property>
+		  <property name="wrap">True</property>
+		  <property name="selectable">False</property>
+		  <property name="xalign">0.5</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">0</property>
+		  <property name="ypad">0</property>
+		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		  <property name="width_chars">-1</property>
+		  <property name="single_line_mode">False</property>
+		  <property name="angle">0</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="tab_expand">False</property>
+	      <property name="tab_fill">True</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="label89">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Balltrap</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0.5</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="type">tab</property>
+	    </packing>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">True</property>
+	  <property name="fill">True</property>
+	</packing>
+      </child>
+    </widget>
+  </child>
+</widget>
+
+<widget class="GtkDialog" id="edit_dialog">
+  <property name="visible">True</property>
+  <property name="title" translatable="yes">Options edit</property>
+  <property name="type">GTK_WINDOW_TOPLEVEL</property>
+  <property name="window_position">GTK_WIN_POS_NONE</property>
+  <property name="modal">True</property>
+  <property name="default_width">600</property>
+  <property name="default_height">450</property>
+  <property name="resizable">True</property>
+  <property name="destroy_with_parent">False</property>
+  <property name="decorated">True</property>
+  <property name="skip_taskbar_hint">False</property>
+  <property name="skip_pager_hint">False</property>
+  <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+  <property name="focus_on_map">True</property>
+  <property name="has_separator">True</property>
+
+  <child internal-child="vbox">
+    <widget class="GtkVBox" id="dialog-vbox4">
+      <property name="visible">True</property>
+      <property name="homogeneous">False</property>
+      <property name="spacing">0</property>
+
+      <child internal-child="action_area">
+	<widget class="GtkHButtonBox" id="dialog-action_area4">
+	  <property name="visible">True</property>
+	  <property name="layout_style">GTK_BUTTONBOX_END</property>
+
+	  <child>
+	    <widget class="GtkButton" id="cancel_bt">
+	      <property name="visible">True</property>
+	      <property name="can_default">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label">gtk-cancel</property>
+	      <property name="use_stock">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">-6</property>
+	    </widget>
+	  </child>
+
+	  <child>
+	    <widget class="GtkButton" id="apply_bt">
+	      <property name="visible">True</property>
+	      <property name="tooltip" translatable="yes">Apply changes to wmcoincoin but do not save them</property>
+	      <property name="can_default">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label">gtk-apply</property>
+	      <property name="use_stock">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">-10</property>
+	    </widget>
+	  </child>
+
+	  <child>
+	    <widget class="GtkButton" id="ok_bt">
+	      <property name="visible">True</property>
+	      <property name="tooltip" translatable="yes">Save changes to the options file, but do not apply them</property>
+	      <property name="can_default">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label">gtk-save</property>
+	      <property name="use_stock">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">-5</property>
+	    </widget>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">False</property>
+	  <property name="fill">True</property>
+	  <property name="pack_type">GTK_PACK_END</property>
+	</packing>
+      </child>
+
+      <child>
+	<widget class="GtkVBox" id="vbox8">
+	  <property name="visible">True</property>
+	  <property name="homogeneous">False</property>
+	  <property name="spacing">0</property>
+
+	  <child>
+	    <widget class="GtkLabel" id="label38">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">wmccc "do it yourself" flavor</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0.5</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">False</property>
+	      <property name="fill">False</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkScrolledWindow" id="scrolledwindow3">
+	      <property name="visible">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+	      <property name="vscrollbar_policy">GTK_POLICY_ALWAYS</property>
+	      <property name="shadow_type">GTK_SHADOW_NONE</property>
+	      <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
+
+	      <child>
+		<widget class="GtkTextView" id="textview">
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="editable">True</property>
+		  <property name="overwrite">False</property>
+		  <property name="accepts_tab">True</property>
+		  <property name="justification">GTK_JUSTIFY_LEFT</property>
+		  <property name="wrap_mode">GTK_WRAP_NONE</property>
+		  <property name="cursor_visible">True</property>
+		  <property name="pixels_above_lines">0</property>
+		  <property name="pixels_below_lines">0</property>
+		  <property name="pixels_inside_wrap">0</property>
+		  <property name="left_margin">0</property>
+		  <property name="right_margin">0</property>
+		  <property name="indent">0</property>
+		  <property name="text" translatable="yes"></property>
+		</widget>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">True</property>
+	      <property name="fill">True</property>
+	    </packing>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">True</property>
+	  <property name="fill">True</property>
+	</packing>
+      </child>
+    </widget>
+  </child>
+</widget>
+
+<widget class="GtkDialog" id="bronson_wizard">
+  <property name="visible">True</property>
+  <property name="title" translatable="yes">the wmccc wizard</property>
+  <property name="type">GTK_WINDOW_TOPLEVEL</property>
+  <property name="window_position">GTK_WIN_POS_NONE</property>
+  <property name="modal">False</property>
+  <property name="resizable">True</property>
+  <property name="destroy_with_parent">False</property>
+  <property name="decorated">True</property>
+  <property name="skip_taskbar_hint">False</property>
+  <property name="skip_pager_hint">False</property>
+  <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+  <property name="focus_on_map">True</property>
+  <property name="has_separator">True</property>
+
+  <child internal-child="vbox">
+    <widget class="GtkVBox" id="dialog-vbox5">
+      <property name="visible">True</property>
+      <property name="homogeneous">False</property>
+      <property name="spacing">0</property>
+
+      <child internal-child="action_area">
+	<widget class="GtkHButtonBox" id="dialog-action_area5">
+	  <property name="visible">True</property>
+	  <property name="layout_style">GTK_BUTTONBOX_END</property>
+
+	  <child>
+	    <widget class="GtkButton" id="button2">
+	      <property name="visible">True</property>
+	      <property name="can_default">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label">gtk-close</property>
+	      <property name="use_stock">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">-7</property>
+	    </widget>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">False</property>
+	  <property name="fill">True</property>
+	  <property name="pack_type">GTK_PACK_END</property>
+	</packing>
+      </child>
+
+      <child>
+	<widget class="GtkVBox" id="vbox9">
+	  <property name="visible">True</property>
+	  <property name="homogeneous">False</property>
+	  <property name="spacing">0</property>
+
+	  <child>
+	    <widget class="GtkHBox" id="hbox15">
+	      <property name="visible">True</property>
+	      <property name="homogeneous">False</property>
+	      <property name="spacing">0</property>
+
+	      <child>
+		<widget class="GtkImage" id="image5">
+		  <property name="visible">True</property>
+		  <property name="pixbuf">cbronson.jpg</property>
+		  <property name="xalign">0.5</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">0</property>
+		  <property name="ypad">0</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkLabel" id="label40">
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">Hello, I am Charles Bronson and I am going to guide you during the configuration of wmcoincoin.
+Don't fuck with me or I'll kick your ass with a mammoth's cubitus</property>
+		  <property name="use_underline">False</property>
+		  <property name="use_markup">False</property>
+		  <property name="justify">GTK_JUSTIFY_LEFT</property>
+		  <property name="wrap">True</property>
+		  <property name="selectable">False</property>
+		  <property name="xalign">0.5</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">0</property>
+		  <property name="ypad">0</property>
+		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		  <property name="width_chars">-1</property>
+		  <property name="single_line_mode">False</property>
+		  <property name="angle">0</property>
+		</widget>
+		<packing>
+		  <property name="padding">8</property>
+		  <property name="expand">False</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">False</property>
+	      <property name="fill">True</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkHSeparator" id="hseparator1">
+	      <property name="visible">True</property>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">True</property>
+	      <property name="fill">True</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkHBox" id="hbox16">
+	      <property name="visible">True</property>
+	      <property name="homogeneous">False</property>
+	      <property name="spacing">0</property>
+
+	      <child>
+		<widget class="GtkLabel" id="label41">
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">Where do you want to go today ?</property>
+		  <property name="use_underline">False</property>
+		  <property name="use_markup">False</property>
+		  <property name="justify">GTK_JUSTIFY_LEFT</property>
+		  <property name="wrap">False</property>
+		  <property name="selectable">False</property>
+		  <property name="xalign">0.5</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">0</property>
+		  <property name="ypad">0</property>
+		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		  <property name="width_chars">-1</property>
+		  <property name="single_line_mode">False</property>
+		  <property name="angle">0</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">True</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkVBox" id="vbox11">
+		  <property name="visible">True</property>
+		  <property name="homogeneous">False</property>
+		  <property name="spacing">0</property>
+
+		  <child>
+		    <widget class="GtkButton" id="wizard_new_board_bt">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+
+		      <child>
+			<widget class="GtkAlignment" id="alignment8">
+			  <property name="visible">True</property>
+			  <property name="xalign">0.5</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xscale">0</property>
+			  <property name="yscale">0</property>
+			  <property name="top_padding">0</property>
+			  <property name="bottom_padding">0</property>
+			  <property name="left_padding">0</property>
+			  <property name="right_padding">0</property>
+
+			  <child>
+			    <widget class="GtkHBox" id="hbox28">
+			      <property name="visible">True</property>
+			      <property name="homogeneous">False</property>
+			      <property name="spacing">2</property>
+
+			      <child>
+				<widget class="GtkImage" id="image11">
+				  <property name="visible">True</property>
+				  <property name="stock">gtk-add</property>
+				  <property name="icon_size">4</property>
+				  <property name="xalign">0.5</property>
+				  <property name="yalign">0.5</property>
+				  <property name="xpad">0</property>
+				  <property name="ypad">0</property>
+				</widget>
+				<packing>
+				  <property name="padding">0</property>
+				  <property name="expand">False</property>
+				  <property name="fill">False</property>
+				</packing>
+			      </child>
+
+			      <child>
+				<widget class="GtkLabel" id="label77">
+				  <property name="visible">True</property>
+				  <property name="label" translatable="yes">I want to add a new board</property>
+				  <property name="use_underline">True</property>
+				  <property name="use_markup">False</property>
+				  <property name="justify">GTK_JUSTIFY_LEFT</property>
+				  <property name="wrap">False</property>
+				  <property name="selectable">False</property>
+				  <property name="xalign">0.5</property>
+				  <property name="yalign">0.5</property>
+				  <property name="xpad">0</property>
+				  <property name="ypad">0</property>
+				  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+				  <property name="width_chars">-1</property>
+				  <property name="single_line_mode">False</property>
+				  <property name="angle">0</property>
+				</widget>
+				<packing>
+				  <property name="padding">0</property>
+				  <property name="expand">False</property>
+				  <property name="fill">False</property>
+				</packing>
+			      </child>
+			    </widget>
+			  </child>
+			</widget>
+		      </child>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">False</property>
+		      <property name="fill">False</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkButton" id="wizard_new_feed_bt">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+
+		      <child>
+			<widget class="GtkAlignment" id="alignment7">
+			  <property name="visible">True</property>
+			  <property name="xalign">0.5</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xscale">0</property>
+			  <property name="yscale">0</property>
+			  <property name="top_padding">0</property>
+			  <property name="bottom_padding">0</property>
+			  <property name="left_padding">0</property>
+			  <property name="right_padding">0</property>
+
+			  <child>
+			    <widget class="GtkHBox" id="hbox27">
+			      <property name="visible">True</property>
+			      <property name="homogeneous">False</property>
+			      <property name="spacing">2</property>
+
+			      <child>
+				<widget class="GtkImage" id="image10">
+				  <property name="visible">True</property>
+				  <property name="stock">gtk-add</property>
+				  <property name="icon_size">4</property>
+				  <property name="xalign">0.5</property>
+				  <property name="yalign">0.5</property>
+				  <property name="xpad">0</property>
+				  <property name="ypad">0</property>
+				</widget>
+				<packing>
+				  <property name="padding">0</property>
+				  <property name="expand">False</property>
+				  <property name="fill">False</property>
+				</packing>
+			      </child>
+
+			      <child>
+				<widget class="GtkLabel" id="label76">
+				  <property name="visible">True</property>
+				  <property name="label" translatable="yes">I want to add a new RSS feed</property>
+				  <property name="use_underline">True</property>
+				  <property name="use_markup">False</property>
+				  <property name="justify">GTK_JUSTIFY_LEFT</property>
+				  <property name="wrap">False</property>
+				  <property name="selectable">False</property>
+				  <property name="xalign">0.5</property>
+				  <property name="yalign">0.5</property>
+				  <property name="xpad">0</property>
+				  <property name="ypad">0</property>
+				  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+				  <property name="width_chars">-1</property>
+				  <property name="single_line_mode">False</property>
+				  <property name="angle">0</property>
+				</widget>
+				<packing>
+				  <property name="padding">0</property>
+				  <property name="expand">False</property>
+				  <property name="fill">False</property>
+				</packing>
+			      </child>
+			    </widget>
+			  </child>
+			</widget>
+		      </child>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">False</property>
+		      <property name="fill">False</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkButton" id="wizard_new_pop_bt">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+
+		      <child>
+			<widget class="GtkAlignment" id="alignment6">
+			  <property name="visible">True</property>
+			  <property name="xalign">0.5</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xscale">0</property>
+			  <property name="yscale">0</property>
+			  <property name="top_padding">0</property>
+			  <property name="bottom_padding">0</property>
+			  <property name="left_padding">0</property>
+			  <property name="right_padding">0</property>
+
+			  <child>
+			    <widget class="GtkHBox" id="hbox26">
+			      <property name="visible">True</property>
+			      <property name="homogeneous">False</property>
+			      <property name="spacing">2</property>
+
+			      <child>
+				<widget class="GtkImage" id="image9">
+				  <property name="visible">True</property>
+				  <property name="stock">gtk-add</property>
+				  <property name="icon_size">4</property>
+				  <property name="xalign">0.5</property>
+				  <property name="yalign">0.5</property>
+				  <property name="xpad">0</property>
+				  <property name="ypad">0</property>
+				</widget>
+				<packing>
+				  <property name="padding">0</property>
+				  <property name="expand">False</property>
+				  <property name="fill">False</property>
+				</packing>
+			      </child>
+
+			      <child>
+				<widget class="GtkLabel" id="label75">
+				  <property name="visible">True</property>
+				  <property name="label" translatable="yes">I want to add a new POP3 account</property>
+				  <property name="use_underline">True</property>
+				  <property name="use_markup">False</property>
+				  <property name="justify">GTK_JUSTIFY_LEFT</property>
+				  <property name="wrap">False</property>
+				  <property name="selectable">False</property>
+				  <property name="xalign">0.5</property>
+				  <property name="yalign">0.5</property>
+				  <property name="xpad">0</property>
+				  <property name="ypad">0</property>
+				  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+				  <property name="width_chars">-1</property>
+				  <property name="single_line_mode">False</property>
+				  <property name="angle">0</property>
+				</widget>
+				<packing>
+				  <property name="padding">0</property>
+				  <property name="expand">False</property>
+				  <property name="fill">False</property>
+				</packing>
+			      </child>
+			    </widget>
+			  </child>
+			</widget>
+		      </child>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">False</property>
+		      <property name="fill">False</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkButton" id="edit_options_bt">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+
+		      <child>
+			<widget class="GtkAlignment" id="alignment5">
+			  <property name="visible">True</property>
+			  <property name="xalign">0.5</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xscale">0</property>
+			  <property name="yscale">0</property>
+			  <property name="top_padding">0</property>
+			  <property name="bottom_padding">0</property>
+			  <property name="left_padding">0</property>
+			  <property name="right_padding">0</property>
+
+			  <child>
+			    <widget class="GtkHBox" id="hbox25">
+			      <property name="visible">True</property>
+			      <property name="homogeneous">False</property>
+			      <property name="spacing">2</property>
+
+			      <child>
+				<widget class="GtkImage" id="image8">
+				  <property name="visible">True</property>
+				  <property name="stock">gtk-convert</property>
+				  <property name="icon_size">4</property>
+				  <property name="xalign">0.5</property>
+				  <property name="yalign">0.5</property>
+				  <property name="xpad">0</property>
+				  <property name="ypad">0</property>
+				</widget>
+				<packing>
+				  <property name="padding">0</property>
+				  <property name="expand">False</property>
+				  <property name="fill">False</property>
+				</packing>
+			      </child>
+
+			      <child>
+				<widget class="GtkLabel" id="label74">
+				  <property name="visible">True</property>
+				  <property name="label" translatable="yes">I want to edit the options</property>
+				  <property name="use_underline">True</property>
+				  <property name="use_markup">False</property>
+				  <property name="justify">GTK_JUSTIFY_LEFT</property>
+				  <property name="wrap">False</property>
+				  <property name="selectable">False</property>
+				  <property name="xalign">0.5</property>
+				  <property name="yalign">0.5</property>
+				  <property name="xpad">0</property>
+				  <property name="ypad">0</property>
+				  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+				  <property name="width_chars">-1</property>
+				  <property name="single_line_mode">False</property>
+				  <property name="angle">0</property>
+				</widget>
+				<packing>
+				  <property name="padding">0</property>
+				  <property name="expand">False</property>
+				  <property name="fill">False</property>
+				</packing>
+			      </child>
+			    </widget>
+			  </child>
+			</widget>
+		      </child>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">False</property>
+		      <property name="fill">False</property>
+		    </packing>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="padding">23</property>
+		  <property name="expand">False</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">True</property>
+	      <property name="fill">True</property>
+	    </packing>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">True</property>
+	  <property name="fill">True</property>
+	</packing>
+      </child>
+    </widget>
+  </child>
+</widget>
+
+<widget class="GtkDialog" id="sitelist_dialog">
+  <property name="visible">True</property>
+  <property name="title" translatable="yes">WMCCC</property>
+  <property name="type">GTK_WINDOW_TOPLEVEL</property>
+  <property name="window_position">GTK_WIN_POS_CENTER</property>
+  <property name="modal">False</property>
+  <property name="default_width">640</property>
+  <property name="default_height">460</property>
+  <property name="resizable">True</property>
+  <property name="destroy_with_parent">False</property>
+  <property name="decorated">True</property>
+  <property name="skip_taskbar_hint">False</property>
+  <property name="skip_pager_hint">False</property>
+  <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+  <property name="focus_on_map">True</property>
+  <property name="has_separator">True</property>
+
+  <child internal-child="vbox">
+    <widget class="GtkVBox" id="dialog-vbox7">
+      <property name="visible">True</property>
+      <property name="homogeneous">False</property>
+      <property name="spacing">0</property>
+
+      <child internal-child="action_area">
+	<widget class="GtkHButtonBox" id="dialog-action_area7">
+	  <property name="visible">True</property>
+	  <property name="layout_style">GTK_BUTTONBOX_END</property>
+
+	  <child>
+	    <widget class="GtkButton" id="cancel_bt">
+	      <property name="visible">True</property>
+	      <property name="tooltip" translatable="yes">Ignore changes and exit</property>
+	      <property name="can_default">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label">gtk-cancel</property>
+	      <property name="use_stock">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">-6</property>
+	    </widget>
+	  </child>
+
+	  <child>
+	    <widget class="GtkButton" id="apply_bt">
+	      <property name="visible">True</property>
+	      <property name="tooltip" translatable="yes">Apply the changes to wmcc (but the changes are NOT saved in the options file!)</property>
+	      <property name="can_default">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label">gtk-apply</property>
+	      <property name="use_stock">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">-10</property>
+	    </widget>
+	  </child>
+
+	  <child>
+	    <widget class="GtkButton" id="save_bt">
+	      <property name="visible">True</property>
+	      <property name="tooltip" translatable="yes">Save and exit (if wmccc was invoked from wmcc, the changes are NOT applied !)</property>
+	      <property name="can_default">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label">gtk-save</property>
+	      <property name="use_stock">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">-5</property>
+	    </widget>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">False</property>
+	  <property name="fill">True</property>
+	  <property name="pack_type">GTK_PACK_END</property>
+	</packing>
+      </child>
+
+      <child>
+	<widget class="GtkVBox" id="vbox12">
+	  <property name="visible">True</property>
+	  <property name="homogeneous">False</property>
+	  <property name="spacing">0</property>
+
+	  <child>
+	    <widget class="GtkHSeparator" id="hseparator2">
+	      <property name="visible">True</property>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">False</property>
+	      <property name="fill">False</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="title_lbl">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Editing options file:</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">True</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0.5</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">False</property>
+	      <property name="fill">False</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="label71">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes"><span size="small"><b>PLEASE DO A SAUVEGARDE OF YOUR OPTIONS IT IS TOUT A FAIT POSSIBLE 
+THAT THE NEW WMCCC FUCK YOUR OPTIONS,
+YOU HAVE BEEN WARNED</b></span></property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">True</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0.5</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">False</property>
+	      <property name="fill">False</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkHBox" id="hbox17">
+	      <property name="visible">True</property>
+	      <property name="homogeneous">False</property>
+	      <property name="spacing">0</property>
+
+	      <child>
+		<widget class="GtkVSeparator" id="vseparator2">
+		  <property name="visible">True</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkScrolledWindow" id="scrolledwindow4">
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+		  <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+		  <property name="shadow_type">GTK_SHADOW_NONE</property>
+		  <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
+
+		  <child>
+		    <widget class="GtkTreeView" id="treeview">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="headers_visible">True</property>
+		      <property name="rules_hint">False</property>
+		      <property name="reorderable">False</property>
+		      <property name="enable_search">True</property>
+		      <property name="fixed_height_mode">False</property>
+		      <property name="hover_selection">False</property>
+		      <property name="hover_expand">False</property>
+		    </widget>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">True</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkVSeparator" id="vseparator1">
+		  <property name="visible">True</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkVBox" id="vbox22">
+		  <property name="visible">True</property>
+		  <property name="homogeneous">False</property>
+		  <property name="spacing">0</property>
+
+		  <child>
+		    <widget class="GtkFrame" id="frame10">
+		      <property name="visible">True</property>
+		      <property name="label_xalign">0</property>
+		      <property name="label_yalign">0.5</property>
+		      <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
+
+		      <child>
+			<widget class="GtkVBox" id="vbox13">
+			  <property name="visible">True</property>
+			  <property name="homogeneous">False</property>
+			  <property name="spacing">0</property>
+
+			  <child>
+			    <widget class="GtkButton" id="edit_bt">
+			      <property name="visible">True</property>
+			      <property name="tooltip" translatable="yes">Change various settings for the selected sites (name and aliases, backend, etc)</property>
+			      <property name="can_focus">True</property>
+			      <property name="label" translatable="yes">Edit the 
+selected sites</property>
+			      <property name="use_underline">True</property>
+			      <property name="relief">GTK_RELIEF_NORMAL</property>
+			      <property name="focus_on_click">True</property>
+			    </widget>
+			    <packing>
+			      <property name="padding">0</property>
+			      <property name="expand">False</property>
+			      <property name="fill">False</property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkButton" id="colors_bt">
+			      <property name="visible">True</property>
+			      <property name="tooltip" translatable="yes">Change color settings (background etc) for the selected sites</property>
+			      <property name="can_focus">True</property>
+			      <property name="relief">GTK_RELIEF_NORMAL</property>
+			      <property name="focus_on_click">True</property>
+
+			      <child>
+				<widget class="GtkAlignment" id="alignment14">
+				  <property name="visible">True</property>
+				  <property name="xalign">0.5</property>
+				  <property name="yalign">0.5</property>
+				  <property name="xscale">0</property>
+				  <property name="yscale">0</property>
+				  <property name="top_padding">0</property>
+				  <property name="bottom_padding">0</property>
+				  <property name="left_padding">0</property>
+				  <property name="right_padding">0</property>
+
+				  <child>
+				    <widget class="GtkHBox" id="hbox41">
+				      <property name="visible">True</property>
+				      <property name="homogeneous">False</property>
+				      <property name="spacing">2</property>
+
+				      <child>
+					<widget class="GtkImage" id="image20">
+					  <property name="visible">True</property>
+					  <property name="stock">gtk-select-color</property>
+					  <property name="icon_size">4</property>
+					  <property name="xalign">0.5</property>
+					  <property name="yalign">0.5</property>
+					  <property name="xpad">0</property>
+					  <property name="ypad">0</property>
+					</widget>
+					<packing>
+					  <property name="padding">0</property>
+					  <property name="expand">False</property>
+					  <property name="fill">False</property>
+					</packing>
+				      </child>
+
+				      <child>
+					<widget class="GtkLabel" id="label105">
+					  <property name="visible">True</property>
+					  <property name="label" translatable="yes">Change colors for
+ selected sites</property>
+					  <property name="use_underline">True</property>
+					  <property name="use_markup">False</property>
+					  <property name="justify">GTK_JUSTIFY_LEFT</property>
+					  <property name="wrap">False</property>
+					  <property name="selectable">False</property>
+					  <property name="xalign">0.5</property>
+					  <property name="yalign">0.5</property>
+					  <property name="xpad">0</property>
+					  <property name="ypad">0</property>
+					  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+					  <property name="width_chars">-1</property>
+					  <property name="single_line_mode">False</property>
+					  <property name="angle">0</property>
+					</widget>
+					<packing>
+					  <property name="padding">0</property>
+					  <property name="expand">False</property>
+					  <property name="fill">False</property>
+					</packing>
+				      </child>
+				    </widget>
+				  </child>
+				</widget>
+			      </child>
+			    </widget>
+			    <packing>
+			      <property name="padding">0</property>
+			      <property name="expand">False</property>
+			      <property name="fill">False</property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkButton" id="proxy_bt">
+			      <property name="visible">True</property>
+			      <property name="tooltip" translatable="yes">Change proxy settings for the selected sites</property>
+			      <property name="can_focus">True</property>
+			      <property name="label" translatable="yes">Proxy settings</property>
+			      <property name="use_underline">True</property>
+			      <property name="relief">GTK_RELIEF_NORMAL</property>
+			      <property name="focus_on_click">True</property>
+			    </widget>
+			    <packing>
+			      <property name="padding">0</property>
+			      <property name="expand">False</property>
+			      <property name="fill">False</property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkButton" id="remove_bt">
+			      <property name="visible">True</property>
+			      <property name="tooltip" translatable="yes">Removes permanently the site -- you may prefer to uncheck the check-box in the site list to remove the site temporarily from the pinnipede</property>
+			      <property name="can_focus">True</property>
+			      <property name="relief">GTK_RELIEF_NORMAL</property>
+			      <property name="focus_on_click">True</property>
+
+			      <child>
+				<widget class="GtkAlignment" id="alignment13">
+				  <property name="visible">True</property>
+				  <property name="xalign">0.5</property>
+				  <property name="yalign">0.5</property>
+				  <property name="xscale">0</property>
+				  <property name="yscale">0</property>
+				  <property name="top_padding">0</property>
+				  <property name="bottom_padding">0</property>
+				  <property name="left_padding">0</property>
+				  <property name="right_padding">0</property>
+
+				  <child>
+				    <widget class="GtkHBox" id="hbox40">
+				      <property name="visible">True</property>
+				      <property name="homogeneous">False</property>
+				      <property name="spacing">2</property>
+
+				      <child>
+					<widget class="GtkImage" id="image19">
+					  <property name="visible">True</property>
+					  <property name="stock">gtk-remove</property>
+					  <property name="icon_size">4</property>
+					  <property name="xalign">0.5</property>
+					  <property name="yalign">0.5</property>
+					  <property name="xpad">0</property>
+					  <property name="ypad">0</property>
+					</widget>
+					<packing>
+					  <property name="padding">0</property>
+					  <property name="expand">False</property>
+					  <property name="fill">False</property>
+					</packing>
+				      </child>
+
+				      <child>
+					<widget class="GtkLabel" id="label_remoev">
+					  <property name="visible">True</property>
+					  <property name="label" translatable="yes">Remove the
+ selected sites</property>
+					  <property name="use_underline">True</property>
+					  <property name="use_markup">False</property>
+					  <property name="justify">GTK_JUSTIFY_LEFT</property>
+					  <property name="wrap">False</property>
+					  <property name="selectable">False</property>
+					  <property name="xalign">0.5</property>
+					  <property name="yalign">0.5</property>
+					  <property name="xpad">0</property>
+					  <property name="ypad">0</property>
+					  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+					  <property name="width_chars">-1</property>
+					  <property name="single_line_mode">False</property>
+					  <property name="angle">0</property>
+					</widget>
+					<packing>
+					  <property name="padding">0</property>
+					  <property name="expand">False</property>
+					  <property name="fill">False</property>
+					</packing>
+				      </child>
+				    </widget>
+				  </child>
+				</widget>
+			      </child>
+			    </widget>
+			    <packing>
+			      <property name="padding">0</property>
+			      <property name="expand">False</property>
+			      <property name="fill">False</property>
+			    </packing>
+			  </child>
+			</widget>
+		      </child>
+
+		      <child>
+			<widget class="GtkLabel" id="label103">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Site actions</property>
+			  <property name="use_underline">False</property>
+			  <property name="use_markup">False</property>
+			  <property name="justify">GTK_JUSTIFY_LEFT</property>
+			  <property name="wrap">False</property>
+			  <property name="selectable">False</property>
+			  <property name="xalign">0.5</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xpad">0</property>
+			  <property name="ypad">0</property>
+			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			  <property name="width_chars">-1</property>
+			  <property name="single_line_mode">False</property>
+			  <property name="angle">0</property>
+			</widget>
+			<packing>
+			  <property name="type">label_item</property>
+			</packing>
+		      </child>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">False</property>
+		      <property name="fill">False</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <placeholder/>
+		  </child>
+
+		  <child>
+		    <widget class="GtkFrame" id="frame11">
+		      <property name="visible">True</property>
+		      <property name="label_xalign">0</property>
+		      <property name="label_yalign">0.5</property>
+		      <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
+
+		      <child>
+			<widget class="GtkVBox" id="vbox23">
+			  <property name="visible">True</property>
+			  <property name="homogeneous">False</property>
+			  <property name="spacing">0</property>
+
+			  <child>
+			    <widget class="GtkButton" id="new_site_bt">
+			      <property name="visible">True</property>
+			      <property name="tooltip" translatable="yes">Create a new site (board, rss, etc), with the help of Charles Bronson</property>
+			      <property name="can_focus">True</property>
+			      <property name="relief">GTK_RELIEF_NORMAL</property>
+			      <property name="focus_on_click">True</property>
+
+			      <child>
+				<widget class="GtkAlignment" id="alignment11">
+				  <property name="visible">True</property>
+				  <property name="xalign">0.5</property>
+				  <property name="yalign">0.5</property>
+				  <property name="xscale">0</property>
+				  <property name="yscale">0</property>
+				  <property name="top_padding">0</property>
+				  <property name="bottom_padding">0</property>
+				  <property name="left_padding">0</property>
+				  <property name="right_padding">0</property>
+
+				  <child>
+				    <widget class="GtkHBox" id="hbox38">
+				      <property name="visible">True</property>
+				      <property name="homogeneous">False</property>
+				      <property name="spacing">2</property>
+
+				      <child>
+					<widget class="GtkImage" id="image17">
+					  <property name="visible">True</property>
+					  <property name="stock">gtk-add</property>
+					  <property name="icon_size">4</property>
+					  <property name="xalign">0.5</property>
+					  <property name="yalign">0.5</property>
+					  <property name="xpad">0</property>
+					  <property name="ypad">0</property>
+					</widget>
+					<packing>
+					  <property name="padding">0</property>
+					  <property name="expand">False</property>
+					  <property name="fill">False</property>
+					</packing>
+				      </child>
+
+				      <child>
+					<widget class="GtkLabel" id="label102">
+					  <property name="visible">True</property>
+					  <property name="label" translatable="yes">Insert a new site</property>
+					  <property name="use_underline">True</property>
+					  <property name="use_markup">False</property>
+					  <property name="justify">GTK_JUSTIFY_LEFT</property>
+					  <property name="wrap">False</property>
+					  <property name="selectable">False</property>
+					  <property name="xalign">0.5</property>
+					  <property name="yalign">0.5</property>
+					  <property name="xpad">0</property>
+					  <property name="ypad">0</property>
+					  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+					  <property name="width_chars">-1</property>
+					  <property name="single_line_mode">False</property>
+					  <property name="angle">0</property>
+					</widget>
+					<packing>
+					  <property name="padding">0</property>
+					  <property name="expand">False</property>
+					  <property name="fill">False</property>
+					</packing>
+				      </child>
+				    </widget>
+				  </child>
+				</widget>
+			      </child>
+			    </widget>
+			    <packing>
+			      <property name="padding">0</property>
+			      <property name="expand">False</property>
+			      <property name="fill">False</property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkButton" id="pinnipede_settings_bt">
+			      <property name="visible">True</property>
+			      <property name="tooltip" translatable="yes">Change various (non site-specific) settings</property>
+			      <property name="can_focus">True</property>
+			      <property name="relief">GTK_RELIEF_NORMAL</property>
+			      <property name="focus_on_click">True</property>
+
+			      <child>
+				<widget class="GtkAlignment" id="alignment12">
+				  <property name="visible">True</property>
+				  <property name="xalign">0.5</property>
+				  <property name="yalign">0.5</property>
+				  <property name="xscale">0</property>
+				  <property name="yscale">0</property>
+				  <property name="top_padding">0</property>
+				  <property name="bottom_padding">0</property>
+				  <property name="left_padding">0</property>
+				  <property name="right_padding">0</property>
+
+				  <child>
+				    <widget class="GtkHBox" id="hbox39">
+				      <property name="visible">True</property>
+				      <property name="homogeneous">False</property>
+				      <property name="spacing">2</property>
+
+				      <child>
+					<widget class="GtkImage" id="image18">
+					  <property name="visible">True</property>
+					  <property name="stock">gtk-select-color</property>
+					  <property name="icon_size">4</property>
+					  <property name="xalign">0.5</property>
+					  <property name="yalign">0.5</property>
+					  <property name="xpad">0</property>
+					  <property name="ypad">0</property>
+					</widget>
+					<packing>
+					  <property name="padding">0</property>
+					  <property name="expand">False</property>
+					  <property name="fill">False</property>
+					</packing>
+				      </child>
+
+				      <child>
+					<widget class="GtkLabel" id="label_pini">
+					  <property name="visible">True</property>
+					  <property name="label" translatable="yes">Pinnipede Settings</property>
+					  <property name="use_underline">True</property>
+					  <property name="use_markup">False</property>
+					  <property name="justify">GTK_JUSTIFY_LEFT</property>
+					  <property name="wrap">False</property>
+					  <property name="selectable">False</property>
+					  <property name="xalign">0.5</property>
+					  <property name="yalign">0.5</property>
+					  <property name="xpad">0</property>
+					  <property name="ypad">0</property>
+					  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+					  <property name="width_chars">-1</property>
+					  <property name="single_line_mode">False</property>
+					  <property name="angle">0</property>
+					</widget>
+					<packing>
+					  <property name="padding">0</property>
+					  <property name="expand">False</property>
+					  <property name="fill">False</property>
+					</packing>
+				      </child>
+				    </widget>
+				  </child>
+				</widget>
+			      </child>
+			    </widget>
+			    <packing>
+			      <property name="padding">0</property>
+			      <property name="expand">False</property>
+			      <property name="fill">False</property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkButton" id="edit_options_bt">
+			      <property name="visible">True</property>
+			      <property name="tooltip" translatable="yes">Edit the options as a text file</property>
+			      <property name="can_focus">True</property>
+			      <property name="relief">GTK_RELIEF_NORMAL</property>
+			      <property name="focus_on_click">True</property>
+
+			      <child>
+				<widget class="GtkAlignment" id="alignment4">
+				  <property name="visible">True</property>
+				  <property name="xalign">0.5</property>
+				  <property name="yalign">0.5</property>
+				  <property name="xscale">0</property>
+				  <property name="yscale">0</property>
+				  <property name="top_padding">0</property>
+				  <property name="bottom_padding">0</property>
+				  <property name="left_padding">0</property>
+				  <property name="right_padding">0</property>
+
+				  <child>
+				    <widget class="GtkHBox" id="hbox24">
+				      <property name="visible">True</property>
+				      <property name="homogeneous">False</property>
+				      <property name="spacing">2</property>
+
+				      <child>
+					<widget class="GtkImage" id="image7">
+					  <property name="visible">True</property>
+					  <property name="stock">gtk-convert</property>
+					  <property name="icon_size">4</property>
+					  <property name="xalign">0.5</property>
+					  <property name="yalign">0.5</property>
+					  <property name="xpad">0</property>
+					  <property name="ypad">0</property>
+					</widget>
+					<packing>
+					  <property name="padding">0</property>
+					  <property name="expand">False</property>
+					  <property name="fill">False</property>
+					</packing>
+				      </child>
+
+				      <child>
+					<widget class="GtkLabel" id="label73">
+					  <property name="visible">True</property>
+					  <property name="label" translatable="yes">Do It Yourself</property>
+					  <property name="use_underline">True</property>
+					  <property name="use_markup">False</property>
+					  <property name="justify">GTK_JUSTIFY_LEFT</property>
+					  <property name="wrap">False</property>
+					  <property name="selectable">False</property>
+					  <property name="xalign">0.5</property>
+					  <property name="yalign">0.5</property>
+					  <property name="xpad">0</property>
+					  <property name="ypad">0</property>
+					  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+					  <property name="width_chars">-1</property>
+					  <property name="single_line_mode">False</property>
+					  <property name="angle">0</property>
+					</widget>
+					<packing>
+					  <property name="padding">0</property>
+					  <property name="expand">False</property>
+					  <property name="fill">False</property>
+					</packing>
+				      </child>
+				    </widget>
+				  </child>
+				</widget>
+			      </child>
+			    </widget>
+			    <packing>
+			      <property name="padding">0</property>
+			      <property name="expand">False</property>
+			      <property name="fill">False</property>
+			    </packing>
+			  </child>
+			</widget>
+		      </child>
+
+		      <child>
+			<widget class="GtkLabel" id="label104">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Global actions</property>
+			  <property name="use_underline">False</property>
+			  <property name="use_markup">False</property>
+			  <property name="justify">GTK_JUSTIFY_LEFT</property>
+			  <property name="wrap">False</property>
+			  <property name="selectable">False</property>
+			  <property name="xalign">0.5</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xpad">0</property>
+			  <property name="ypad">0</property>
+			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			  <property name="width_chars">-1</property>
+			  <property name="single_line_mode">False</property>
+			  <property name="angle">0</property>
+			</widget>
+			<packing>
+			  <property name="type">label_item</property>
+			</packing>
+		      </child>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">False</property>
+		      <property name="fill">False</property>
+		      <property name="pack_type">GTK_PACK_END</property>
+		    </packing>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">True</property>
+	      <property name="fill">True</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkHSeparator" id="hseparator3">
+	      <property name="visible">True</property>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">False</property>
+	      <property name="fill">False</property>
+	    </packing>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">True</property>
+	  <property name="fill">True</property>
+	</packing>
+      </child>
+    </widget>
+  </child>
+</widget>
+
+<widget class="GtkDialog" id="pinnipede_site_colors_dialog">
+  <property name="visible">True</property>
+  <property name="title" translatable="yes">Change some colors</property>
+  <property name="type">GTK_WINDOW_TOPLEVEL</property>
+  <property name="window_position">GTK_WIN_POS_NONE</property>
+  <property name="modal">False</property>
+  <property name="resizable">True</property>
+  <property name="destroy_with_parent">False</property>
+  <property name="decorated">True</property>
+  <property name="skip_taskbar_hint">False</property>
+  <property name="skip_pager_hint">False</property>
+  <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+  <property name="focus_on_map">True</property>
+  <property name="has_separator">True</property>
+
+  <child internal-child="vbox">
+    <widget class="GtkVBox" id="dialog-vbox9">
+      <property name="visible">True</property>
+      <property name="homogeneous">False</property>
+      <property name="spacing">0</property>
+
+      <child internal-child="action_area">
+	<widget class="GtkHButtonBox" id="dialog-action_area9">
+	  <property name="visible">True</property>
+	  <property name="layout_style">GTK_BUTTONBOX_END</property>
+
+	  <child>
+	    <widget class="GtkButton" id="cancelbutton2">
+	      <property name="visible">True</property>
+	      <property name="can_default">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label">gtk-cancel</property>
+	      <property name="use_stock">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">-6</property>
+	    </widget>
+	  </child>
+
+	  <child>
+	    <widget class="GtkButton" id="apply_bt">
+	      <property name="visible">True</property>
+	      <property name="can_default">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label">gtk-apply</property>
+	      <property name="use_stock">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">-10</property>
+	    </widget>
+	  </child>
+
+	  <child>
+	    <widget class="GtkButton" id="okbutton2">
+	      <property name="visible">True</property>
+	      <property name="can_default">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label">gtk-ok</property>
+	      <property name="use_stock">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">-5</property>
+	    </widget>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">False</property>
+	  <property name="fill">True</property>
+	  <property name="pack_type">GTK_PACK_END</property>
+	</packing>
+      </child>
+
+      <child>
+	<widget class="GtkFrame" id="frame8">
+	  <property name="visible">True</property>
+	  <property name="label_xalign">0</property>
+	  <property name="label_yalign">0.5</property>
+	  <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
+
+	  <child>
+	    <widget class="GtkVBox" id="vbox14">
+	      <property name="visible">True</property>
+	      <property name="homogeneous">False</property>
+	      <property name="spacing">0</property>
+
+	      <child>
+		<widget class="GtkHBox" id="blah">
+		  <property name="visible">True</property>
+		  <property name="homogeneous">False</property>
+		  <property name="spacing">0</property>
+
+		  <child>
+		    <widget class="GtkCheckButton" id="mark_id_gaps">
+		      <property name="visible">True</property>
+		      <property name="can_focus">True</property>
+		      <property name="label" translatable="yes">View id gaps (red dotted line)</property>
+		      <property name="use_underline">True</property>
+		      <property name="relief">GTK_RELIEF_NORMAL</property>
+		      <property name="focus_on_click">True</property>
+		      <property name="active">False</property>
+		      <property name="inconsistent">False</property>
+		      <property name="draw_indicator">True</property>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">False</property>
+		      <property name="fill">False</property>
+		    </packing>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="mark_id_gaps_fb">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">xx</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0.5</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="padding">0</property>
+		      <property name="expand">False</property>
+		      <property name="fill">False</property>
+		    </packing>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkFrame" id="frame9">
+		  <property name="border_width">2</property>
+		  <property name="visible">True</property>
+		  <property name="label_xalign">0</property>
+		  <property name="label_yalign">0.5</property>
+		  <property name="shadow_type">GTK_SHADOW_ETCHED_IN</property>
+
+		  <child>
+		    <widget class="GtkTable" id="table4">
+		      <property name="visible">True</property>
+		      <property name="n_rows">3</property>
+		      <property name="n_columns">9</property>
+		      <property name="homogeneous">False</property>
+		      <property name="row_spacing">0</property>
+		      <property name="column_spacing">5</property>
+
+		      <child>
+			<widget class="GtkLabel" id="label43">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Background color</property>
+			  <property name="use_underline">False</property>
+			  <property name="use_markup">False</property>
+			  <property name="justify">GTK_JUSTIFY_LEFT</property>
+			  <property name="wrap">False</property>
+			  <property name="selectable">False</property>
+			  <property name="xalign">0</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xpad">0</property>
+			  <property name="ypad">0</property>
+			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			  <property name="width_chars">-1</property>
+			  <property name="single_line_mode">False</property>
+			  <property name="angle">0</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">0</property>
+			  <property name="right_attach">1</property>
+			  <property name="top_attach">0</property>
+			  <property name="bottom_attach">1</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkButton" id="pp_bgcolor">
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="label" translatable="yes">pp_bgcolor_bt</property>
+			  <property name="use_underline">True</property>
+			  <property name="relief">GTK_RELIEF_NORMAL</property>
+			  <property name="focus_on_click">True</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">1</property>
+			  <property name="right_attach">2</property>
+			  <property name="top_attach">0</property>
+			  <property name="bottom_attach">1</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkLabel" id="label44">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Text foreground</property>
+			  <property name="use_underline">False</property>
+			  <property name="use_markup">False</property>
+			  <property name="justify">GTK_JUSTIFY_LEFT</property>
+			  <property name="wrap">False</property>
+			  <property name="selectable">False</property>
+			  <property name="xalign">0</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xpad">0</property>
+			  <property name="ypad">0</property>
+			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			  <property name="width_chars">-1</property>
+			  <property name="single_line_mode">False</property>
+			  <property name="angle">0</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">0</property>
+			  <property name="right_attach">1</property>
+			  <property name="top_attach">1</property>
+			  <property name="bottom_attach">2</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkLabel" id="label45">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Logins</property>
+			  <property name="use_underline">False</property>
+			  <property name="use_markup">False</property>
+			  <property name="justify">GTK_JUSTIFY_RIGHT</property>
+			  <property name="wrap">False</property>
+			  <property name="selectable">False</property>
+			  <property name="xalign">0</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xpad">0</property>
+			  <property name="ypad">0</property>
+			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			  <property name="width_chars">-1</property>
+			  <property name="single_line_mode">False</property>
+			  <property name="angle">0</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">3</property>
+			  <property name="right_attach">4</property>
+			  <property name="top_attach">0</property>
+			  <property name="bottom_attach">1</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkLabel" id="label46">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Useragents</property>
+			  <property name="use_underline">False</property>
+			  <property name="use_markup">False</property>
+			  <property name="justify">GTK_JUSTIFY_RIGHT</property>
+			  <property name="wrap">False</property>
+			  <property name="selectable">False</property>
+			  <property name="xalign">0</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xpad">0</property>
+			  <property name="ypad">0</property>
+			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			  <property name="width_chars">-1</property>
+			  <property name="single_line_mode">False</property>
+			  <property name="angle">0</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">3</property>
+			  <property name="right_attach">4</property>
+			  <property name="top_attach">1</property>
+			  <property name="bottom_attach">2</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkLabel" id="label47">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Urls</property>
+			  <property name="use_underline">False</property>
+			  <property name="use_markup">False</property>
+			  <property name="justify">GTK_JUSTIFY_LEFT</property>
+			  <property name="wrap">False</property>
+			  <property name="selectable">False</property>
+			  <property name="xalign">0</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xpad">0</property>
+			  <property name="ypad">0</property>
+			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			  <property name="width_chars">-1</property>
+			  <property name="single_line_mode">False</property>
+			  <property name="angle">0</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">6</property>
+			  <property name="right_attach">7</property>
+			  <property name="top_attach">0</property>
+			  <property name="bottom_attach">1</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkLabel" id="label48">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Visited Urls</property>
+			  <property name="use_underline">False</property>
+			  <property name="use_markup">False</property>
+			  <property name="justify">GTK_JUSTIFY_LEFT</property>
+			  <property name="wrap">False</property>
+			  <property name="selectable">False</property>
+			  <property name="xalign">0</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xpad">0</property>
+			  <property name="ypad">0</property>
+			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			  <property name="width_chars">-1</property>
+			  <property name="single_line_mode">False</property>
+			  <property name="angle">0</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">6</property>
+			  <property name="right_attach">7</property>
+			  <property name="top_attach">1</property>
+			  <property name="bottom_attach">2</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkLabel" id="label49">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Clocks</property>
+			  <property name="use_underline">False</property>
+			  <property name="use_markup">False</property>
+			  <property name="justify">GTK_JUSTIFY_RIGHT</property>
+			  <property name="wrap">False</property>
+			  <property name="selectable">False</property>
+			  <property name="xalign">0</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xpad">0</property>
+			  <property name="ypad">0</property>
+			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			  <property name="width_chars">-1</property>
+			  <property name="single_line_mode">False</property>
+			  <property name="angle">0</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">3</property>
+			  <property name="right_attach">4</property>
+			  <property name="top_attach">2</property>
+			  <property name="bottom_attach">3</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkLabel" id="label50">
+			  <property name="visible">True</property>
+			  <property name="label" translatable="yes">Troll score</property>
+			  <property name="use_underline">False</property>
+			  <property name="use_markup">False</property>
+			  <property name="justify">GTK_JUSTIFY_LEFT</property>
+			  <property name="wrap">False</property>
+			  <property name="selectable">False</property>
+			  <property name="xalign">0</property>
+			  <property name="yalign">0.5</property>
+			  <property name="xpad">0</property>
+			  <property name="ypad">0</property>
+			  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			  <property name="width_chars">-1</property>
+			  <property name="single_line_mode">False</property>
+			  <property name="angle">0</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">0</property>
+			  <property name="right_attach">1</property>
+			  <property name="top_attach">2</property>
+			  <property name="bottom_attach">3</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkButton" id="pp_fgcolor.opaque">
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="label" translatable="yes">button4</property>
+			  <property name="use_underline">True</property>
+			  <property name="relief">GTK_RELIEF_NORMAL</property>
+			  <property name="focus_on_click">True</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">1</property>
+			  <property name="right_attach">2</property>
+			  <property name="top_attach">1</property>
+			  <property name="bottom_attach">2</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkButton" id="pp_trollscore_color.opaque">
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="label" translatable="yes">button5</property>
+			  <property name="use_underline">True</property>
+			  <property name="relief">GTK_RELIEF_NORMAL</property>
+			  <property name="focus_on_click">True</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">1</property>
+			  <property name="right_attach">2</property>
+			  <property name="top_attach">2</property>
+			  <property name="bottom_attach">3</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkButton" id="pp_login_color.opaque">
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="label" translatable="yes">button5</property>
+			  <property name="use_underline">True</property>
+			  <property name="relief">GTK_RELIEF_NORMAL</property>
+			  <property name="focus_on_click">True</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">4</property>
+			  <property name="right_attach">5</property>
+			  <property name="top_attach">0</property>
+			  <property name="bottom_attach">1</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkButton" id="pp_useragent_color.opaque">
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="label" translatable="yes">button5</property>
+			  <property name="use_underline">True</property>
+			  <property name="relief">GTK_RELIEF_NORMAL</property>
+			  <property name="focus_on_click">True</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">4</property>
+			  <property name="right_attach">5</property>
+			  <property name="top_attach">1</property>
+			  <property name="bottom_attach">2</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkButton" id="pp_tstamp_color.opaque">
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="label" translatable="yes">button5</property>
+			  <property name="use_underline">True</property>
+			  <property name="relief">GTK_RELIEF_NORMAL</property>
+			  <property name="focus_on_click">True</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">4</property>
+			  <property name="right_attach">5</property>
+			  <property name="top_attach">2</property>
+			  <property name="bottom_attach">3</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkButton" id="pp_url_color.opaque">
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="label" translatable="yes">button5</property>
+			  <property name="use_underline">True</property>
+			  <property name="relief">GTK_RELIEF_NORMAL</property>
+			  <property name="focus_on_click">True</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">7</property>
+			  <property name="right_attach">8</property>
+			  <property name="top_attach">0</property>
+			  <property name="bottom_attach">1</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkButton" id="pp_visited_url_color.opaque">
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="label" translatable="yes">button5</property>
+			  <property name="use_underline">True</property>
+			  <property name="relief">GTK_RELIEF_NORMAL</property>
+			  <property name="focus_on_click">True</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">7</property>
+			  <property name="right_attach">8</property>
+			  <property name="top_attach">1</property>
+			  <property name="bottom_attach">2</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkButton" id="pp_trollscore_color.transp">
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="label" translatable="yes">button4</property>
+			  <property name="use_underline">True</property>
+			  <property name="relief">GTK_RELIEF_NORMAL</property>
+			  <property name="focus_on_click">True</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">2</property>
+			  <property name="right_attach">3</property>
+			  <property name="top_attach">2</property>
+			  <property name="bottom_attach">3</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkButton" id="pp_useragent_color.transp">
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="label" translatable="yes">button4</property>
+			  <property name="use_underline">True</property>
+			  <property name="relief">GTK_RELIEF_NORMAL</property>
+			  <property name="focus_on_click">True</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">5</property>
+			  <property name="right_attach">6</property>
+			  <property name="top_attach">1</property>
+			  <property name="bottom_attach">2</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkButton" id="pp_tstamp_color.transp">
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="label" translatable="yes">button4</property>
+			  <property name="use_underline">True</property>
+			  <property name="relief">GTK_RELIEF_NORMAL</property>
+			  <property name="focus_on_click">True</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">5</property>
+			  <property name="right_attach">6</property>
+			  <property name="top_attach">2</property>
+			  <property name="bottom_attach">3</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkButton" id="pp_url_color.transp">
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="label" translatable="yes">button4</property>
+			  <property name="use_underline">True</property>
+			  <property name="relief">GTK_RELIEF_NORMAL</property>
+			  <property name="focus_on_click">True</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">8</property>
+			  <property name="right_attach">9</property>
+			  <property name="top_attach">0</property>
+			  <property name="bottom_attach">1</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkButton" id="pp_visited_url_color.transp">
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="label" translatable="yes">button4</property>
+			  <property name="use_underline">True</property>
+			  <property name="relief">GTK_RELIEF_NORMAL</property>
+			  <property name="focus_on_click">True</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">8</property>
+			  <property name="right_attach">9</property>
+			  <property name="top_attach">1</property>
+			  <property name="bottom_attach">2</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkButton" id="pp_login_color.transp">
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="label" translatable="yes">button4</property>
+			  <property name="use_underline">True</property>
+			  <property name="relief">GTK_RELIEF_NORMAL</property>
+			  <property name="focus_on_click">True</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">5</property>
+			  <property name="right_attach">6</property>
+			  <property name="top_attach">0</property>
+			  <property name="bottom_attach">1</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+
+		      <child>
+			<widget class="GtkButton" id="pp_fgcolor.transp">
+			  <property name="visible">True</property>
+			  <property name="can_focus">True</property>
+			  <property name="label" translatable="yes">button4</property>
+			  <property name="use_underline">True</property>
+			  <property name="relief">GTK_RELIEF_NORMAL</property>
+			  <property name="focus_on_click">True</property>
+			</widget>
+			<packing>
+			  <property name="left_attach">2</property>
+			  <property name="right_attach">3</property>
+			  <property name="top_attach">1</property>
+			  <property name="bottom_attach">2</property>
+			  <property name="x_options">fill</property>
+			  <property name="y_options"></property>
+			</packing>
+		      </child>
+		    </widget>
+		  </child>
+
+		  <child>
+		    <widget class="GtkLabel" id="label51">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">Various colors</property>
+		      <property name="use_underline">False</property>
+		      <property name="use_markup">False</property>
+		      <property name="justify">GTK_JUSTIFY_LEFT</property>
+		      <property name="wrap">False</property>
+		      <property name="selectable">False</property>
+		      <property name="xalign">0.5</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xpad">0</property>
+		      <property name="ypad">0</property>
+		      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		      <property name="width_chars">-1</property>
+		      <property name="single_line_mode">False</property>
+		      <property name="angle">0</property>
+		    </widget>
+		    <packing>
+		      <property name="type">label_item</property>
+		    </packing>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">True</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+	    </widget>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="label52">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Visual settings applied to selected sites</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0.5</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="type">label_item</property>
+	    </packing>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">True</property>
+	  <property name="fill">True</property>
+	</packing>
+      </child>
+    </widget>
+  </child>
+</widget>
+
+<widget class="GtkDialog" id="change_board_settings_dialog">
+  <property name="visible">True</property>
+  <property name="title" translatable="yes">Change board settings</property>
+  <property name="type">GTK_WINDOW_TOPLEVEL</property>
+  <property name="window_position">GTK_WIN_POS_NONE</property>
+  <property name="modal">False</property>
+  <property name="resizable">True</property>
+  <property name="destroy_with_parent">False</property>
+  <property name="decorated">True</property>
+  <property name="skip_taskbar_hint">False</property>
+  <property name="skip_pager_hint">False</property>
+  <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+  <property name="focus_on_map">True</property>
+  <property name="has_separator">True</property>
+
+  <child internal-child="vbox">
+    <widget class="GtkVBox" id="dialog-vbox10">
+      <property name="visible">True</property>
+      <property name="homogeneous">False</property>
+      <property name="spacing">0</property>
+
+      <child internal-child="action_area">
+	<widget class="GtkHButtonBox" id="dialog-action_area10">
+	  <property name="visible">True</property>
+	  <property name="layout_style">GTK_BUTTONBOX_END</property>
+
+	  <child>
+	    <widget class="GtkButton" id="cancelbutton3">
+	      <property name="visible">True</property>
+	      <property name="can_default">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label">gtk-cancel</property>
+	      <property name="use_stock">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">-6</property>
+	    </widget>
+	  </child>
+
+	  <child>
+	    <widget class="GtkButton" id="apply_bt">
+	      <property name="visible">True</property>
+	      <property name="can_default">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label">gtk-apply</property>
+	      <property name="use_stock">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">-10</property>
+	    </widget>
+	  </child>
+
+	  <child>
+	    <widget class="GtkButton" id="okbutton3">
+	      <property name="visible">True</property>
+	      <property name="can_default">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label">gtk-ok</property>
+	      <property name="use_stock">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">-5</property>
+	    </widget>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">False</property>
+	  <property name="fill">True</property>
+	  <property name="pack_type">GTK_PACK_END</property>
+	</packing>
+      </child>
+
+      <child>
+	<widget class="GtkTable" id="table5">
+	  <property name="visible">True</property>
+	  <property name="n_rows">10</property>
+	  <property name="n_columns">2</property>
+	  <property name="homogeneous">False</property>
+	  <property name="row_spacing">0</property>
+	  <property name="column_spacing">0</property>
+
+	  <child>
+	    <widget class="GtkLabel" id="label55">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Site name, and aliases:</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="left_attach">0</property>
+	      <property name="right_attach">1</property>
+	      <property name="top_attach">0</property>
+	      <property name="bottom_attach">1</property>
+	      <property name="x_options">fill</property>
+	      <property name="y_options"></property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkHBox" id="hbox20">
+	      <property name="visible">True</property>
+	      <property name="homogeneous">False</property>
+	      <property name="spacing">0</property>
+
+	      <child>
+		<widget class="GtkEntry" id="all_names[0]">
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="editable">True</property>
+		  <property name="visibility">True</property>
+		  <property name="max_length">0</property>
+		  <property name="text" translatable="yes"></property>
+		  <property name="has_frame">True</property>
+		  <property name="invisible_char">*</property>
+		  <property name="activates_default">False</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkEntry" id="all_names[1]">
+		  <property name="width_request">120</property>
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="editable">True</property>
+		  <property name="visibility">True</property>
+		  <property name="max_length">0</property>
+		  <property name="text" translatable="yes"></property>
+		  <property name="has_frame">True</property>
+		  <property name="invisible_char">*</property>
+		  <property name="activates_default">False</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkEntry" id="all_names[2]">
+		  <property name="width_request">120</property>
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="editable">True</property>
+		  <property name="visibility">True</property>
+		  <property name="max_length">0</property>
+		  <property name="text" translatable="yes"></property>
+		  <property name="has_frame">True</property>
+		  <property name="invisible_char">*</property>
+		  <property name="activates_default">False</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkEntry" id="all_names[3]">
+		  <property name="width_request">120</property>
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="editable">True</property>
+		  <property name="visibility">True</property>
+		  <property name="max_length">0</property>
+		  <property name="text" translatable="yes"></property>
+		  <property name="has_frame">True</property>
+		  <property name="invisible_char">*</property>
+		  <property name="activates_default">False</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="left_attach">1</property>
+	      <property name="right_attach">2</property>
+	      <property name="top_attach">0</property>
+	      <property name="bottom_attach">1</property>
+	      <property name="y_options">fill</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="label57">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Post URL:</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="left_attach">0</property>
+	      <property name="right_attach">1</property>
+	      <property name="top_attach">3</property>
+	      <property name="bottom_attach">4</property>
+	      <property name="x_options">fill</property>
+	      <property name="y_options"></property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="label58">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Refresh frequency:</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="left_attach">0</property>
+	      <property name="right_attach">1</property>
+	      <property name="top_attach">5</property>
+	      <property name="bottom_attach">6</property>
+	      <property name="x_options">fill</property>
+	      <property name="y_options"></property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkHBox" id="hbox21">
+	      <property name="visible">True</property>
+	      <property name="homogeneous">False</property>
+	      <property name="spacing">0</property>
+
+	      <child>
+		<widget class="GtkSpinButton" id="board_check_delay">
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="climb_rate">1</property>
+		  <property name="digits">0</property>
+		  <property name="numeric">False</property>
+		  <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+		  <property name="snap_to_ticks">False</property>
+		  <property name="wrap">False</property>
+		  <property name="adjustment">100 10 10000 1 10 10</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkLabel" id="label59">
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">seconds  </property>
+		  <property name="use_underline">False</property>
+		  <property name="use_markup">False</property>
+		  <property name="justify">GTK_JUSTIFY_LEFT</property>
+		  <property name="wrap">False</property>
+		  <property name="selectable">False</property>
+		  <property name="xalign">0.5</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">0</property>
+		  <property name="ypad">0</property>
+		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		  <property name="width_chars">-1</property>
+		  <property name="single_line_mode">False</property>
+		  <property name="angle">0</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkLabel" id="board_check_delay_fb">
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">  </property>
+		  <property name="use_underline">False</property>
+		  <property name="use_markup">False</property>
+		  <property name="justify">GTK_JUSTIFY_LEFT</property>
+		  <property name="wrap">False</property>
+		  <property name="selectable">False</property>
+		  <property name="xalign">0.5</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">0</property>
+		  <property name="ypad">0</property>
+		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		  <property name="width_chars">-1</property>
+		  <property name="single_line_mode">False</property>
+		  <property name="angle">0</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="left_attach">1</property>
+	      <property name="right_attach">2</property>
+	      <property name="top_attach">5</property>
+	      <property name="bottom_attach">6</property>
+	      <property name="x_options">fill</property>
+	      <property name="y_options">fill</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkEntry" id="backend_url">
+	      <property name="visible">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="editable">True</property>
+	      <property name="visibility">True</property>
+	      <property name="max_length">0</property>
+	      <property name="text" translatable="yes"></property>
+	      <property name="has_frame">True</property>
+	      <property name="invisible_char">*</property>
+	      <property name="activates_default">False</property>
+	    </widget>
+	    <packing>
+	      <property name="left_attach">1</property>
+	      <property name="right_attach">2</property>
+	      <property name="top_attach">1</property>
+	      <property name="bottom_attach">2</property>
+	      <property name="x_options">fill</property>
+	      <property name="y_options"></property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkEntry" id="post_url">
+	      <property name="visible">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="editable">True</property>
+	      <property name="visibility">True</property>
+	      <property name="max_length">0</property>
+	      <property name="text" translatable="yes"></property>
+	      <property name="has_frame">True</property>
+	      <property name="invisible_char">*</property>
+	      <property name="activates_default">False</property>
+	    </widget>
+	    <packing>
+	      <property name="left_attach">1</property>
+	      <property name="right_attach">2</property>
+	      <property name="top_attach">3</property>
+	      <property name="bottom_attach">4</property>
+	      <property name="x_options">fill</property>
+	      <property name="y_options"></property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkEntry" id="user_cookie">
+	      <property name="visible">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="editable">True</property>
+	      <property name="visibility">True</property>
+	      <property name="max_length">0</property>
+	      <property name="text" translatable="yes"></property>
+	      <property name="has_frame">True</property>
+	      <property name="invisible_char">*</property>
+	      <property name="activates_default">False</property>
+	    </widget>
+	    <packing>
+	      <property name="left_attach">1</property>
+	      <property name="right_attach">2</property>
+	      <property name="top_attach">6</property>
+	      <property name="bottom_attach">7</property>
+	      <property name="y_options"></property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="label66">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Backend URL:</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="left_attach">0</property>
+	      <property name="right_attach">1</property>
+	      <property name="top_attach">1</property>
+	      <property name="bottom_attach">2</property>
+	      <property name="x_options">fill</property>
+	      <property name="y_options"></property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="label67">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Backend flavour:</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="left_attach">0</property>
+	      <property name="right_attach">1</property>
+	      <property name="top_attach">2</property>
+	      <property name="bottom_attach">3</property>
+	      <property name="x_options">fill</property>
+	      <property name="y_options"></property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkOptionMenu" id="backend_flavour">
+	      <property name="visible">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="history">0</property>
+
+	      <child>
+		<widget class="GtkMenu" id="menu2">
+
+		  <child>
+		    <widget class="GtkMenuItem" id="menuitem5">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">message tags are "htmlentitised"</property>
+		      <property name="use_underline">True</property>
+		    </widget>
+		  </child>
+
+		  <child>
+		    <widget class="GtkMenuItem" id="menuitem6">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">message tags are raw</property>
+		      <property name="use_underline">True</property>
+		    </widget>
+		  </child>
+
+		  <child>
+		    <widget class="GtkMenuItem" id="menuitem7">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">the backend has no pants</property>
+		      <property name="use_underline">True</property>
+		    </widget>
+		  </child>
+		</widget>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="left_attach">1</property>
+	      <property name="right_attach">2</property>
+	      <property name="top_attach">2</property>
+	      <property name="bottom_attach">3</property>
+	      <property name="x_options">fill</property>
+	      <property name="y_options"></property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkHBox" id="hbox22">
+	      <property name="visible">True</property>
+	      <property name="homogeneous">False</property>
+	      <property name="spacing">0</property>
+
+	      <child>
+		<widget class="GtkLabel" id="label60">
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">Cookie(s)</property>
+		  <property name="use_underline">False</property>
+		  <property name="use_markup">False</property>
+		  <property name="justify">GTK_JUSTIFY_LEFT</property>
+		  <property name="wrap">False</property>
+		  <property name="selectable">False</property>
+		  <property name="xalign">0</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">0</property>
+		  <property name="ypad">0</property>
+		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		  <property name="width_chars">-1</property>
+		  <property name="single_line_mode">False</property>
+		  <property name="angle">0</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkButton" id="grab_cookie_bt">
+		  <property name="visible">True</property>
+		  <property name="tooltip" translatable="yes">attempt to get the cookie from the cookies stored in your browsers</property>
+		  <property name="can_focus">True</property>
+		  <property name="relief">GTK_RELIEF_NORMAL</property>
+		  <property name="focus_on_click">True</property>
+
+		  <child>
+		    <widget class="GtkAlignment" id="alignment10">
+		      <property name="visible">True</property>
+		      <property name="xalign">0.5</property>
+		      <property name="yalign">0.5</property>
+		      <property name="xscale">0</property>
+		      <property name="yscale">0</property>
+		      <property name="top_padding">0</property>
+		      <property name="bottom_padding">0</property>
+		      <property name="left_padding">0</property>
+		      <property name="right_padding">0</property>
+
+		      <child>
+			<widget class="GtkHBox" id="hbox30">
+			  <property name="visible">True</property>
+			  <property name="homogeneous">False</property>
+			  <property name="spacing">2</property>
+
+			  <child>
+			    <widget class="GtkImage" id="image13">
+			      <property name="visible">True</property>
+			      <property name="stock">gtk-find</property>
+			      <property name="icon_size">4</property>
+			      <property name="xalign">0.5</property>
+			      <property name="yalign">0.5</property>
+			      <property name="xpad">0</property>
+			      <property name="ypad">0</property>
+			    </widget>
+			    <packing>
+			      <property name="padding">0</property>
+			      <property name="expand">False</property>
+			      <property name="fill">False</property>
+			    </packing>
+			  </child>
+
+			  <child>
+			    <widget class="GtkLabel" id="label79">
+			      <property name="visible">True</property>
+			      <property name="label" translatable="yes">(grab cookie)</property>
+			      <property name="use_underline">True</property>
+			      <property name="use_markup">False</property>
+			      <property name="justify">GTK_JUSTIFY_LEFT</property>
+			      <property name="wrap">False</property>
+			      <property name="selectable">False</property>
+			      <property name="xalign">0.5</property>
+			      <property name="yalign">0.5</property>
+			      <property name="xpad">0</property>
+			      <property name="ypad">0</property>
+			      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+			      <property name="width_chars">-1</property>
+			      <property name="single_line_mode">False</property>
+			      <property name="angle">0</property>
+			    </widget>
+			    <packing>
+			      <property name="padding">0</property>
+			      <property name="expand">False</property>
+			      <property name="fill">False</property>
+			    </packing>
+			  </child>
+			</widget>
+		      </child>
+		    </widget>
+		  </child>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="left_attach">0</property>
+	      <property name="right_attach">1</property>
+	      <property name="top_attach">6</property>
+	      <property name="bottom_attach">7</property>
+	      <property name="x_options">fill</property>
+	      <property name="y_options">fill</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkEntry" id="post_template">
+	      <property name="visible">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="editable">True</property>
+	      <property name="visibility">True</property>
+	      <property name="max_length">0</property>
+	      <property name="text" translatable="yes"></property>
+	      <property name="has_frame">True</property>
+	      <property name="invisible_char">*</property>
+	      <property name="activates_default">False</property>
+	    </widget>
+	    <packing>
+	      <property name="left_attach">1</property>
+	      <property name="right_attach">2</property>
+	      <property name="top_attach">4</property>
+	      <property name="bottom_attach">5</property>
+	      <property name="y_options"></property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="label68">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Post Template:</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="left_attach">0</property>
+	      <property name="right_attach">1</property>
+	      <property name="top_attach">4</property>
+	      <property name="bottom_attach">5</property>
+	      <property name="x_options">fill</property>
+	      <property name="y_options"></property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="label70">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Optional login:</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="left_attach">0</property>
+	      <property name="right_attach">1</property>
+	      <property name="top_attach">7</property>
+	      <property name="bottom_attach">8</property>
+	      <property name="x_options">fill</property>
+	      <property name="y_options"></property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkEntry" id="user_login">
+	      <property name="visible">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="editable">True</property>
+	      <property name="visibility">True</property>
+	      <property name="max_length">0</property>
+	      <property name="text" translatable="yes"></property>
+	      <property name="has_frame">True</property>
+	      <property name="invisible_char">*</property>
+	      <property name="activates_default">False</property>
+	    </widget>
+	    <packing>
+	      <property name="left_attach">1</property>
+	      <property name="right_attach">2</property>
+	      <property name="top_attach">7</property>
+	      <property name="bottom_attach">8</property>
+	      <property name="y_options"></property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="label86">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Default useragent:</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="left_attach">0</property>
+	      <property name="right_attach">1</property>
+	      <property name="top_attach">8</property>
+	      <property name="bottom_attach">9</property>
+	      <property name="x_options">fill</property>
+	      <property name="y_options"></property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkEntry" id="user_agent">
+	      <property name="visible">True</property>
+	      <property name="tooltip" translatable="yes">$v will be replaced by the wmcoincoin version, and $s, $r, $m will be replaced by the output of the command uname -a</property>
+	      <property name="can_focus">True</property>
+	      <property name="editable">True</property>
+	      <property name="visibility">True</property>
+	      <property name="max_length">0</property>
+	      <property name="text" translatable="yes"></property>
+	      <property name="has_frame">True</property>
+	      <property name="invisible_char">*</property>
+	      <property name="activates_default">False</property>
+	    </widget>
+	    <packing>
+	      <property name="left_attach">1</property>
+	      <property name="right_attach">2</property>
+	      <property name="top_attach">8</property>
+	      <property name="bottom_attach">9</property>
+	      <property name="y_options"></property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkCheckButton" id="hunt_opened_on_site">
+	      <property name="visible">True</property>
+	      <property name="tooltip" translatable="yes">you can enable/disable the balltrap for each site. Note that there is also a global switch for the balltrap in the pinnipede button bar.</property>
+	      <property name="can_focus">True</property>
+	      <property name="label" translatable="yes">balltrap is allowed on this board</property>
+	      <property name="use_underline">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="active">False</property>
+	      <property name="inconsistent">False</property>
+	      <property name="draw_indicator">True</property>
+	    </widget>
+	    <packing>
+	      <property name="left_attach">1</property>
+	      <property name="right_attach">2</property>
+	      <property name="top_attach">9</property>
+	      <property name="bottom_attach">10</property>
+	      <property name="x_options">fill</property>
+	      <property name="y_options"></property>
+	    </packing>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">True</property>
+	  <property name="fill">True</property>
+	</packing>
+      </child>
+    </widget>
+  </child>
+</widget>
+
+<widget class="GtkDialog" id="change_rss_settings_dialog">
+  <property name="visible">True</property>
+  <property name="title" translatable="yes">Change RSS Feed settings</property>
+  <property name="type">GTK_WINDOW_TOPLEVEL</property>
+  <property name="window_position">GTK_WIN_POS_NONE</property>
+  <property name="modal">False</property>
+  <property name="resizable">True</property>
+  <property name="destroy_with_parent">False</property>
+  <property name="decorated">True</property>
+  <property name="skip_taskbar_hint">False</property>
+  <property name="skip_pager_hint">False</property>
+  <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+  <property name="focus_on_map">True</property>
+  <property name="has_separator">True</property>
+
+  <child internal-child="vbox">
+    <widget class="GtkVBox" id="dialog-vbox10">
+      <property name="visible">True</property>
+      <property name="homogeneous">False</property>
+      <property name="spacing">0</property>
+
+      <child internal-child="action_area">
+	<widget class="GtkHButtonBox" id="dialog-action_area10">
+	  <property name="visible">True</property>
+	  <property name="layout_style">GTK_BUTTONBOX_END</property>
+
+	  <child>
+	    <widget class="GtkButton" id="cancelbutton3">
+	      <property name="visible">True</property>
+	      <property name="can_default">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label">gtk-cancel</property>
+	      <property name="use_stock">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">-6</property>
+	    </widget>
+	  </child>
+
+	  <child>
+	    <widget class="GtkButton" id="apply_bt">
+	      <property name="visible">True</property>
+	      <property name="can_default">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label">gtk-apply</property>
+	      <property name="use_stock">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">-10</property>
+	    </widget>
+	  </child>
+
+	  <child>
+	    <widget class="GtkButton" id="okbutton3">
+	      <property name="visible">True</property>
+	      <property name="can_default">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label">gtk-ok</property>
+	      <property name="use_stock">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">-5</property>
+	    </widget>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">False</property>
+	  <property name="fill">True</property>
+	  <property name="pack_type">GTK_PACK_END</property>
+	</packing>
+      </child>
+
+      <child>
+	<widget class="GtkTable" id="table5">
+	  <property name="visible">True</property>
+	  <property name="n_rows">9</property>
+	  <property name="n_columns">2</property>
+	  <property name="homogeneous">False</property>
+	  <property name="row_spacing">0</property>
+	  <property name="column_spacing">0</property>
+
+	  <child>
+	    <widget class="GtkLabel" id="label55">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Site name, and aliases:</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="left_attach">0</property>
+	      <property name="right_attach">1</property>
+	      <property name="top_attach">0</property>
+	      <property name="bottom_attach">1</property>
+	      <property name="x_options">fill</property>
+	      <property name="y_options"></property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkHBox" id="hbox20">
+	      <property name="visible">True</property>
+	      <property name="homogeneous">False</property>
+	      <property name="spacing">0</property>
+
+	      <child>
+		<widget class="GtkEntry" id="all_names[0]">
+		  <property name="width_request">158</property>
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="editable">True</property>
+		  <property name="visibility">True</property>
+		  <property name="max_length">0</property>
+		  <property name="text" translatable="yes"></property>
+		  <property name="has_frame">True</property>
+		  <property name="invisible_char">*</property>
+		  <property name="activates_default">False</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkEntry" id="all_names[1]">
+		  <property name="width_request">120</property>
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="editable">True</property>
+		  <property name="visibility">True</property>
+		  <property name="max_length">0</property>
+		  <property name="text" translatable="yes"></property>
+		  <property name="has_frame">True</property>
+		  <property name="invisible_char">*</property>
+		  <property name="activates_default">False</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkEntry" id="all_names[2]">
+		  <property name="width_request">120</property>
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="editable">True</property>
+		  <property name="visibility">True</property>
+		  <property name="max_length">0</property>
+		  <property name="text" translatable="yes"></property>
+		  <property name="has_frame">True</property>
+		  <property name="invisible_char">*</property>
+		  <property name="activates_default">False</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkEntry" id="all_names[3]">
+		  <property name="width_request">120</property>
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="editable">True</property>
+		  <property name="visibility">True</property>
+		  <property name="max_length">0</property>
+		  <property name="text" translatable="yes"></property>
+		  <property name="has_frame">True</property>
+		  <property name="invisible_char">*</property>
+		  <property name="activates_default">False</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="left_attach">1</property>
+	      <property name="right_attach">2</property>
+	      <property name="top_attach">0</property>
+	      <property name="bottom_attach">1</property>
+	      <property name="y_options">fill</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="label58">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Refresh frequency:</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="left_attach">0</property>
+	      <property name="right_attach">1</property>
+	      <property name="top_attach">5</property>
+	      <property name="bottom_attach">6</property>
+	      <property name="x_options">fill</property>
+	      <property name="y_options"></property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkHBox" id="hbox21">
+	      <property name="visible">True</property>
+	      <property name="homogeneous">False</property>
+	      <property name="spacing">0</property>
+
+	      <child>
+		<widget class="GtkSpinButton" id="board_check_delay">
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="climb_rate">1</property>
+		  <property name="digits">0</property>
+		  <property name="numeric">False</property>
+		  <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+		  <property name="snap_to_ticks">False</property>
+		  <property name="wrap">False</property>
+		  <property name="adjustment">1 1 10000 1 10 10</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkLabel" id="label59">
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">seconds  </property>
+		  <property name="use_underline">False</property>
+		  <property name="use_markup">False</property>
+		  <property name="justify">GTK_JUSTIFY_LEFT</property>
+		  <property name="wrap">False</property>
+		  <property name="selectable">False</property>
+		  <property name="xalign">0.5</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">0</property>
+		  <property name="ypad">0</property>
+		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		  <property name="width_chars">-1</property>
+		  <property name="single_line_mode">False</property>
+		  <property name="angle">0</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkLabel" id="board_check_delay_fb">
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">  </property>
+		  <property name="use_underline">False</property>
+		  <property name="use_markup">False</property>
+		  <property name="justify">GTK_JUSTIFY_LEFT</property>
+		  <property name="wrap">False</property>
+		  <property name="selectable">False</property>
+		  <property name="xalign">0.5</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">0</property>
+		  <property name="ypad">0</property>
+		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		  <property name="width_chars">-1</property>
+		  <property name="single_line_mode">False</property>
+		  <property name="angle">0</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="left_attach">1</property>
+	      <property name="right_attach">2</property>
+	      <property name="top_attach">5</property>
+	      <property name="bottom_attach">6</property>
+	      <property name="x_options">fill</property>
+	      <property name="y_options">fill</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkEntry" id="backend_url">
+	      <property name="visible">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="editable">True</property>
+	      <property name="visibility">True</property>
+	      <property name="max_length">0</property>
+	      <property name="text" translatable="yes"></property>
+	      <property name="has_frame">True</property>
+	      <property name="invisible_char">*</property>
+	      <property name="activates_default">False</property>
+	    </widget>
+	    <packing>
+	      <property name="left_attach">1</property>
+	      <property name="right_attach">2</property>
+	      <property name="top_attach">1</property>
+	      <property name="bottom_attach">2</property>
+	      <property name="x_options">fill</property>
+	      <property name="y_options"></property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkEntry" id="user_cookie">
+	      <property name="visible">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="editable">True</property>
+	      <property name="visibility">True</property>
+	      <property name="max_length">0</property>
+	      <property name="text" translatable="yes"></property>
+	      <property name="has_frame">True</property>
+	      <property name="invisible_char">*</property>
+	      <property name="activates_default">False</property>
+	    </widget>
+	    <packing>
+	      <property name="left_attach">1</property>
+	      <property name="right_attach">2</property>
+	      <property name="top_attach">6</property>
+	      <property name="bottom_attach">7</property>
+	      <property name="y_options"></property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="label66">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Backend URL:</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="left_attach">0</property>
+	      <property name="right_attach">1</property>
+	      <property name="top_attach">1</property>
+	      <property name="bottom_attach">2</property>
+	      <property name="x_options">fill</property>
+	      <property name="y_options"></property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="label67">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Backend flavour:</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="left_attach">0</property>
+	      <property name="right_attach">1</property>
+	      <property name="top_attach">2</property>
+	      <property name="bottom_attach">3</property>
+	      <property name="x_options">fill</property>
+	      <property name="y_options"></property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkOptionMenu" id="backend_flavour">
+	      <property name="visible">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="history">0</property>
+
+	      <child>
+		<widget class="GtkMenu" id="menu2">
+
+		  <child>
+		    <widget class="GtkMenuItem" id="menuitem5">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">message tags are "htmlentitised"</property>
+		      <property name="use_underline">True</property>
+		    </widget>
+		  </child>
+
+		  <child>
+		    <widget class="GtkMenuItem" id="menuitem6">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">message tags are raw</property>
+		      <property name="use_underline">True</property>
+		    </widget>
+		  </child>
+
+		  <child>
+		    <widget class="GtkMenuItem" id="menuitem7">
+		      <property name="visible">True</property>
+		      <property name="label" translatable="yes">the backend has no pants</property>
+		      <property name="use_underline">True</property>
+		    </widget>
+		  </child>
+		</widget>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="left_attach">1</property>
+	      <property name="right_attach">2</property>
+	      <property name="top_attach">2</property>
+	      <property name="bottom_attach">3</property>
+	      <property name="x_options">fill</property>
+	      <property name="y_options"></property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkHBox" id="hbox22">
+	      <property name="visible">True</property>
+	      <property name="homogeneous">False</property>
+	      <property name="spacing">0</property>
+
+	      <child>
+		<widget class="GtkLabel" id="label60">
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">Cookie(s)</property>
+		  <property name="use_underline">False</property>
+		  <property name="use_markup">False</property>
+		  <property name="justify">GTK_JUSTIFY_LEFT</property>
+		  <property name="wrap">False</property>
+		  <property name="selectable">False</property>
+		  <property name="xalign">0</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">0</property>
+		  <property name="ypad">0</property>
+		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		  <property name="width_chars">-1</property>
+		  <property name="single_line_mode">False</property>
+		  <property name="angle">0</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkButton" id="grab_cookie_bt">
+		  <property name="visible">True</property>
+		  <property name="tooltip" translatable="yes">attempt to get the cookie from the cookies stored in your browsers</property>
+		  <property name="can_focus">True</property>
+		  <property name="label" translatable="yes">(grab cookie)</property>
+		  <property name="use_underline">True</property>
+		  <property name="relief">GTK_RELIEF_NORMAL</property>
+		  <property name="focus_on_click">True</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="left_attach">0</property>
+	      <property name="right_attach">1</property>
+	      <property name="top_attach">6</property>
+	      <property name="bottom_attach">7</property>
+	      <property name="x_options">fill</property>
+	      <property name="y_options">fill</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkCheckButton" id="rss_ignore_description">
+	      <property name="visible">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label" translatable="yes">Ignore <description> content (some links-only feeds contain ads in this field)</property>
+	      <property name="use_underline">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="active">False</property>
+	      <property name="inconsistent">False</property>
+	      <property name="draw_indicator">True</property>
+	    </widget>
+	    <packing>
+	      <property name="left_attach">0</property>
+	      <property name="right_attach">2</property>
+	      <property name="top_attach">3</property>
+	      <property name="bottom_attach">4</property>
+	      <property name="x_options">fill</property>
+	      <property name="y_options"></property>
+	    </packing>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">True</property>
+	  <property name="fill">True</property>
+	</packing>
+      </child>
+    </widget>
+  </child>
+</widget>
+
+<widget class="GtkDialog" id="change_pop_settings_dialog">
+  <property name="visible">True</property>
+  <property name="title" translatable="yes">Change POP account settings</property>
+  <property name="type">GTK_WINDOW_TOPLEVEL</property>
+  <property name="window_position">GTK_WIN_POS_NONE</property>
+  <property name="modal">False</property>
+  <property name="resizable">True</property>
+  <property name="destroy_with_parent">False</property>
+  <property name="decorated">True</property>
+  <property name="skip_taskbar_hint">False</property>
+  <property name="skip_pager_hint">False</property>
+  <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+  <property name="focus_on_map">True</property>
+  <property name="has_separator">True</property>
+
+  <child internal-child="vbox">
+    <widget class="GtkVBox" id="dialog-vbox10">
+      <property name="visible">True</property>
+      <property name="homogeneous">False</property>
+      <property name="spacing">0</property>
+
+      <child internal-child="action_area">
+	<widget class="GtkHButtonBox" id="dialog-action_area10">
+	  <property name="visible">True</property>
+	  <property name="layout_style">GTK_BUTTONBOX_END</property>
+
+	  <child>
+	    <widget class="GtkButton" id="cancelbutton3">
+	      <property name="visible">True</property>
+	      <property name="can_default">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label">gtk-cancel</property>
+	      <property name="use_stock">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">-6</property>
+	    </widget>
+	  </child>
+
+	  <child>
+	    <widget class="GtkButton" id="apply_bt">
+	      <property name="visible">True</property>
+	      <property name="can_default">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label">gtk-apply</property>
+	      <property name="use_stock">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">-10</property>
+	    </widget>
+	  </child>
+
+	  <child>
+	    <widget class="GtkButton" id="okbutton3">
+	      <property name="visible">True</property>
+	      <property name="can_default">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label">gtk-ok</property>
+	      <property name="use_stock">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">-5</property>
+	    </widget>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">False</property>
+	  <property name="fill">True</property>
+	  <property name="pack_type">GTK_PACK_END</property>
+	</packing>
+      </child>
+
+      <child>
+	<widget class="GtkTable" id="table5">
+	  <property name="visible">True</property>
+	  <property name="n_rows">9</property>
+	  <property name="n_columns">2</property>
+	  <property name="homogeneous">False</property>
+	  <property name="row_spacing">0</property>
+	  <property name="column_spacing">0</property>
+
+	  <child>
+	    <widget class="GtkLabel" id="label55">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Site name, and aliases:</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="left_attach">0</property>
+	      <property name="right_attach">1</property>
+	      <property name="top_attach">0</property>
+	      <property name="bottom_attach">1</property>
+	      <property name="x_options">fill</property>
+	      <property name="y_options"></property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkHBox" id="hbox20">
+	      <property name="visible">True</property>
+	      <property name="homogeneous">False</property>
+	      <property name="spacing">0</property>
+
+	      <child>
+		<widget class="GtkEntry" id="all_names[0]">
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="editable">True</property>
+		  <property name="visibility">True</property>
+		  <property name="max_length">0</property>
+		  <property name="text" translatable="yes"></property>
+		  <property name="has_frame">True</property>
+		  <property name="invisible_char">*</property>
+		  <property name="activates_default">False</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkEntry" id="all_names[1]">
+		  <property name="width_request">120</property>
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="editable">True</property>
+		  <property name="visibility">True</property>
+		  <property name="max_length">0</property>
+		  <property name="text" translatable="yes"></property>
+		  <property name="has_frame">True</property>
+		  <property name="invisible_char">*</property>
+		  <property name="activates_default">False</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkEntry" id="all_names[2]">
+		  <property name="width_request">120</property>
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="editable">True</property>
+		  <property name="visibility">True</property>
+		  <property name="max_length">0</property>
+		  <property name="text" translatable="yes"></property>
+		  <property name="has_frame">True</property>
+		  <property name="invisible_char">*</property>
+		  <property name="activates_default">False</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkEntry" id="all_names[3]">
+		  <property name="width_request">120</property>
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="editable">True</property>
+		  <property name="visibility">True</property>
+		  <property name="max_length">0</property>
+		  <property name="text" translatable="yes"></property>
+		  <property name="has_frame">True</property>
+		  <property name="invisible_char">*</property>
+		  <property name="activates_default">False</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="left_attach">1</property>
+	      <property name="right_attach">2</property>
+	      <property name="top_attach">0</property>
+	      <property name="bottom_attach">1</property>
+	      <property name="y_options">fill</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="label58">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Refresh frequency:</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="left_attach">0</property>
+	      <property name="right_attach">1</property>
+	      <property name="top_attach">5</property>
+	      <property name="bottom_attach">6</property>
+	      <property name="x_options">fill</property>
+	      <property name="y_options"></property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkHBox" id="hbox21">
+	      <property name="visible">True</property>
+	      <property name="homogeneous">False</property>
+	      <property name="spacing">0</property>
+
+	      <child>
+		<widget class="GtkSpinButton" id="board_check_delay">
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="climb_rate">1</property>
+		  <property name="digits">0</property>
+		  <property name="numeric">False</property>
+		  <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+		  <property name="snap_to_ticks">False</property>
+		  <property name="wrap">False</property>
+		  <property name="adjustment">1 1 10000 1 10 10</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkLabel" id="label59">
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">seconds  </property>
+		  <property name="use_underline">False</property>
+		  <property name="use_markup">False</property>
+		  <property name="justify">GTK_JUSTIFY_LEFT</property>
+		  <property name="wrap">False</property>
+		  <property name="selectable">False</property>
+		  <property name="xalign">0.5</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">0</property>
+		  <property name="ypad">0</property>
+		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		  <property name="width_chars">-1</property>
+		  <property name="single_line_mode">False</property>
+		  <property name="angle">0</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkLabel" id="board_check_delay_fb">
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">  </property>
+		  <property name="use_underline">False</property>
+		  <property name="use_markup">False</property>
+		  <property name="justify">GTK_JUSTIFY_LEFT</property>
+		  <property name="wrap">False</property>
+		  <property name="selectable">False</property>
+		  <property name="xalign">0.5</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">0</property>
+		  <property name="ypad">0</property>
+		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		  <property name="width_chars">-1</property>
+		  <property name="single_line_mode">False</property>
+		  <property name="angle">0</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="left_attach">1</property>
+	      <property name="right_attach">2</property>
+	      <property name="top_attach">5</property>
+	      <property name="bottom_attach">6</property>
+	      <property name="x_options">fill</property>
+	      <property name="y_options">fill</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkEntry" id="backend_url">
+	      <property name="visible">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="editable">True</property>
+	      <property name="visibility">True</property>
+	      <property name="max_length">0</property>
+	      <property name="text" translatable="yes"></property>
+	      <property name="has_frame">True</property>
+	      <property name="invisible_char">*</property>
+	      <property name="activates_default">False</property>
+	    </widget>
+	    <packing>
+	      <property name="left_attach">1</property>
+	      <property name="right_attach">2</property>
+	      <property name="top_attach">1</property>
+	      <property name="bottom_attach">2</property>
+	      <property name="x_options">fill</property>
+	      <property name="y_options"></property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="label66">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Pop3 server:</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="left_attach">0</property>
+	      <property name="right_attach">1</property>
+	      <property name="top_attach">1</property>
+	      <property name="bottom_attach">2</property>
+	      <property name="x_options">fill</property>
+	      <property name="y_options"></property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="label68">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Login</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="left_attach">0</property>
+	      <property name="right_attach">1</property>
+	      <property name="top_attach">7</property>
+	      <property name="bottom_attach">8</property>
+	      <property name="x_options">fill</property>
+	      <property name="y_options"></property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkEntry" id="pop3_user">
+	      <property name="visible">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="editable">True</property>
+	      <property name="visibility">True</property>
+	      <property name="max_length">0</property>
+	      <property name="text" translatable="yes"></property>
+	      <property name="has_frame">True</property>
+	      <property name="invisible_char">*</property>
+	      <property name="activates_default">False</property>
+	    </widget>
+	    <packing>
+	      <property name="left_attach">1</property>
+	      <property name="right_attach">2</property>
+	      <property name="top_attach">7</property>
+	      <property name="bottom_attach">8</property>
+	      <property name="y_options"></property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkLabel" id="label69">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Password</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="left_attach">0</property>
+	      <property name="right_attach">1</property>
+	      <property name="top_attach">8</property>
+	      <property name="bottom_attach">9</property>
+	      <property name="x_options">fill</property>
+	      <property name="y_options"></property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkEntry" id="pop3_pass">
+	      <property name="visible">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="editable">True</property>
+	      <property name="visibility">False</property>
+	      <property name="max_length">0</property>
+	      <property name="text" translatable="yes"></property>
+	      <property name="has_frame">True</property>
+	      <property name="invisible_char">*</property>
+	      <property name="activates_default">False</property>
+	    </widget>
+	    <packing>
+	      <property name="left_attach">1</property>
+	      <property name="right_attach">2</property>
+	      <property name="top_attach">8</property>
+	      <property name="bottom_attach">9</property>
+	      <property name="y_options"></property>
+	    </packing>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">True</property>
+	  <property name="fill">True</property>
+	</packing>
+      </child>
+    </widget>
+  </child>
+</widget>
+
+<widget class="GtkDialog" id="grab_cookie_dialog">
+  <property name="width_request">786</property>
+  <property name="height_request">470</property>
+  <property name="visible">True</property>
+  <property name="title" translatable="yes">grab a cookie from your browsers</property>
+  <property name="type">GTK_WINDOW_TOPLEVEL</property>
+  <property name="window_position">GTK_WIN_POS_NONE</property>
+  <property name="modal">False</property>
+  <property name="resizable">True</property>
+  <property name="destroy_with_parent">False</property>
+  <property name="decorated">True</property>
+  <property name="skip_taskbar_hint">False</property>
+  <property name="skip_pager_hint">False</property>
+  <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+  <property name="focus_on_map">True</property>
+  <property name="has_separator">True</property>
+
+  <child internal-child="vbox">
+    <widget class="GtkVBox" id="dialog-vbox11">
+      <property name="visible">True</property>
+      <property name="homogeneous">False</property>
+      <property name="spacing">0</property>
+
+      <child internal-child="action_area">
+	<widget class="GtkHButtonBox" id="dialog-action_area11">
+	  <property name="visible">True</property>
+	  <property name="layout_style">GTK_BUTTONBOX_END</property>
+
+	  <child>
+	    <widget class="GtkButton" id="close_bt">
+	      <property name="visible">True</property>
+	      <property name="can_default">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label">gtk-close</property>
+	      <property name="use_stock">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">-7</property>
+	    </widget>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">False</property>
+	  <property name="fill">True</property>
+	  <property name="pack_type">GTK_PACK_END</property>
+	</packing>
+      </child>
+
+      <child>
+	<widget class="GtkVBox" id="vbox15">
+	  <property name="visible">True</property>
+	  <property name="homogeneous">False</property>
+	  <property name="spacing">0</property>
+
+	  <child>
+	    <widget class="GtkLabel" id="label61">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes">Cut and paste the selected cookies.</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0.5</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">False</property>
+	      <property name="fill">False</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkHSeparator" id="hseparator4">
+	      <property name="visible">True</property>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">False</property>
+	      <property name="fill">False</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkScrolledWindow" id="scrolledwindow6">
+	      <property name="visible">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+	      <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+	      <property name="shadow_type">GTK_SHADOW_NONE</property>
+	      <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
+
+	      <child>
+		<widget class="GtkTextView" id="cookies">
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="editable">False</property>
+		  <property name="overwrite">False</property>
+		  <property name="accepts_tab">True</property>
+		  <property name="justification">GTK_JUSTIFY_LEFT</property>
+		  <property name="wrap_mode">GTK_WRAP_NONE</property>
+		  <property name="cursor_visible">True</property>
+		  <property name="pixels_above_lines">0</property>
+		  <property name="pixels_below_lines">0</property>
+		  <property name="pixels_inside_wrap">0</property>
+		  <property name="left_margin">0</property>
+		  <property name="right_margin">0</property>
+		  <property name="indent">0</property>
+		  <property name="text" translatable="yes"></property>
+		</widget>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">True</property>
+	      <property name="fill">True</property>
+	    </packing>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">True</property>
+	  <property name="fill">True</property>
+	</packing>
+      </child>
+    </widget>
+  </child>
+</widget>
+
+<widget class="GtkFontSelectionDialog" id="fontselectiondialog">
+  <property name="border_width">4</property>
+  <property name="visible">True</property>
+  <property name="title" translatable="yes">Select Font</property>
+  <property name="type">GTK_WINDOW_TOPLEVEL</property>
+  <property name="window_position">GTK_WIN_POS_NONE</property>
+  <property name="modal">False</property>
+  <property name="resizable">True</property>
+  <property name="destroy_with_parent">False</property>
+  <property name="decorated">True</property>
+  <property name="skip_taskbar_hint">False</property>
+  <property name="skip_pager_hint">False</property>
+  <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+  <property name="focus_on_map">True</property>
+
+  <child internal-child="cancel_button">
+    <widget class="GtkButton" id="cancel_button2">
+      <property name="visible">True</property>
+      <property name="can_default">True</property>
+      <property name="can_focus">True</property>
+      <property name="relief">GTK_RELIEF_NORMAL</property>
+      <property name="focus_on_click">True</property>
+    </widget>
+  </child>
+
+  <child internal-child="apply_button">
+    <widget class="GtkButton" id="apply_button1">
+      <property name="can_default">True</property>
+      <property name="can_focus">True</property>
+      <property name="relief">GTK_RELIEF_NORMAL</property>
+      <property name="focus_on_click">True</property>
+    </widget>
+  </child>
+
+  <child internal-child="ok_button">
+    <widget class="GtkButton" id="ok_button2">
+      <property name="visible">True</property>
+      <property name="can_default">True</property>
+      <property name="can_focus">True</property>
+      <property name="relief">GTK_RELIEF_NORMAL</property>
+      <property name="focus_on_click">True</property>
+    </widget>
+  </child>
+
+  <child internal-child="font_selection">
+    <widget class="GtkFontSelection" id="font_selection1">
+      <property name="border_width">4</property>
+      <property name="visible">True</property>
+      <property name="preview_text" translatable="yes">abcdefghijk ABCDEFGHIJK</property>
+    </widget>
+    <packing>
+      <property name="padding">0</property>
+      <property name="expand">True</property>
+      <property name="fill">True</property>
+    </packing>
+  </child>
+</widget>
+
+<widget class="GtkDialog" id="proxy_dialog">
+  <property name="visible">True</property>
+  <property name="title" translatable="yes">Proxy or not proxy</property>
+  <property name="type">GTK_WINDOW_TOPLEVEL</property>
+  <property name="window_position">GTK_WIN_POS_NONE</property>
+  <property name="modal">False</property>
+  <property name="resizable">True</property>
+  <property name="destroy_with_parent">False</property>
+  <property name="decorated">True</property>
+  <property name="skip_taskbar_hint">False</property>
+  <property name="skip_pager_hint">False</property>
+  <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
+  <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
+  <property name="focus_on_map">True</property>
+  <property name="has_separator">True</property>
+
+  <child internal-child="vbox">
+    <widget class="GtkVBox" id="dialog-vbox12">
+      <property name="visible">True</property>
+      <property name="homogeneous">False</property>
+      <property name="spacing">0</property>
+
+      <child internal-child="action_area">
+	<widget class="GtkHButtonBox" id="dialog-action_area12">
+	  <property name="visible">True</property>
+	  <property name="layout_style">GTK_BUTTONBOX_END</property>
+
+	  <child>
+	    <widget class="GtkButton" id="cancelbutton4">
+	      <property name="visible">True</property>
+	      <property name="can_default">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label">gtk-cancel</property>
+	      <property name="use_stock">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">-6</property>
+	    </widget>
+	  </child>
+
+	  <child>
+	    <widget class="GtkButton" id="okbutton4">
+	      <property name="visible">True</property>
+	      <property name="can_default">True</property>
+	      <property name="can_focus">True</property>
+	      <property name="label">gtk-ok</property>
+	      <property name="use_stock">True</property>
+	      <property name="relief">GTK_RELIEF_NORMAL</property>
+	      <property name="focus_on_click">True</property>
+	      <property name="response_id">-5</property>
+	    </widget>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">False</property>
+	  <property name="fill">True</property>
+	  <property name="pack_type">GTK_PACK_END</property>
+	</packing>
+      </child>
+
+      <child>
+	<widget class="GtkVBox" id="vbox21">
+	  <property name="visible">True</property>
+	  <property name="homogeneous">False</property>
+	  <property name="spacing">0</property>
+
+	  <child>
+	    <widget class="GtkLabel" id="label101">
+	      <property name="visible">True</property>
+	      <property name="label" translatable="yes"><b>The Charles Bronson's Advice</b>:</property>
+	      <property name="use_underline">False</property>
+	      <property name="use_markup">True</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0.5</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+	      <property name="width_chars">-1</property>
+	      <property name="single_line_mode">False</property>
+	      <property name="angle">0</property>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">False</property>
+	      <property name="fill">False</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkHBox" id="hbox37">
+	      <property name="visible">True</property>
+	      <property name="homogeneous">False</property>
+	      <property name="spacing">0</property>
+
+	      <child>
+		<widget class="GtkImage" id="image16">
+		  <property name="visible">True</property>
+		  <property name="pixbuf">cbronson.jpg</property>
+		  <property name="xalign">0.5</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">0</property>
+		  <property name="ypad">0</property>
+		</widget>
+		<packing>
+		  <property name="padding">0</property>
+		  <property name="expand">False</property>
+		  <property name="fill">False</property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkLabel" id="label100">
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">Here you may change the proxy settings for the selected sites.
+
+Note that '<i>disable proxy caching</i>' might be useful even if you do not have filled a proxy (i.e. if your ISP uses a transparent proxy) (well I am not 100% sure of that)
+
+The '<i>if modified since</i>' check-box is not proxy related and should always be checked.
+
+If you don't specify any proxy, then wmcoincoin will use the content of the environment variable <tt><b>http_proxy</b></tt>
+
+If you have any problem, you can still look at the output of 'wmcoincoin -v2', and you will see the http headers sent, and the answers of the servers or proxies.</property>
+		  <property name="use_underline">False</property>
+		  <property name="use_markup">True</property>
+		  <property name="justify">GTK_JUSTIFY_LEFT</property>
+		  <property name="wrap">True</property>
+		  <property name="selectable">False</property>
+		  <property name="xalign">0.5</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">0</property>
+		  <property name="ypad">0</property>
+		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		  <property name="width_chars">-1</property>
+		  <property name="single_line_mode">False</property>
+		  <property name="angle">0</property>
+		</widget>
+		<packing>
+		  <property name="padding">5</property>
+		  <property name="expand">True</property>
+		  <property name="fill">True</property>
+		</packing>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">False</property>
+	      <property name="fill">False</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkHSeparator" id="hseparator8">
+	      <property name="visible">True</property>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">True</property>
+	      <property name="fill">True</property>
+	    </packing>
+	  </child>
+
+	  <child>
+	    <widget class="GtkTable" id="table7">
+	      <property name="visible">True</property>
+	      <property name="n_rows">3</property>
+	      <property name="n_columns">4</property>
+	      <property name="homogeneous">False</property>
+	      <property name="row_spacing">0</property>
+	      <property name="column_spacing">0</property>
+
+	      <child>
+		<widget class="GtkLabel" id="label96">
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">Proxy: </property>
+		  <property name="use_underline">False</property>
+		  <property name="use_markup">False</property>
+		  <property name="justify">GTK_JUSTIFY_LEFT</property>
+		  <property name="wrap">False</property>
+		  <property name="selectable">False</property>
+		  <property name="xalign">0</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">0</property>
+		  <property name="ypad">0</property>
+		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		  <property name="width_chars">-1</property>
+		  <property name="single_line_mode">False</property>
+		  <property name="angle">0</property>
+		</widget>
+		<packing>
+		  <property name="left_attach">0</property>
+		  <property name="right_attach">1</property>
+		  <property name="top_attach">0</property>
+		  <property name="bottom_attach">1</property>
+		  <property name="x_options">fill</property>
+		  <property name="y_options"></property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkLabel" id="label97">
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">Port: </property>
+		  <property name="use_underline">False</property>
+		  <property name="use_markup">False</property>
+		  <property name="justify">GTK_JUSTIFY_LEFT</property>
+		  <property name="wrap">False</property>
+		  <property name="selectable">False</property>
+		  <property name="xalign">0</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">0</property>
+		  <property name="ypad">0</property>
+		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		  <property name="width_chars">-1</property>
+		  <property name="single_line_mode">False</property>
+		  <property name="angle">0</property>
+		</widget>
+		<packing>
+		  <property name="left_attach">2</property>
+		  <property name="right_attach">3</property>
+		  <property name="top_attach">0</property>
+		  <property name="bottom_attach">1</property>
+		  <property name="x_options">fill</property>
+		  <property name="y_options"></property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkLabel" id="label98">
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">User: </property>
+		  <property name="use_underline">False</property>
+		  <property name="use_markup">False</property>
+		  <property name="justify">GTK_JUSTIFY_LEFT</property>
+		  <property name="wrap">False</property>
+		  <property name="selectable">False</property>
+		  <property name="xalign">0</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">0</property>
+		  <property name="ypad">0</property>
+		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		  <property name="width_chars">-1</property>
+		  <property name="single_line_mode">False</property>
+		  <property name="angle">0</property>
+		</widget>
+		<packing>
+		  <property name="left_attach">0</property>
+		  <property name="right_attach">1</property>
+		  <property name="top_attach">1</property>
+		  <property name="bottom_attach">2</property>
+		  <property name="x_options">fill</property>
+		  <property name="y_options"></property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkLabel" id="label99">
+		  <property name="visible">True</property>
+		  <property name="label" translatable="yes">Password: </property>
+		  <property name="use_underline">False</property>
+		  <property name="use_markup">False</property>
+		  <property name="justify">GTK_JUSTIFY_LEFT</property>
+		  <property name="wrap">False</property>
+		  <property name="selectable">False</property>
+		  <property name="xalign">0</property>
+		  <property name="yalign">0.5</property>
+		  <property name="xpad">0</property>
+		  <property name="ypad">0</property>
+		  <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+		  <property name="width_chars">-1</property>
+		  <property name="single_line_mode">False</property>
+		  <property name="angle">0</property>
+		</widget>
+		<packing>
+		  <property name="left_attach">2</property>
+		  <property name="right_attach">3</property>
+		  <property name="top_attach">1</property>
+		  <property name="bottom_attach">2</property>
+		  <property name="x_options">fill</property>
+		  <property name="y_options"></property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkCheckButton" id="proxy_nocache">
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="label" translatable="yes">Disable proxy caching</property>
+		  <property name="use_underline">True</property>
+		  <property name="relief">GTK_RELIEF_NORMAL</property>
+		  <property name="focus_on_click">True</property>
+		  <property name="active">False</property>
+		  <property name="inconsistent">False</property>
+		  <property name="draw_indicator">True</property>
+		</widget>
+		<packing>
+		  <property name="left_attach">1</property>
+		  <property name="right_attach">2</property>
+		  <property name="top_attach">2</property>
+		  <property name="bottom_attach">3</property>
+		  <property name="x_options">fill</property>
+		  <property name="y_options"></property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkCheckButton" id="use_if_modified_since">
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="label" translatable="yes">Use 'if-modified-since' </property>
+		  <property name="use_underline">True</property>
+		  <property name="relief">GTK_RELIEF_NORMAL</property>
+		  <property name="focus_on_click">True</property>
+		  <property name="active">False</property>
+		  <property name="inconsistent">False</property>
+		  <property name="draw_indicator">True</property>
+		</widget>
+		<packing>
+		  <property name="left_attach">3</property>
+		  <property name="right_attach">4</property>
+		  <property name="top_attach">2</property>
+		  <property name="bottom_attach">3</property>
+		  <property name="x_options">fill</property>
+		  <property name="y_options"></property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkEntry" id="proxy_name">
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="editable">True</property>
+		  <property name="visibility">True</property>
+		  <property name="max_length">0</property>
+		  <property name="text" translatable="yes"></property>
+		  <property name="has_frame">True</property>
+		  <property name="invisible_char">*</property>
+		  <property name="activates_default">False</property>
+		</widget>
+		<packing>
+		  <property name="left_attach">1</property>
+		  <property name="right_attach">2</property>
+		  <property name="top_attach">0</property>
+		  <property name="bottom_attach">1</property>
+		  <property name="y_options"></property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkSpinButton" id="proxy_port">
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="climb_rate">1</property>
+		  <property name="digits">0</property>
+		  <property name="numeric">False</property>
+		  <property name="update_policy">GTK_UPDATE_ALWAYS</property>
+		  <property name="snap_to_ticks">False</property>
+		  <property name="wrap">False</property>
+		  <property name="adjustment">1 0 65535 1 10 10</property>
+		</widget>
+		<packing>
+		  <property name="left_attach">3</property>
+		  <property name="right_attach">4</property>
+		  <property name="top_attach">0</property>
+		  <property name="bottom_attach">1</property>
+		  <property name="y_options"></property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkEntry" id="proxy_auth_user">
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="editable">True</property>
+		  <property name="visibility">True</property>
+		  <property name="max_length">0</property>
+		  <property name="text" translatable="yes"></property>
+		  <property name="has_frame">True</property>
+		  <property name="invisible_char">*</property>
+		  <property name="activates_default">False</property>
+		</widget>
+		<packing>
+		  <property name="left_attach">1</property>
+		  <property name="right_attach">2</property>
+		  <property name="top_attach">1</property>
+		  <property name="bottom_attach">2</property>
+		  <property name="y_options"></property>
+		</packing>
+	      </child>
+
+	      <child>
+		<widget class="GtkEntry" id="proxy_auth_pass">
+		  <property name="visible">True</property>
+		  <property name="can_focus">True</property>
+		  <property name="editable">True</property>
+		  <property name="visibility">False</property>
+		  <property name="max_length">0</property>
+		  <property name="text" translatable="yes"></property>
+		  <property name="has_frame">True</property>
+		  <property name="invisible_char">*</property>
+		  <property name="activates_default">False</property>
+		</widget>
+		<packing>
+		  <property name="left_attach">3</property>
+		  <property name="right_attach">4</property>
+		  <property name="top_attach">1</property>
+		  <property name="bottom_attach">2</property>
+		  <property name="y_options"></property>
+		</packing>
+	      </child>
+	    </widget>
+	    <packing>
+	      <property name="padding">0</property>
+	      <property name="expand">True</property>
+	      <property name="fill">True</property>
+	    </packing>
+	  </child>
+	</widget>
+	<packing>
+	  <property name="padding">0</property>
+	  <property name="expand">True</property>
+	  <property name="fill">True</property>
+	</packing>
+      </child>
+    </widget>
+  </child>
+</widget>
+
+</glade-interface>
diff --git a/wmcoincoin.spec b/wmcoincoin.spec
new file mode 100644
index 0000000..56fd4ca
--- /dev/null
+++ b/wmcoincoin.spec
@@ -0,0 +1,106 @@
+%define name wmcoincoin
+%define version 2.6.0
+%define release 1
+Summary:	Funny dock-app for browsing and interact to XML board sites    
+Summary(fr): Client pour naviguer et interagir sur des tribunes web en XML
+Name:		%{name}
+Version:	%{version}
+Release:	%{release}
+Source:		%{name}-%{version}.tar.gz
+Source1:    http://hules.free.fr/wmcoincoin/download/wmcoincoin-2.5.1f.tar.gz 
+License:	GPLv2 
+URL:		http://hules.free.fr/wmcoincoin/wmcoincoin.html
+Group:		Applications/Communications
+BuildRoot:	%{_tmppath}/%{name}-buildroot
+Prefix:		%{_prefix}
+BuildRequires:  gtk+-devel imlib2-devel
+  
+
+%description
+Program designed to consult and post to XML web-chats without web browser
+%description -l fr
+Programme con�u pour poster sur des chats XML sans navigateur web 
+
+%prep
+rm -rf $RPM_BUILD_ROOT
+%setup 
+
+%build
+%configure
+make
+
+%install
+rm -rf $RPM_BUILD_ROOT
+make install DESTDIR=$RPM_BUILD_ROOT
+%find_lang %{name}
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%files -f %{name}.lang
+%defattr(-,root,root,0755)
+%doc README NEWS COPYING AUTHORS 
+%{_bindir}/*
+%{_datadir}/%{name}
+%{_datadir}/%{name}/options
+%{_datadir}/%{name}/*.xpm
+%{_datadir}/wmcoincoin
+
+%changelog
+
+* Wed Jun 6  2012 pierre80 <pierre80 at voila.fr> 2.5.1f-1
+- Version 2.5.1f-1
+- clean and update spec for compatibility with fedora packages guidlines
+
+* Tue Jul 19 2003 houpla <laurent at pschit.net> 2.4.6a-1
+- version 2.4.6a-1
+- clean and update spec
+
+* Sat Jun  1 2002 pouaite <c0in at altern.org> 2.3.8a-1
+- version 2.3.8a
+
+* Fri Apr 26 2002 pouaite <c0in at altern.org> 2.3.7b-1
+- version 2.3.7b
+
+* Sun Apr 14 2002 pouaite <c0in at altern.org> 2.3.7a-1
+- version 2.3.7a
+
+* Sat Mar  9 2002 pouaite <c0in at altern.org> 2.3.6-1
+- version 2.3.6
+
+* Mon Feb 18 2002 pouaite <c0in at altern.org> 2.3.5-1
+- version 2.3.5
+
+* Sun Jan 20 2002 pouaite <c0in at altern.org> 2.3.4-1
+- version 2.3.4
+
+* Sun Dec 16 2001 pommier julien <c0in at altern.org> 2.3.2-1
+- version 2.3.2
+
+* Sun Nov 18 2001 pommier julien <c0in at altern.org> 2.2.4beta-1
+- update to v2.2.4 after  modifications of dacode
+
+* Sun Nov 18 2001 pommier julien <c0in at altern.org> 2.2.3beta-2
+- renomage de remote.php3 en remote.rdf, gestion des tags '<br />'
+
+* Mon Nov 12 2001 pommier julien <c0in at altern.org> 2.2.3-1
+- gestion de la messagerie, am�liorations diverses
+
+* Tue Oct 23 2001 pommier julien <c0in at altern.org> 2.2beta-1 - r�ecriture de l'affichage des
+news, coup de pied dans le cul de la libwraster, GROSSE modif de la boucle principal (pour �viter
+des plantages rares mais bizarres). Ajout d'un TrollDetector(tm)(c)MAPL
+
+* Thu Oct 11 2001 pommier julien <c0in at altern.org> 2.11beta-1
+- merge de la branche cygwin de gege, et ajout de petits bugfixes
+
+* Sun Sep 30 2001 pommier julien <c0in at altern.org> 2.1beta-1
+- apr�s l'ignoble v2.0, voici venir la v2.1beta et son cort�ge de fonctionnalit�s.
+
+* Tue Sep 25 2001 pommier julien <c0in at altern.org> 2.0-2 
+- correction d'un bug mineur (certains messages dans le remote.php3
+  sont r�partis sur plus d'une ligne..)
+* Sun Sep 23 2001 pommier julien <c0in at altern.org> 2.0-1
+- tentative de cr�ation du rpm...
+
+
+# end of file
diff --git a/xpms/badnews.xpm b/xpms/badnews.xpm
new file mode 100644
index 0000000..a296c7d
--- /dev/null
+++ b/xpms/badnews.xpm
@@ -0,0 +1,4882 @@
+/* XPM */
+static char * evilman_xpm[] = {
+"104 105 4774 2",
+"  	c None",
+". 	c #B4B4B4",
+"+ 	c #C1C1C1",
+"@ 	c #9B9B9B",
+"# 	c #A69289",
+"$ 	c #A59188",
+"% 	c #A7938A",
+"& 	c #AA968D",
+"* 	c #AD9990",
+"= 	c #B19D94",
+"- 	c #B39F96",
+"; 	c #B29E95",
+"> 	c #AE9A91",
+", 	c #AF9B92",
+"' 	c #B09C93",
+") 	c #AB978E",
+"! 	c #B5A198",
+"~ 	c #B8A496",
+"{ 	c #B19E89",
+"] 	c #B1A08C",
+"^ 	c #B1A28F",
+"/ 	c #B0A392",
+"( 	c #A19686",
+"_ 	c #776D5E",
+": 	c #3D342A",
+"< 	c #312922",
+"[ 	c #2F2721",
+"} 	c #2E251F",
+"| 	c #2A221C",
+"1 	c #2D251E",
+"2 	c #302822",
+"3 	c #2D2823",
+"4 	c #2E2A27",
+"5 	c #2F2B28",
+"6 	c #2C2825",
+"7 	c #282421",
+"8 	c #272320",
+"9 	c #292522",
+"0 	c #322E2B",
+"a 	c #332F2C",
+"b 	c #312D2A",
+"c 	c #302C29",
+"d 	c #2D2926",
+"e 	c #2A2623",
+"f 	c #26221F",
+"g 	c #242021",
+"h 	c #272324",
+"i 	c #292526",
+"j 	c #2B2728",
+"k 	c #343031",
+"l 	c #332F2F",
+"m 	c #383431",
+"n 	c #393532",
+"o 	c #3B3734",
+"p 	c #3C3835",
+"q 	c #433D3A",
+"r 	c #7D716E",
+"s 	c #B2A5A0",
+"t 	c #C0B2AB",
+"u 	c #B4A49C",
+"v 	c #BFADA3",
+"w 	c #B5A196",
+"x 	c #B9A49A",
+"y 	c #B6A299",
+"z 	c #B7A39A",
+"A 	c #B49F9A",
+"B 	c #B49F9E",
+"C 	c #B39D9F",
+"D 	c #A99397",
+"E 	c #B8A3A2",
+"F 	c #AC998E",
+"G 	c #B5A28E",
+"H 	c #B3A18F",
+"I 	c #BAA798",
+"J 	c #B9A697",
+"K 	c #BBA899",
+"L 	c #B7A495",
+"M 	c #B4A28F",
+"N 	c #B8A692",
+"O 	c #B9A793",
+"P 	c #BBA995",
+"Q 	c #A9958C",
+"R 	c #A8948B",
+"S 	c #B7A497",
+"T 	c #B6A591",
+"U 	c #B2A28F",
+"V 	c #B0A191",
+"W 	c #9A8D7E",
+"X 	c #594E41",
+"Y 	c #352B1F",
+"Z 	c #2D261F",
+"` 	c #292421",
+" .	c #27221F",
+"..	c #26211F",
+"+.	c #231F1C",
+"@.	c #211D1A",
+"#.	c #221E1B",
+"$.	c #25211E",
+"%.	c #2B2724",
+"&.	c #2D292A",
+"*.	c #282425",
+"=.	c #2F2B2C",
+"-.	c #312D2D",
+";.	c #332F2D",
+">.	c #36322F",
+",.	c #34302D",
+"'.	c #332D2A",
+").	c #433935",
+"!.	c #736761",
+"~.	c #B0A29B",
+"{.	c #B8A69C",
+"].	c #BFABA0",
+"^.	c #BBA79D",
+"/.	c #B4A097",
+"(.	c #AC9790",
+"_.	c #B8A3A0",
+":.	c #A18C8C",
+"<.	c #C1ABAD",
+"[.	c #B39E9B",
+"}.	c #B29E93",
+"|.	c #B7A492",
+"1.	c #B3A190",
+"2.	c #B3A092",
+"3.	c #BFAC9D",
+"4.	c #BCA99B",
+"5.	c #B5A293",
+"6.	c #AC9A88",
+"7.	c #B19F8C",
+"8.	c #B6A491",
+"9.	c #AC988F",
+"0.	c #B09D91",
+"a.	c #B3A292",
+"b.	c #AD9D8E",
+"c.	c #908375",
+"d.	c #4B4034",
+"e.	c #2E241A",
+"f.	c #2C231A",
+"g.	c #282420",
+"h.	c #232324",
+"i.	c #222123",
+"j.	c #201F21",
+"k.	c #181719",
+"l.	c #1B1A1C",
+"m.	c #1E1D1F",
+"n.	c #1F1D1C",
+"o.	c #1F1B18",
+"p.	c #201C19",
+"q.	c #24201D",
+"r.	c #302C2A",
+"s.	c #2E2A2B",
+"t.	c #262223",
+"u.	c #35312E",
+"v.	c #352F2C",
+"w.	c #39302B",
+"x.	c #413731",
+"y.	c #7A6F67",
+"z.	c #A99C93",
+"A.	c #B4A499",
+"B.	c #B8A69A",
+"C.	c #B7A499",
+"D.	c #BAA69D",
+"E.	c #BCA89F",
+"F.	c #AD9991",
+"G.	c #AB9790",
+"H.	c #AC9792",
+"I.	c #BDA8A4",
+"J.	c #AB9791",
+"K.	c #BDA99F",
+"L.	c #B8A596",
+"M.	c #B4A193",
+"N.	c #AF9B8E",
+"O.	c #BCA99C",
+"P.	c #BCA89C",
+"Q.	c #BAA79A",
+"R.	c #B8A497",
+"S.	c #B8A598",
+"T.	c #B09D8E",
+"U.	c #B5A291",
+"V.	c #B7A494",
+"W.	c #AF9D93",
+"X.	c #AFA093",
+"Y.	c #8A7D72",
+"Z.	c #44392F",
+"`.	c #2A2119",
+" +	c #2A221B",
+".+	c #28211C",
+"++	c #262424",
+"@+	c #202126",
+"#+	c #212126",
+"$+	c #212227",
+"%+	c #25262A",
+"&+	c #242529",
+"*+	c #232429",
+"=+	c #272625",
+"-+	c #2A2624",
+";+	c #302C2D",
+">+	c #2C2829",
+",+	c #2A2626",
+"'+	c #35312D",
+")+	c #3A332D",
+"!+	c #3B342D",
+"~+	c #382F27",
+"{+	c #6A5F56",
+"]+	c #B1A397",
+"^+	c #BBAC9F",
+"/+	c #C1AFA4",
+"(+	c #C0ACA3",
+"_+	c #BEAAA1",
+":+	c #BBA79E",
+"<+	c #B19D93",
+"[+	c #A79388",
+"}+	c #C4B0A5",
+"|+	c #B09C91",
+"1+	c #B5A297",
+"2+	c #B8A49A",
+"3+	c #BAA69C",
+"4+	c #B4A096",
+"5+	c #B09C92",
+"6+	c #B5A197",
+"7+	c #B9A59B",
+"8+	c #B5A294",
+"9+	c #B9A698",
+"0+	c #AD9B92",
+"a+	c #867970",
+"b+	c #3F332C",
+"c+	c #2A201A",
+"d+	c #29201C",
+"e+	c #2A2421",
+"f+	c #272220",
+"g+	c #232023",
+"h+	c #26252B",
+"i+	c #29282D",
+"j+	c #27252B",
+"k+	c #28262C",
+"l+	c #29272D",
+"m+	c #2A282E",
+"n+	c #292626",
+"o+	c #2A2627",
+"p+	c #292525",
+"q+	c #282422",
+"r+	c #34312C",
+"s+	c #3A3630",
+"t+	c #3D3830",
+"u+	c #383127",
+"v+	c #484035",
+"w+	c #958A7D",
+"x+	c #B5A89A",
+"y+	c #BAAA9E",
+"z+	c #BBA998",
+"A+	c #BAA796",
+"B+	c #B7A399",
+"C+	c #BCA7A2",
+"D+	c #B7A39D",
+"E+	c #BBA79F",
+"F+	c #B29E97",
+"G+	c #B19D95",
+"H+	c #B7A39B",
+"I+	c #B5A199",
+"J+	c #B4A099",
+"K+	c #B19E93",
+"L+	c #B19D91",
+"M+	c #B4A094",
+"N+	c #B39F93",
+"O+	c #A49087",
+"P+	c #9A8881",
+"Q+	c #3F322D",
+"R+	c #221714",
+"S+	c #221816",
+"T+	c #271F1E",
+"U+	c #292324",
+"V+	c #1F1A1E",
+"W+	c #241E23",
+"X+	c #282227",
+"Y+	c #241D23",
+"Z+	c #251F24",
+"`+	c #292227",
+" @	c #2C262B",
+".@	c #302C2C",
+"+@	c #282424",
+"@@	c #25211F",
+"#@	c #302D28",
+"$@	c #37342D",
+"%@	c #3A362E",
+"&@	c #3B352B",
+"*@	c #433B30",
+"=@	c #695F52",
+"-@	c #A89E90",
+";@	c #B1A196",
+">@	c #BDA9A0",
+",@	c #A99588",
+"'@	c #C3B09E",
+")@	c #A5937E",
+"!@	c #B4A28C",
+"~@	c #B6A392",
+"{@	c #B6A19F",
+"]@	c #B7A29E",
+"^@	c #BDA8A3",
+"/@	c #B7A29C",
+"(@	c #B39E99",
+"_@	c #B09C96",
+":@	c #B19C97",
+"<@	c #B8A39D",
+"[@	c #AD988F",
+"}@	c #AE978F",
+"|@	c #AF9991",
+"1@	c #B09B92",
+"2@	c #B09D95",
+"3@	c #A39088",
+"4@	c #53443E",
+"5@	c #201613",
+"6@	c #211816",
+"7@	c #1E1615",
+"8@	c #231C1D",
+"9@	c #231E20",
+"0@	c #241F24",
+"a@	c #272024",
+"b@	c #2A2124",
+"c@	c #2B2225",
+"d@	c #2D2427",
+"e@	c #281F22",
+"f@	c #292023",
+"g@	c #2C2326",
+"h@	c #272221",
+"i@	c #262420",
+"j@	c #292623",
+"k@	c #2B2925",
+"l@	c #2E2B28",
+"m@	c #2E2C28",
+"n@	c #2B2825",
+"o@	c #252320",
+"p@	c #24221F",
+"q@	c #242320",
+"r@	c #262421",
+"s@	c #262522",
+"t@	c #272522",
+"u@	c #292625",
+"v@	c #2B2727",
+"w@	c #2C2828",
+"x@	c #292524",
+"y@	c #2D2925",
+"z@	c #312F29",
+"A@	c #35302B",
+"B@	c #3A352F",
+"C@	c #3E3730",
+"D@	c #423930",
+"E@	c #837A6F",
+"F@	c #B3A59C",
+"G@	c #BFABA4",
+"H@	c #B8A59C",
+"I@	c #B6A297",
+"J@	c #A8938A",
+"K@	c #C2AFA2",
+"L@	c #AD9A89",
+"M@	c #B3A18D",
+"N@	c #B4A18C",
+"O@	c #B3A08F",
+"P@	c #B5A298",
+"Q@	c #BAA5A3",
+"R@	c #BCA8A4",
+"S@	c #B9A49E",
+"T@	c #B6A19C",
+"U@	c #AF9B95",
+"V@	c #B49F99",
+"W@	c #B29E96",
+"X@	c #B7A49A",
+"Y@	c #A28E85",
+"Z@	c #AD958D",
+"`@	c #B69991",
+" #	c #B69A93",
+".#	c #B39C95",
+"+#	c #AC9892",
+"@#	c #A5948F",
+"##	c #736662",
+"$#	c #281F1A",
+"%#	c #18120F",
+"&#	c #191312",
+"*#	c #191313",
+"=#	c #1F1A1D",
+"-#	c #221C21",
+";#	c #251E25",
+">#	c #2A2526",
+",#	c #2C2728",
+"'#	c #2E292B",
+")#	c #262123",
+"!#	c #221D1F",
+"~#	c #282324",
+"{#	c #22211F",
+"]#	c #22221D",
+"^#	c #252621",
+"/#	c #282924",
+"(#	c #272823",
+"_#	c #262722",
+":#	c #2C2926",
+"<#	c #282521",
+"[#	c #222624",
+"}#	c #232826",
+"|#	c #242927",
+"1#	c #212625",
+"2#	c #252927",
+"3#	c #292523",
+"4#	c #272321",
+"5#	c #2F2725",
+"6#	c #362D30",
+"7#	c #3C3239",
+"8#	c #3D333A",
+"9#	c #352C2F",
+"0#	c #4E4644",
+"a#	c #A79B99",
+"b#	c #B6A6A2",
+"c#	c #B8A79E",
+"d#	c #B5A495",
+"e#	c #BCA999",
+"f#	c #AA9386",
+"g#	c #A28A80",
+"h#	c #BEA89F",
+"i#	c #AF9B91",
+"j#	c #B6A29A",
+"k#	c #B3A097",
+"l#	c #B4A299",
+"m#	c #B3A298",
+"n#	c #B2A197",
+"o#	c #9B877E",
+"p#	c #826E65",
+"q#	c #7F6B62",
+"r#	c #B29A92",
+"s#	c #B59890",
+"t#	c #B2978F",
+"u#	c #AD968F",
+"v#	c #AC9993",
+"w#	c #9A8C87",
+"x#	c #392E2A",
+"y#	c #17100B",
+"z#	c #100E0A",
+"A#	c #151311",
+"B#	c #1A1716",
+"C#	c #1B171B",
+"D#	c #1E1A1E",
+"E#	c #211D23",
+"F#	c #272227",
+"G#	c #242220",
+"H#	c #23241F",
+"I#	c #272723",
+"J#	c #292924",
+"K#	c #252520",
+"L#	c #302D29",
+"M#	c #2A2C2A",
+"N#	c #292C2B",
+"O#	c #262927",
+"P#	c #232624",
+"Q#	c #242725",
+"R#	c #272926",
+"S#	c #282522",
+"T#	c #2C2724",
+"U#	c #2E2524",
+"V#	c #332A2D",
+"W#	c #372D35",
+"X#	c #3E343C",
+"Y#	c #372E33",
+"Z#	c #38302F",
+"`#	c #837775",
+" $	c #B5A6A2",
+".$	c #B5A59C",
+"+$	c #BAA89A",
+"@$	c #978073",
+"#$	c #C1A99F",
+"$$	c #AA938B",
+"%$	c #B8A49B",
+"&$	c #B3A197",
+"*$	c #B09F95",
+"=$	c #AD9C92",
+"-$	c #9A867D",
+";$	c #907C73",
+">$	c #6F5B52",
+",$	c #9E8A81",
+"'$	c #AF988F",
+")$	c #B59B92",
+"!$	c #B49C93",
+"~$	c #B29D96",
+"{$	c #AD9D96",
+"]$	c #736762",
+"^$	c #180F0B",
+"/$	c #16100B",
+"($	c #0E0D08",
+"_$	c #11100D",
+":$	c #151412",
+"<$	c #171518",
+"[$	c #19181B",
+"}$	c #1C1A20",
+"|$	c #221F23",
+"1$	c #2C2927",
+"2$	c #2A2724",
+"3$	c #302D2A",
+"4$	c #2E2F2B",
+"5$	c #2C2E2A",
+"6$	c #2A2C28",
+"7$	c #262824",
+"8$	c #242622",
+"9$	c #252723",
+"0$	c #282925",
+"a$	c #2D2825",
+"b$	c #2D2423",
+"c$	c #30272A",
+"d$	c #322830",
+"e$	c #342A33",
+"f$	c #342A2F",
+"g$	c #362E2D",
+"h$	c #534746",
+"i$	c #A79895",
+"j$	c #B6A69D",
+"k$	c #B9A899",
+"l$	c #9B8877",
+"m$	c #B29C8E",
+"n$	c #BEA59C",
+"o$	c #B09991",
+"p$	c #B6A39A",
+"q$	c #B2A096",
+"r$	c #AF9E94",
+"s$	c #AC9B91",
+"t$	c #A08C83",
+"u$	c #A38F86",
+"v$	c #A18D84",
+"w$	c #735F56",
+"x$	c #9D8980",
+"y$	c #B09B91",
+"z$	c #AA9288",
+"A$	c #AB968C",
+"B$	c #A8958D",
+"C$	c #A2958D",
+"D$	c #423832",
+"E$	c #160F09",
+"F$	c #120F09",
+"G$	c #0D0F09",
+"H$	c #0F100D",
+"I$	c #11110F",
+"J$	c #121214",
+"K$	c #121215",
+"L$	c #17161B",
+"M$	c #1E1B1F",
+"N$	c #2E2A2A",
+"O$	c #2F2B29",
+"P$	c #302B28",
+"Q$	c #2A2522",
+"R$	c #2B2623",
+"S$	c #2B2A25",
+"T$	c #262721",
+"U$	c #262621",
+"V$	c #2A2A25",
+"W$	c #27211E",
+"X$	c #2A2120",
+"Y$	c #2B2226",
+"Z$	c #2D232B",
+"`$	c #342B30",
+" %	c #382F2F",
+".%	c #423735",
+"+%	c #90817D",
+"@%	c #A99889",
+"#%	c #998675",
+"$%	c #C6B0A2",
+"%%	c #A88F86",
+"&%	c #BBA49C",
+"*%	c #B09E94",
+"=%	c #AE9D93",
+"-%	c #B1A096",
+";%	c #A9988E",
+">%	c #9F8B82",
+",%	c #9C887F",
+"'%	c #AA958C",
+")%	c #AD978C",
+"!%	c #AB988E",
+"~%	c #A99990",
+"{%	c #877C73",
+"]%	c #272018",
+"^%	c #140F09",
+"/%	c #101009",
+"(%	c #10120C",
+"_%	c #111310",
+":%	c #131512",
+"<%	c #0F1012",
+"[%	c #101113",
+"}%	c #131418",
+"|%	c #353132",
+"1%	c #322E2F",
+"2%	c #312D2E",
+"3%	c #322E2E",
+"4%	c #302929",
+"5%	c #372F2D",
+"6%	c #312927",
+"7%	c #2E2624",
+"8%	c #302826",
+"9%	c #352D2B",
+"0%	c #362F2D",
+"a%	c #2C2824",
+"b%	c #292822",
+"c%	c #282720",
+"d%	c #27271F",
+"e%	c #292821",
+"f%	c #2A2A23",
+"g%	c #2B2A23",
+"h%	c #2E2E27",
+"i%	c #282320",
+"j%	c #2A2129",
+"k%	c #2D232C",
+"l%	c #32292E",
+"m%	c #342C2B",
+"n%	c #3A2E2C",
+"o%	c #796A66",
+"p%	c #AF9E95",
+"q%	c #928172",
+"r%	c #C9B5A5",
+"s%	c #BBA597",
+"t%	c #B29990",
+"u%	c #B7A199",
+"v%	c #B9A59C",
+"w%	c #AA978D",
+"x%	c #A9978D",
+"y%	c #AA998F",
+"z%	c #A49086",
+"A%	c #AD998E",
+"B%	c #AD9B90",
+"C%	c #A1948A",
+"D%	c #5D534A",
+"E%	c #1C170E",
+"F%	c #17150D",
+"G%	c #12130C",
+"H%	c #10150E",
+"I%	c #111611",
+"J%	c #121713",
+"K%	c #101415",
+"L%	c #121617",
+"M%	c #111519",
+"N%	c #151418",
+"O%	c #231F20",
+"P%	c #373334",
+"Q%	c #332C2B",
+"R%	c #372E2C",
+"S%	c #322A28",
+"T%	c #332B29",
+"U%	c #352C2B",
+"V%	c #3C3432",
+"W%	c #3F3735",
+"X%	c #3B3633",
+"Y%	c #373330",
+"Z%	c #2E2B27",
+"`%	c #2E2A24",
+" &	c #2E2B24",
+".&	c #302C25",
+"+&	c #322F28",
+"@&	c #333029",
+"#&	c #343029",
+"$&	c #34312D",
+"%&	c #26201D",
+"&&	c #261D1C",
+"*&	c #271E22",
+"=&	c #291F27",
+"-&	c #241A22",
+";&	c #2C2328",
+">&	c #352D2C",
+",&	c #392E2C",
+"'&	c #584945",
+")&	c #8D7D74",
+"!&	c #A49284",
+"~&	c #C7B4A3",
+"{&	c #A99285",
+"]&	c #B49B92",
+"^&	c #B8A29A",
+"/&	c #B29F95",
+"(&	c #9F8E84",
+"_&	c #99887E",
+":&	c #AE9C93",
+"<&	c #94867E",
+"[&	c #453C34",
+"}&	c #211B15",
+"|&	c #1C1A14",
+"1&	c #13150F",
+"2&	c #0F150F",
+"3&	c #101511",
+"4&	c #121513",
+"5&	c #141717",
+"6&	c #181B1C",
+"7&	c #1A1B1E",
+"8&	c #211E20",
+"9&	c #2B2425",
+"0&	c #2C2627",
+"a&	c #353030",
+"b&	c #363231",
+"c&	c #353131",
+"d&	c #393535",
+"e&	c #382F2E",
+"f&	c #3C3130",
+"g&	c #3A2E2D",
+"h&	c #3E3232",
+"i&	c #3B2E2F",
+"j&	c #3D3132",
+"k&	c #463A3B",
+"l&	c #443B3A",
+"m&	c #3E3735",
+"n&	c #352E2D",
+"o&	c #312B29",
+"p&	c #312C2A",
+"q&	c #2D2826",
+"r&	c #332E28",
+"s&	c #35302A",
+"t&	c #3A332E",
+"u&	c #3C352F",
+"v&	c #3D3530",
+"w&	c #403933",
+"x&	c #3D3734",
+"y&	c #3E3836",
+"z&	c #3A3431",
+"A&	c #37312F",
+"B&	c #37302E",
+"C&	c #3A3432",
+"D&	c #393432",
+"E&	c #383330",
+"F&	c #342F2D",
+"G&	c #2F2A27",
+"H&	c #332E2C",
+"I&	c #282220",
+"J&	c #231C1C",
+"K&	c #261E21",
+"L&	c #282125",
+"M&	c #282122",
+"N&	c #2D2623",
+"O&	c #382D29",
+"P&	c #3F302B",
+"Q&	c #73635A",
+"R&	c #C7B6A8",
+"S&	c #B29E90",
+"T&	c #B9A397",
+"U&	c #B6A197",
+"V&	c #B39F97",
+"W&	c #B8A49D",
+"X&	c #B8A49C",
+"Y&	c #9C8A80",
+"Z&	c #958379",
+"`&	c #A39188",
+" *	c #AA958D",
+".*	c #AA948E",
+"+*	c #AF9C97",
+"@*	c #8A7C77",
+"#*	c #3F3531",
+"$*	c #1E1815",
+"%*	c #1A1A18",
+"&*	c #181918",
+"**	c #171717",
+"=*	c #161516",
+"-*	c #1E1A1C",
+";*	c #2A2426",
+">*	c #383134",
+",*	c #44393A",
+"'*	c #443838",
+")*	c #3A2F2F",
+"!*	c #39312F",
+"~*	c #383230",
+"{*	c #373431",
+"]*	c #392F2E",
+"^*	c #443636",
+"/*	c #463737",
+"(*	c #4A3A3C",
+"_*	c #4A393C",
+":*	c #4F3D42",
+"<*	c #4D393F",
+"[*	c #49373B",
+"}*	c #48393B",
+"|*	c #443537",
+"1*	c #403335",
+"2*	c #3D3334",
+"3*	c #372F2E",
+"4*	c #3A312F",
+"5*	c #433837",
+"6*	c #493D3D",
+"7*	c #4A3D3C",
+"8*	c #4A3B3B",
+"9*	c #4D3E3E",
+"0*	c #4D4140",
+"a*	c #4D4141",
+"b*	c #453A3A",
+"c*	c #3D3131",
+"d*	c #3F3333",
+"e*	c #443A39",
+"f*	c #433B39",
+"g*	c #3D3533",
+"h*	c #3B3432",
+"i*	c #38302E",
+"j*	c #362F2C",
+"k*	c #2A2422",
+"l*	c #221E1F",
+"m*	c #262221",
+"n*	c #2B2624",
+"o*	c #221F1A",
+"p*	c #28251E",
+"q*	c #27241C",
+"r*	c #312A21",
+"s*	c #594B43",
+"t*	c #AB9C93",
+"u*	c #BAAAA0",
+"v*	c #AC9C8F",
+"w*	c #B8A798",
+"x*	c #B9A898",
+"y*	c #B4A09A",
+"z*	c #BAA5A0",
+"A*	c #B5A19B",
+"B*	c #AE9A93",
+"C*	c #A18D82",
+"D*	c #A08C82",
+"E*	c #A28E84",
+"F*	c #A38F85",
+"G*	c #A69287",
+"H*	c #AD998F",
+"I*	c #B39F95",
+"J*	c #AD988E",
+"K*	c #AD9790",
+"L*	c #B09E97",
+"M*	c #887A74",
+"N*	c #3E342F",
+"O*	c #1E1814",
+"P*	c #1F1C18",
+"Q*	c #1F1E1B",
+"R*	c #1F1E1D",
+"S*	c #201E1D",
+"T*	c #201C1C",
+"U*	c #2C2526",
+"V*	c #42393B",
+"W*	c #584D50",
+"X*	c #605354",
+"Y*	c #5C4E4E",
+"Z*	c #463A39",
+"`*	c #392F2D",
+" =	c #342C29",
+".=	c #393431",
+"+=	c #383430",
+"@=	c #372D2D",
+"#=	c #46373A",
+"$=	c #4C3C40",
+"%=	c #544247",
+"&=	c #5B464C",
+"*=	c #685159",
+"==	c #6A545B",
+"-=	c #5E4A4C",
+";=	c #594647",
+">=	c #554545",
+",=	c #514242",
+"'=	c #4C403F",
+")=	c #403634",
+"!=	c #403433",
+"~=	c #4B3D3D",
+"{=	c #564948",
+"]=	c #524444",
+"^=	c #514343",
+"/=	c #544646",
+"(=	c #544848",
+"_=	c #4E4242",
+":=	c #514545",
+"<=	c #4C4040",
+"[=	c #403434",
+"}=	c #433737",
+"|=	c #483D3D",
+"1=	c #483F3D",
+"2=	c #463E3C",
+"3=	c #443C3A",
+"4=	c #413937",
+"5=	c #423A38",
+"6=	c #3A3230",
+"7=	c #302928",
+"8=	c #272224",
+"9=	c #292424",
+"0=	c #2A2622",
+"a=	c #2D2922",
+"b=	c #827B73",
+"c=	c #C3B8B0",
+"d=	c #B9ADA4",
+"e=	c #9F9288",
+"f=	c #B7A89C",
+"g=	c #B09F91",
+"h=	c #B4A197",
+"i=	c #B29D97",
+"j=	c #B39E98",
+"k=	c #B29E98",
+"l=	c #AF9B94",
+"m=	c #AE9993",
+"n=	c #A08D80",
+"o=	c #A18E81",
+"p=	c #A38F82",
+"q=	c #A49184",
+"r=	c #A08C7F",
+"s=	c #A39082",
+"t=	c #A59284",
+"u=	c #A99689",
+"v=	c #AC998B",
+"w=	c #AE9B8E",
+"x=	c #AE998E",
+"y=	c #AA948C",
+"z=	c #AA9890",
+"A=	c #8B7E76",
+"B=	c #4C433C",
+"C=	c #27211B",
+"D=	c #1C1914",
+"E=	c #1E1C18",
+"F=	c #1E1A17",
+"G=	c #221B1A",
+"H=	c #2F2625",
+"I=	c #45393A",
+"J=	c #5C4F4F",
+"K=	c #6F6061",
+"L=	c #716161",
+"M=	c #635452",
+"N=	c #554845",
+"O=	c #3D332F",
+"P=	c #322A25",
+"Q=	c #38312C",
+"R=	c #39342E",
+"S=	c #372D2F",
+"T=	c #3F3138",
+"U=	c #4A3940",
+"V=	c #5F4B51",
+"W=	c #6F585E",
+"X=	c #83686E",
+"Y=	c #93777D",
+"Z=	c #876F6F",
+"`=	c #786260",
+" -	c #6B5755",
+".-	c #62504E",
+"+-	c #524540",
+"@-	c #483B37",
+"#-	c #483735",
+"$-	c #4E3D3B",
+"%-	c #594947",
+"&-	c #5C4D4B",
+"*-	c #5A4B49",
+"=-	c #584A48",
+"--	c #594D4A",
+";-	c #514645",
+">-	c #4F4343",
+",-	c #463A3A",
+"'-	c #463B3A",
+")-	c #332B2B",
+"!-	c #2E2628",
+"~-	c #2D2527",
+"{-	c #2F2826",
+"]-	c #2C2521",
+"^-	c #2D2620",
+"/-	c #564F48",
+"(-	c #C3BDB5",
+"_-	c #D3CDC5",
+":-	c #D1CAC1",
+"<-	c #AFA49B",
+"[-	c #AEA096",
+"}-	c #B09F94",
+"|-	c #B5A296",
+"1-	c #AC998F",
+"2-	c #AE9A92",
+"3-	c #AC9890",
+"4-	c #B09C94",
+"5-	c #968279",
+"6-	c #9F8C7D",
+"7-	c #A08D7E",
+"8-	c #A39081",
+"9-	c #A49182",
+"0-	c #A28F81",
+"a-	c #AA9788",
+"b-	c #AD9A8B",
+"c-	c #A99687",
+"d-	c #AD988D",
+"e-	c #AC9A90",
+"f-	c #96897F",
+"g-	c #534A41",
+"h-	c #2C271F",
+"i-	c #222017",
+"j-	c #1F1A15",
+"k-	c #231A18",
+"l-	c #312624",
+"m-	c #463938",
+"n-	c #635353",
+"o-	c #756364",
+"p-	c #7D696A",
+"q-	c #7D6A68",
+"r-	c #74625E",
+"s-	c #62534E",
+"t-	c #483C36",
+"u-	c #3B302A",
+"v-	c #393029",
+"w-	c #3F3831",
+"x-	c #413738",
+"y-	c #42363A",
+"z-	c #4E3D41",
+"A-	c #624E50",
+"B-	c #7A6062",
+"C-	c #967879",
+"D-	c #A88888",
+"E-	c #AC908C",
+"F-	c #A18681",
+"G-	c #947B76",
+"H-	c #8C7670",
+"I-	c #78655E",
+"J-	c #68574F",
+"K-	c #5D4C45",
+"L-	c #5D4643",
+"M-	c #624B49",
+"N-	c #634F4C",
+"O-	c #61504C",
+"P-	c #5C4E49",
+"Q-	c #5A4E49",
+"R-	c #554A45",
+"S-	c #504443",
+"T-	c #4B3F3F",
+"U-	c #504444",
+"V-	c #483C3C",
+"W-	c #463C3B",
+"X-	c #4C4442",
+"Y-	c #4A4240",
+"Z-	c #332A2A",
+"`-	c #33282C",
+" ;	c #2E2426",
+".;	c #332928",
+"+;	c #504644",
+"@;	c #8C837E",
+"#;	c #BFB7B1",
+"$;	c #F6F2EC",
+"%;	c #FCFCF5",
+"&;	c #F0EEE6",
+"*;	c #B7AEA7",
+"=;	c #B0A39B",
+"-;	c #B2A097",
+";;	c #B6A198",
+">;	c #B29D93",
+",;	c #B29E94",
+"';	c #AF9B90",
+");	c #AE9A90",
+"!;	c #AE9A8F",
+"~;	c #A18E7C",
+"{;	c #A08E7C",
+"];	c #A18E7D",
+"^;	c #A89583",
+"/;	c #AB9887",
+"(;	c #AF9C8A",
+"_;	c #AC9987",
+":;	c #AB9787",
+"<;	c #AE998B",
+"[;	c #AA998B",
+"};	c #9E9185",
+"|;	c #62594E",
+"1;	c #332E23",
+"2;	c #28271B",
+"3;	c #29231C",
+"4;	c #372926",
+"5;	c #534441",
+"6;	c #6B5A57",
+"7;	c #7D6968",
+"8;	c #7F6968",
+"9;	c #7B6464",
+"0;	c #7D6865",
+"a;	c #76635D",
+"b;	c #73625B",
+"c;	c #5B4C45",
+"d;	c #41342C",
+"e;	c #392F26",
+"f;	c #3E352C",
+"g;	c #423936",
+"h;	c #493E3E",
+"i;	c #584846",
+"j;	c #6A5450",
+"k;	c #8C6E68",
+"l;	c #A6837C",
+"m;	c #B69188",
+"n;	c #B8988E",
+"o;	c #B2948B",
+"p;	c #B1948C",
+"q;	c #AC9188",
+"r;	c #A1897F",
+"s;	c #937E72",
+"t;	c #7C685D",
+"u;	c #755956",
+"v;	c #755A57",
+"w;	c #725A56",
+"x;	c #6D5A54",
+"y;	c #61534C",
+"z;	c #5B5148",
+"A;	c #544B44",
+"B;	c #534847",
+"C;	c #403635",
+"D;	c #3E3634",
+"E;	c #3D3434",
+"F;	c #3A2E32",
+"G;	c #524649",
+"H;	c #8F8383",
+"I;	c #BAAFAD",
+"J;	c #C4B9B5",
+"K;	c #EDE3DE",
+"L;	c #FBFAF4",
+"M;	c #F9FEF8",
+"N;	c #FAFCF5",
+"O;	c #F8F3EC",
+"P;	c #D7CBC4",
+"Q;	c #B2A099",
+"R;	c #B09993",
+"S;	c #B49E93",
+"T;	c #AD9A8C",
+"U;	c #AA9789",
+"V;	c #B19E90",
+"W;	c #A99688",
+"X;	c #988479",
+"Y;	c #948077",
+"Z;	c #95836F",
+"`;	c #9C8A76",
+" >	c #9E8C78",
+".>	c #A18F7B",
+"+>	c #A2907C",
+"@>	c #A5937F",
+"#>	c #A4927E",
+"$>	c #AD9B87",
+"%>	c #AA9884",
+"&>	c #A3917D",
+"*>	c #AB9985",
+"=>	c #AF9D89",
+"->	c #AA9785",
+";>	c #A89485",
+">>	c #AA998A",
+",>	c #A5988A",
+"'>	c #7C7366",
+")>	c #444034",
+"!>	c #2F2E22",
+"~>	c #342E25",
+"{>	c #503F3C",
+"]>	c #6F5D5B",
+"^>	c #7A6664",
+"/>	c #836D6C",
+"(>	c #886F6F",
+"_>	c #856A6B",
+":>	c #846C6A",
+"<>	c #7D6863",
+"[>	c #78655F",
+"}>	c #62514A",
+"|>	c #4B3D35",
+"1>	c #3D3128",
+"2>	c #40352C",
+"3>	c #3F3731",
+"4>	c #473D38",
+"5>	c #5D4E46",
+"6>	c #766054",
+"7>	c #96796A",
+"8>	c #B38E7E",
+"9>	c #C49D8B",
+"0>	c #BD9A8C",
+"a>	c #B8978C",
+"b>	c #C0A095",
+"c>	c #B99C90",
+"d>	c #B2978A",
+"e>	c #A99183",
+"f>	c #A48C7F",
+"g>	c #987875",
+"h>	c #8D6E6C",
+"i>	c #826763",
+"j>	c #7A6660",
+"k>	c #695B53",
+"l>	c #5C5349",
+"m>	c #554D44",
+"n>	c #4A3E3E",
+"o>	c #423737",
+"p>	c #413837",
+"q>	c #574D4D",
+"r>	c #594C50",
+"s>	c #A09396",
+"t>	c #BCAFB0",
+"u>	c #C1B5B3",
+"v>	c #E0D5D1",
+"w>	c #FEF4EF",
+"x>	c #F8FAF3",
+"y>	c #F5FEF7",
+"z>	c #F7FBF5",
+"A>	c #FCF9F4",
+"B>	c #FDF7F1",
+"C>	c #E6D6D1",
+"D>	c #B69E99",
+"E>	c #A99288",
+"F>	c #AE9B8C",
+"G>	c #AC998A",
+"H>	c #A59283",
+"I>	c #988576",
+"J>	c #A28E83",
+"K>	c #998773",
+"L>	c #A69480",
+"M>	c #A99783",
+"N>	c #A89682",
+"O>	c #A99683",
+"P>	c #A99586",
+"Q>	c #AC9A8B",
+"R>	c #A29384",
+"S>	c #928476",
+"T>	c #756A5D",
+"U>	c #615749",
+"V>	c #594B41",
+"W>	c #6C5652",
+"X>	c #7C6460",
+"Y>	c #896F6B",
+"Z>	c #8B6E6A",
+"`>	c #8F706C",
+" ,	c #8D6D69",
+".,	c #8A6C65",
+"+,	c #886D64",
+"@,	c #816960",
+"#,	c #735E57",
+"$,	c #53423C",
+"%,	c #3D302B",
+"&,	c #433834",
+"*,	c #3E3531",
+"=,	c #3D3330",
+"-,	c #5A4A44",
+";,	c #7D675D",
+">,	c #95786B",
+",,	c #B08E7D",
+"',	c #C39D8A",
+"),	c #C19D8F",
+"!,	c #C19E92",
+"~,	c #C8A79A",
+"{,	c #C3A397",
+"],	c #C1A295",
+"^,	c #BC9E91",
+"/,	c #B89B8E",
+"(,	c #B7968C",
+"_,	c #AA8A80",
+":,	c #987B73",
+"<,	c #8B736B",
+"[,	c #76635B",
+"},	c #66564E",
+"|,	c #5E5148",
+"1,	c #4D423D",
+"2,	c #4B403D",
+"3,	c #4A3F3C",
+"4,	c #463B39",
+"5,	c #4C4140",
+"6,	c #483C3D",
+"7,	c #3E3235",
+"8,	c #403436",
+"9,	c #3C3032",
+"0,	c #3B3032",
+"a,	c #6F6365",
+"b,	c #77696A",
+"c,	c #917F80",
+"d,	c #BDABAD",
+"e,	c #C3B2B3",
+"f,	c #CABAB9",
+"g,	c #F5E9E3",
+"h,	c #FFF8ED",
+"i,	c #FAFAED",
+"j,	c #F6FCF0",
+"k,	c #F7EDE9",
+"l,	c #FFF5F1",
+"m,	c #FEF5F1",
+"n,	c #EADDD6",
+"o,	c #B4A99D",
+"p,	c #A5998A",
+"q,	c #A69588",
+"r,	c #A18D80",
+"s,	c #998276",
+"t,	c #A08B7D",
+"u,	c #A79485",
+"v,	c #AC998D",
+"w,	c #A79581",
+"x,	c #8B7869",
+"y,	c #6E574D",
+"z,	c #745754",
+"A,	c #80625F",
+"B,	c #896A65",
+"C,	c #906D67",
+"D,	c #947168",
+"E,	c #946F66",
+"F,	c #906B5F",
+"G,	c #8C6A5D",
+"H,	c #86675D",
+"I,	c #7F645F",
+"J,	c #644F4D",
+"K,	c #453436",
+"L,	c #473A3E",
+"M,	c #493D41",
+"N,	c #403236",
+"O,	c #4E3C3C",
+"P,	c #6C5552",
+"Q,	c #957A72",
+"R,	c #B6968C",
+"S,	c #C19E90",
+"T,	c #C8A496",
+"U,	c #CAA699",
+"V,	c #C8A497",
+"W,	c #C6A395",
+"X,	c #C7A794",
+"Y,	c #C4A592",
+"Z,	c #B79B8B",
+"`,	c #AA8E83",
+" '	c #927871",
+".'	c #7B625E",
+"+'	c #68534F",
+"@'	c #5A4E45",
+"#'	c #534940",
+"$'	c #51463F",
+"%'	c #4C413C",
+"&'	c #473C3A",
+"*'	c #4F4244",
+"='	c #45343A",
+"-'	c #3D2C32",
+";'	c #39282F",
+">'	c #6E5D64",
+",'	c #6A5960",
+"''	c #6A5759",
+")'	c #AE9793",
+"!'	c #C2ACAB",
+"~'	c #C9B4B5",
+"{'	c #E5D5D1",
+"]'	c #FEF6EB",
+"^'	c #F8F2DF",
+"/'	c #F6F3E0",
+"('	c #D3CCBB",
+"_'	c #C3B3A9",
+":'	c #D0B9B5",
+"<'	c #EAD7D4",
+"['	c #FEF7F2",
+"}'	c #F9FAF2",
+"|'	c #E7EADE",
+"1'	c #A9A69B",
+"2'	c #8D8178",
+"3'	c #98837A",
+"4'	c #A58C81",
+"5'	c #B29B8E",
+"6'	c #B3A090",
+"7'	c #B3A094",
+"8'	c #9E8B79",
+"9'	c #9F8C7A",
+"0'	c #A08D7B",
+"a'	c #A79482",
+"b'	c #A3907E",
+"c'	c #A49280",
+"d'	c #A69381",
+"e'	c #A59281",
+"f'	c #A79483",
+"g'	c #A69382",
+"h'	c #A89584",
+"i'	c #938071",
+"j'	c #6F594F",
+"k'	c #795C59",
+"l'	c #856663",
+"m'	c #896A66",
+"n'	c #96746B",
+"o'	c #967067",
+"p'	c #916C62",
+"q'	c #8F6D62",
+"r'	c #8B6C64",
+"s'	c #876C66",
+"t'	c #77605E",
+"u'	c #4C3C3E",
+"v'	c #514144",
+"w'	c #564545",
+"x'	c #594645",
+"y'	c #5A423E",
+"z'	c #6A4E46",
+"A'	c #8F6F65",
+"B'	c #B79488",
+"C'	c #C5A193",
+"D'	c #CAA698",
+"E'	c #CDA99B",
+"F'	c #CBA799",
+"G'	c #D1AD9F",
+"H'	c #CCA899",
+"I'	c #CCAB97",
+"J'	c #D1B19D",
+"K'	c #CEB0A0",
+"L'	c #C8ACA0",
+"M'	c #B69A92",
+"N'	c #937974",
+"O'	c #6B5450",
+"P'	c #594C43",
+"Q'	c #53473E",
+"R'	c #51453E",
+"S'	c #544742",
+"T'	c #4B3E3C",
+"U'	c #463838",
+"V'	c #4C3E3E",
+"W'	c #4D3B3F",
+"X'	c #463338",
+"Y'	c #3D2B2F",
+"Z'	c #5C4A4E",
+"`'	c #7E6C70",
+" )	c #8B7777",
+".)	c #BFAAA5",
+"+)	c #C5B0AF",
+"@)	c #D8C5C5",
+"#)	c #F8E9E5",
+"$)	c #FAF1E6",
+"%)	c #E7DECC",
+"&)	c #D1C4B4",
+"*)	c #A79086",
+"=)	c #C5A8A1",
+"-)	c #D4B5B0",
+";)	c #DAC0BC",
+">)	c #F9EFE8",
+",)	c #FAF9F1",
+"')	c #FBFCF3",
+"))	c #F0EEE4",
+"!)	c #B1A69D",
+"~)	c #9E8C84",
+"{)	c #B19C92",
+"])	c #B6A195",
+"^)	c #A08D7D",
+"/)	c #9F8C7C",
+"()	c #9D8A7B",
+"_)	c #A18E7E",
+":)	c #A18E7F",
+"<)	c #A69383",
+"[)	c #A69384",
+"})	c #A59282",
+"|)	c #A89586",
+"1)	c #AF9C8D",
+"2)	c #897667",
+"3)	c #6F584E",
+"4)	c #785B59",
+"5)	c #7F615E",
+"6)	c #886964",
+"7)	c #916E65",
+"8)	c #936D64",
+"9)	c #926E65",
+"0)	c #917068",
+"a)	c #90706A",
+"b)	c #8E716D",
+"c)	c #886E6C",
+"d)	c #755E5E",
+"e)	c #604A4C",
+"f)	c #604B4B",
+"g)	c #735D5B",
+"h)	c #856E6A",
+"i)	c #8B706A",
+"j)	c #90736A",
+"k)	c #A4857A",
+"l)	c #BB9A8F",
+"m)	c #C4A192",
+"n)	c #C9A595",
+"o)	c #C9A596",
+"p)	c #CBA797",
+"q)	c #D0AC9C",
+"r)	c #CDA99A",
+"s)	c #CAA796",
+"t)	c #CCA994",
+"u)	c #D4B29D",
+"v)	c #D4B4A2",
+"w)	c #CEB0A3",
+"x)	c #C4A79D",
+"y)	c #AD928B",
+"z)	c #846B66",
+"A)	c #63544B",
+"B)	c #55463F",
+"C)	c #4A3B35",
+"D)	c #4A3B38",
+"E)	c #4E3E3D",
+"F)	c #4D3C3D",
+"G)	c #554142",
+"H)	c #4E3A3B",
+"I)	c #614D4E",
+"J)	c #907C7D",
+"K)	c #5F4B4C",
+"L)	c #6A5657",
+"M)	c #B6A2A0",
+"N)	c #CAB6B0",
+"O)	c #CCBBB8",
+"P)	c #F3E6E4",
+"Q)	c #FEF6F2",
+"R)	c #F6E9DE",
+"S)	c #DDCFBF",
+"T)	c #B2998D",
+"U)	c #AF8B85",
+"V)	c #C29A94",
+"W)	c #D3ABA5",
+"X)	c #D2B1AB",
+"Y)	c #F1E1DA",
+"Z)	c #FCFAF3",
+"`)	c #FCFAF1",
+" !	c #F3EDE5",
+".!	c #C2B4AC",
+"+!	c #AC9A92",
+"@!	c #AE9B90",
+"#!	c #AD998D",
+"$!	c #A8948A",
+"%!	c #A28E81",
+"&!	c #A49183",
+"*!	c #9E8B7E",
+"=!	c #A69386",
+"-!	c #A79386",
+";!	c #A79486",
+">!	c #A69285",
+",!	c #A28F82",
+"'!	c #857263",
+")!	c #715A50",
+"!!	c #7F605E",
+"~!	c #846561",
+"{!	c #967168",
+"]!	c #96736C",
+"^!	c #93726E",
+"/!	c #91726F",
+"(!	c #937573",
+"_!	c #8B6F6E",
+":!	c #7B5F5E",
+"<!	c #7A5E5A",
+"[!	c #8D726B",
+"}!	c #A28780",
+"|!	c #AB8E86",
+"1!	c #BE9F95",
+"2!	c #C6A69B",
+"3!	c #C8A595",
+"4!	c #C5A28F",
+"5!	c #C6A390",
+"6!	c #C9A693",
+"7!	c #CAA794",
+"8!	c #CDA991",
+"9!	c #D2AE97",
+"0!	c #D1AE9B",
+"a!	c #CCAB9C",
+"b!	c #C7A89D",
+"c!	c #BFA299",
+"d!	c #977C75",
+"e!	c #6E5C54",
+"f!	c #5E4C46",
+"g!	c #4E3C39",
+"h!	c #554343",
+"i!	c #513E40",
+"j!	c #523F3F",
+"k!	c #5E4946",
+"l!	c #6E5855",
+"m!	c #8C7673",
+"n!	c #917C79",
+"o!	c #55403C",
+"p!	c #A28D8A",
+"q!	c #C4AFAB",
+"r!	c #CCB9B4",
+"s!	c #E2D4D0",
+"t!	c #FDF8F5",
+"u!	c #FFF8F3",
+"v!	c #EEDFD5",
+"w!	c #D1BCAE",
+"x!	c #A88980",
+"y!	c #AF8783",
+"z!	c #C89C93",
+"A!	c #D2A59B",
+"B!	c #D3AFA4",
+"C!	c #E1CCC4",
+"D!	c #FEF9F4",
+"E!	c #FEFEF9",
+"F!	c #FEFDF6",
+"G!	c #FFFEF7",
+"H!	c #EFE8E0",
+"I!	c #B8ADA5",
+"J!	c #A5948B",
+"K!	c #A69088",
+"L!	c #A69188",
+"M!	c #9B877D",
+"N!	c #9E8A80",
+"O!	c #9D897E",
+"P!	c #A18D83",
+"Q!	c #A59186",
+"R!	c #A9958A",
+"S!	c #A99589",
+"T!	c #837061",
+"U!	c #6D574D",
+"V!	c #725552",
+"W!	c #7A5C59",
+"X!	c #81625D",
+"Y!	c #8F6D66",
+"Z!	c #97746B",
+"`!	c #9C766D",
+" ~	c #987570",
+".~	c #947574",
+"+~	c #967675",
+"@~	c #977775",
+"#~	c #997977",
+"$~	c #9B7B79",
+"%~	c #9C7C75",
+"&~	c #A4857B",
+"*~	c #AF8F86",
+"=~	c #B2948A",
+"-~	c #B8998F",
+";~	c #BC9E94",
+">~	c #BEA096",
+",~	c #C09F8D",
+"'~	c #C3A08C",
+")~	c #C8A590",
+"!~	c #C9A691",
+"~~	c #C6A38E",
+"{~	c #CAA58C",
+"]~	c #CCA78E",
+"^~	c #CCA893",
+"/~	c #CCA998",
+"(~	c #CBAA9E",
+"_~	c #C8A99F",
+":~	c #B0938B",
+"<~	c #937F78",
+"[~	c #77645E",
+"}~	c #695550",
+"|~	c #614D4B",
+"1~	c #6B5657",
+"2~	c #705B5D",
+"3~	c #6C5657",
+"4~	c #765F58",
+"5~	c #937C75",
+"6~	c #A28A83",
+"7~	c #7C655E",
+"8~	c #88716A",
+"9~	c #BFA7A1",
+"0~	c #C7B1AA",
+"a~	c #D3C1BB",
+"b~	c #FAF2ED",
+"c~	c #FFFEF9",
+"d~	c #FDF7F0",
+"e~	c #E1D1C8",
+"f~	c #C6ACA0",
+"g~	c #A4847C",
+"h~	c #C39A8D",
+"i~	c #CEA392",
+"j~	c #D5B0A0",
+"k~	c #D1B7AD",
+"l~	c #FAF0EC",
+"m~	c #FDFAF7",
+"n~	c #FEFCF8",
+"o~	c #FBFBF5",
+"p~	c #FEFDF5",
+"q~	c #E7E0D7",
+"r~	c #B2A39B",
+"s~	c #A7918A",
+"t~	c #A59088",
+"u~	c #A89489",
+"v~	c #826F60",
+"w~	c #6B544A",
+"x~	c #6E514F",
+"y~	c #795A57",
+"z~	c #86645D",
+"A~	c #8D6A61",
+"B~	c #977471",
+"C~	c #977779",
+"D~	c #9B7B7B",
+"E~	c #9F7D7C",
+"F~	c #A07D7C",
+"G~	c #A5817F",
+"H~	c #A6827F",
+"I~	c #A8857B",
+"J~	c #AB897C",
+"K~	c #AE8C81",
+"L~	c #B19086",
+"M~	c #B7988E",
+"N~	c #B99B91",
+"O~	c #B79990",
+"P~	c #B59381",
+"Q~	c #BD9A84",
+"R~	c #C5A28C",
+"S~	c #C7A48E",
+"T~	c #C9A690",
+"U~	c #CCA993",
+"V~	c #CBA891",
+"W~	c #CBA58A",
+"X~	c #C9A38A",
+"Y~	c #CBA590",
+"Z~	c #CEAA98",
+"`~	c #C9A799",
+" {	c #C4A499",
+".{	c #C2A39A",
+"+{	c #AB958E",
+"@{	c #97827D",
+"#{	c #8D7874",
+"${	c #8A7573",
+"%{	c #8C7778",
+"&{	c #907A7C",
+"*{	c #86706F",
+"={	c #8B736A",
+"-{	c #927A70",
+";{	c #7E665D",
+">{	c #B29A91",
+",{	c #C8B0A6",
+"'{	c #CFB9B0",
+"){	c #E7D5CF",
+"!{	c #FFFAF4",
+"~{	c #FFFDF8",
+"{{	c #FDF8F1",
+"]{	c #DFCEC5",
+"^{	c #C1A499",
+"/{	c #9B7B73",
+"({	c #A58880",
+"_{	c #B89585",
+":{	c #C7A08C",
+"<{	c #C9A592",
+"[{	c #C8ACA1",
+"}{	c #F3E6E3",
+"|{	c #FFFBFA",
+"1{	c #FFFFFB",
+"2{	c #FBFCF6",
+"3{	c #FCFDF5",
+"4{	c #FBF8F0",
+"5{	c #DDCFC8",
+"6{	c #9F8984",
+"7{	c #A18B83",
+"8{	c #998481",
+"9{	c #9E8985",
+"0{	c #A08C87",
+"a{	c #9E8A83",
+"b{	c #9E8A82",
+"c{	c #A28D89",
+"d{	c #A38E89",
+"e{	c #A18D86",
+"f{	c #A18D81",
+"g{	c #A08D7F",
+"h{	c #A18F81",
+"i{	c #A29184",
+"j{	c #A29285",
+"k{	c #A49285",
+"l{	c #A38F83",
+"m{	c #A89387",
+"n{	c #816B60",
+"o{	c #6D534C",
+"p{	c #735353",
+"q{	c #7B5A59",
+"r{	c #836260",
+"s{	c #876563",
+"t{	c #896663",
+"u{	c #916E6A",
+"v{	c #957673",
+"w{	c #977B76",
+"x{	c #9C7F79",
+"y{	c #A2837C",
+"z{	c #A7867E",
+"A{	c #AA8980",
+"B{	c #A7857B",
+"C{	c #A28473",
+"D{	c #9E816E",
+"E{	c #A48777",
+"F{	c #AA8C80",
+"G{	c #A7887E",
+"H{	c #A4857D",
+"I{	c #A1817B",
+"J{	c #AC897C",
+"K{	c #B79484",
+"L{	c #C09C8C",
+"M{	c #C4A08E",
+"N{	c #C7A490",
+"O{	c #C8A48E",
+"P{	c #C7A28D",
+"Q{	c #C6A28E",
+"R{	c #C8A491",
+"S{	c #C6A493",
+"T{	c #C3A192",
+"U{	c #C1A092",
+"V{	c #B3978F",
+"W{	c #B1958F",
+"X{	c #AA8E8A",
+"Y{	c #A18485",
+"Z{	c #9C7F83",
+"`{	c #97797F",
+" ]	c #8D7074",
+".]	c #8A736D",
+"+]	c #9B857D",
+"@]	c #806B61",
+"#]	c #978278",
+"$]	c #C1ADA2",
+"%]	c #C7B3A7",
+"&]	c #D1C0B7",
+"*]	c #F6EDEA",
+"=]	c #FEFCF7",
+"-]	c #FFFDF6",
+";]	c #FCF0E9",
+">]	c #DEC5BD",
+",]	c #BEA197",
+"']	c #92766B",
+")]	c #A2867D",
+"!]	c #B9968A",
+"~]	c #C9A295",
+"{]	c #CFAC9F",
+"]]	c #C0A79B",
+"^]	c #E5D7CD",
+"/]	c #FEFCF5",
+"(]	c #FDFEF8",
+"_]	c #FBFEFA",
+":]	c #FEFDF8",
+"<]	c #F4ECE5",
+"[]	c #AA978F",
+"}]	c #988382",
+"|]	c #9C8785",
+"1]	c #9D8884",
+"2]	c #9C8781",
+"3]	c #9D8981",
+"4]	c #A08B88",
+"5]	c #A38E8A",
+"6]	c #A18C86",
+"7]	c #A08C81",
+"8]	c #A28F80",
+"9]	c #A49180",
+"0]	c #A39282",
+"a]	c #9F9183",
+"b]	c #A29386",
+"c]	c #A19083",
+"d]	c #A59286",
+"e]	c #AB948A",
+"f]	c #836A61",
+"g]	c #6D514A",
+"h]	c #765452",
+"i]	c #7B5A57",
+"j]	c #886764",
+"k]	c #8B6967",
+"l]	c #8C6A68",
+"m]	c #92706E",
+"n]	c #947671",
+"o]	c #977B71",
+"p]	c #9C7F75",
+"q]	c #9F8277",
+"r]	c #9F8075",
+"s]	c #9C7D70",
+"t]	c #9B7B6E",
+"u]	c #947B67",
+"v]	c #876F5A",
+"w]	c #8A6F5E",
+"x]	c #8F7265",
+"y]	c #906F67",
+"z]	c #8C6A64",
+"A]	c #936F6C",
+"B]	c #98736D",
+"C]	c #A17C73",
+"D]	c #AE897E",
+"E]	c #B79386",
+"F]	c #BE9A8A",
+"G]	c #BD9A87",
+"H]	c #BC9985",
+"I]	c #BF9C89",
+"J]	c #C09D8A",
+"K]	c #C19E8B",
+"L]	c #BD9B89",
+"M]	c #BE9D92",
+"N]	c #B7968E",
+"O]	c #A88781",
+"P]	c #A3817F",
+"Q]	c #A48283",
+"R]	c #99777B",
+"S]	c #99787B",
+"T]	c #927875",
+"U]	c #957C77",
+"V]	c #816B64",
+"W]	c #A6948A",
+"X]	c #C8B8AD",
+"Y]	c #CEC0B3",
+"Z]	c #EAE0D8",
+"`]	c #FEFAF9",
+" ^	c #FFFFF9",
+".^	c #FFFCF5",
+"+^	c #FCE9E2",
+"@^	c #DDBDB6",
+"#^	c #BDA195",
+"$^	c #988072",
+"%^	c #AC8E83",
+"&^	c #C19C93",
+"*^	c #D2ABA3",
+"=^	c #D6B4AA",
+"-^	c #C2AB9E",
+";^	c #D6CCBA",
+">^	c #FDFDF0",
+",^	c #FBFEF6",
+"'^	c #FAFDFA",
+")^	c #FDFDF8",
+"!^	c #EFE7DF",
+"~^	c #A09084",
+"{^	c #99857B",
+"]^	c #9B8684",
+"^^	c #9D8885",
+"/^	c #9B8681",
+"(^	c #99857D",
+"_^	c #9C887E",
+":^	c #A49085",
+"<^	c #A08C85",
+"[^	c #A38F87",
+"}^	c #9E8A7E",
+"|^	c #A39180",
+"1^	c #9F9280",
+"2^	c #A29482",
+"3^	c #A19080",
+"4^	c #A79484",
+"5^	c #A89283",
+"6^	c #897263",
+"7^	c #694E42",
+"8^	c #6F4F46",
+"9^	c #795850",
+"0^	c #87665E",
+"a^	c #8C6B63",
+"b^	c #8D6C64",
+"c^	c #927269",
+"d^	c #96766D",
+"e^	c #9A7A71",
+"f^	c #9E7E74",
+"g^	c #9C7C72",
+"h^	c #917067",
+"i^	c #8A6A60",
+"j^	c #816558",
+"k^	c #74594A",
+"l^	c #765A4E",
+"m^	c #7A5C52",
+"n^	c #775650",
+"o^	c #785451",
+"p^	c #86605F",
+"q^	c #8B6661",
+"r^	c #936E66",
+"s^	c #9F7A71",
+"t^	c #A78377",
+"u^	c #AE8A7B",
+"v^	c #A98575",
+"w^	c #AA8674",
+"x^	c #B38F7F",
+"y^	c #B79382",
+"z^	c #BB9887",
+"A^	c #BD9989",
+"B^	c #BB9787",
+"C^	c #BA9685",
+"D^	c #B89484",
+"E^	c #B9988A",
+"F^	c #B59387",
+"G^	c #AD8C81",
+"H^	c #AB8981",
+"I^	c #A5827C",
+"J^	c #A27F7C",
+"K^	c #B18E8B",
+"L^	c #BD9B99",
+"M^	c #BFA09D",
+"N^	c #AF9590",
+"O^	c #BDA9A2",
+"P^	c #C2B5AC",
+"Q^	c #D7CFC4",
+"R^	c #FCF8F0",
+"S^	c #FDF9F6",
+"T^	c #FCFDF6",
+"U^	c #FFFCF3",
+"V^	c #F6E1D9",
+"W^	c #D7B8AF",
+"X^	c #B79B8E",
+"Y^	c #A2887A",
+"Z^	c #B7978C",
+"`^	c #C9A39A",
+" /	c #DBB1AA",
+"./	c #DFBBB1",
+"+/	c #CCB4A6",
+"@/	c #CFC4B3",
+"#/	c #FEFCEE",
+"$/	c #FBFDF8",
+"%/	c #FEFDF7",
+"&/	c #D3C8BF",
+"*/	c #9A897B",
+"=/	c #9F8B80",
+"-/	c #A79389",
+";/	c #9C8782",
+">/	c #9E8983",
+",/	c #A28E82",
+"'/	c #A08C80",
+")/	c #A18E80",
+"!/	c #9F8E7E",
+"~/	c #9F937D",
+"{/	c #A2957F",
+"]/	c #A1917C",
+"^/	c #A5907D",
+"//	c #917A68",
+"(/	c #6D5342",
+"_/	c #785849",
+":/	c #826254",
+"</	c #876859",
+"[/	c #89695B",
+"}/	c #8A6A5B",
+"|/	c #907062",
+"1/	c #957467",
+"2/	c #9C7A70",
+"3/	c #9D7B72",
+"4/	c #96766F",
+"5/	c #886B64",
+"6/	c #7E615C",
+"7/	c #6E524E",
+"8/	c #674C46",
+"9/	c #5D433C",
+"0/	c #61443E",
+"a/	c #664843",
+"b/	c #6B4947",
+"c/	c #775351",
+"d/	c #845F5E",
+"e/	c #8E6865",
+"f/	c #916C65",
+"g/	c #957068",
+"h/	c #977268",
+"i/	c #977366",
+"j/	c #8F6B5D",
+"k/	c #9B7768",
+"l/	c #A88477",
+"m/	c #B08C7E",
+"n/	c #B89486",
+"o/	c #BB9789",
+"p/	c #BA9689",
+"q/	c #B99587",
+"r/	c #B59182",
+"s/	c #B69183",
+"t/	c #B28E81",
+"u/	c #A17C70",
+"v/	c #B08B7F",
+"w/	c #C5A095",
+"x/	c #D1A8A4",
+"y/	c #D6B2AC",
+"z/	c #D0B2AC",
+"A/	c #C6B1AB",
+"B/	c #CFC2BA",
+"C/	c #F4EEE5",
+"D/	c #FEFEF5",
+"E/	c #FFFAEF",
+"F/	c #EFDBD0",
+"G/	c #D4B5A9",
+"H/	c #B29788",
+"I/	c #A58A7A",
+"J/	c #BD9C8F",
+"K/	c #D0A79D",
+"L/	c #DCB0A7",
+"M/	c #E5BFB4",
+"N/	c #D5BAAB",
+"O/	c #D5C8B4",
+"P/	c #FEFCED",
+"Q/	c #FCFDF2",
+"R/	c #EEE9E2",
+"S/	c #AEA196",
+"T/	c #9E8B7D",
+"U/	c #A79385",
+"V/	c #A69385",
+"W/	c #AB988A",
+"X/	c #9B8680",
+"Y/	c #99857E",
+"Z/	c #9B877B",
+"`/	c #9D8A7A",
+" (	c #9D8A79",
+".(	c #9D8B78",
+"+(	c #A18F80",
+"@(	c #A1947F",
+"#(	c #A29480",
+"$(	c #9F8F7B",
+"%(	c #A89381",
+"&(	c #9A8371",
+"*(	c #755B4A",
+"=(	c #7D5D4C",
+"-(	c #806150",
+";(	c #8A6A59",
+">(	c #90705F",
+",(	c #896A59",
+"'(	c #8E6E5D",
+")(	c #8E6E60",
+"!(	c #94756A",
+"~(	c #8C6F64",
+"{(	c #886D65",
+"](	c #765E59",
+"^(	c #5D4844",
+"/(	c #473332",
+"((	c #442F30",
+"_(	c #4B3635",
+":(	c #553E3D",
+"<(	c #593F3E",
+"[(	c #5B3E3D",
+"}(	c #624442",
+"|(	c #6B4B49",
+"1(	c #74504E",
+"2(	c #734D4A",
+"3(	c #7A544F",
+"4(	c #825D55",
+"5(	c #8C675D",
+"6(	c #8C675C",
+"7(	c #936F62",
+"8(	c #A07C71",
+"9(	c #AC877C",
+"0(	c #B49085",
+"a(	c #B99489",
+"b(	c #BB968B",
+"c(	c #BA968B",
+"d(	c #B89286",
+"e(	c #BA9488",
+"f(	c #B48E80",
+"g(	c #AC8677",
+"h(	c #A5806F",
+"i(	c #AD8876",
+"j(	c #C49D8D",
+"k(	c #D2A99C",
+"l(	c #DFBAAE",
+"m(	c #D9BBAF",
+"n(	c #CFB8AD",
+"o(	c #DACAC1",
+"p(	c #FEF6EC",
+"q(	c #FEF9F1",
+"r(	c #FFFDF4",
+"s(	c #FCFDF1",
+"t(	c #FEF8EB",
+"u(	c #E9D5C8",
+"v(	c #D4B5A7",
+"w(	c #AD9280",
+"x(	c #A38875",
+"y(	c #CBA195",
+"z(	c #DAABA1",
+"A(	c #E7BEB1",
+"B(	c #D9BDAC",
+"C(	c #D3C3AE",
+"D(	c #FCFAE8",
+"E(	c #FDFCF0",
+"F(	c #FDFCF3",
+"G(	c #FBF9F1",
+"H(	c #D0C9C0",
+"I(	c #9D8E82",
+"J(	c #A38E7F",
+"K(	c #A28D7E",
+"L(	c #A89585",
+"M(	c #A39080",
+"N(	c #A99686",
+"O(	c #98847C",
+"P(	c #98847A",
+"Q(	c #9C887D",
+"R(	c #998678",
+"S(	c #9A8777",
+"T(	c #9A8775",
+"U(	c #9A8873",
+"V(	c #9D8C73",
+"W(	c #9F8D76",
+"X(	c #A18F79",
+"Y(	c #9A8876",
+"Z(	c #A49083",
+"`(	c #9F8D80",
+" _	c #9C8F7E",
+"._	c #9D8E7E",
+"+_	c #9E8D7D",
+"@_	c #A29081",
+"#_	c #A69082",
+"$_	c #9E877A",
+"%_	c #7B6052",
+"&_	c #745446",
+"*_	c #7E5E50",
+"=_	c #8E6E5F",
+"-_	c #967668",
+";_	c #8B6B5D",
+">_	c #8D6F61",
+",_	c #866B5D",
+"'_	c #7C6458",
+")_	c #6A574F",
+"!_	c #54453F",
+"~_	c #392C2A",
+"{_	c #281F1E",
+"]_	c #302427",
+"^_	c #37282D",
+"/_	c #3B2B2E",
+"(_	c #3D2A2B",
+"__	c #412C2C",
+":_	c #4B3532",
+"<_	c #5F4743",
+"[_	c #745150",
+"}_	c #7C5655",
+"|_	c #754F4C",
+"1_	c #77524C",
+"2_	c #7F5A52",
+"3_	c #8A655C",
+"4_	c #A78279",
+"5_	c #AF8A81",
+"6_	c #B9948B",
+"7_	c #BA928C",
+"8_	c #B58C86",
+"9_	c #AA8278",
+"0_	c #A27A6F",
+"a_	c #A37C6C",
+"b_	c #A47D6C",
+"c_	c #B38E78",
+"d_	c #C4A186",
+"e_	c #D7B69D",
+"f_	c #DCC0AA",
+"g_	c #D7BEAC",
+"h_	c #D6C2B3",
+"i_	c #F0E0D4",
+"j_	c #FFF8EE",
+"k_	c #FEFBF0",
+"l_	c #F8F9EC",
+"m_	c #FDF7E7",
+"n_	c #E5D2C2",
+"o_	c #CFB1A0",
+"p_	c #AB907C",
+"q_	c #A58974",
+"r_	c #B79281",
+"s_	c #C4988A",
+"t_	c #DAAA9D",
+"u_	c #E4B9AA",
+"v_	c #D5B7A4",
+"w_	c #CDBCA5",
+"x_	c #FEF8E5",
+"y_	c #FFFEF1",
+"z_	c #FEFDF2",
+"A_	c #F7F4EA",
+"B_	c #B0A79C",
+"C_	c #A09082",
+"D_	c #A6907E",
+"E_	c #A48F7D",
+"F_	c #A3917E",
+"G_	c #A99684",
+"H_	c #A59381",
+"I_	c #A2907E",
+"J_	c #9B8876",
+"K_	c #99857C",
+"L_	c #9C897A",
+"M_	c #9A8776",
+"N_	c #9A8874",
+"O_	c #9A8872",
+"P_	c #9D8C71",
+"Q_	c #9F8E74",
+"R_	c #A18F78",
+"S_	c #9D8A78",
+"T_	c #9F8B7F",
+"U_	c #9E8B80",
+"V_	c #9B8C81",
+"W_	c #9B8C80",
+"X_	c #A18F84",
+"Y_	c #A48D84",
+"Z_	c #A48B83",
+"`_	c #856960",
+" :	c #715146",
+".:	c #79594E",
+"+:	c #88685D",
+"@:	c #8E6E63",
+"#:	c #8D6D62",
+"$:	c #85655A",
+"%:	c #856A5B",
+"&:	c #786351",
+"*:	c #635143",
+"=:	c #483C32",
+"-:	c #2E2721",
+";:	c #24211E",
+">:	c #202021",
+",:	c #262127",
+"':	c #281E26",
+"):	c #241A1E",
+"!:	c #1E1315",
+"~:	c #201312",
+"{:	c #483A36",
+"]:	c #72615B",
+"^:	c #8B6A6A",
+"/:	c #886262",
+"(:	c #8B6563",
+"_:	c #936E6A",
+"::	c #906B64",
+"<:	c #967169",
+"[:	c #A07B72",
+"}:	c #A9847C",
+"|:	c #AB867E",
+"1:	c #B38E85",
+"2:	c #B7938A",
+"3:	c #B8928B",
+"4:	c #B78D8D",
+"5:	c #AE8482",
+"6:	c #A37974",
+"7:	c #9C736B",
+"8:	c #936B5E",
+"9:	c #9E7667",
+"0:	c #A6816A",
+"a:	c #B39772",
+"b:	c #C9AD8A",
+"c:	c #D6BB9D",
+"d:	c #D4BAA2",
+"e:	c #D9BFAC",
+"f:	c #D8C0B0",
+"g:	c #F1E0D4",
+"h:	c #FBF7EC",
+"i:	c #F9FAEA",
+"j:	c #F9F3E2",
+"k:	c #DECBBA",
+"l:	c #D1B3A2",
+"m:	c #AC927C",
+"n:	c #A1846F",
+"o:	c #B38C7C",
+"p:	c #C19385",
+"q:	c #D5A597",
+"r:	c #D4A899",
+"s:	c #C9AA97",
+"t:	c #C6B49C",
+"u:	c #FDF5E1",
+"v:	c #FDF9EA",
+"w:	c #FDFBEF",
+"x:	c #DED9CF",
+"y:	c #9A8F85",
+"z:	c #A9917F",
+"A:	c #A99581",
+"B:	c #A69481",
+"C:	c #A08E7A",
+"D:	c #98847B",
+"E:	c #978379",
+"F:	c #99857A",
+"G:	c #988579",
+"H:	c #978377",
+"I:	c #99867A",
+"J:	c #9C887B",
+"K:	c #9C8979",
+"L:	c #9F8B81",
+"M:	c #9F8C82",
+"N:	c #9D8A81",
+"O:	c #A38E85",
+"P:	c #A79189",
+"Q:	c #8B746B",
+"R:	c #6D554A",
+"S:	c #6E564B",
+"T:	c #775F54",
+"U:	c #7E665C",
+"V:	c #836B60",
+"W:	c #7D665B",
+"X:	c #766053",
+"Y:	c #645243",
+"Z:	c #4D3B2F",
+"`:	c #3C2D26",
+" <	c #2E2221",
+".<	c #2B2124",
+"+<	c #2B232A",
+"@<	c #261E24",
+"#<	c #241A20",
+"$<	c #271B20",
+"%<	c #221318",
+"&<	c #211014",
+"*<	c #645155",
+"=<	c #A49093",
+"-<	c #A7888A",
+";<	c #9C7979",
+"><	c #A27F7D",
+",<	c #A5837E",
+"'<	c #A6847C",
+")<	c #AB8980",
+"!<	c #AD8B82",
+"~<	c #AD8B84",
+"{<	c #AC8A84",
+"]<	c #B28F8A",
+"^<	c #B6948E",
+"/<	c #B4928C",
+"(<	c #B29089",
+"_<	c #B18E89",
+":<	c #AB8785",
+"<<	c #A27E7B",
+"[<	c #A4807A",
+"}<	c #9D7A71",
+"|<	c #8A675A",
+"1<	c #997766",
+"2<	c #9E7D69",
+"3<	c #AE8E77",
+"4<	c #C2A28B",
+"5<	c #D1B09C",
+"6<	c #D8B8A6",
+"7<	c #DFBFAE",
+"8<	c #D9B9AA",
+"9<	c #D9BEB0",
+"0<	c #F3E4D8",
+"a<	c #FFFAEC",
+"b<	c #F8E9DA",
+"c<	c #D8C3B5",
+"d<	c #C9B0A2",
+"e<	c #A68F7F",
+"f<	c #9A7D70",
+"g<	c #AF8780",
+"h<	c #BF938C",
+"i<	c #CEA099",
+"j<	c #C69C92",
+"k<	c #BF9E90",
+"l<	c #C6AD9C",
+"m<	c #FAF0DF",
+"n<	c #FEFAEC",
+"o<	c #FDFAEC",
+"p<	c #B9B2A5",
+"q<	c #978D81",
+"r<	c #A29387",
+"s<	c #A89484",
+"t<	c #AC9A89",
+"u<	c #A89683",
+"v<	c #9F8D79",
+"w<	c #88746A",
+"x<	c #675348",
+"y<	c #6C584D",
+"z<	c #715D52",
+"A<	c #7B675C",
+"B<	c #786459",
+"C<	c #6B584A",
+"D<	c #564335",
+"E<	c #422F25",
+"F<	c #3D2B26",
+"G<	c #3A2A2A",
+"H<	c #36272C",
+"I<	c #2F222A",
+"J<	c #2D2027",
+"K<	c #2B1F25",
+"L<	c #312229",
+"M<	c #34232B",
+"N<	c #3F2A33",
+"O<	c #7D6770",
+"P<	c #9B838C",
+"Q<	c #8D6E70",
+"R<	c #8A6866",
+"S<	c #987673",
+"T<	c #A2817B",
+"U<	c #A3827A",
+"V<	c #A8887E",
+"W<	c #AB8B80",
+"X<	c #AF8E86",
+"Y<	c #AE8D86",
+"Z<	c #B19089",
+"`<	c #B19088",
+" [	c #AD8C84",
+".[	c #AA8981",
+"+[	c #AC8B83",
+"@[	c #A4837C",
+"#[	c #9B7A73",
+"$[	c #9C7B73",
+"%[	c #95756B",
+"&[	c #88685C",
+"*[	c #957568",
+"=[	c #977769",
+"-[	c #A88378",
+";[	c #B89489",
+">[	c #D1ADA2",
+",[	c #D8B3A8",
+"'[	c #DDB8AD",
+")[	c #D6B7AB",
+"![	c #DBC4B6",
+"~[	c #FBEBDD",
+"{[	c #F8E5D7",
+"][	c #D7C1B3",
+"^[	c #C3AC9F",
+"/[	c #A79082",
+"([	c #A5887E",
+"_[	c #B38D87",
+":[	c #BE948E",
+"<[	c #CFA39E",
+"[[	c #C69E96",
+"}[	c #BC9A8F",
+"|[	c #C3A799",
+"1[	c #FDF4E5",
+"2[	c #FEF9EB",
+"3[	c #E8E0D3",
+"4[	c #9D9387",
+"5[	c #9F9387",
+"6[	c #A3958A",
+"7[	c #A09085",
+"8[	c #A49084",
+"9[	c #A39083",
+"0[	c #A59285",
+"a[	c #9D8B77",
+"b[	c #937F76",
+"c[	c #89766D",
+"d[	c #68564D",
+"e[	c #66544A",
+"f[	c #645249",
+"g[	c #67554B",
+"h[	c #705F55",
+"i[	c #736158",
+"j[	c #6F5A51",
+"k[	c #614B41",
+"l[	c #4F3B33",
+"m[	c #483531",
+"n[	c #463434",
+"o[	c #3F2F33",
+"p[	c #35252E",
+"q[	c #32222C",
+"r[	c #37252F",
+"s[	c #5B4651",
+"t[	c #705865",
+"u[	c #715966",
+"v[	c #735965",
+"w[	c #785859",
+"x[	c #82605D",
+"y[	c #92716C",
+"z[	c #A18078",
+"A[	c #A6857B",
+"B[	c #AC8C81",
+"C[	c #A6867A",
+"D[	c #AA8A7E",
+"E[	c #AF8F83",
+"F[	c #B39386",
+"G[	c #A48478",
+"H[	c #A7877A",
+"I[	c #B6968A",
+"J[	c #C2A296",
+"K[	c #BE9E90",
+"L[	c #BB9B8E",
+"M[	c #AB8B7F",
+"N[	c #8D6C62",
+"O[	c #7A5950",
+"P[	c #85645C",
+"Q[	c #94726B",
+"R[	c #A07A74",
+"S[	c #B08B85",
+"T[	c #BD9891",
+"U[	c #CAA59F",
+"V[	c #CEA9A2",
+"W[	c #D3AEA7",
+"X[	c #D6B5AD",
+"Y[	c #D0B8AA",
+"Z[	c #E3CCBE",
+"`[	c #F4DDCF",
+" }	c #D5BEB0",
+".}	c #BDA597",
+"+}	c #A99284",
+"@}	c #B3978A",
+"#}	c #B79287",
+"$}	c #C0998F",
+"%}	c #D2A8A0",
+"&}	c #D0A9A0",
+"*}	c #C5A59A",
+"=}	c #B3998C",
+"-}	c #EFE3D5",
+";}	c #FBF7E9",
+">}	c #BFB5A9",
+",}	c #9D9185",
+"'}	c #A5968B",
+")}	c #A5948A",
+"!}	c #A19086",
+"~}	c #A7948C",
+"{}	c #A59189",
+"]}	c #A28E87",
+"^}	c #A38F88",
+"/}	c #9F8B84",
+"(}	c #A08D7C",
+"_}	c #958178",
+":}	c #97837A",
+"<}	c #89766E",
+"[}	c #5B4B43",
+"}}	c #594941",
+"|}	c #55453D",
+"1}	c #53433B",
+"2}	c #57473F",
+"3}	c #64544C",
+"4}	c #7E6661",
+"5}	c #7D6661",
+"6}	c #755F5D",
+"7}	c #675353",
+"8}	c #544243",
+"9}	c #3E2E34",
+"0}	c #43323A",
+"a}	c #3B2630",
+"b}	c #523C46",
+"c}	c #5F4651",
+"d}	c #634954",
+"e}	c #694D58",
+"f}	c #785858",
+"g}	c #8B6A64",
+"h}	c #97766E",
+"i}	c #A38379",
+"j}	c #A7877B",
+"k}	c #A78779",
+"l}	c #AC8C7D",
+"m}	c #B09081",
+"n}	c #B19182",
+"o}	c #A9897A",
+"p}	c #937364",
+"q}	c #A48475",
+"r}	c #B9998A",
+"s}	c #C6A797",
+"t}	c #C9AA98",
+"u}	c #C4A494",
+"v}	c #C0A093",
+"w}	c #BF9F95",
+"x}	c #B4938D",
+"y}	c #A48380",
+"z}	c #916E6B",
+"A}	c #8F6966",
+"B}	c #A57F7C",
+"C}	c #B58F8C",
+"D}	c #BF9996",
+"E}	c #C59F9C",
+"F}	c #D0AAA7",
+"G}	c #D5B3AC",
+"H}	c #D3B9A9",
+"I}	c #D2B8A8",
+"J}	c #DCC2B2",
+"K}	c #D4B9AA",
+"L}	c #B99F8F",
+"M}	c #AC9282",
+"N}	c #B59A88",
+"O}	c #B39280",
+"P}	c #C39E8F",
+"Q}	c #D2AC9F",
+"R}	c #D4AFA4",
+"S}	c #C3A59A",
+"T}	c #AB9486",
+"U}	c #F0E5D7",
+"V}	c #E3D9CD",
+"W}	c #9B9084",
+"X}	c #9F9186",
+"Y}	c #A6968B",
+"Z}	c #A7948B",
+"`}	c #AC9791",
+" |	c #A7928D",
+".|	c #A28D88",
+"+|	c #A08B86",
+"@|	c #9F8A85",
+"#|	c #9F8A84",
+"$|	c #7E6C65",
+"%|	c #41332C",
+"&|	c #3F312A",
+"*|	c #3B2D27",
+"=|	c #372923",
+"-|	c #372822",
+";|	c #50423C",
+">|	c #735D59",
+",|	c #917574",
+"'|	c #9C8282",
+")|	c #947B7A",
+"!|	c #7E6868",
+"~|	c #645050",
+"{|	c #574544",
+"]|	c #564445",
+"^|	c #5B474B",
+"/|	c #493338",
+"(|	c #533B40",
+"_|	c #5A3F45",
+":|	c #60444A",
+"<|	c #6A4C52",
+"[|	c #7D5E5A",
+"}|	c #A28278",
+"||	c #A8887B",
+"1|	c #A38374",
+"2|	c #A48574",
+"3|	c #AD8E7D",
+"4|	c #B49485",
+"5|	c #B79789",
+"6|	c #9E7E70",
+"7|	c #A38375",
+"8|	c #AD8D7F",
+"9|	c #BD9D8E",
+"0|	c #C4A493",
+"a|	c #C0A091",
+"b|	c #BD9D91",
+"c|	c #BE9D93",
+"d|	c #C1A099",
+"e|	c #C8A7A2",
+"f|	c #BC9A95",
+"g|	c #9C7772",
+"h|	c #9A7571",
+"i|	c #A57F7B",
+"j|	c #B38E8A",
+"k|	c #BD9893",
+"l|	c #C9A39F",
+"m|	c #CDABA2",
+"n|	c #D0B4A3",
+"o|	c #D1B5A4",
+"p|	c #D0B5A3",
+"q|	c #D3B7A6",
+"r|	c #B69A88",
+"s|	c #B09583",
+"t|	c #B49983",
+"u|	c #B3957D",
+"v|	c #C8A791",
+"w|	c #D8B4A3",
+"x|	c #D4B2A4",
+"y|	c #C3A79B",
+"z|	c #B09A8E",
+"A|	c #F4E7DB",
+"B|	c #BDB0A5",
+"C|	c #998B80",
+"D|	c #A59389",
+"E|	c #A6918A",
+"F|	c #A38E88",
+"G|	c #A48F89",
+"H|	c #A6928C",
+"I|	c #A28D87",
+"J|	c #9E8A84",
+"K|	c #9F8B85",
+"L|	c #9F8C7F",
+"M|	c #695851",
+"N|	c #2F231E",
+"O|	c #251914",
+"P|	c #1D110C",
+"Q|	c #1E120E",
+"R|	c #1F130E",
+"S|	c #271B16",
+"T|	c #604A4A",
+"U|	c #96787B",
+"V|	c #AA8D8F",
+"W|	c #A88E8F",
+"X|	c #957D7C",
+"Y|	c #7C6765",
+"Z|	c #6B5855",
+"`|	c #67544E",
+" 1	c #6B5852",
+".1	c #57433D",
+"+1	c #533B37",
+"@1	c #5A403C",
+"#1	c #644845",
+"$1	c #806059",
+"%1	c #8E6E64",
+"&1	c #9C7C70",
+"*1	c #A18173",
+"=1	c #A38372",
+"-1	c #A68774",
+";1	c #AC8D7A",
+">1	c #B19085",
+",1	c #99796F",
+"'1	c #94746A",
+")1	c #9B7B71",
+"!1	c #9F7E75",
+"~1	c #A7867D",
+"{1	c #BA9990",
+"]1	c #C09F96",
+"^1	c #BC9C92",
+"/1	c #B6958B",
+"(1	c #BA998F",
+"_1	c #BC9C91",
+":1	c #C09F94",
+"<1	c #C7A299",
+"[1	c #BD988F",
+"}1	c #AF8B82",
+"|1	c #B08B82",
+"11	c #B79289",
+"21	c #BF9A91",
+"31	c #C2A093",
+"41	c #C9AB98",
+"51	c #CFB19E",
+"61	c #CDAF9C",
+"71	c #C4A693",
+"81	c #B39582",
+"91	c #B79986",
+"01	c #AE937A",
+"a1	c #B19678",
+"b1	c #CCAE93",
+"c1	c #DAB9A5",
+"d1	c #D2B3A3",
+"e1	c #C5AC9F",
+"f1	c #C4B1A5",
+"g1	c #E4D9CD",
+"h1	c #9C8D82",
+"i1	c #A29287",
+"j1	c #9D8C82",
+"k1	c #A48D85",
+"l1	c #A58D85",
+"m1	c #9E887F",
+"n1	c #A28F84",
+"o1	c #9D897F",
+"p1	c #9A867C",
+"q1	c #685751",
+"r1	c #261B16",
+"s1	c #1C110D",
+"t1	c #180D09",
+"u1	c #1F1410",
+"v1	c #201511",
+"w1	c #1B0F0C",
+"x1	c #513C3D",
+"y1	c #95767B",
+"z1	c #AC8E91",
+"A1	c #AD9192",
+"B1	c #A58B89",
+"C1	c #927B78",
+"D1	c #846E6A",
+"E1	c #77635A",
+"F1	c #725E52",
+"G1	c #614B40",
+"H1	c #5A4138",
+"I1	c #5B4037",
+"J1	c #654840",
+"K1	c #71544B",
+"L1	c #78584F",
+"M1	c #87675C",
+"N1	c #97776A",
+"O1	c #A08071",
+"P1	c #A68775",
+"Q1	c #AC8C79",
+"R1	c #AF907C",
+"S1	c #AD8D85",
+"T1	c #AF8E88",
+"U1	c #94746E",
+"V1	c #8A6964",
+"W1	c #896863",
+"X1	c #92716B",
+"Y1	c #997873",
+"Z1	c #A3827D",
+"`1	c #AE8D88",
+" 2	c #B4938B",
+".2	c #B39388",
+"+2	c #AD8D80",
+"@2	c #B79787",
+"#2	c #BA9A89",
+"$2	c #C39F92",
+"%2	c #B99588",
+"&2	c #BC988A",
+"*2	c #C9A598",
+"=2	c #CEAA9D",
+"-2	c #C9A798",
+";2	c #CBAC98",
+">2	c #CAAB97",
+",2	c #C5A692",
+"'2	c #BD9E8A",
+")2	c #B59682",
+"!2	c #AC9176",
+"~2	c #B59C7B",
+"{2	c #D2B499",
+"]2	c #D9B9A3",
+"^2	c #DABCAA",
+"/2	c #C8AFA2",
+"(2	c #CCB9AE",
+"_2	c #BCACA2",
+":2	c #9B8B80",
+"<2	c #A18F85",
+"[2	c #A58C85",
+"}2	c #A08A7D",
+"|2	c #9B8879",
+"12	c #9B877F",
+"22	c #96827C",
+"32	c #8F7A74",
+"42	c #937E78",
+"52	c #98847E",
+"62	c #97837D",
+"72	c #97837C",
+"82	c #72645B",
+"92	c #282118",
+"02	c #231B14",
+"a2	c #1F1611",
+"b2	c #201412",
+"c2	c #1E1010",
+"d2	c #18090A",
+"e2	c #513F42",
+"f2	c #947D7F",
+"g2	c #AA8E8D",
+"h2	c #B59692",
+"i2	c #B1918C",
+"j2	c #A68883",
+"k2	c #997E7B",
+"l2	c #917772",
+"m2	c #846A65",
+"n2	c #6D524E",
+"o2	c #624642",
+"p2	c #614541",
+"q2	c #6C504B",
+"r2	c #7A5951",
+"s2	c #8B675D",
+"t2	c #9E7A6F",
+"u2	c #A78477",
+"v2	c #AC8979",
+"w2	c #B18E7C",
+"x2	c #B18F7D",
+"y2	c #A4877C",
+"z2	c #95786F",
+"A2	c #876963",
+"B2	c #7F615C",
+"C2	c #856763",
+"D2	c #8E706D",
+"E2	c #967A70",
+"F2	c #9F8177",
+"G2	c #A08275",
+"H2	c #A98A7B",
+"I2	c #A58473",
+"J2	c #B08E7A",
+"K2	c #B69380",
+"L2	c #B49082",
+"M2	c #C9A597",
+"N2	c #D4B0A2",
+"O2	c #DBB7A9",
+"P2	c #D8B4A5",
+"Q2	c #D2B09D",
+"R2	c #C9A793",
+"S2	c #C2A08D",
+"T2	c #CAA895",
+"U2	c #CEAC99",
+"V2	c #BB9885",
+"W2	c #AD8D7A",
+"X2	c #C1A28E",
+"Y2	c #D4B19D",
+"Z2	c #DDB9A6",
+"`2	c #DEBCAB",
+" 3	c #CEB1A5",
+".3	c #BEA79E",
+"+3	c #A28F86",
+"@3	c #A08A81",
+"#3	c #9C8A78",
+"$3	c #9B887C",
+"%3	c #9A867F",
+"&3	c #9A857F",
+"*3	c #95807B",
+"=3	c #96817B",
+"-3	c #918278",
+";3	c #595348",
+">3	c #3D352B",
+",3	c #2C211B",
+"'3	c #1B0D0A",
+")3	c #1E0D0E",
+"!3	c #1C0A0C",
+"~3	c #594648",
+"{3	c #978183",
+"]3	c #B19694",
+"^3	c #BC9C96",
+"/3	c #B9978F",
+"(3	c #B2918B",
+"_3	c #A88A87",
+":3	c #A18381",
+"<3	c #9B7D7B",
+"[3	c #9E807E",
+"}3	c #947674",
+"|3	c #8B6D6B",
+"13	c #816361",
+"23	c #826361",
+"33	c #896660",
+"43	c #9A756C",
+"53	c #AA8679",
+"63	c #B3907E",
+"73	c #A78A7D",
+"83	c #987C70",
+"93	c #96796F",
+"03	c #8D7069",
+"a3	c #795C57",
+"b3	c #7B5E5B",
+"c3	c #7A5D5A",
+"d3	c #876C63",
+"e3	c #8F7167",
+"f3	c #AC8B80",
+"g3	c #B69587",
+"h3	c #BE9B8B",
+"i3	c #BD988A",
+"j3	c #C09C8E",
+"k3	c #D2AEA0",
+"l3	c #DCB8A8",
+"m3	c #D8B5A2",
+"n3	c #CEAB98",
+"o3	c #BF9E8D",
+"p3	c #CCAB9B",
+"q3	c #D8B4A2",
+"r3	c #DEB9A6",
+"s3	c #CDAEA2",
+"t3	c #A18881",
+"u3	c #968079",
+"v3	c #9E8B7B",
+"w3	c #9F8C80",
+"x3	c #A18C87",
+"y3	c #927D78",
+"z3	c #937E79",
+"A3	c #947F7A",
+"B3	c #94807A",
+"C3	c #96827A",
+"D3	c #92887D",
+"E3	c #7F746B",
+"F3	c #50423B",
+"G3	c #2B1A18",
+"H3	c #271313",
+"I3	c #2A1516",
+"J3	c #665254",
+"K3	c #967F7F",
+"L3	c #B19491",
+"M3	c #B7948D",
+"N3	c #BB968E",
+"O3	c #B6938C",
+"P3	c #B0908B",
+"Q3	c #AC8E8A",
+"R3	c #A88986",
+"S3	c #A1827E",
+"T3	c #967774",
+"U3	c #8E6F6C",
+"V3	c #8C6D6A",
+"W3	c #98756E",
+"X3	c #A78278",
+"Y3	c #AA867A",
+"Z3	c #AC8879",
+"`3	c #B18D7B",
+" 4	c #B08E7C",
+".4	c #A28678",
+"+4	c #907468",
+"@4	c #93776D",
+"#4	c #6F524D",
+"$4	c #60423F",
+"%4	c #674947",
+"&4	c #6D514D",
+"*4	c #90726E",
+"=4	c #A88A84",
+"-4	c #CAA9A2",
+";4	c #D8B6AD",
+">4	c #DAB6AC",
+",4	c #D3AFA1",
+"'4	c #D0AC9E",
+")4	c #CFAB9D",
+"!4	c #D6B2A4",
+"~4	c #DCB8AA",
+"{4	c #DDB9A9",
+"]4	c #DBB7A5",
+"^4	c #CDAA97",
+"/4	c #CCA996",
+"(4	c #C4A392",
+"_4	c #D7B3A1",
+":4	c #DBB6A3",
+"<4	c #D9B7A6",
+"[4	c #CAACA0",
+"}4	c #967D75",
+"|4	c #98837B",
+"14	c #9C887C",
+"24	c #9C8881",
+"34	c #8F7A75",
+"44	c #907B76",
+"54	c #917C77",
+"64	c #95807A",
+"74	c #937F77",
+"84	c #938277",
+"94	c #97897D",
+"04	c #9A8A80",
+"a4	c #86746D",
+"b4	c #56413E",
+"c4	c #4D3534",
+"d4	c #4E3535",
+"e4	c #765E5F",
+"f4	c #987E7D",
+"g4	c #AC8D88",
+"h4	c #AF8A82",
+"i4	c #B89289",
+"j4	c #B59087",
+"k4	c #AF8E87",
+"l4	c #AF8F89",
+"m4	c #AE8E88",
+"n4	c #A3837D",
+"o4	c #977670",
+"p4	c #8D6D67",
+"q4	c #8E6D68",
+"r4	c #93726C",
+"s4	c #99756E",
+"t4	c #A37E75",
+"u4	c #A78379",
+"v4	c #A78376",
+"w4	c #AA8677",
+"x4	c #AB8876",
+"y4	c #AD8B79",
+"z4	c #9D8073",
+"A4	c #8C7064",
+"B4	c #8E7168",
+"C4	c #876A63",
+"D4	c #745752",
+"E4	c #503230",
+"F4	c #4D2F2D",
+"G4	c #694D4B",
+"H4	c #957775",
+"I4	c #B99A97",
+"J4	c #D4B3AF",
+"K4	c #DDBAB5",
+"L4	c #D9B4AC",
+"M4	c #D6B0A7",
+"N4	c #CFAB9E",
+"O4	c #DBB7A8",
+"P4	c #DAB7A4",
+"Q4	c #D2AF9C",
+"R4	c #C5A493",
+"S4	c #C7A797",
+"T4	c #D3AF9D",
+"U4	c #D8B3A0",
+"V4	c #C3A599",
+"W4	c #846C64",
+"X4	c #97827A",
+"Y4	c #9A8779",
+"Z4	c #998677",
+"`4	c #9C8A77",
+" 5	c #9B8780",
+".5	c #98837E",
+"+5	c #95817B",
+"@5	c #958179",
+"#5	c #9B897B",
+"$5	c #957E77",
+"%5	c #8B716D",
+"&5	c #856867",
+"*5	c #694B4A",
+"=5	c #816565",
+"-5	c #A18583",
+";5	c #AC8B84",
+">5	c #B48D84",
+",5	c #B88F85",
+"'5	c #B48D83",
+")5	c #AE8B82",
+"!5	c #AA8880",
+"~5	c #A17F77",
+"{5	c #937069",
+"]5	c #8C6A62",
+"^5	c #8B6861",
+"/5	c #927068",
+"(5	c #9A766E",
+"_5	c #A47F76",
+":5	c #A88379",
+"<5	c #A58270",
+"[5	c #A78573",
+"}5	c #937669",
+"|5	c #896D61",
+"15	c #8A6D63",
+"25	c #846760",
+"35	c #70534E",
+"45	c #614441",
+"55	c #8A6E6B",
+"65	c #9D7F7B",
+"75	c #B49590",
+"85	c #CDACA6",
+"95	c #D4B2A9",
+"05	c #D7B3A9",
+"a5	c #CFA99F",
+"b5	c #DAB6A8",
+"c5	c #DFBBAD",
+"d5	c #DEBAAC",
+"e5	c #D8B4A4",
+"f5	c #D5B19F",
+"g5	c #D5B29F",
+"h5	c #D9B6A3",
+"i5	c #D3B09D",
+"j5	c #C6A695",
+"k5	c #D2AE9C",
+"l5	c #D7B29F",
+"m5	c #D8B6A5",
+"n5	c #C3A498",
+"o5	c #816860",
+"p5	c #8D7770",
+"q5	c #9A867A",
+"r5	c #9A8778",
+"s5	c #9B8878",
+"t5	c #9E8C7C",
+"u5	c #9A877B",
+"v5	c #96817C",
+"w5	c #947F79",
+"x5	c #9C8678",
+"y5	c #9F877B",
+"z5	c #9C8078",
+"A5	c #9E807C",
+"B5	c #8E6E6C",
+"C5	c #6D4C4B",
+"D5	c #8D6D6D",
+"E5	c #A58884",
+"F5	c #B08D86",
+"G5	c #B89084",
+"H5	c #BB9084",
+"I5	c #B1897D",
+"J5	c #A58076",
+"K5	c #9E7A71",
+"L5	c #97736A",
+"M5	c #8D6960",
+"N5	c #846057",
+"O5	c #79554C",
+"P5	c #7E5950",
+"Q5	c #8F6B62",
+"R5	c #98736B",
+"S5	c #A07B73",
+"T5	c #A68275",
+"U5	c #A98674",
+"V5	c #A27F6D",
+"W5	c #8A6E60",
+"X5	c #85695D",
+"Y5	c #81655B",
+"Z5	c #82655E",
+"`5	c #8B6E69",
+" 6	c #9A7C7A",
+".6	c #9E807D",
+"+6	c #90746C",
+"@6	c #987B72",
+"#6	c #AE9086",
+"$6	c #C4A498",
+"%6	c #CCAB9E",
+"&6	c #DAB6A7",
+"*6	c #D5B0A2",
+"=6	c #D5B1A3",
+"-6	c #D7B3A5",
+";6	c #DDB9AB",
+">6	c #D9B5A7",
+",6	c #D6B2A3",
+"'6	c #D5B2A0",
+")6	c #D7B4A1",
+"!6	c #C3A291",
+"~6	c #C5A494",
+"{6	c #D0AC9A",
+"]6	c #D5B09D",
+"^6	c #D0AE9D",
+"/6	c #917870",
+"(6	c #816C64",
+"_6	c #9B877C",
+":6	c #9D8982",
+"<6	c #99847F",
+"[6	c #8B7670",
+"}6	c #8F7B75",
+"|6	c #9B867A",
+"16	c #9D8477",
+"26	c #9F8479",
+"36	c #9E827A",
+"46	c #A2847F",
+"56	c #9A7977",
+"66	c #8D6A68",
+"76	c #A1817D",
+"86	c #B38F87",
+"96	c #B48B81",
+"06	c #B08679",
+"a6	c #A98075",
+"b6	c #A07B71",
+"c6	c #9B756C",
+"d6	c #98726A",
+"e6	c #8A645B",
+"f6	c #775149",
+"g6	c #6E483F",
+"h6	c #6F4941",
+"i6	c #825B53",
+"j6	c #946E66",
+"k6	c #9E7970",
+"l6	c #A37E74",
+"m6	c #A27E72",
+"n6	c #AA8678",
+"o6	c #A68271",
+"p6	c #967463",
+"q6	c #846659",
+"r6	c #85685D",
+"s6	c #8D7066",
+"t6	c #9F817A",
+"u6	c #A38681",
+"v6	c #A18380",
+"w6	c #9E817D",
+"x6	c #907569",
+"y6	c #9C7E72",
+"z6	c #B29386",
+"A6	c #C5A595",
+"B6	c #CDAC9B",
+"C6	c #D0AD9A",
+"D6	c #D7B2A1",
+"E6	c #D4B0A0",
+"F6	c #D4B19E",
+"G6	c #CFAC99",
+"H6	c #D6B3A0",
+"I6	c #D2AF9D",
+"J6	c #C6A594",
+"K6	c #C7A696",
+"L6	c #CEA997",
+"M6	c #CCAA98",
+"N6	c #C6A79A",
+"O6	c #A88E85",
+"P6	c #8A736C",
+"Q6	c #947F76",
+"R6	c #97847B",
+"S6	c #9B8880",
+"T6	c #9A867E",
+"U6	c #9D8A7C",
+"V6	c #9C8978",
+"W6	c #9C8976",
+"X6	c #9B867F",
+"Y6	c #8D7971",
+"Z6	c #927E75",
+"`6	c #948078",
+" 7	c #917D75",
+".7	c #8F7B72",
+"+7	c #9A847C",
+"@7	c #9A8179",
+"#7	c #987F77",
+"$7	c #9C827B",
+"%7	c #9C837C",
+"&7	c #876D66",
+"*7	c #A47E78",
+"=7	c #B08A84",
+"-7	c #AB847E",
+";7	c #A57D78",
+">7	c #9F7872",
+",7	c #9F7973",
+"'7	c #A8817C",
+")7	c #835D57",
+"!7	c #68413C",
+"~7	c #754E49",
+"{7	c #78514C",
+"]7	c #855C56",
+"^7	c #9B716A",
+"/7	c #9F786F",
+"(7	c #A07A71",
+"_7	c #9F7C71",
+":7	c #917064",
+"<7	c #87665B",
+"[7	c #8A675E",
+"}7	c #97746A",
+"|7	c #A58379",
+"17	c #A07F75",
+"27	c #A18378",
+"37	c #A2847A",
+"47	c #9B7C71",
+"57	c #977568",
+"67	c #A88577",
+"77	c #B89687",
+"87	c #CCA89A",
+"97	c #D0AC9D",
+"07	c #D5B1A1",
+"a7	c #D9B6A4",
+"b7	c #DBB8A5",
+"c7	c #DAB6A4",
+"d7	c #D6B2A0",
+"e7	c #D0AD99",
+"f7	c #CFAC97",
+"g7	c #D3B09C",
+"h7	c #D3AFA0",
+"i7	c #D6B2A5",
+"j7	c #CCA89B",
+"k7	c #C4A092",
+"l7	c #C7A394",
+"m7	c #CDA99C",
+"n7	c #BE9B8E",
+"o7	c #947971",
+"p7	c #98847D",
+"q7	c #93847D",
+"r7	c #998C86",
+"s7	c #988783",
+"t7	c #937D7C",
+"u7	c #988577",
+"v7	c #988478",
+"w7	c #8A766D",
+"x7	c #8B776E",
+"y7	c #8E7A71",
+"z7	c #917D74",
+"A7	c #968078",
+"B7	c #9A817A",
+"C7	c #998079",
+"D7	c #977E77",
+"E7	c #806760",
+"F7	c #8C6D67",
+"G7	c #A37F7A",
+"H7	c #B08C87",
+"I7	c #AA8681",
+"J7	c #A8847E",
+"K7	c #AA8680",
+"L7	c #AB877E",
+"M7	c #A9857A",
+"N7	c #A37F75",
+"O7	c #8C685E",
+"P7	c #6F4C41",
+"Q7	c #846056",
+"R7	c #866258",
+"S7	c #7E564E",
+"T7	c #8D655E",
+"U7	c #9B746C",
+"V7	c #9C776E",
+"W7	c #9A776E",
+"X7	c #8A6A5F",
+"Y7	c #89695E",
+"Z7	c #9A7A6F",
+"`7	c #9F7E74",
+" 8	c #9D7D73",
+".8	c #97796E",
+"+8	c #9C7E74",
+"@8	c #927367",
+"#8	c #957265",
+"$8	c #A37F71",
+"%8	c #B69284",
+"&8	c #C39F91",
+"*8	c #D7B3A3",
+"=8	c #DCB9A6",
+"-8	c #DFBCA9",
+";8	c #DEBBA8",
+">8	c #D6B39F",
+",8	c #D5B29D",
+"'8	c #D4B1A0",
+")8	c #D5B1A4",
+"!8	c #C7A395",
+"~8	c #B5948A",
+"{8	c #957971",
+"]8	c #917C72",
+"^8	c #908078",
+"/8	c #958780",
+"(8	c #9B8985",
+"_8	c #96817F",
+":8	c #9B887A",
+"<8	c #9B8682",
+"[8	c #98827A",
+"}8	c #9B827B",
+"|8	c #7A615A",
+"18	c #856863",
+"28	c #967571",
+"38	c #9E7C79",
+"48	c #9C7A77",
+"58	c #92706C",
+"68	c #8B6966",
+"78	c #83615E",
+"88	c #79574F",
+"98	c #765449",
+"08	c #69473D",
+"a8	c #704E43",
+"b8	c #937166",
+"c8	c #8D6B60",
+"d8	c #865F58",
+"e8	c #825B55",
+"f8	c #906A63",
+"g8	c #97736C",
+"h8	c #906F66",
+"i8	c #886A61",
+"j8	c #93756C",
+"k8	c #997C72",
+"l8	c #8D6F66",
+"m8	c #83655C",
+"n8	c #907269",
+"o8	c #94756C",
+"p8	c #97776D",
+"q8	c #916E61",
+"r8	c #9D796B",
+"s8	c #B18D7F",
+"t8	c #BE9A8C",
+"u8	c #E0BDAA",
+"v8	c #DDBAA7",
+"w8	c #D8B5A1",
+"x8	c #D5B29C",
+"y8	c #D2AF9A",
+"z8	c #D3AF9E",
+"A8	c #D3AFA2",
+"B8	c #C29E90",
+"C8	c #A88C82",
+"D8	c #957E73",
+"E8	c #917E75",
+"F8	c #95837C",
+"G8	c #998781",
+"H8	c #9A8682",
+"I8	c #998679",
+"J8	c #99857F",
+"K8	c #9A8582",
+"L8	c #8D7970",
+"M8	c #978179",
+"N8	c #725952",
+"O8	c #735853",
+"P8	c #694C49",
+"Q8	c #5B3D3A",
+"R8	c #513431",
+"S8	c #50322F",
+"T8	c #3C1F1C",
+"U8	c #391919",
+"V8	c #442223",
+"W8	c #543233",
+"X8	c #654444",
+"Y8	c #8A6869",
+"Z8	c #9C7B7B",
+"`8	c #987676",
+" 9	c #96716E",
+".9	c #835D59",
+"+9	c #886560",
+"@9	c #91706A",
+"#9	c #83655F",
+"$9	c #7E615A",
+"%9	c #8D726A",
+"&9	c #866E66",
+"*9	c #846D64",
+"=9	c #7C625A",
+"-9	c #7A5D56",
+";9	c #8C6E67",
+">9	c #967670",
+",9	c #9E7B75",
+"'9	c #AC887A",
+")9	c #BD998B",
+"!9	c #D4B0A1",
+"~9	c #D9B6A2",
+"{9	c #D4B19B",
+"]9	c #CFAC98",
+"^9	c #D2AEA1",
+"/9	c #D1ADA0",
+"(9	c #CAAB9D",
+"_9	c #BDA094",
+":9	c #A98E83",
+"<9	c #9B8178",
+"[9	c #9C847D",
+"}9	c #9B8781",
+"|9	c #998680",
+"19	c #968278",
+"29	c #978280",
+"39	c #968081",
+"49	c #89756C",
+"59	c #88746B",
+"69	c #8C786F",
+"79	c #987F78",
+"89	c #745B54",
+"99	c #5B423E",
+"09	c #533A38",
+"a9	c #4A322F",
+"b9	c #402725",
+"c9	c #361D1B",
+"d9	c #351D1A",
+"e9	c #482F2D",
+"f9	c #64464B",
+"g9	c #704F58",
+"h9	c #76555E",
+"i9	c #84636C",
+"j9	c #93727B",
+"k9	c #9C7B84",
+"l9	c #9A7881",
+"m9	c #9B7778",
+"n9	c #8D6A67",
+"o9	c #866562",
+"p9	c #836461",
+"q9	c #816460",
+"r9	c #816661",
+"s9	c #806862",
+"t9	c #705E56",
+"u9	c #6B5951",
+"v9	c #604B43",
+"w9	c #5F4540",
+"x9	c #836561",
+"y9	c #97736F",
+"z9	c #9E7A6D",
+"A9	c #AD897B",
+"B9	c #D4B19F",
+"C9	c #DCB9A5",
+"D9	c #D6B39D",
+"E9	c #D8B4A7",
+"F9	c #BA9688",
+"G9	c #C4A89A",
+"H9	c #BC9E92",
+"I9	c #AC8D84",
+"J9	c #A2857E",
+"K9	c #9B847C",
+"L9	c #99867E",
+"M9	c #9C8880",
+"N9	c #988282",
+"O9	c #947E80",
+"P9	c #857168",
+"Q9	c #87736A",
+"R9	c #957F77",
+"S9	c #947B74",
+"T9	c #876E67",
+"U9	c #5C4541",
+"V9	c #3D2928",
+"W9	c #372221",
+"X9	c #3A2625",
+"Y9	c #463130",
+"Z9	c #765B5F",
+"`9	c #84656D",
+" 0	c #8A6A72",
+".0	c #917279",
+"+0	c #95767E",
+"@0	c #9C7C84",
+"#0	c #9C7C83",
+"$0	c #957475",
+"%0	c #947271",
+"&0	c #8A6A68",
+"*0	c #876967",
+"=0	c #866B68",
+"-0	c #7F6662",
+";0	c #715A56",
+">0	c #5A4D45",
+",0	c #574941",
+"'0	c #4D3B34",
+")0	c #4B332F",
+"!0	c #987574",
+"~0	c #916B69",
+"{0	c #B38F81",
+"]0	c #C6A294",
+"^0	c #D1AD9D",
+"/0	c #D3B09E",
+"(0	c #D8B5A0",
+"_0	c #DEBBA7",
+":0	c #D9B5A5",
+"<0	c #C8AC9C",
+"[0	c #CAA99C",
+"}0	c #C09D94",
+"|0	c #B08F87",
+"10	c #9D847A",
+"20	c #948278",
+"30	c #98857B",
+"40	c #95817A",
+"50	c #988284",
+"60	c #978085",
+"70	c #867269",
+"80	c #947E76",
+"90	c #957E76",
+"00	c #967F77",
+"a0	c #947D75",
+"b0	c #806C67",
+"c0	c #54403E",
+"d0	c #35211F",
+"e0	c #271311",
+"f0	c #3F2B29",
+"g0	c #55403F",
+"h0	c #665150",
+"i0	c #7E6263",
+"j0	c #8B6C6F",
+"k0	c #8E6F71",
+"l0	c #917275",
+"m0	c #917274",
+"n0	c #98797C",
+"o0	c #9E7F81",
+"p0	c #967574",
+"q0	c #896B69",
+"r0	c #876B68",
+"s0	c #7E6561",
+"t0	c #735B57",
+"u0	c #59433F",
+"v0	c #473B36",
+"w0	c #463935",
+"x0	c #43312D",
+"y0	c #3A2420",
+"z0	c #5B403C",
+"A0	c #7C5D5A",
+"B0	c #A58376",
+"C0	c #AE8B7C",
+"D0	c #B79485",
+"E0	c #C3A092",
+"F0	c #C7A496",
+"G0	c #CEAB9D",
+"H0	c #D4B1A1",
+"I0	c #D8B6A3",
+"J0	c #D6B4A0",
+"K0	c #D5B39F",
+"L0	c #D6B5A1",
+"M0	c #DBBAA6",
+"N0	c #DBBBA5",
+"O0	c #D4B39C",
+"P0	c #D4B39D",
+"Q0	c #D8B7A3",
+"R0	c #D6B4A2",
+"S0	c #D0AF9E",
+"T0	c #D0AE9E",
+"U0	c #D3B0A1",
+"V0	c #CEAA9C",
+"W0	c #B69184",
+"X0	c #C49F92",
+"Y0	c #C9AB9B",
+"Z0	c #CAAC9C",
+"`0	c #D2AFA1",
+" a	c #CCA79B",
+".a	c #BD9B90",
+"+a	c #A98D82",
+"@a	c #978277",
+"#a	c #958177",
+"$a	c #96827E",
+"%a	c #958081",
+"&a	c #968084",
+"*a	c #917F75",
+"=a	c #8F8075",
+"-a	c #8D7E74",
+";a	c #8E7F75",
+">a	c #8A7B70",
+",a	c #8B7C73",
+"'a	c #7B6B64",
+")a	c #604F48",
+"!a	c #43302A",
+"~a	c #48322E",
+"{a	c #614945",
+"]a	c #604744",
+"^a	c #846261",
+"/a	c #936D6D",
+"(a	c #977070",
+"_a	c #956E6F",
+":a	c #966F70",
+"<a	c #9B7475",
+"[a	c #997373",
+"}a	c #927371",
+"|a	c #917371",
+"1a	c #886D6A",
+"2a	c #8A726E",
+"3a	c #78615D",
+"4a	c #66514C",
+"5a	c #4E3B37",
+"6a	c #3B2E34",
+"7a	c #30232A",
+"8a	c #322425",
+"9a	c #41312E",
+"0a	c #53423A",
+"aa	c #69564A",
+"ba	c #887264",
+"ca	c #A58577",
+"da	c #A98879",
+"ea	c #B39384",
+"fa	c #C1A091",
+"ga	c #C4A495",
+"ha	c #CCAC9D",
+"ia	c #D5B4A4",
+"ja	c #D7B5A2",
+"ka	c #D4B5A0",
+"la	c #CEB19B",
+"ma	c #C6AC95",
+"na	c #A99178",
+"oa	c #846C53",
+"pa	c #826951",
+"qa	c #8A7159",
+"ra	c #937A63",
+"sa	c #A48C75",
+"ta	c #B9A089",
+"ua	c #C4AC95",
+"va	c #D4B6A1",
+"wa	c #D4AF9D",
+"xa	c #D2AD9C",
+"ya	c #CDA898",
+"za	c #BA9487",
+"Aa	c #C39C8F",
+"Ba	c #D0AAA1",
+"Ca	c #D2AFA4",
+"Da	c #CAA795",
+"Ea	c #B28F86",
+"Fa	c #9E8478",
+"Ga	c #9A8476",
+"Ha	c #9A8679",
+"Ia	c #907D76",
+"Ja	c #927F79",
+"Ka	c #948377",
+"La	c #67564D",
+"Ma	c #65534F",
+"Na	c #907E7D",
+"Oa	c #917F76",
+"Pa	c #8F8076",
+"Qa	c #908176",
+"Ra	c #8E7F74",
+"Sa	c #8B7C71",
+"Ta	c #7F7067",
+"Ua	c #82736C",
+"Va	c #796861",
+"Wa	c #4D3A34",
+"Xa	c #4A3430",
+"Ya	c #634B47",
+"Za	c #6B514D",
+"`a	c #846360",
+" b	c #987470",
+".b	c #9C7875",
+"+b	c #95716E",
+"@b	c #987370",
+"#b	c #9A7672",
+"$b	c #9A7673",
+"%b	c #9C7D7A",
+"&b	c #816562",
+"*b	c #6C5651",
+"=b	c #5E4944",
+"-b	c #4E3C37",
+";b	c #332C2E",
+">b	c #302A2D",
+",b	c #615A59",
+"'b	c #7D746F",
+")b	c #665C52",
+"!b	c #5F5445",
+"~b	c #7F7060",
+"{b	c #9D7F71",
+"]b	c #A68677",
+"^b	c #B09082",
+"/b	c #BD9D8F",
+"(b	c #C2A294",
+"_b	c #C9A99B",
+":b	c #CEAE9E",
+"<b	c #D1B39D",
+"[b	c #D0B49E",
+"}b	c #C8AD98",
+"|b	c #C0A793",
+"1b	c #846D5A",
+"2b	c #3C2617",
+"3b	c #261303",
+"4b	c #291705",
+"5b	c #34220F",
+"6b	c #382613",
+"7b	c #3C2A18",
+"8b	c #443320",
+"9b	c #665441",
+"0b	c #9B846F",
+"ab	c #C4A68E",
+"bb	c #D4B59E",
+"cb	c #CEAE98",
+"db	c #CBA793",
+"eb	c #BC9884",
+"fb	c #C5A08D",
+"gb	c #D1AD9E",
+"hb	c #D1AE9A",
+"ib	c #D2AF99",
+"jb	c #D2B09A",
+"kb	c #C9A699",
+"lb	c #9D8779",
+"mb	c #968479",
+"nb	c #8E7C73",
+"ob	c #95847D",
+"pb	c #82736B",
+"qb	c #504136",
+"rb	c #25160D",
+"sb	c #2D1D18",
+"tb	c #685756",
+"ub	c #847067",
+"vb	c #8F7C73",
+"wb	c #8E7D73",
+"xb	c #88766C",
+"yb	c #857369",
+"zb	c #887870",
+"Ab	c #92837C",
+"Bb	c #877770",
+"Cb	c #56433D",
+"Db	c #4D3732",
+"Eb	c #674F4B",
+"Fb	c #725955",
+"Gb	c #856660",
+"Hb	c #937169",
+"Ib	c #97756D",
+"Jb	c #94716A",
+"Kb	c #906E66",
+"Lb	c #95736B",
+"Mb	c #765856",
+"Nb	c #745855",
+"Ob	c #66504B",
+"Pb	c #55403B",
+"Qb	c #46342F",
+"Rb	c #4C4542",
+"Sb	c #7A7572",
+"Tb	c #958F8A",
+"Ub	c #857C74",
+"Vb	c #7A7064",
+"Wb	c #695D50",
+"Xb	c #766658",
+"Yb	c #95776B",
+"Zb	c #A28277",
+"`b	c #AD8D81",
+" c	c #B6968B",
+".c	c #BC9C90",
+"+c	c #C1A195",
+"@c	c #C4A696",
+"#c	c #C6AE96",
+"$c	c #C2AC95",
+"%c	c #AF9B88",
+"&c	c #6B5849",
+"*c	c #28160C",
+"=c	c #201009",
+"-c	c #23160E",
+";c	c #20170C",
+">c	c #241C10",
+",c	c #292015",
+"'c	c #372E23",
+")c	c #393125",
+"!c	c #30271C",
+"~c	c #322214",
+"{c	c #5A4230",
+"]c	c #9D8371",
+"^c	c #C8AC9A",
+"/c	c #C7A796",
+"(c	c #BF9B8A",
+"_c	c #C8A391",
+":c	c #D6B49B",
+"<c	c #D3B196",
+"[c	c #D4B297",
+"}c	c #D3B099",
+"|c	c #D1AE9C",
+"1c	c #C6AA9C",
+"2c	c #B49D8F",
+"3c	c #978477",
+"4c	c #958378",
+"5c	c #918379",
+"6c	c #2D231A",
+"7c	c #261D12",
+"8c	c #281E15",
+"9c	c #291E1A",
+"0c	c #2F2322",
+"ac	c #907D74",
+"bc	c #87746B",
+"cc	c #816D64",
+"dc	c #836F66",
+"ec	c #8B786F",
+"fc	c #93827A",
+"gc	c #968780",
+"hc	c #8C7B74",
+"ic	c #614E48",
+"jc	c #4F3934",
+"kc	c #785E5A",
+"lc	c #7B5E58",
+"mc	c #75554E",
+"nc	c #785851",
+"oc	c #74544D",
+"pc	c #705049",
+"qc	c #7C5C54",
+"rc	c #84645D",
+"sc	c #755855",
+"tc	c #674B48",
+"uc	c #5A443F",
+"vc	c #49342F",
+"wc	c #5E4B46",
+"xc	c #8E807B",
+"yc	c #AA9C97",
+"zc	c #A69690",
+"Ac	c #8E7C75",
+"Bc	c #88736B",
+"Cc	c #745E55",
+"Dc	c #72594F",
+"Ec	c #8D6D64",
+"Fc	c #B19087",
+"Gc	c #B7968D",
+"Hc	c #C1A097",
+"Ic	c #BEA195",
+"Jc	c #BCAB94",
+"Kc	c #AA9A87",
+"Lc	c #504133",
+"Mc	c #23160C",
+"Nc	c #211511",
+"Oc	c #201414",
+"Pc	c #1F1817",
+"Qc	c #1A1813",
+"Rc	c #171610",
+"Sc	c #1A1913",
+"Tc	c #1D1C16",
+"Uc	c #282722",
+"Vc	c #2B2A24",
+"Wc	c #372E2B",
+"Xc	c #32201E",
+"Yc	c #432E2B",
+"Zc	c #7A605D",
+"`c	c #C0A19C",
+" d	c #C29F99",
+".d	c #CBA59E",
+"+d	c #D7B59B",
+"@d	c #D6B498",
+"#d	c #D5B398",
+"$d	c #D3B198",
+"%d	c #D2B09C",
+"&d	c #C7AB9C",
+"*d	c #B79F92",
+"=d	c #9F8B7D",
+"-d	c #847569",
+";d	c #4C4136",
+">d	c #211A0F",
+",d	c #1C180D",
+"'d	c #252115",
+")d	c #241E16",
+"!d	c #261F1C",
+"~d	c #282120",
+"{d	c #917C73",
+"]d	c #8D766E",
+"^d	c #856F67",
+"/d	c #856E66",
+"(d	c #867068",
+"_d	c #99827A",
+":d	c #938179",
+"<d	c #907F78",
+"[d	c #56403C",
+"}d	c #5C4440",
+"|d	c #6C534F",
+"1d	c #614442",
+"2d	c #513130",
+"3d	c #543533",
+"4d	c #563635",
+"5d	c #533432",
+"6d	c #634342",
+"7d	c #806260",
+"8d	c #7C5E5C",
+"9d	c #6B504D",
+"0d	c #5C433F",
+"ad	c #4E3833",
+"bd	c #6F5A55",
+"cd	c #A28F89",
+"dd	c #B8A59D",
+"ed	c #9B857E",
+"fd	c #937A73",
+"gd	c #90756F",
+"hd	c #7D605A",
+"id	c #745650",
+"jd	c #84635C",
+"kd	c #96756E",
+"ld	c #A3827B",
+"md	c #B4938C",
+"nd	c #BE9D96",
+"od	c #BFA49B",
+"pd	c #A09487",
+"qd	c #493E32",
+"rd	c #1C130A",
+"sd	c #1F1712",
+"td	c #181210",
+"ud	c #191415",
+"vd	c #1B1919",
+"wd	c #171916",
+"xd	c #161814",
+"yd	c #181A16",
+"zd	c #1A1B18",
+"Ad	c #21231F",
+"Bd	c #212320",
+"Cd	c #2A262A",
+"Dd	c #322630",
+"Ed	c #34232C",
+"Fd	c #3D282F",
+"Gd	c #806368",
+"Hd	c #BA989B",
+"Id	c #C8A1A2",
+"Jd	c #D0AAA2",
+"Kd	c #D3B19A",
+"Ld	c #D5B399",
+"Md	c #D7B59C",
+"Nd	c #CCA999",
+"Od	c #C0A295",
+"Pd	c #AE9587",
+"Qd	c #958274",
+"Rd	c #514336",
+"Sd	c #191206",
+"Td	c #1C1B0E",
+"Ud	c #1D1F12",
+"Vd	c #1D1D11",
+"Wd	c #1E1C15",
+"Xd	c #1E1B19",
+"Yd	c #1E1B1C",
+"Zd	c #877269",
+"`d	c #886F68",
+" e	c #8A716A",
+".e	c #907C75",
+"+e	c #8B7C75",
+"@e	c #8B7B74",
+"#e	c #7F6C66",
+"$e	c #634E49",
+"%e	c #553D39",
+"&e	c #4D3430",
+"*e	c #442729",
+"=e	c #503236",
+"-e	c #5E4044",
+";e	c #5C3E42",
+">e	c #56373B",
+",e	c #5D3E43",
+"'e	c #694B4F",
+")e	c #7C5E5E",
+"!e	c #785B58",
+"~e	c #684C49",
+"{e	c #543C38",
+"]e	c #7F6964",
+"^e	c #C0ADA6",
+"/e	c #C2B3A5",
+"(e	c #A8998A",
+"_e	c #9A887C",
+":e	c #927E74",
+"<e	c #8F7870",
+"[e	c #816861",
+"}e	c #735752",
+"|e	c #7C5B56",
+"1e	c #8B6A65",
+"2e	c #94736E",
+"3e	c #9B7A75",
+"4e	c #A88782",
+"5e	c #B5948F",
+"6e	c #947975",
+"7e	c #312724",
+"8e	c #1C1613",
+"9e	c #1B1714",
+"0e	c #1B1A16",
+"ae	c #181816",
+"be	c #171715",
+"ce	c #181A17",
+"de	c #161815",
+"ee	c #1A1C19",
+"fe	c #232326",
+"ge	c #2D2731",
+"he	c #2E232C",
+"ie	c #332127",
+"je	c #402628",
+"ke	c #755554",
+"le	c #B38E8B",
+"me	c #CFA9A2",
+"ne	c #CEAA9E",
+"oe	c #D0AC9B",
+"pe	c #D2AF9B",
+"qe	c #CBA79C",
+"re	c #B89A8F",
+"se	c #9B8275",
+"te	c #5B483B",
+"ue	c #1F1307",
+"ve	c #1D1A0C",
+"we	c #181B0D",
+"xe	c #181E10",
+"ye	c #191C11",
+"ze	c #1A1B15",
+"Ae	c #1A1A19",
+"Be	c #1B1B1D",
+"Ce	c #806C63",
+"De	c #847066",
+"Ee	c #816E62",
+"Fe	c #857166",
+"Ge	c #877368",
+"He	c #867367",
+"Ie	c #8A766B",
+"Je	c #877468",
+"Ke	c #8C7871",
+"Le	c #89756E",
+"Me	c #87726B",
+"Ne	c #7E6A61",
+"Oe	c #836E64",
+"Pe	c #917A70",
+"Qe	c #988177",
+"Re	c #907871",
+"Se	c #917972",
+"Te	c #907972",
+"Ue	c #8F7A73",
+"Ve	c #8D7C74",
+"We	c #917F78",
+"Xe	c #8B7871",
+"Ye	c #523B37",
+"Ze	c #503835",
+"`e	c #553A3E",
+" f	c #5C3F46",
+".f	c #5B3E44",
+"+f	c #573B40",
+"@f	c #5E4145",
+"#f	c #715458",
+"$f	c #725559",
+"%f	c #6E5356",
+"&f	c #664B4D",
+"*f	c #543C3B",
+"=f	c #745D5A",
+"-f	c #B9A49F",
+";f	c #C5B2AA",
+">f	c #CDBBB2",
+",f	c #BEB0A3",
+"'f	c #9E9082",
+")f	c #98887D",
+"!f	c #93837A",
+"~f	c #8D7A74",
+"{f	c #826E6A",
+"]f	c #6F5754",
+"^f	c #775A54",
+"/f	c #7F635C",
+"(f	c #836760",
+"_f	c #8A6E69",
+":f	c #A08580",
+"<f	c #927772",
+"[f	c #3A2523",
+"}f	c #181214",
+"|f	c #161214",
+"1f	c #171515",
+"2f	c #191917",
+"3f	c #1C1E1A",
+"4f	c #151714",
+"5f	c #171917",
+"6f	c #191B18",
+"7f	c #181917",
+"8f	c #161816",
+"9f	c #171816",
+"0f	c #212123",
+"af	c #242327",
+"bf	c #2E282B",
+"cf	c #302426",
+"df	c #372423",
+"ef	c #3A211E",
+"ff	c #664A46",
+"gf	c #B99995",
+"hf	c #CBA9A0",
+"if	c #CDAA9B",
+"jf	c #CEAB97",
+"kf	c #CBA795",
+"lf	c #C5A295",
+"mf	c #B6958E",
+"nf	c #A1827B",
+"of	c #70554D",
+"pf	c #2E1910",
+"qf	c #20130A",
+"rf	c #201E14",
+"sf	c #171C11",
+"tf	c #151E13",
+"uf	c #181D15",
+"vf	c #1A1C17",
+"wf	c #1A1B1A",
+"xf	c #826E63",
+"yf	c #826F61",
+"zf	c #877465",
+"Af	c #877466",
+"Bf	c #857264",
+"Cf	c #887371",
+"Df	c #826D68",
+"Ef	c #7E6A63",
+"Ff	c #867267",
+"Gf	c #8E7A6D",
+"Hf	c #938072",
+"If	c #8F7B6F",
+"Jf	c #8D7872",
+"Kf	c #8E7974",
+"Lf	c #8F7B73",
+"Mf	c #8D796F",
+"Nf	c #927E77",
+"Of	c #7C6762",
+"Pf	c #533E3C",
+"Qf	c #594342",
+"Rf	c #5D4447",
+"Sf	c #63484D",
+"Tf	c #6D5356",
+"Uf	c #725859",
+"Vf	c #7C6260",
+"Wf	c #79605C",
+"Xf	c #654C48",
+"Yf	c #5E494F",
+"Zf	c #513D46",
+"`f	c #544145",
+" g	c #B19E9E",
+".g	c #C7B5AE",
+"+g	c #CFBFB2",
+"@g	c #CDBDAD",
+"#g	c #BAA69F",
+"$g	c #A6928D",
+"%g	c #9D8985",
+"&g	c #968180",
+"*g	c #8D7779",
+"=g	c #856F72",
+"-g	c #695355",
+";g	c #675248",
+">g	c #746056",
+",g	c #746259",
+"'g	c #76665F",
+")g	c #80726C",
+"!g	c #40332E",
+"~g	c #1A110E",
+"{g	c #151413",
+"]g	c #1A1A1A",
+"^g	c #191919",
+"/g	c #1B1B1B",
+"(g	c #1C1C1C",
+"_g	c #1C1D1C",
+":g	c #202221",
+"<g	c #2A2929",
+"[g	c #2E2B2C",
+"}g	c #312B2D",
+"|g	c #32292B",
+"1g	c #302528",
+"2g	c #6F5B5B",
+"3g	c #B99D97",
+"4g	c #C7A898",
+"5g	c #CEAD96",
+"6g	c #C2A28C",
+"7g	c #AB8D80",
+"8g	c #9E837F",
+"9g	c #765B5A",
+"0g	c #321918",
+"ag	c #1D0908",
+"bg	c #1E1311",
+"cg	c #1C1A17",
+"dg	c #171D19",
+"eg	c #141E1B",
+"fg	c #1A1C1B",
+"gg	c #7D6960",
+"hg	c #877369",
+"ig	c #836F65",
+"jg	c #87736C",
+"kg	c #816C6A",
+"lg	c #7A6560",
+"mg	c #836F68",
+"ng	c #8F7B70",
+"og	c #907C6F",
+"pg	c #8E7B6C",
+"qg	c #8C796B",
+"rg	c #8B776B",
+"sg	c #8D796E",
+"tg	c #8A7571",
+"ug	c #5F4A47",
+"vg	c #594443",
+"wg	c #675052",
+"xg	c #785E63",
+"yg	c #7F6668",
+"zg	c #846B6B",
+"Ag	c #89706E",
+"Bg	c #715854",
+"Cg	c #4B363A",
+"Dg	c #433036",
+"Eg	c #9B888B",
+"Fg	c #D0BEBB",
+"Gg	c #CEBDB5",
+"Hg	c #D9C9BD",
+"Ig	c #C5B5A6",
+"Jg	c #B9A69D",
+"Kg	c #907B7B",
+"Lg	c #867072",
+"Mg	c #6F5A5A",
+"Ng	c #614E45",
+"Og	c #6A584E",
+"Pg	c #705F57",
+"Qg	c #71635C",
+"Rg	c #483B36",
+"Sg	c #1E1714",
+"Tg	c #181817",
+"Ug	c #181818",
+"Vg	c #1E1E1E",
+"Wg	c #1F1F1F",
+"Xg	c #202020",
+"Yg	c #232222",
+"Zg	c #232323",
+"`g	c #252525",
+" h	c #2A2B2B",
+".h	c #2C2D2D",
+"+h	c #282929",
+"@h	c #2E2522",
+"#h	c #7E6B64",
+"$h	c #907863",
+"%h	c #8C7460",
+"&h	c #8E796D",
+"*h	c #74635D",
+"=h	c #1D130E",
+"-h	c #241C18",
+";h	c #201D1A",
+">h	c #1C1C1A",
+",h	c #161C1A",
+"'h	c #141B1A",
+")h	c #171918",
+"!h	c #7C685F",
+"~h	c #7F6B63",
+"{h	c #85716B",
+"]h	c #87726C",
+"^h	c #846F69",
+"/h	c #836E69",
+"(h	c #836E68",
+"_h	c #7A6564",
+":h	c #7D6866",
+"<h	c #85706B",
+"[h	c #8B776C",
+"}h	c #867365",
+"|h	c #887468",
+"1h	c #907B77",
+"2h	c #6F5A58",
+"3h	c #5E4948",
+"4h	c #6A5456",
+"5h	c #735C5F",
+"6h	c #695254",
+"7h	c #6D5856",
+"8h	c #705A56",
+"9h	c #6A544F",
+"0h	c #5A4540",
+"ah	c #544141",
+"bh	c #7C6A6B",
+"ch	c #CBB9B7",
+"dh	c #CBBAB5",
+"eh	c #D6C5BC",
+"fh	c #C9B9AD",
+"gh	c #BEAEA0",
+"hh	c #947F7B",
+"ih	c #907B7A",
+"jh	c #887272",
+"kh	c #7B6666",
+"lh	c #6D5A53",
+"mh	c #615048",
+"nh	c #6A5C55",
+"oh	c #4E413C",
+"ph	c #211613",
+"qh	c #1D1310",
+"rh	c #1F1917",
+"sh	c #1C1B1B",
+"th	c #1D1D1D",
+"uh	c #222121",
+"vh	c #242223",
+"wh	c #1F2221",
+"xh	c #1B2220",
+"yh	c #1D2623",
+"zh	c #26312D",
+"Ah	c #252721",
+"Bh	c #3D342B",
+"Ch	c #473A2C",
+"Dh	c #352614",
+"Eh	c #382A19",
+"Fh	c #3F3327",
+"Gh	c #3D362F",
+"Hh	c #2C2C25",
+"Ih	c #21251E",
+"Jh	c #21241F",
+"Kh	c #202423",
+"Lh	c #1C2022",
+"Mh	c #191D1F",
+"Nh	c #191B1B",
+"Oh	c #7A665D",
+"Ph	c #816C67",
+"Qh	c #846F6A",
+"Rh	c #87726D",
+"Sh	c #7E6964",
+"Th	c #78635F",
+"Uh	c #7F6A69",
+"Vh	c #8B7674",
+"Wh	c #8E7973",
+"Xh	c #887469",
+"Yh	c #8A7769",
+"Zh	c #887566",
+"`h	c #897569",
+" i	c #8D7873",
+".i	c #907C74",
+"+i	c #907C71",
+"@i	c #917D73",
+"#i	c #917D76",
+"$i	c #917C78",
+"%i	c #836E6B",
+"&i	c #644F4E",
+"*i	c #533E3F",
+"=i	c #493436",
+"-i	c #493536",
+";i	c #513D3B",
+">i	c #56423E",
+",i	c #5C4943",
+"'i	c #58443E",
+")i	c #74625D",
+"!i	c #BDACA7",
+"~i	c #D2C1BA",
+"{i	c #D0BFB7",
+"]i	c #C0AFA4",
+"^i	c #BDADA1",
+"/i	c #B5A295",
+"(i	c #8D7875",
+"_i	c #897471",
+":i	c #6F5F58",
+"<i	c #655750",
+"[i	c #5B4F4A",
+"}i	c #291E1B",
+"|i	c #1F1614",
+"1i	c #211917",
+"2i	c #201B1A",
+"3i	c #1C1B1C",
+"4i	c #1D1B1C",
+"5i	c #1D1C1C",
+"6i	c #1D201F",
+"7i	c #1A221F",
+"8i	c #16211D",
+"9i	c #14211D",
+"0i	c #181F18",
+"ai	c #28281F",
+"bi	c #2C271C",
+"ci	c #2F261A",
+"di	c #2D2519",
+"ei	c #2E2B20",
+"fi	c #2C2E26",
+"gi	c #222B23",
+"hi	c #232E26",
+"ii	c #212A25",
+"ji	c #202725",
+"ki	c #2A2F30",
+"li	c #212427",
+"mi	c #1C1D22",
+"ni	c #1D1D1E",
+"oi	c #79655C",
+"pi	c #806C64",
+"qi	c #78645C",
+"ri	c #8C7776",
+"si	c #907B79",
+"ti	c #8E7975",
+"ui	c #8B7770",
+"vi	c #887567",
+"wi	c #8B7771",
+"xi	c #89746F",
+"yi	c #8E7A72",
+"zi	c #8F7B74",
+"Ai	c #8E7977",
+"Bi	c #695453",
+"Ci	c #4A3637",
+"Di	c #422F31",
+"Ei	c #423030",
+"Fi	c #443330",
+"Gi	c #483731",
+"Hi	c #4C3B34",
+"Ii	c #4E3E36",
+"Ji	c #97877D",
+"Ki	c #C7B6AC",
+"Li	c #C4B3A9",
+"Mi	c #C4B4A9",
+"Ni	c #BFAEA4",
+"Oi	c #B8A79D",
+"Pi	c #A89588",
+"Qi	c #97837B",
+"Ri	c #8E7A74",
+"Si	c #8A7570",
+"Ti	c #7B6763",
+"Ui	c #776863",
+"Vi	c #796C67",
+"Wi	c #4C423F",
+"Xi	c #19100E",
+"Yi	c #1A1313",
+"Zi	c #1D1718",
+"`i	c #1B1819",
+" j	c #191818",
+".j	c #212221",
+"+j	c #212322",
+"@j	c #1E211F",
+"#j	c #191E1C",
+"$j	c #171B16",
+"%j	c #23251E",
+"&j	c #2B2822",
+"*j	c #302823",
+"=j	c #2B251F",
+"-j	c #2C2B25",
+";j	c #2E312A",
+">j	c #232A25",
+",j	c #262D29",
+"'j	c #252C2A",
+")j	c #1F2425",
+"!j	c #23262A",
+"~j	c #23242B",
+"{j	c #1A1B22",
+"]j	c #1C1C1E",
+"^j	c #7B675E",
+"/j	c #806C62",
+"(j	c #7E6B5D",
+"_j	c #7C695B",
+":j	c #7A6759",
+"<j	c #796658",
+"[j	c #806C5F",
+"}j	c #897472",
+"|j	c #877270",
+"1j	c #85706C",
+"2j	c #87736D",
+"3j	c #8B776D",
+"4j	c #877467",
+"5j	c #88736E",
+"6j	c #8E7A6F",
+"7j	c #8F7A76",
+"8j	c #745F5E",
+"9j	c #513E3F",
+"0j	c #49393A",
+"aj	c #453535",
+"bj	c #433431",
+"cj	c #41322C",
+"dj	c #40312A",
+"ej	c #4D3F36",
+"fj	c #BAAA9C",
+"gj	c #B5A598",
+"hj	c #B5A498",
+"ij	c #B9A89E",
+"jj	c #BEADA3",
+"kj	c #B6A59C",
+"lj	c #B29F90",
+"mj	c #9A877A",
+"nj	c #7B6862",
+"oj	c #6E615C",
+"pj	c #685D5A",
+"qj	c #2D2320",
+"rj	c #140D0B",
+"sj	c #1A1414",
+"tj	c #1D191A",
+"uj	c #1B181B",
+"vj	c #1B1C1B",
+"wj	c #1E1F1F",
+"xj	c #262425",
+"yj	c #272023",
+"zj	c #251D20",
+"Aj	c #22241E",
+"Bj	c #2E2526",
+"Cj	c #2A2423",
+"Dj	c #24231F",
+"Ej	c #232520",
+"Fj	c #20221F",
+"Gj	c #262727",
+"Hj	c #27282B",
+"Ij	c #222229",
+"Jj	c #24242C",
+"Kj	c #1A1A23",
+"Lj	c #7B6861",
+"Mj	c #79665E",
+"Nj	c #7A6860",
+"Oj	c #7C6961",
+"Pj	c #7D6B63",
+"Qj	c #766358",
+"Rj	c #776459",
+"Sj	c #7C695E",
+"Tj	c #806D62",
+"Uj	c #89756A",
+"Vj	c #867368",
+"Wj	c #86716E",
+"Xj	c #86716D",
+"Yj	c #8A766F",
+"Zj	c #8A766E",
+"`j	c #89756B",
+" k	c #8C796C",
+".k	c #8A776A",
+"+k	c #8A766C",
+"@k	c #8C7870",
+"#k	c #8C7770",
+"$k	c #7E6968",
+"%k	c #513F3F",
+"&k	c #4B3A3A",
+"*k	c #443332",
+"=k	c #3E2E2B",
+"-k	c #3B2A26",
+";k	c #4D3D38",
+">k	c #5B4B45",
+",k	c #AD9B8F",
+"'k	c #A49288",
+")k	c #A08D84",
+"!k	c #98857D",
+"~k	c #B3A19A",
+"{k	c #B9A79F",
+"]k	c #B3A095",
+"^k	c #A49287",
+"/k	c #9B887F",
+"(k	c #958279",
+"_k	c #8F7C75",
+":k	c #8A7770",
+"<k	c #7E6B66",
+"[k	c #685E5A",
+"}k	c #48413E",
+"|k	c #1C1615",
+"1k	c #171413",
+"2k	c #191719",
+"3k	c #1B1A1D",
+"4k	c #1A1B1D",
+"5k	c #2A2828",
+"6k	c #2A2527",
+"7k	c #282224",
+"8k	c #261E20",
+"9k	c #1C1919",
+"0k	c #21211F",
+"ak	c #232221",
+"bk	c #1C1819",
+"ck	c #181716",
+"dk	c #1C1D1A",
+"ek	c #1E1D1D",
+"fk	c #222020",
+"gk	c #242325",
+"hk	c #201F22",
+"ik	c #252529",
+"jk	c #1B1C21",
+"kk	c #1D1D1F",
+"lk	c #77665F",
+"mk	c #75645D",
+"nk	c #76655E",
+"ok	c #77655F",
+"pk	c #79645F",
+"qk	c #86716C",
+"rk	c #88746C",
+"sk	c #8A7671",
+"tk	c #8A756F",
+"uk	c #8C7775",
+"vk	c #6C5857",
+"wk	c #483634",
+"xk	c #443230",
+"yk	c #42302E",
+"zk	c #4B3937",
+"Ak	c #584644",
+"Bk	c #5D4B48",
+"Ck	c #74605C",
+"Dk	c #8C7772",
+"Ek	c #AD9893",
+"Fk	c #B09E98",
+"Gk	c #A08F88",
+"Hk	c #998881",
+"Ik	c #93827B",
+"Jk	c #8D7C75",
+"Kk	c #87766F",
+"Lk	c #80716B",
+"Mk	c #655F5B",
+"Nk	c #262321",
+"Ok	c #181715",
+"Pk	c #141515",
+"Qk	c #161719",
+"Rk	c #16191C",
+"Sk	c #171B1E",
+"Tk	c #222222",
+"Uk	c #212121",
+"Vk	c #151515",
+"Wk	c #121212",
+"Xk	c #141414",
+"Yk	c #161616",
+"Zk	c #74635C",
+"`k	c #716059",
+" l	c #6E5D56",
+".l	c #705F58",
+"+l	c #806B66",
+"@l	c #7F6A65",
+"#l	c #86726B",
+"$l	c #897570",
+"%l	c #88736F",
+"&l	c #89756D",
+"*l	c #8D796D",
+"=l	c #8E7A6E",
+"-l	c #8E7972",
+";l	c #8D7976",
+">l	c #8D7A77",
+",l	c #6A5854",
+"'l	c #483632",
+")l	c #3F2D2A",
+"!l	c #4A3835",
+"~l	c #53413E",
+"{l	c #594744",
+"]l	c #5D4A44",
+"^l	c #6F5C56",
+"/l	c #7C6862",
+"(l	c #806D67",
+"_l	c #84706A",
+":l	c #86736D",
+"<l	c #98857F",
+"[l	c #A5948D",
+"}l	c #96857E",
+"|l	c #918079",
+"1l	c #80726B",
+"2l	c #58514D",
+"3l	c #15120F",
+"4l	c #151616",
+"5l	c #262626",
+"6l	c #0F0F0F",
+"7l	c #111111",
+"8l	c #131313",
+"9l	c #72615A",
+"0l	c #6F5E57",
+"al	c #796760",
+"bl	c #7B6661",
+"cl	c #836F69",
+"dl	c #8A7670",
+"el	c #8F7C6D",
+"fl	c #8D7A6C",
+"gl	c #8D7A75",
+"hl	c #73625C",
+"il	c #4C3B35",
+"jl	c #4D3B35",
+"kl	c #53423B",
+"ll	c #5A4943",
+"ml	c #56453E",
+"nl	c #594740",
+"ol	c #705E57",
+"pl	c #7D6C65",
+"ql	c #806E68",
+"rl	c #7C6B64",
+"sl	c #7F6E67",
+"tl	c #887770",
+"ul	c #9B8A83",
+"vl	c #8F7E77",
+"wl	c #7F706A",
+"xl	c #413A36",
+"yl	c #161310",
+"zl	c #131311",
+"Al	c #141415",
+"Bl	c #242424",
+"Cl	c #272727",
+"Dl	c #7B6A63",
+"El	c #87736B",
+"Fl	c #887568",
+"Gl	c #8B7868",
+"Hl	c #867363",
+"Il	c #857266",
+"Jl	c #897870",
+"Kl	c #8C7B73",
+"Ll	c #73625A",
+"Ml	c #57463D",
+"Nl	c #493830",
+"Ol	c #503F37",
+"Pl	c #4F4039",
+"Ql	c #4B3C35",
+"Rl	c #52433C",
+"Sl	c #6D5F57",
+"Tl	c #75665F",
+"Ul	c #776861",
+"Vl	c #786A62",
+"Wl	c #786760",
+"Xl	c #806F68",
+"Yl	c #8A7972",
+"Zl	c #92817A",
+"`l	c #897871",
+" m	c #83746E",
+".m	c #27201C",
+"+m	c #12110F",
+"@m	c #19191A",
+"#m	c #191A1C",
+"$m	c #181C1F",
+"%m	c #191D20",
+"&m	c #6D5C55",
+"*m	c #7A6962",
+"=m	c #877469",
+"-m	c #8B7965",
+";m	c #877562",
+">m	c #8A786F",
+",m	c #89796E",
+"'m	c #837368",
+")m	c #8F7E73",
+"!m	c #77675C",
+"~m	c #4E3D32",
+"{m	c #47372C",
+"]m	c #4C3E36",
+"^m	c #453931",
+"/m	c #42362D",
+"(m	c #483C34",
+"_m	c #5C5048",
+":m	c #70645C",
+"<m	c #796C64",
+"[m	c #86756E",
+"}m	c #74655E",
+"|m	c #1F1814",
+"1m	c #14110E",
+"2m	c #151618",
+"3m	c #15181B",
+"4m	c #161A1D",
+"5m	c #78665F",
+"6m	c #847069",
+"7m	c #887565",
+"8m	c #8A7864",
+"9m	c #8C7969",
+"0m	c #88776B",
+"am	c #89796C",
+"bm	c #857568",
+"cm	c #8B7B6E",
+"dm	c #88786B",
+"em	c #746457",
+"fm	c #4F3F33",
+"gm	c #392D24",
+"hm	c #382E25",
+"im	c #362C23",
+"jm	c #3C3229",
+"km	c #564C43",
+"lm	c #72625B",
+"mm	c #6A5B55",
+"nm	c #16100C",
+"om	c #110E0B",
+"pm	c #14181B",
+"qm	c #16191D",
+"rm	c #2A2A2A",
+"sm	c #292929",
+"tm	c #8F8F8F",
+"um	c #AFAFAF",
+"vm	c #737373",
+"wm	c #878787",
+"xm	c #919191",
+"ym	c #565656",
+"zm	c #A5A5A5",
+"Am	c #606060",
+"Bm	c #7D7D7D",
+"Cm	c #696969",
+"Dm	c #434343",
+"Em	c #303030",
+"Fm	c #616161",
+"Gm	c #3A3A3A",
+"Hm	c #393939",
+"Im	c #000000",
+"Jm	c #464646",
+"Km	c #747474",
+"Lm	c #888888",
+"Mm	c #535353",
+"Nm	c #4C4C4C",
+"Om	c #717171",
+"Pm	c #404040",
+"Qm	c #4E4E4E",
+". + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ",
+". . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @ ",
+". . # $ % & * = - ; > , ' ' ' > ) > ; ' = ! ~ { ] ^ / ( _ : < [ } | 1 2 3 4 5 6 7 8 6 9 6 0 a 5 b c d 6 e 7 e 6 f g h h i j k l 0 0 m n o p q r s t u v w x y y ' > ' z A B C D E F G H I J I I K L M N O P @ @ ",
+". . Q # $ R , ; ' = * > ' = = ' , = ; ! ! - S T U V W X Y Z `  .f ` 8 ..+.+. at .@.#.$.9 4 c c 4 6 0 6 7 9 %.d d d c &.*.*.i h =.-.;.b c >.,.b '.).!.~.u {.].^.! z ' = /.' (._.:.<.[.}.|.1.2.3.J 4.J 5.6.7.8.8.@ @ ",
+". . 9.& ) > , > ' ) R R * > > > , , , - ; ' 0.a.b.c.d.e.f.g.h.i.j.k.l.m.n.o.p.q.q.%.4 d d d 4 d b 4 6 d d %.9 %.r.=.s.s.&.t.&.-.c c d 4 ,.u.v.w.x.y.z.A.B.C.D.E.> > = > F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.U.V.V.@ @ ",
+". . Q ' ' * ) & * ' * ) , ' > ) * * > ; - = W.X.Y.Z.`. +.+++ at +#+$+%+&+*+=+7 8 7 e 4 4 d 4 c c 5 0 b 6 %.9 8 8 9 -+&.;+s.s.>+j ,+6 c 4 c 4 6 '+)+!+~+{+]+^+/+D.(+_+E.:+' <+[+}+|+1+2+K.3+4+5+6+2+2+7+8+9+L.L @ @ ",
+". . & % Q > ) & > > & * = = = > > ' = ' - ' 0+a+b+c+d+e+f+g+h+i+j+k+l+m+n+9 e %.e %.8 %.4 5 c c 5 6 d 6 e %.e 7 6 o+s.&.o+>+>+p+q+%.6 d >.b r+s+t+u+v+w+x+y+! /.' :+/.' [+9+z+A+J B+C+D+E+F+G+H+I+J+K+L+M+N+@ @ ",
+". . 9.& 9.' $ O+Q % * & ) > = ' , ' ; ; ' = P+Q+R+S+T+U+g V+W+X+Y+Z+`+ @. at c 6 e %.6 7 7 9 %.e 7 9 %.c 5 4 c 4 6 b *.>+>+o+>+>++@@@f 7 %.4 %.#@$@%@&@*@=@-@;@>@E.z , z ! ,@'@)@!@~@<+{@]@^@/@(@_@:@<@y ' y y @ @ ",
+". . * * O+R R R R Q Q $ & * > [@}@|@1@; 2 at 3@4 at 5@6 at 7@8 at 9@0 at a@b at c@d at e@f at g@h at i@j at k@l at m@n at d 4 c 4 8 q.f i at o@p at q@r at s@t at u@v at +@+ at w@w at x@8 q.7 d 5 6 y at z@A at B@C at D@E at F@G at H@3+w I at J@K at L@M at N@O at P@Q at R@S at A ^@T at U@V at W@, , X@@ @ ",
+". . O+O+O+% % $ % R # % # Y at R Z@`@ #.#+#@###$#%#&#*#=#-#;#X+>#,#'#)#!#~#{#]#^#/#/#(#_#:#4 4 5 4 7 <#[#}#|#}#1#}#2#o at 3#4#7 %.d d f @.f 9 d e  .5#6#7#8#9#0#a#b#c#d#e#f#g#h#i#4+I at 6+/.z z I+G+j#W at 9.k#l#m#n#n#@ @ ",
+". . $ $ $ # $ # & ) R o#p#q#) r#s#t#u#v#w#x#y#z#A#B#C#D#E#F#>+>+o+j &.p+G#H#^#I#J#_#K#:#5 5 b a 0 L#M#N#N#O#P#Q#R#S#9 9 e 6 d 4 %.7 e 6 5 5 T#U#V#W#X#Y#Z#`# $.$+$~@@$#$$$y y z /.- - z y ! %$y = y &$n#*$=$@ @ ",
+". . # # # % # # & * R -$;$>$,$'$)$!$~${$]$^$/$($_$:$<$[$}$|$j =.o+j &.o+1$n at k@n at 2$:#l at 6 6 6 d b a 3$4$5$6$7$8$9$0$n at 9 %.9 7 e %.d d d e e 6 a$b$c$d$e$f$g$h$i$j$k$l$m$n$o$- = ; z %$; y ; y /./.- p$q$*$r$s$@ @ ",
+". . Y at Y@t$$ Q $ Y at u$u$v$Y at w$x$y$z$A$B$C$D$E$F$G$H$I$J$K$L$M$t.i ;+=.s.N$O$u.P$T#Q$R$P$4 %.7 8 d 4 %.S$J#T$U$U$T$V$6 %.%.f 9 6 %.e %.%.9 $.7 W$X$Y$Z$e$`$ %.%+%.$@%#%$%%%&%; - , /.%$/.- - ! - y ' = *%=%-%;%@ @ ",
+". . $ O+>%,%$ R ,$,$$ $ $ ;$u$'%)%!%~%{%]%^%/%(%_%:%<%[%}%[$h s.|%1%2%3%4%5%6%7%8%9%0%b 5 6 %.%.4 a%b%c%d%e%f%g%h%d 4 d $.9 5 b 5 6 7 6 8 7 i%T+f at j%k%l%m%n%o%p%q%r%s%t%u%z %$v%= ' /.= - y ! ! 9.w%x%y%-%=%@ @ ",
+". . u$O+v$>%>%Y at O+# 9.9.R R # z%A%B%C%D%E%F%G%H%I%J%K%L%M%N%O%o+2%k k P%Q%R%S%T%U%V%W%X%Y%0 c d d Z%`% &.&+&@&#&$@$&u.,.4 4 b >.>.b %.9 9 $.%&&&*&=&-&;&>&,&'&)&!&~&{&]&^&' - D./.> - ; , ' ; ! = /&y%;%(&_&@ @ ",
+". . x$t$v$Y at Y@u$$ R R % # R Q R & :&<&[&}&|&1&2&3&4&5&6&7&8&9&0&a&b&c&d&e&f&g&h&i&j&k&l&m&n&o&p&q&c r&s&t&u&v&v&w&x&y&m&z&A&B&C&D&E&F&G&H&G&I&J&K&L&L&M&N&O&P&Q&R&T.S&T&U&G+V&W&W&V&W at X&y ; = /.* ) x%Y&Z&`&@ @ ",
+". . Y at Y@Y at Y@Y at O+$ $ $ u$# Q )  *.*+*@*#*$*#.%*&***=*-*;*>*,*'*)*!*~*u.{*]*^*/*(*_*:*<*[*}*|*1*2*3*n&5%4*5*6*7*8*9*0*a*a*b*c*d*e*f*g*h*!*i*j*k*l*m*n*o*p*q*r*s*t*u*v*w*x*P@:@T at y*A z*A*B*= ; Q z ! Y@,%v$) - @ @ ",
+". . C*C*C*D*D*E*F*z%G*G*H*I*I*J*K*L*M*N*O*P*Q*R*S*T*U*V*W*X*Y*Z*`* =.=+=@=#=$=%=&=*===-=;=>=,='=)=]*!=^*~={=]=^=/=(=_=:=<=[=}=|=1=2=3=4=5=6=7=8=9=6 0=a=a=b=c=d=e=f=g=d#h=i=j=y*k=l=m=, = ; # Y at O+,$O+%$z z @ @ ",
+". . n=n=n=o=p=q=q=r=s=t=u=v=w=x=y=z=A=B=C=D=E=F=G=H=I=J=K=L=M=N=O=P=Q=R=S=T=U=V=W=X=Y=Z=`= -.-'&+- at -#-$-%-&-*-=---;->-_=:=,-}='-2=3=5=5=2=!*)-!-~-{-]-^-/-(-_-:-<-[-}-|-1-2-3-4-! H+4-) 9.* >%5-$ , = /./.= @ @ ",
+". . 6-6-7-8-9-8-0-a-a-a-b-b-b-c-d-e-f-g-h-i-j-k-l-m-n-o-p-q-r-s-t-u-v-w-x-y-z-A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-a*U-a*V-W-X-f*Y-5=4=!*Z-`- ;.;+;@;#;$;%;&;*;=;-;;;>;,;';A%);|+!;);$ -$,%* %$%$! ; , * @ @ ",
+". . #%~;{;];~;~;^;/;/;^;L@(;_;:;<;[;};|;1;2;3;4;5;6;7;8;9;0;a;b;c;d;e;f;g;h;i;j;k;l;m;n;o;p;q;r;s;t;u;v;w;x;y;z;A;B;a*T-a*a*,-C;3=4=D;V%f*2=E;F;G;H;I;J;K;L;M;N;O;P;Q;R;S;T;U;V;T;M.W;X;Y;% 9.* y = * & R % @ @ ",
+". . Z;`; >.>+>.>@>#>$>%>&>*>=>->;>>>,>'>)>!>~>{>]>^>/>(>_>:><>[>}>|>1>2>3>4>5>6>7>8>9>0>a>b>c>d>e>f>g>h>i>j>k>l>m>>-a*n>V-_=n>o>p>3=V%W%i*0#q>r>s>t>u>v>w>x>y>z>A>B>C>D>E>F>G>H>9-8-I>J>- ! - * * * Q R % % @ @ ",
+". . K>`;.>L>L>&>#>M>M>M>N>L>M>O>P>Q>R>S>T>U>V>W>X>Y>Z>`> ,.,+,@,#,$,%,&,*,=,-,;,>,,,',),!,~,{,],^,/,(,_,:,<,[,},|,1,2,3,4,5,_=6,7,8,8,9,0,a,b,c,d,e,f,g,h,i,j,&;k,l,m,n,o,p,q,r,s,t,u,v,, ! , R O+Q ) > 9.) @ @ ",
+". . `; >.>&>L>&>M>w,M>N>M>w,%>^;c-b-u,9-I>x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,U,V,U,U,W,X,Y,Z,`, '.'+'@'#'$'%'&'n>*'U=='-';'>',''')'!'~'{']'^'/'('_':'<'['}'|'1'2'3'4'5'6'7', - , $ % & & , ) 9.@ @ ",
+". . 8'9'0'0'a'9'b'c'd'e'd'f'g'h'G>a-H>H>8-i'j'k'l'm'C,n'o'p'q'r's't';=u'v'w'x'y'z'A'B'C'D'E'F'E'G'H'I'J'K'L'M'N'O'P'Q'R'S'T'U'V'W'X'Y'Z'`'Y' ).)+)@)#)$)%)&)*)=)-);)>),)')))!)~){)])2.}.% # R Q R & % % ) 9.@ @ ",
+". . ^)6-/)()_):)7-<)u,[)})u,8-|)1)|)8-[)u,2)3)4)5)6)C,7)8)9)0)a)b)c)d)e)f)g)h)i)j)k)l)m)n)o)p)q)r)s)t)u)v)w)x)y)z)A)B)C)D)E)9*F)G)H)I)J)K)L)M)N)O)P)Q)R)S)T)U)V)W)X)Y)Z)%;`) !.!+!@!#!$!Y@# R 9.Q & Q $ > 9.@ @ ",
+". . %!&!s=o=*!&!p==!-!;!>!,!,!t=c-u,a-u,|)'!)!4)!!~!C,7){!]!^!/!/!(!_!:!<![!}!|!o;1!2!3!4!5!6!7!6!4!8!9!0!a!b!c!d!e!f!$,g!h!i!j!k!l!m!n!o!p!q!r!s!t!u!v!w!x!y!z!A!B!C!D!E!F!G!H!I!J!K!L!% % $ # R & ) O+9.) @ @ ",
+". . M!N!O!O!N!C*P!E*Q!$!R!G*G*S!a-H>[)H>[)T!U!V!W!X!Y!Z!`! ~.~+~@~#~#~$~%~&~*~=~-~;~>~,~'~)~!~)~!~~~{~]~^~/~(~_~:~<~[~}~|~1~2~3~4~5~6~7~8~9~0~a~b~c~d~e~f~g~U)h~i~j~k~l~m~n~o~p~q~r~s~t~R R $ R * R ) R ) ) @ @ ",
+". . ,%>%,$,$O+Y@$ Y at O+$ R # # u~;!9-[)8-H>v~w~x~y~X!z~A~E,B~C~D~E~F~G~H~I~J~K~L~M~N~O~P~Q~R~S~T~U~V~W~X~Y~Z~`~ {.{+{@{#{${%{&{*{={r;-{;{>{,{'{){!{~{{{]{^{/{({_{:{<{[{}{|{1{2{3{4{5{6{7{u$u$Y@% R O+R & # % @ @ ",
+". . 8{9{0{a{b{,%x$c{d{e{E*f{g{h{i{j{k{l{m{n{o{p{q{r{s{t{u{v{w{x{y{z{A{B{C{D{E{F{G{H{I{J{K{L{M{4!N{!~O{P{Q{R{S{T{U{V{W{X{Y{Z{`{ ].]+]@]#]$]%]&]*]=]-];]>],]'])]!]~]{]]]^]/](]_]_]:]<][]t$R # $ O+t$v$$ Y at O+u$@ @ ",
+". . }]|]1]2]3]t$Y at 4]5]6]7]8]9]0]a]b]c]d]e]f]g]h]i]j]k]l]m]n]o]p]q]r]s]t]u]v]w]x]y]z]A]B]C]D]E]F]G]H]I]J]K]K]K]I]L]M]N]O]P]Q]R]S]T]U]V]W]X]Y]Z]`] ^.^+^@^#^$^%^&^*^=^-^;^>^,^M;'^)^!^~^{^% # v$u$u$% % u$* R @ @ ",
+". . ]^^^/^(^_^C*:^<^[^P!}^8-[)|^1^2^3^4^5^6^7^8^9^0^a^b^c^d^e^f^g^e^h^i^j^k^l^m^n^o^p^q^r^s^t^u^v^w^x^y^z^A^B^C^D^E^F^G^H^I^J^K^L^M^N^O^P^Q^R^S^T^U^V^W^X^Y^Z^`^ /./+/@/#/3{$/$/%/&/*/:^=/J>G*$!-/Q![+[+R!:^@ @ ",
+". . 8{;/>/>%,/g{6-'/,!)/g{H>&!!/~/{/]/@>^///(/_/:/</[/}/|/1/2/3/4/5/6/7/8/9/0/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/E]r/r/s/t/u/v/w/x/y/z/A/B/C/-]~{D/E/F/G/H/I/J/K/L/M/N/O/P/Q/T^T^R/S/T/U/)/V/&!&!;!V/8-W;W/a-@ @ ",
+". . X/Y/D*Z/()`/ (.(9'];^)7-)/+(@(#($(&>%(&(*(=(-(;(>(,('()(!(~({(](^(/(((_(:(<([(}(|(1(2(3(4(5(6(7(8(9(0(a(b(b(c(d(e(f(g(h(i(j(k(l(m(n(o(p(q(r(s(t(u(v(w(x(o/y(z(A(B(C(D(E(F(G(H(I(J(K(L(})9-<)M(N(()M(L(L(@ @ ",
+". . O(P(Q(R(S(T(U(V(W(X(Y(6-Z(`( _._+_ at _#_$_%_&_*_=_-_;_[/>_,_'_)_!_~_{_]_^_/_(___:_<_[_}_|_1_2_3_p's^4_5_m;6_6_6_7_8_9_0_a_b_c_d_e_f_g_h_i_j_k_l_m_n_o_p_q_r_s_t_u_v_w_x_y_z_A_B_C_D_E_F_a'G_d'b'a'H_I_9'J_@ @ ",
+". . K_Q(*!L_M_N_O_P_Q_R_S_()T_U_V_W_X_F*Y_Z_`_ :.:+:@:#:$:%:&:*:=:-:;:>:,:':):!:~:{:]:^:/:(:_:::<:[:}:|:1:2:2:2:3:4:5:6:7:8:9:0:a:b:c:d:e:f:g:h:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x:y:!&z:A:+>w,B:&>N>C:N>#>+>+>@ @ ",
+". . D:E:F:G:H:I:J:`/K:g{,/'/L:M:N:N:>%t$O:P:Q:R:S:T:U:V:W:X:Y:Z:`: <.<+<@<#<$<%<&<*<=<-<;<><,<'<)<!<~<{<]<^</<(<_<:<<<[<}<|<1<2<3<4<5<6<7<8<9<0<a<b<c<d<e<f<g<h<i<j<k<l<m<n<o<p<q<r<=!s<|^})4^<)t</;u<&>&>v<@ @ ",
+". . -$D:-$,%o#o#,%,$t$v$u$Y@>%>%,$,$,$x$t$O+w<x<x<y<z<A<B<C<D<E<F<G<H<I<J<K<L<M<N<O<P<Q<R<S<T<U<V<W<X<Y<Z<`< [.[+[@[#[$[%[&[*[=[-[;[w/>[,['[)[![~[{[][^[/[([_[:[<[[[}[|[1[2[3[4[5[6[7[d]8[9[0[-!q=W/H_v<C:a[@ @ ",
+". . 5-b[b[K_x$x$x$x$5--$>%D:D:t$t$t$t$>%,$u$c[d[e[f[g[h[i[j[k[l[m[n[o[^_p[q[r[s[t[u[v[w[x[y[z[A[B[C[D[E[F[G[H[I[J[K[L[M[N[O[P[Q[R[S[T[U[V[W[X[Y[Z[`[ }.}+}@}#}$}%}&}*}=}-};}>},}'})}!}~}{}]}[^^}/}O+9-];M((}@ @ ",
+". . K__}5-:}D:,%>%,$x$,%-$x$t$t$t$t$v$v$>%$ <}[}}}|}1}2}3}#,4}5}6}7}8}K,9}0}a}b}c}d}e}f}g}h}i}j}k}l}m}n}o}p}q}r}s}t}u}v}w}x}y}z}A}B}C}D}E}F}G}H}I}J}K}L}M}N}O}P}Q}R}S}T}U}V}W}X}Y}Z}# `} |.|d{+|@|#|*!())/6-@ @ ",
+". . Y;:}o#K_:}-$x$v$t$,%D:K_K_D:,%x$>%>%t$Y@$|%|&|*|=|-|;|>|,|'|)|!|~|{|]|^|/|(|_|:|<|[|h^}|||1|2|3|4|5|6||/7|8|9|0|a|b|c|d|e|f|g|h|i|j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|A|B|C|;%D|R K!E|F|G|H|I|J|K|7]*!9[L|@ @ ",
+". . 5--$-$:}D:K_o#,$,$o#o#,$,$o#-$,%x$,%>%>%M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|`| 1.1+1 at 1#1V!$1%1&1*1=1-1;1>1(,,1'1)1!1~1{1]1^1/1(1_1:1<1[1}1|111213141516171819101a1b1c1d1e1f1g1h1i1j1t$k1l1m1N!7]J>n1=/7]D*o1t$p1@ @ ",
+". . 5-Y;Y;D:K_K_D:D:x$,$,%x$x$o#,%,$>%x$o#t$q1r1s1t1u1v1w1x1y1z1A1B1C1D1E1F1G1H1I1J1K1L1M1N1O1P1Q1R1S1T1U1V1W1X1Y1Z1`1 2.2+2 at 2#2$2%2E]&2*2=2-2;2>2>2,2'2)2!2~2{2]2^2/2(2_2:2<2O+7{[2Z_}2g{6-()6-|2L_7],%,$12@ @ ",
+". . 22324252626272:}-$D:5--$o#-$x$t$t$>%o#,%829202a2b2c2d2e2f2g2h2i2j2k2l2m2I,n2o2p2q2r2s2t2u2v2w2x2%^y2z2A2B2C2D2E2F2G2H2I2J2K2o/L2q/M2N2O2P2Q2R2S2T2U2V2W2X2Y2Z2`2 3.3Y at +3t$u$v$O:@3M!U_,/:)/)#3J_()$3%3&3@ @ ",
+". . *3*3*3*3*3*3=3O(o#K_:}o#x$,%>%>%o#,%x$o#-3;3>3,3'3)3!3~3{3]3^3/3(3_3:3<3[3}3|3132333434_53u^636373839303a3b3c3d3j)e3f3g3h3i3),j3j3T,k3O2l3m3n37!n30!0!o3p3q3r3`2s3t3u3# $ Y at x$,$-$,%x$=/8]v3.(`;v3w3e{x3@ @ ",
+". . y3z3z3z3A3A3B3C3D:5-_}K_-$-$,%x$o#K_,$-$:2D3E3F3G3H3I3J3K3L3M3N3O3P3Q3R3S3T3U3V3`>W3s^X3Y3Z3`3 4.4+4 at 403#4$4%4&4*4=4-4;4>4,[N2,4'4)4!4~4{4]40!0!^4/40!(4p3_4:4<4[4}4|4u$t$t$,%x$-$x$,$T_6-K:.( >K:1424+|@ @ ",
+". . 343444y3z3546474Y;b[Y;5-:}5-D:-$-$D:,%D:849404a4b4c4d4e4f4g4h4i4j4k4l4m4n4o4p4q4r4s4t4u4v4w4x4y4z4A4B4C4D4E4F4G4H4I4J4K4L4M4N4N2O2O2~4~4O4P40!Q40!0!n3R4S4T4U4<4V4W4X4v$t$u$,$,$,$o#x$O!Y4Z4`4v<v3$3 5.5@ @ ",
+". . 4454z354z3z3+5 at 5_}_}_}5-D:K_K_K_K_D:-$D:F:#5O!$5%5&5*5=5-5;5>5,5'5)5!5!5~5{5]5^5/5(5_5:5l/w4<5[5}5|51525354513556575859505a5)4N2b5c5d5b5e5f5g5h5i50!i5S{j5k5l5m5n5o5p5v$Y at v$,$,$>%-$-$q5r5s5.(C:t5u524@{@ @ ",
+". . 34y3*3z3y3v5w5:}:}:}Y;_}K_-$D:D:D::}D:o#q5x5y5z5A5B5C5D5E5F5G5H5I5J5K5L5M5N5O5P5Q5R5S5J5T5u^U5V5W5X5Y5Z5`5 6.6+6 at 6#6$6%6&6*6=6-6b5;6~4>6,6'6)6)6Q4Q4g5!6~6{6]6^6[4/6(6x$,$o#x$x$,%,%o#_6L_v39'C:6-14:6<6@ @ ",
+". . [634A3*3}66464Y;Y;Y;5-:}:}:}Y;Y;Y;5-5-x$|6162636465666h>76869606a6b6c6d6e6f6g6h6i6j6k6l6m6n6o6p6q6r6s6t6u6v6w6x6y6z6A6B6C6D6O4b5>6~4O4-6E6i5F60!G6H6I6J6K6Z~L6M6N6O6P6Q6o#R6S6S6T6x$x$O!U6`/V6W6L_I:X6@{@ @ ",
+". . b[Y6Z6`6Z6 7;$;$Z6.7Z6_}:}5-Y;_}Z6Y;:}D:+7 at 7#7$7%7%7&7p4*7=7-7;7>7,7'7'7,7)7!7~7{7]7^7/7(7_7:7<7[7}7|717273747576777W,879707a7P4b7c7a7d7e7f7g7Q407h7i7j7k7l7r)97m7n7i}o7p7q7r7s7t7&3K_o#D*D*N!_^u7v7p7.5@ @ ",
+". . Y;w7x7y7z7Y;;$;$b[Y;Z6b[Y;5-:}_}Z6K_D:_}A7B7C7B7D7C7E7F7G7H7U)I7J7K7L7M7N7O7P7Q7R7S7T7U7V7W7X7Y7Z7`7 8@:.8+8 at 8#8$8%8&8F',4*8P4=8-8-8;8b7>8,8>8H6'8k3)8m7!8T,87k3)4&8~8{8]8^8/8(8_8&3-$o#,%,%,%o#:8Z/X6<8@ @ ",
+". . x7y7.7Z6Z6.7;$z7;$Z6b[Y;5-5-_}_}D:5-:}D:[8B7%7C7%7}8|81828384858687888989808a8b8c8d8e8f8g8h8i8j8k8j8l8m8n8o8p8q8r8s8t8D'!4P2)6b7u8u8u8v8w8x8y8g7z8'4A8=2D'M2F''487B8 {C8D8E8F8G8H8 5x$o#D::}K_p1I8{^J8K8@ @ ",
+". . L8;$L8y7y7y75-z7L8.7z7_}:}_}Z6Y;D:D:D:_}M8B7}8C7B7D7N8O8z,P8Q8R8S8T8U8V8W8X8Y8Z8`8 9.9+9 at 9#9$9%9&9*9=9-9;9>9,9i/'9%8)9D'=6!9d7h5P4-8u8v8~9{9]9C607G'^9/987D'D'M2C'&2(9_9:9<9[9}9|9S6x$K_5-5-:}D:19O(2939@ @ ",
+". . x74959L8y7y7Y;y7.7;$69.7;$;$Z6b[Y;:}D:b[M8C7C7C7}879899909a9b9c9d9e9f9g9h9i9j9k9l9m9n9o9p9q9r9s9t9u9v9w9x938y9z9A9L2t8T,)497B9h5h5h5P4v8C9D9,8~9l3!4i7E9,4E'M2k7F9)9K'G9H9I9J9K9L9M9D:_}5-5-5-5-5-<6N9O9@ @ ",
+". . 59P9Q969L8y7;$y7z7y7y7z7b[Z6Y;b[Z6_}:}Z6R9797979S9D7T9U9V9W9W9X9Y9f)Z9`9 0.0+0 at 0#0$0%0&0*0=0-0;0>0,0'0)0W!!0~053{0q/j3]0E'^0/0h5h5m3h5h5m3D9(0_0:0k3^9)8'4D'k7k7L2&8K'<0[0}0|0102030b[b[5-_}_}_}408{5060@ @ ",
+". . 4970w76969y7y7;$y7y7;$z7b[b[_}Z6;$b[_};$809090900090a0b0c0d0e0f0g0h0i0j0k0l0m0n0o0+~p0q0r0s0t0u0v0w0x0y0z0A0u{B0C0D0E0F0G0H0_4I0J0K0L0M0N0O0P0Q0R0S0T0U0G'V0H']0W0X0Y0Z0`0 a.a+a at a#aE:E:_}b[b[74C3$a%a&a@ @ ",
+". . Q9w7w749w7x7L869.7y769;$y7b[b[;$y7z7Z6Z6*a=a=a=a-a;a>a,a'a)a!a~a{a]a^a/a(a_a:a<a[a}a|a1a2a3a4a5a6a7a8a9a0aaabacadaeafagahaiajaL0kalamanaoapaqarasatauavam3waxayazaAaBaCa!9G6DaW,EaFaGaHa19C3IaJaKaLaMaNa@ @ ",
+". . p#7059Q959w7x749x7w7Q9L8x7.7Z6b[b[b[b[b[OaPaPaPaQaRaSaTaUaVaWaXaYaZa`a b.b+b at b#b$b%b*0&bX>*b=b-b;b>b,b'b)b!b~b{b]b^b/b(b_b:b<b[b}b|b1b2b3b4b5b6b7b8b9b0babbbcbdbebfbgbgbhbibjb/0kbd>lbY4mbnbobpbqbrbsbtb@ @ ",
+". . Q959ububQ959w749x7x770.7L8y7Z6z7.7.7;$;$vbwbwbwbwbxbybzbAbBbCbDbEbFbGbHbIbJbKbLb~5U3MbNbt0ObPbQbRbSbTbUbVbWbXbYbZb`b c.c+c at c#c$c%c&c*c=c-c;c>c,c'c)c!c~c{c]c^c/c(c_cT4>8:c<c[c}c|c1c2c3c4c5c@'6c7c8c9c0c@ @ ",
+". . ububp#ubQ949x76969w749;$L8L8.7y7y7;$;$.7.7ac.7bcccdcecfcgchcicjcEbkclcmcncocpcqcrcx9sctcYaucvcwcxcyczcAcBcCcDcEcf^A{FcGcHcIcJcKcLcMcNcOcPcQcRcScTcUcVcWcXcYcZc`c d.d,4,8+d at d#d$d%d&d*d=d-d;d>d,d'd)d!d~d@ @ ",
+". . ccdc7059595959L869x749.7x769x7x7w7y7.7;${d]d^d/d(dR9_d:dAb<d[>[d}d|d1d2d3d4d5d4d6d7d8d9d0dadbdcdddH+edfdgdhdidjdkdld;5mdndodpdqdrdsdtdudvdwdxdydzdAdBdCdDdEdFdGdHdIdJdk5KdLdMd,8NdOdPdQdRdSdTdUdVdWdXdYd@ @ ",
+". . ubububdcubQ9w7Q9594959L849w76949Q94949Q9Zd`d efdC779S9.e+e at e#e$e%e&e*e=e-e;e>e,e'e)e!e~e{e]eA ^e/e(e_e:e<e[e}e|e1e2e3e4e5e6e7e8e9e0eaebexdwdcedeceeeeefegeheiejekelemeneoehbpeE6qereseteuevewexeyezeAeBe@ @ ",
+". . ubp#Cep#ububDeEeFeGeHeIeJe49KeLeMeQ9p#NeOePeQe90ReSeTeUeVeWeXebdYeZe`e f.f+f at f#f$f%f&f*f=f-f;f>f,f'f)f!f~f{f]f^f/f(f_f:f<f[f}f|f1f2f3fee4f5f6f7f7f8f9f0fafbfcfdfefffgfhfifjfkflfmfnfofpfqfrfsftfufvfwfBe@ @ ",
+". . q#Cep#ubp#CexfyfzfzfAfzfBfFeCfCfDfEfq#FfGfi'HfIfx7JfKfLfMfy7NfOfPfQfRfSfTfUfVfWfXfYfZf`f g.g+g at g#g$g%g&g*g=g-g;g>g,g'g)g!g~g{g]g****^g/g(g]g^g(g^g^g/g_g:g<g[g}g|g1g2g3g4g5g6g7g8g9g0gagbgcgdgegfg/g/g/g@ @ ",
+". . ggq#Ceubdcccp#hghgigigP9w<jgkgY|lgmgw7ngogpgqgrgx7JfKfLfsgy742tgugvgwgxgygzgAgBg+1CgDgEgFgGgHgIgJg`}9{29KgLgMgNgOgPgQgRgs1SgTg]gUg^g/g(gVgVg]g/g/gWgXg(gYgZg`g h.h+h at h#h5^$h%h&h*h!g=h-h;h>h,h'h)hUgUgUg@ @ ",
+". . !hggq#ccq#gg~h{h]h^h/h/h(hb0_h:h<h<~y7[hqg2)}h|hx7JfKfLfsgy7Nf1h2h3h4h5h6h7h8h9h0hahbhchdhehfhgh! 3-X/hhihjhkhlhmhnhohphqhrhsh^gUgUg^g]g(gth(gWg(g(gVguhvh`gwhxhyhzhAhBhChDhEhFhGhHhIhJhBdKhLhMhNh]g]g]g@ @ ",
+". . !h!hOhggq#CeccPhQhRhQhShShThUhVh#{Wh69Xh}hYhZh`hL832 i.i+i at i#i$i%i&i*i=i-i;i>i,i'i)i!i~i{ieh]i^i/iu~T6z3(i_i^>:i<i[i}i|i1i2i3i/g/g^g^g/g/g^g]g(gVg/g^gsh4i5i6i7i8i9i0iaibicidieifigihiiijikilimini/gVg/g@ @ ",
+". . oiOh!h!hggNeCep#ccpi~hqigg]hrisitiuix7Xh}hx,vi`hw7wixiying.7zi44AiBiCiDiEiFiGiHiIiJiKiLiMiKiNiOiM.Pi=/QiRiSiTiUiViWiXiYiZi`i jUgUgUg^g/g]g**Ug]gVgWgWgVgshth.j+j at j#j$j%j&j*j=j-j;j>j,j'j)j!j~j{j]j]gVg]g@ @ ",
+". . Oh^j!h!hggq#/j(j_j:j<j[jAfL8}j|j1j2j3jIe4jx,vi`h49[65jY66jy7zi7jVh8j9j0jajbjcjdjejC_fjgjhjijjjkjljH>mj#a.iwinjojpjqjrjsjtjuj^g^g^gUg^g/g/g^g/g(gXgXgWgthvjwjxj*.yjzjcgAj3#BjCjDjEjFjGjHj#+IjJjKj]j]gVg]g@ @ ",
+". . LjMjI-NjOjPj~hQjRjSjTjUjVjQ9WjXjRh2jYjZj`j k.k+k49LeMe[6Ke at kyi#k(i$k%k&k*k=k-k;k>kZ&,k'k)k!k~k{k]k^k/k(k_k:k<k[k}k|k1k2k3k4k/g/g/g^g^g]gthth(gthXgVgth(gwfXg5k6k7k8k9k0kak!#bkckdkekfkgkhkik at +jkkkUg/gUg@ @ ",
+". . lkmknklklknkokpkShPhPh<h/hPhPh/hQhqkxixi2jrk594970Q949sk_itkMf3jSiukvkwkxkykzkAkBkCk54DkSiRh.5EkFkGkHkIkJkKkLkMkNkOkPkQkRkSk]g]g]g]gUg]gVgth]g/gthWgXgTkTkTk`gUkWgXg/g/g^gVkWkXkVkVkYk/g]gTkXg/g(gUgUgXk@ @ ",
+". . Zkmkmk`k l l.lDfRh+lDf at l@lDfDfQh<hqk5jRh#l59w76969x7w7$l%l&l*l=l-l;l>l,l'l)l!l~l{l]l^l/l(l_l:l<l[lGk}l|lJkKk1l2l3l:$4lQkRkSk]g]g]g]gUg]gth(g]gththTkTkTk5l5l5lUk^g^gUgUgVkWkWkVkWk6l7l8lUgVgZg]g^g/gYkVk@ @ ",
+". . 9lmkZk l0lZkal<hDfbl<>OfSh+l+lPh/hQhRhqkclub59x749w7w7widl3jelfl+kRhglKkhliljlklllmlnlolplqlrlsltlulobvlJkKkwlxlylzlAlQkRkSk]g]g]g]gUg]gth]g/gWgUkXgTkBl`gClBl^gUgYk8l^g]gVk**Xk8lXkVk7l^g]gUk(g/g]g8l]g@ @ ",
+". . `k0l`kmkVaDlVa<><><>@l at l@l+lPhPhPh/h/h/h^hubP9w7Q94969uiElFlGlHlIl#kIaJlKlLlMlNlOlPlQlRlSlTlUlVlWlXlYlZlhc`l m.myl+m at m#m$m%m]g]g]g^g^g/g/g/g/gVgTkZgZgUkUkTkWg^gXkVkUgWg/g(g/g/g/g/g**Yk^g(gXgWgth^g8l**@ @ ",
+". . &m.lWlDlDl*mnkpkOfPh at l@l at l+lPhPhPh/h/h/hmgP9Q9ub595959rk=mZh-m;mx,`j>m,m'm)m!m~m{m]m^m/m(m_m:m<m'gZk*m[mYlYl}m|m1mOkXk2m3m4m]g]g]g(g/g^gUg]gVg(gthWgZg`gUk/g]gUgYkVk**Wg/gthTkTkTkTkXgVgVgUk`gBlBlZg`gth@ @ ",
+". . .lVa*mlk*m*m5mbl<>@l at l@l at l+lPhPhPh/h/h/h6mQ94949Q959w749Je7m-m8m9mHe0mambmcmdmemfmgmhmimimjmkm{+lm l&m0lrlKkmmnmomOk4l2mpmqm]g]g]g]g]g]g]g]gththWgUkZgZgVg^gYk**UgVk**Wg/g(gWgWgWgXgTkXgthWgTkUkrmsm5l`g@ @ ",
+". . tmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtm@ @ ",
+". . umumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumum@ @ ",
+". . um@ vmvmwmumumumumvmvmvmumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumum@ @ ",
+". . umxmymymvmumumumumymymymumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumum@ @ ",
+". . umxmymymvmumumumumymymymumxm@ umumumum@ xmxmumumzmxmxmzmumxmxm@ umum@ xmxmumumumumumumumumxmxm@ umumumumumxmxm@ umumum@ xmxmzm@ xmumum@ xmumumumumzmxmxmzmumumumumumumumumumumumumumumumumumumumumumumum@ @ ",
+". . umxmymymvmumumumumymymymAmymymBmumzmCmymymymymxm@ ymymxmumymymvmumvmymymymymxmumumumumzmAmymymymAmzmumzmAmymymymAmzmumvmymymvmymymAmwmymymAmumumxmymymymymvmumumumumumumumumumumumumumumumumumumumumumum@ @ ",
+". . umxmymymvmumumumumymymymvmymymymumBmymymvmymymCmumymymwm@ ymymxmwmymymCmAmymymumumumumvmymymCmAmymBmumCmymymvmymymCmumvmymymCmAmymymCmAmymymxmzmymymAmCmymymxmumumumumumumumumumumumumumumumumumumumumum@ @ ",
+". . umxmymymvmumumumumymymymumymymymumvmymymumymymymumAmymvmxmymymxmvmymymxmvmymymxmumumumvmymymxmvmymvmumymymymumymymymumvmymymxmvmymymxmvmymymxmxmymymvmxmymymvmumumumumumumumumumumumumumumumumumumumumum@ @ ",
+". . umxmymymvmumumumumymymymumymymymumwmvmvm@ ymymymumvmymvmxmymym@ vmymymCmAmymymxmumumumBmymymvmxmxm@ umymymymumymymymumvmymymxmvmymymxmvmymymxmxmymymAmCmymymvmumumumumumumumumumumumumumumumumumumumumum@ @ ",
+". . umxmymymvmumumumumymymymumymymymumumxmCmymymymymumBmymCmBmymymumvmymymymymymymxmumumumzmAmymymymwmumumymymymumymymymumvmymymxmvmymymxmvmymymxmxmymymymymymymvmumumumumumumumumumumumumumumumumumumumumum@ @ ",
+". . umxmymymvmumumumumymymymumymymymumwmymymwmymymymumxmymymvmymymumvmymymxm@ xmxmzmumumumumzmBmymymymwmumymymymumymymymumvmymymxmvmymymxmvmymymxmxmymymvmzmxmxm@ umumumumumumumumumumumumumumumumumumumumum@ @ ",
+". . umxmymymvmumumumumymymymumymymymumvmymymumymymymumxmymymvmymCmumvmymymxmvmymymxmumumumwmvmwmwmymymvmumymymymumymymymumvmymymxmvmymymxmvmymymxmxmymymvmxmymymvmumumumumumumumumumumumumumumumumumumumumum@ @ ",
+". . umxmymymvmumumumumymymymumymymymumvmymymumymymymumumymymAmymvmumvmymymxmvmDm(gEmFmumumvmymvmxmymymvmumymymymumymymymGm5l(gymxmvmymymxmvmymymxmxmymymvmxmymymvmumumumumumumumumumumumumumumumumumumumumum@ @ ",
+". . umxmymymvmumumumumymymymumymymymumvmymymymymymymumumymymymymBmum@ ymymymymHmImImGmumumwmymymymymymwmumBmymymymymymBmImImImymxmvmymymxmvmymymxmumAmymymymymym@ umumumumumumumumumumumumumumumumumumumumum@ @ ",
+". . umxmymymvmumumumumymymymumymymymumzmAmymwmymymymumumvmymymymxmumumxmCmymymJmImImGm@ KmLmBmAmymymMmKmLmzmBmymymDmMmumImImImymxmvmymHmAmNmymHmOmumzmvmymDmPmAmumum@ KmKm@ umKmKm@ umKmKmLmum@ KmKm@ umumum@ @ ",
+". . umumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumKmImImCl8lImImKmumKm8lImImIm8l@ umGmImIm8lImImImumumumumImImImClImImQmumumGmImImImImKmKmImImKmumImImKmumImImGmKmImImImImGmumum@ @ ",
+". . umumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumKmImIm8lClImImGmum8lIm8lClImImFmumImImImGmImImImumumumumImImImGmImImImumFmImImCl8lImImumImImGmLmImImQmKmImImKmImImImGmImImLmum@ @ ",
+". . umumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumKmImImGmKmImImGmumImImGmKmImImGmumImImImumImImImumumumumImImImumImImImumGmImImKmGmImImKmImImGmKmImImGmKmImImKmImImImumImImKmum@ @ ",
+". . umumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumKmImImGmKmImImGmumGmGmFmQmImImGmumImImImumImImImumumumumImImImumImImImumGmImImCl8lImImKmClImClFmImImClQmImIm@ 8lImImFmKmKm@ um@ @ ",
+". . umumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumKmImImGmKmImImGmumumQm8lImImImGmumImImImumImImImumumumumImImImumImImImumGmImImImImImImKmGmImImGmIm8lImGmImImumKmImImIm8lLmumum@ @ ",
+". . umumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumKmImImGmKmImImGmumClIm8lQmImImGmumImImImumImImImumumumumImImImumImImImumGmImImKmLmKmKm@ QmImImGmImGmImGmIm8lumumLmClImImIm@ um@ @ ",
+". . umumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumKmImImGmKmImImGmumImImGmKmImImGmumImImImumImImImumumumumImImImumImImImumGmImImKmGmImImKmKmImImIm8lQmImImImGmumGmGmLmClImImKmum@ @ ",
+". . umumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumKmImImGmKmImImGmumImImGmKmImImGmumImImImumImImImumumumumImImImumImImImumGmImImKmGmImImKmKmImImImGmKmImImImGmumImImKmGmImImKmum@ @ ",
+". . umumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumKmImImImImImImQmumImImImImImImGmum8lImImImImImImumumumumImImImumImImImumLmImImImImIm8lumumImImImQmLmImImImFmumClImImImImIm@ um@ @ ",
+". . umumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumKmImImGmQmImCl@ umKmIm8lQmImImGmumKm8lImFmImImImumumumumImImImumImImImumumKmClImImCl@ umumImImImKmumImImImKmum@ GmImIm8lKmumum@ @ ",
+". . umumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumumum@ @ ",
+". . tmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtm  ",
+". tmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtmtm  "};
diff --git a/xpms/bracket.xpm b/xpms/bracket.xpm
new file mode 100644
index 0000000..3094939
--- /dev/null
+++ b/xpms/bracket.xpm
@@ -0,0 +1,28 @@
+/* XPM */
+static char * bracket_xpm[] = {
+"60 21 4 1",
+" 	c None",
+".	c #D5D2D5",
+"+	c #00A0D1",
+"@	c #106994",
+"............................................................",
+"............................................................",
+"............................................................",
+"....++++++++++++++++++++++++++++++++++++++++++++++++++++++..",
+"....+++..............+...................................+..",
+"....+++..............+...................................+..",
+"....+++..............+...@@@....@@@.......... at ......@....+..",
+"....+++..............+.. at ...@.. at ...@.......@@@....@@@....+..",
+"....+++..............+...... at ......@... at .....@...... at ....+..",
+"....+++..............+..... at ......@.... at .....@...... at ....+..",
+"....+++..............+.... at ......@........... at ......@....+..",
+"....+++..............+... at ......@............ at ......@....+..",
+"....+++..............+..@@.....@@...... at .....@...... at ....+..",
+"....+++..............+..@@@@@..@@@@@... at ...@@@@@..@@@@@..+..",
+"....+++..............+...................................+..",
+"....+++..............+...................................+..",
+"....++++++...........+++++++++++++++++++++++++++++++++++++..",
+"............................................................",
+"............................................................",
+"............................................................",
+"............................................................"};
diff --git a/xpms/clippy.xpm b/xpms/clippy.xpm
new file mode 100644
index 0000000..7df5e15
--- /dev/null
+++ b/xpms/clippy.xpm
@@ -0,0 +1,81 @@
+/* XPM */
+static char * clippy_xpm[] = {
+"32 71 7 1",
+" 	c None",
+".	c #7F7F7F",
+"+	c #CCCCCC",
+"@	c #E5E5E5",
+"#	c #FFFFFF",
+"$	c #FF0000",
+"%	c #000000",
+"              .......           ",
+"             .........          ",
+"            ...+ at +@....         ",
+"           ...+++++@@@..        ",
+"          .++++......+ at ..       ",
+"          .+++........+ at ..      ",
+"         ..+++.    ...++..      ",
+"        ...++.      ...+..      ",
+"        ..+++.       ..+...     ",
+"        .++...        .+ at ..     ",
+"       ..++..         .++..     ",
+"       ..++..         .++..     ",
+"       .+++.          .+...     ",
+"      ..++..          .+...     ",
+"   ........           .+..      ",
+" ...........          .+..      ",
+" ..++++++.....        .+..      ",
+"........+++.....      ++..      ",
+"....##.....+++...    .++..      ",
+"...#$#$$###...+...  ..++.       ",
+"...$#$##$#%##..+..  ..++.       ",
+" ..###$##%%%##.+........        ",
+" ...##$#%%%%%#.............     ",
+"   ...##%%%%%#$#...+++++++...   ",
+"    ....#%%%####.....++++++...  ",
+"    .......###........+++++++.. ",
+"    ..+............#...+++++++. ",
+"   ...+. ......  ..##$....++++..",
+"   ..++.          ...#%%%.......",
+"   ..+..           ...%%%%$###..",
+"   ..+..           .....%###....",
+"   ..+......        ........... ",
+"   ..+....#.       ..+........  ",
+"   ..+...++.       ..+. ..      ",
+"   ..+...++.       ..+. ...     ",
+"   ..+...++.       ..+. .##.    ",
+"   ..+...++.       ..+. .++.    ",
+"   ..+...++.       ..+. .++.    ",
+"   ..+...++.       ..+. .++.    ",
+"   ..+...++.       ..+. .++.    ",
+"   ..+...++.       ..+. .++.    ",
+"   ..+...++.       ..+. .++.    ",
+"   ..+...++.       ..+. .++.    ",
+"   ..+...++.       ..+...++.    ",
+"   ..+...++.       ..+..+++.    ",
+"   ..+...++.       ..+..+++.    ",
+"   ..+...++.       ..+..+++.    ",
+"   ..++...++.      .++..+++.    ",
+"    .++...++..     .+. .+++.    ",
+"    ..+...++..    .++. .+++.    ",
+"    ..+....+..   ..++. .+++.    ",
+"    ..++...+#......+.. .++..    ",
+"    ..++. .+++...+++.. .++.     ",
+"    ..++. ..++###++..  .++.     ",
+"    ..++.  ..+++++..   .++.     ",
+"     .++.  ........    .++.     ",
+"     .++..  .......    .++.     ",
+"     ..+..            ..+..     ",
+"      .+...           .++..     ",
+"      .+#..           .+...     ",
+"      ..#..           .+...     ",
+"      ..+#..         ..+..      ",
+"      ..++..        ..++..      ",
+"       .++#..      ...+..       ",
+"       .+++...    ...++..       ",
+"        ..+#........+++.        ",
+"        ...+#......+++..        ",
+"         ..++++++++++..         ",
+"          ..+++++++...          ",
+"           ..++++++...          ",
+"            .........           "};
diff --git a/xpms/clock.xpm b/xpms/clock.xpm
new file mode 100644
index 0000000..b796a16
--- /dev/null
+++ b/xpms/clock.xpm
@@ -0,0 +1,73 @@
+/* XPM */
+static char * clock_xpm[] = {
+"64 64 6 1",
+" 	c None",
+".	c #000000",
+"+	c #282828",
+"@	c #FFFFFF",
+"#	c #4D4D4D",
+"$	c #AAAAAA",
+"                                                                ",
+"                                                                ",
+"                                                                ",
+"    ......................................................+     ",
+"    .+++++++++++++++++++++++++++++++++++++++++++++++++++++@     ",
+"    .+++++++++++++++++++++++++++++++++++++++++++++++++++++@     ",
+"    .+++++++++++++++++++++++++++++++++++++++++++++++++++++@     ",
+"    .+++++++++++++++++++++++++++++++++++++++++++++++++++++@     ",
+"    .+++++++++++++++++++++++++++++++++++++++++++++++++++++@     ",
+"    .+++++++++++++++++++++++++++++++++++++++++++++++++++++@     ",
+"    .+++++++++++++++++++++++++++++++++++++++++++++++++++++@     ",
+"    .+++++++++++++++++++++++++++++++++++++++++++++++++++++@     ",
+"    .+++++++++++++++++++++++++++++++++++++++++++++++++++++@     ",
+"    .+++++++++++++++++++++++++++++++++++++++++++++++++++++@     ",
+"    .+++++++++++++++++++++++++++++++++++++++++++++++++++++@     ",
+"    .+++++++++++++++++++++++++++++++++++++++++++++++++++++@     ",
+"    .+++++++++++++++++++++++++++++++++++++++++++++++++++++@     ",
+"    .+++++++++++++++++++++++++++++++++++++++++++++++++++++@     ",
+"    .+++++++++++++++++++++++++++++++++++++++++++++++++++++@     ",
+"    .+++++++++++++++++++++++++++++++++++++++++++++++++++++@     ",
+"    +@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@     ",
+"                                                                ",
+"                                                                ",
+"              @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@                 ",
+"              @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@.                ",
+"              @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@..               ",
+"              @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@...              ",
+"              @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@...#             ",
+"              @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@...##            ",
+"              @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@...###           ",
+"              @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@...####          ",
+"              @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@...####          ",
+"              @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@...####          ",
+"              @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@...####          ",
+"              @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@...####          ",
+"              @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@...####          ",
+"              @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@...####          ",
+"              @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@...####          ",
+"              @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@...####          ",
+"              @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@...####          ",
+"              @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@...####          ",
+"              @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@...####          ",
+"              @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@...####          ",
+"              @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@...####          ",
+"              @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@...####          ",
+"              @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@...####          ",
+"              @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@...####          ",
+"              @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@...####          ",
+"              @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@...####          ",
+"              @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@...####          ",
+"             @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@...####          ",
+"             @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@...####          ",
+"             @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+...####          ",
+"            @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@+...####          ",
+"           @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@++...####          ",
+"              +++++++++++++++++++++++++++++++++...####          ",
+"              $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$...####          ",
+"              ....................................####          ",
+"               ...................................####          ",
+"                ######################################          ",
+"                                                                ",
+"                                                                ",
+"                                                                ",
+"                                                                "};
diff --git a/xpms/coin.xpm b/xpms/coin.xpm
new file mode 100644
index 0000000..ab4372d
--- /dev/null
+++ b/xpms/coin.xpm
@@ -0,0 +1,516 @@
+/* XPM */
+static char * coin_xpm[] = {
+"320 64 449 2",
+"  	c None",
+". 	c #41454A",
+"+ 	c #698289",
+"@ 	c #688087",
+"# 	c #657B82",
+"$ 	c #5C6C72",
+"% 	c #4A5257",
+"& 	c #3A3D40",
+"* 	c #303033",
+"= 	c #2E2C2F",
+"- 	c #2D2B2D",
+"; 	c #2F2F31",
+"> 	c #000000",
+", 	c #B60000",
+"' 	c #AF0000",
+") 	c #AE0000",
+"! 	c #AD0000",
+"~ 	c #AC0000",
+"{ 	c #9B0000",
+"] 	c #C20000",
+"^ 	c #B80000",
+"/ 	c #B70000",
+"( 	c #B50000",
+"_ 	c #A40000",
+": 	c #CD0000",
+"< 	c #C30000",
+"[ 	c #C10000",
+"} 	c #C00000",
+"| 	c #B00000",
+"1 	c #B90000",
+"2 	c #C70000",
+"3 	c #C40000",
+"4 	c #BB0000",
+"5 	c #890000",
+"6 	c #940000",
+"7 	c #AA0000",
+"8 	c #990000",
+"9 	c #EA0000",
+"0 	c #E70000",
+"a 	c #E40000",
+"b 	c #DF0000",
+"c 	c #D90000",
+"d 	c #D10000",
+"e 	c #970000",
+"f 	c #A00000",
+"g 	c #B30000",
+"h 	c #A20000",
+"i 	c #CE0000",
+"j 	c #C50000",
+"k 	c #D40000",
+"l 	c #DD0000",
+"m 	c #F80000",
+"n 	c #F50000",
+"o 	c #F20000",
+"p 	c #EE0000",
+"q 	c #E90000",
+"r 	c #E20000",
+"s 	c #A30000",
+"t 	c #A90000",
+"u 	c #BD0000",
+"v 	c #FFFFFF",
+"w 	c #F6EEE3",
+"x 	c #E8CA98",
+"y 	c #EBD9C4",
+"z 	c #CF0000",
+"A 	c #CB0000",
+"B 	c #A70000",
+"C 	c #810000",
+"D 	c #8F0000",
+"E 	c #CA0000",
+"F 	c #F00000",
+"G 	c #F10000",
+"H 	c #EF0000",
+"I 	c #EB0000",
+"J 	c #E60000",
+"K 	c #D80000",
+"L 	c #D00000",
+"M 	c #BA0000",
+"N 	c #900000",
+"O 	c #9A0000",
+"P 	c #FC0000",
+"Q 	c #FA0000",
+"R 	c #F40000",
+"S 	c #E00000",
+"T 	c #9C0000",
+"U 	c #DDA326",
+"V 	c #DDA202",
+"W 	c #EAA800",
+"X 	c #ECB600",
+"Y 	c #E59800",
+"Z 	c #CC0000",
+"` 	c #D30000",
+" .	c #D50000",
+"..	c #C60000",
+"+.	c #BF0000",
+"@.	c #910000",
+"#.	c #7B0000",
+"$.	c #730000",
+"%.	c #F30000",
+"&.	c #F60000",
+"*.	c #E50000",
+"=.	c #DC0000",
+"-.	c #AB0000",
+";.	c #7D0000",
+">.	c #D70000",
+",.	c #FB0000",
+"'.	c #FD0000",
+").	c #FE0000",
+"!.	c #EC0000",
+"~.	c #E10000",
+"{.	c #DB0000",
+"].	c #D20000",
+"^.	c #C80000",
+"/.	c #BC0000",
+"(.	c #960000",
+"_.	c #870000",
+":.	c #F4B800",
+"<.	c #F8C700",
+"[.	c #DC9300",
+"}.	c #DE0000",
+"|.	c #8A0000",
+"1.	c #760000",
+"2.	c #700000",
+"3.	c #A50000",
+"4.	c #850000",
+"5.	c #F90000",
+"6.	c #F70000",
+"7.	c #C90000",
+"8.	c #BE0000",
+"9.	c #840000",
+"0.	c #F0AC00",
+"a.	c #B10000",
+"b.	c #E80000",
+"c.	c #7F0000",
+"d.	c #6D0000",
+"e.	c #E30000",
+"f.	c #770000",
+"g.	c #8C0000",
+"h.	c #E4BA65",
+"i.	c #EEC103",
+"j.	c #CB8400",
+"k.	c #6C848B",
+"l.	c #6D858C",
+"m.	c #DA0000",
+"n.	c #ED0000",
+"o.	c #860000",
+"p.	c #740000",
+"q.	c #6C0000",
+"r.	c #6A0000",
+"s.	c #920000",
+"t.	c #7E0000",
+"u.	c #D88800",
+"v.	c #CB9A56",
+"w.	c #708B91",
+"x.	c #748E95",
+"y.	c #77939B",
+"z.	c #7A989E",
+"A.	c #7C9AA0",
+"B.	c #7C9AA2",
+"C.	c #7D9BA3",
+"D.	c #78969D",
+"E.	c #6F8990",
+"F.	c #9D0000",
+"G.	c #7A0000",
+"H.	c #710000",
+"I.	c #660000",
+"J.	c #410000",
+"K.	c #B20000",
+"L.	c #880000",
+"M.	c #750000",
+"N.	c #4B0000",
+"O.	c #820000",
+"P.	c #550000",
+"Q.	c #708B93",
+"R.	c #75919A",
+"S.	c #78959B",
+"T.	c #8DAEB6",
+"U.	c #97B6BE",
+"V.	c #93B3BA",
+"W.	c #91B2BA",
+"X.	c #91B1B9",
+"Y.	c #8EAFB7",
+"Z.	c #89ABB3",
+"`.	c #84A5AC",
+" +	c #749096",
+".+	c #728C93",
+"++	c #6D878E",
+"@+	c #D60000",
+"#+	c #830000",
+"$+	c #650000",
+"%+	c #5C0000",
+"&+	c #A80000",
+"*+	c #790000",
+"=+	c #570000",
+"-+	c #8D0000",
+";+	c #620000",
+">+	c #FCD600",
+",+	c #93B3BB",
+"'+	c #98B9C1",
+")+	c #A3C3C9",
+"!+	c #86A6AD",
+"~+	c #81A0A7",
+"{+	c #81A0A9",
+"]+	c #87A6AF",
+"^+	c #7F9EA6",
+"/+	c #B40000",
+"(+	c #930000",
+"_+	c #680000",
+":+	c #600000",
+"<+	c #580000",
+"[+	c #5E0000",
+"}+	c #3F0000",
+"|+	c #8E0000",
+"1+	c #480000",
+"2+	c #A10000",
+"3+	c #980000",
+"4+	c #520000",
+"5+	c #A87100",
+"6+	c #7D9DA3",
+"7+	c #8BACB3",
+"8+	c #97B8BF",
+"9+	c #9EBFC6",
+"0+	c #A0C1C7",
+"a+	c #9ABAC2",
+"b+	c #9AB9C2",
+"c+	c #87A8B0",
+"d+	c #590000",
+"e+	c #4C0000",
+"f+	c #690000",
+"g+	c #9F0000",
+"h+	c #8B0000",
+"i+	c #BE8102",
+"j+	c #A0C1C8",
+"k+	c #9CBEC4",
+"l+	c #95B5BD",
+"m+	c #759198",
+"n+	c #9E0000",
+"o+	c #5A0000",
+"p+	c #540000",
+"q+	c #450000",
+"r+	c #4E0000",
+"s+	c #DDA217",
+"t+	c #560000",
+"u+	c #460000",
+"v+	c #510000",
+"w+	c #780000",
+"x+	c #610000",
+"y+	c #440000",
+"z+	c #6E0000",
+"A+	c #EDC557",
+"B+	c #C66A04",
+"C+	c #8DAEB4",
+"D+	c #9CBDC3",
+"E+	c #720000",
+"F+	c #7C0000",
+"G+	c #A60000",
+"H+	c #4F0000",
+"I+	c #670000",
+"J+	c #1B1612",
+"K+	c #462B0A",
+"L+	c #4E595D",
+"M+	c #657A82",
+"N+	c #667B84",
+"O+	c #490000",
+"P+	c #950000",
+"Q+	c #17120D",
+"R+	c #A1C2C8",
+"S+	c #201B1D",
+"T+	c #393C40",
+"U+	c #637880",
+"V+	c #5B0000",
+"W+	c #500000",
+"X+	c #430000",
+"Y+	c #F4DBA6",
+"Z+	c #AC7815",
+"`+	c #D57B00",
+" @	c #A3C4CA",
+".@	c #84A3AC",
+"+@	c #010000",
+"@@	c #607379",
+"#@	c #5F7279",
+"$@	c #62757C",
+"%@	c #687E85",
+"&@	c #6F0000",
+"*@	c #800000",
+"=@	c #ECD398",
+"-@	c #AA938E",
+";@	c #F7EBD5",
+">@	c #E28A00",
+",@	c #27190D",
+"'@	c #CC9649",
+")@	c #82A2AA",
+"!@	c #211D1E",
+"~@	c #63777E",
+"{@	c #5B6B70",
+"]@	c #5F0000",
+"^@	c #F5DCB5",
+"/@	c #120D09",
+"(@	c #231B16",
+"_@	c #090604",
+":@	c #331D0D",
+"<@	c #C17D12",
+"[@	c #525F66",
+"}@	c #59676E",
+"|@	c #6B0000",
+"1@	c #4D0000",
+"2@	c #630000",
+"3@	c #D48815",
+"4@	c #835E49",
+"5@	c #F3BD95",
+"6@	c #CB7600",
+"7@	c #5E7077",
+"8@	c #640000",
+"9@	c #470000",
+"0@	c #ECA755",
+"a@	c #E6B9A4",
+"b@	c #DEBBB0",
+"c@	c #DBB9A7",
+"d@	c #E9C675",
+"e@	c #D9A945",
+"f@	c #5D0000",
+"g@	c #E4A815",
+"h@	c #CD2D12",
+"i@	c #CD2A33",
+"j@	c #E47484",
+"k@	c #E17800",
+"l@	c #CB9B6A",
+"m@	c #F7CC86",
+"n@	c #DBB596",
+"o@	c #576469",
+"p@	c #4C575C",
+"q@	c #596970",
+"r@	c #4A0000",
+"s@	c #530000",
+"t@	c #C50319",
+"u@	c #4A5459",
+"v@	c #515D62",
+"w@	c #FBF0AA",
+"x@	c #B92A2E",
+"y@	c #C40423",
+"z@	c #F0BD3D",
+"A@	c #60737B",
+"B@	c #420000",
+"C@	c #E58A71",
+"D@	c #FBF5D8",
+"E@	c #FEE100",
+"F@	c #DA6903",
+"G@	c #F5D02D",
+"H@	c #4C555A",
+"I@	c #BB2C14",
+"J@	c #AF0121",
+"K@	c #57666B",
+"L@	c #58666C",
+"M@	c #AC041B",
+"N@	c #9B0020",
+"O@	c #96001B",
+"P@	c #BA7601",
+"Q@	c #D57943",
+"R@	c #98530B",
+"S@	c #B86507",
+"T@	c #89A9B2",
+"U@	c #EEC217",
+"V@	c #D64E53",
+"W@	c #AA6307",
+"X@	c #AD580C",
+"Y@	c #F2CD44",
+"Z@	c #9A6208",
+"`@	c #5C6C73",
+" #	c #5E6E75",
+".#	c #353538",
+"+#	c #36373A",
+"@#	c #3C3E43",
+"##	c #41464C",
+"$#	c #43494F",
+"%#	c #454C52",
+"&#	c #536267",
+"*#	c #ADCDD5",
+"=#	c #A5C6CC",
+"-#	c #454B50",
+";#	c #400000",
+">#	c #282326",
+",#	c #3F4447",
+"'#	c #42484D",
+")#	c #495155",
+"!#	c #526167",
+"~#	c #EDD38C",
+"{#	c #2F2D30",
+"]#	c #2B2A2C",
+"^#	c #EAB827",
+"/#	c #F5D645",
+"(#	c #ECBA15",
+"_#	c #B2D1D9",
+":#	c #F9E8B8",
+"<#	c #383B3F",
+"[#	c #F0BD14",
+"}#	c #323235",
+"|#	c #F3C816",
+"1#	c #3E3F45",
+"2#	c #4F5C61",
+"3#	c #4E5A5F",
+"4#	c #404449",
+"5#	c #515D64",
+"6#	c #474E53",
+"7#	c #4D575D",
+"8#	c #F5D658",
+"9#	c #484F54",
+"0#	c #EDC646",
+"a#	c #F7D218",
+"b#	c #F9E374",
+"c#	c #F9E692",
+"d#	c #F8E156",
+"e#	c #F9E04C",
+"f#	c #00C91E",
+"g#	c #00C81D",
+"h#	c #00BC2C",
+"i#	c #00B03A",
+"j#	c #00A448",
+"k#	c #009856",
+"l#	c #008C64",
+"m#	c #008072",
+"n#	c #007480",
+"o#	c #00688E",
+"p#	c #005C9C",
+"q#	c #0050AA",
+"r#	c #0044B8",
+"s#	c #0038C6",
+"t#	c #002CD4",
+"u#	c #0020E2",
+"v#	c #0014F0",
+"w#	c #0007FF",
+"x#	c #FC9494",
+"y#	c #FA8B8B",
+"z#	c #F78383",
+"A#	c #F67B7B",
+"B#	c #F47373",
+"C#	c #F26A6A",
+"D#	c #EF6262",
+"E#	c #EE5A5A",
+"F#	c #EC5252",
+"G#	c #EA4A4A",
+"H#	c #E74141",
+"I#	c #E63939",
+"J#	c #E43131",
+"K#	c #E12929",
+"L#	c #DF2020",
+"M#	c #DE1818",
+"N#	c #DC1010",
+"O#	c #D90808",
+"P#	c #323336",
+"                                                                                                                                . + + + + + + + + + + + + + + + + + + + + + + + + + + + @ @ # $ % & * = - - - - - - - - - - - - - - - - - - - - - - - - - - - ; > > > > > > > > > > > > , ' ) ) ! ! ~ { > > > > > > > > > > > > > > > > > > > > > > > > ] ^ / / , ( ( _ > > > > > > > > > > > > > > > > > > > > > > > > : < ] [ [ } } ~ > > > > > > > > > > > >                                             [...]
+"                                                                                                                                + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + > > > > > > > > > , | ^ 1 2 3 } 4 ( | 5 6 7 8 > > > > > > > > > > > > > > > > > > ] 1 2 : 9 0 a b c d e f g h > > > > > > > > > > > > > > > > > > i j k l m n o p q r s t u 7 > > > > > > > > >                                             [...]
+"    v v v v v v v v v v v v v v v v v v v v v v w x y v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v     + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + > > > > > > > / / / i z z i A 2 [ 1 g ) B f C D e > > > > > > > > > > > > > > < 2 E F o o G H I J b K L j M N O f > > > > > > > > > > > > > > i k c P P P Q m R F I J S K i T _ t > > > > > > >                                             [...]
+"    v v v v v v v v v v v v v v v v v v v U V W W X V W Y V v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v     + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + > > > > > > ' ( Z L `  . .k d : ..+., | t h O @.#.$.> > > > > > > > > > > > 1 2 H %.&.m m &.R F I *.=. .Z +.( -.5 ;.> > > > > > > > > > > > j >.,.'.).'.P Q m R G !.J ~.{.].^./.(._.> > > > > >                                             [...]
+"    v v v v v v v v v v v v v v v v v V :.:.:.:.<.:.:.:.X W [.V v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v     + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + > > > > > ' g E L  .c =.}.b =.K ].2 u ( -.h O @.|.1.2.> > > > > > > > > > ^ 3 p %.m Q P P ,.m n F q r {.L < / ! 3.4.#.> > > > > > > > > > < k 5.P '.'.P Q 6.R G p 9 J r {.` 7.8.( @.9.> > > > >                                             [...]
+"    v v v v v v v v v v v v v v v v Y :.:.<.<.:.<.<.<.:.:.0.W V V v v v v v v v v v v v v v v v v v v v v v v v v v v v v v     + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @ + + + + @ + + @ + + + + + + + + + + + + + + + + + + + + + + + > > > > ! a.2 i k =.r b.!.p I J S ` ..4 a.3.O N 5 c.2.d.> > > > > > > > / ] I G &.,.'.).P Q &.o p b.e.l  .^.1 ' B T c.f.> > > > > > > > ] ].&.5.,.,.5.n G p q 0 *.r b }.{.` 7.} / ! g.C > > > >                                             [...]
+"    v v v v v v v v v v v v v v v h.X :.<.<.<.<.<.<.<.i.:.W V Y V j.v v v v v v v v v v v v v v v v v v v v v v v v v v v v     + + + + + + + + + + + + + + + + + + + + + + + + + + + + k.k.k.k.k.l.k.k.+ + + + @ @ + + + + + + + + + + + + + + + + + + + + + + > > > ! ' } ^.L m.a p %.&.n o n.b.{.L 3 ( B O D o.;.p.q.r.> > > > > > , +.a n.%.m ,.,.5.6.n G p I J S =.k E 4 | B T s.#.p.> > > > > > [ z G n 6.&.R p I b.J e.~.b =.c >.k L ^.+., ! _ _.t.> > >                                             [...]
+"    v v v v v v v v v v v v v v v W :.:.<.<.<.<.<.<.<.:.W W 0.W V u.v.v v v v v v v v v v v v v v v v v v v v v v v v v v v     + + + + + + + + + + + + + + + + + + + + + + + + k.l.w.x.y.z.A.B.C.B.D.x.E.l.k.k.+ + + @ + + + + + + + + + + + + + + + + + + + + > > s.! / +.E k ~.n.n m Q Q 6.G q S k ../.~ F.N 4.G.H.r.I.J.> > > > { /.=.*.n.R 6.6.n n o F n.9 J r l K k E 8.K.B T s.L.M.N.> > > > s : 9 H o %.H 9 J J e.S b l m.K  .` L Z ..+., ! _ { O.P.> >                                             [...]
+"    v v v v v v v v v v v v v v Y X <.<.<.<.<.<.<.<.:.0.W 0.W 0.W [.j.v v v v v v v v v v v v v v v v v v v v v v v v v v v     + + + + + + + + + + + + + + + + + + + + + k.Q.R.S.B.T.U.V.W.W.W.X.Y.Z.`.B.D.y. +.+++k.+ @ + + + + + + + + + + + + + + + + + + + > > { | , 8.A m.0 G &.Q P P Q R 9 a @+< 1 ) f s.#+1.d.$+%+N.> > > > 3.d =.a n.o o G G F p I q J ~.b {.` z ^.+.( &+O N o.*+=+> > > > ' r b.!.p !.0 a e.~.b =.{.K @+k ].i Z ^.3 8.( -._ O -+;+> >                                             [...]
+"    v v v v v v v v v v v v v v X :.<.<.<.<.>+>+<.0.0.0.:.:.:.0.W [.j.v v v v v v v v v v v v v v v v v v v v v v v v v v v     + + + + + + + + + + + + + + + + + + + l.x.C.Z.,+,+'+)+)+'+,+V.W.X.T.Z.!+~+{+]+]+^+R.E.k.+ + @ + + + + + + + + + + + + + + + + + > N 7 ! g 4 : l b.F n 5.).'.P n 0 a K +./+-.f (+O.H._+:+<+[+}+> > 8 / z c ~.I n.!.!.!.I q 0 J r =.{.>.i 7.< 4 /+t 8 |+#+f.d.1+> > 2+2 b a 0 b.a S }.l l m.c K  .].d z 7.2 3 } 4 /+7 h 3+g.G.4+>                                             [...]
+"    v v v v v v v v v v v v v V X :.0.<.<.<.>+<.<.<.0.<.0.:.0.W Y u.j.5+v v v v v v v v v v v v v v v v v v v v v v v v v v     + + + + + + + + + + + + + + + + + ++ +6+7+8+9+0+a+b+a+W.^+B.C.C.B.A.z.D.y.B.]+c+{+B.x.++++k.+ @ + + + + + + + + + + + + + + + + > 1.s t ' / i m.e.n.%.m '.'.,.R q r @+4 a.B O D O.q.;+d+4+e+}+> > c.} A k l J *.0 0 0 0 *.e.~.}.c >.].7.3 +., a.t e |.c.p.f+}+> > _.` m.b ~.S =.=.{.m.c >. .k ].z : A ..< } 4 / g &+g+(.h+c.}+>                                             [...]
+"    v v v v v v v v v v v v v W W 0.<.<.<.<.<.<.<.<.<.0.0.:.W 0.V u.j.i+v v v v v v v v v v v v v v v v v v v v v v v v v v     + + + + + + + + + + + + + + + l.x.C.Z.U.9+j+k+l+c+^+D.x.++k.k.k.k.k.k.k.E.x.D.z.S.y.R.m+m+E.k.+ @ + + + + + + + + + + + + + + + > (.n+3.-./ E  .S q H n Q Q m G *.c L / ~ s e |.t.q.o+p+e+q+J.> > 2+4 2 z {.b ~.r e.e.S }.l {.>.].z Z 3 +.1 /+! B 8 _.;.H.I.r+> > 7 i @+c =.m.K K >. at +k ].d z : E ^...] +./.^ ( a.t T 6 5 ;.d+>                                             [...]
+"    v v v v v v v v v v v v s+0.W :.0.<.0.<.<.<.<.0.<.0.<.0.Y Y Y [.u.j.v v v v v v v v v v v v v v v v v v v v v v v v v v     + + + + + + + + + + + + + + E.D.`.W.a+0+k+l+c+B. +++k.+ + + + + + + + @ + k.l.++E.Q..+x. +++k.k.+ + @ + + + + + + + + + + + + + |+3.O f B / j i k {.r q H F n.J l A ] ! f (.g.9.#.r.t+r+u+}+v+}+(.g / [ A >.m.m.m.K K >. .k L : E j ] M ( a.) 7 3.O 4.w+d.x+:+y+n+} E L k >. .` ].z z : A E ^...3 [ +.4 / ( /+K.' t { N o.*+z+r+                                            [...]
+"    v v v v v v v v v v v A+V W V Y 0.0.<.<.<.<.<.<.0.0.0.0.W Y u.[.u.j.B+v v v v v v v v v v v v v v v v v v v v v v v v v     + + + + + + + + + + + + + l.z.C+8+a+D+8+Z.C.x.l.+ + + + + + + + + + + + + + + @ + k.k.++k.k.E.k.+ + @ @ + + + + + + + + + + + + $.|+6 O s K.4 3 E L >.e.q q r {.d 3 M B e |+4.;.E+I.v+q+}+}+}+}+F+7 K.1 ..d ` ` ].].].` d z E 2 3 [ 8./ a.! t G+f e #+$._+%+H+}+4.M < 7.z ].L i Z A E E ^.2 3 ] } 8./.^ ( g a.' -.B 8 g.O.1.I+}+                                            [...]
+"    v v v v v v v v v v v W Y V J+K+W 0.<.<.<.<.0.0.0.0.W Y Y [.[.u.u.j.j.v v v v v v v v v v v v v v v v v v v v v v v v v     + + + + + + + + + + + + k.S.X.9+k+8+X.`.y.+++ + + + + . ; - - - - - - L+M++ + + + @ + + k.l.w.l.N+@ @ @ @ + + + + + + + + + + + H.L.-+s.O t | 1 ] : z @+ at +@+m.d < ( ~ n+ at .|.c.M._+%+1+}+}+}+}+}+G._ ! g /.2 7.: : L : Z 2 j ..] 8.1 , K.! -.B h O s.;.d.;+t+O+}+#+/+/.] 2 E 7.E 7.E 2 ..] [ [ +./.1 / ( g K.' ~ B s P+_.;.H.;+}+                                            [...]
+"    v v v v v v v v v v v W V 5+Q+Q+V 0.<.0.<.<.<.<.0.0.0.Y u.u.[.u.u.j.j.v v v v v v v v v v v v v v v v v v v v v v v v v     + + + + + + + + + + + k.S.X.R+)+U.c+C.x.k.+ + + . ; - S+S+- - - - - - T+T+- L+M++ + + @ + k.E.k.U+U+M+N+@ + + + + + + + + + + + 2.C 4.|.(+f &+) g , M } 3 < [ 1 ' t f N #+#.$.r.:+p+J.}+}+}+}+}+*+n+3.~ ( +.] 3 3 3 3 < } 8./.1 ( g a.~ B _ 2+T (.g.w+I.V+W+X+}+C ' ( M [ 3 3 3 < ] [ } 8./.4 1 / ( /+a.' ! -.&+3.g+ at .#+f.q.%+}+                                            [...]
+"    v v v v v v v v v v Y+W V Z+Q+Q+W 0.<.<.<.0.<.0.0.Y [.`+u.[.u.u.j.u.j.w v v v v v v v v v v v v v v v v v v v v v v v v     + + + + + + + + + + k.R.Y.R+ @8+. at y.E.k.+ + . ; S+S+- ; + at +@+ at +@+ at +@+ at +@L+- T+T+L+M++ + @ + + + U+@@#@$@%@+ + + @ + + + + + + + &@*+;.C |.e f h 3._ 7 ! K.a.7 _ T { s.c.p.f+I.[+<+N.}+}+}+}+}+}+w+(.n+_ ' / /.M M ^ M ^ ^ / /+a.) ) -.3.2+T O (. at ._.H.[+p+1+}+}+*@&+' g M 8.} u u M 4 1 1 / , /+K.K.a.! -.B B _ h { g.F+H.$+t+}+                                            [...]
+"    v v v v v v v v v v =@X W s+-@;@Y <.<.0.0.0.0.>@0.u.,@, at j.u.u.u.j.[.u.'@v v v v v v v v v v v v v v v v v v v v v v v v     + + + + + + + + + + x.Z.j+ @8+)@m+l.+ + + . !@S+; + at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@L+T+$ M++ + + @ @ N+~@@@{@$@@ + @ @ + + + + + + + d.2.$.f.t.L. at .3+n+f h g+n+F.n+O (+4.c.E+q.I.]@p+O+}+}+}+}+}+}+}+f.|+(.T 3.! K./+, , ( g a.| ' ! -.G+3.f n+O e N 5 F+I+t+N.J.}+}+c.h B ! K., ^ 1 1 1 ^ , /+g g K.a.! ~ t &+B 3.2+T 6 9.M.r.[+H+}+                                            [...]
+"    v v v v v v v v v v v :.W v.^@^@0.0.0.0.0.0.0.>@u./@(@_@:@u.u.u.u.u.j.<@v v v v v v v v v v v v v v v v v v v v v v v v     + + + + + + + + + ++~+b+R+8+. at m+k.+ + . ; S+!@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@$ T+L+M++ + @ @ N+$@[@}@# @ @ @ + + + + + + + r+}+|@d.$.#.4.|.|+6 P+P+6 s.|+5 #+#.M.r.x+V+v+1+}+}+}+}+}+}+}+}+=+q+-+s.T 3.-.! ' a.| ' ! ~ 7 &+G+s 2+T 3+P+D 5 O.H.%+1 at X+}+}+}+:+4+2+3.-.a.g /+( ( ( g K.a.| ' ! -.7 B 3._ f T 3+g.F+d.2 at t+}+}+                                            [...]
+"    v v v v v v v v v v v W W V 0.0.0.0.<.0.0.0.0.>@3 at 4@J+J+5@[.u.[.j.[.j.6 at v v v v v v v v v v v v v v v v v v v v v v v v     + + + + + + + + + R.Y.9+b+c+S.l.+ + . !@S+; + at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@L+T+$ M++ + @ @ $@[@L+7 at N+@ @ + + + + + + + > q+;+8 at r.&@*+;.;.F+#.t.#.*+M.&@_+2@]@t+N.9 at J.}+}+}+}+}+}+}+}+> > W+4.|.(+T _ G+G+3.3.3._ s 2+n+T 8 3+(+-+|.o.C *+I.4+q+}+}+}+> > o+O g+3.-.' ' ' ) ! ! ~ -.7 t B 3._ h n+F.O e s.9.$.I+V+1@}+>                                             [...]
+"    v v v v v v v v v v v W V W 0.0.0.0.<.0.0.0.0.>@0 at a@b at c@d at u.u.u.[.[.j.e at v v v v v v v v v v v v v v v v v v v v v v v v     + + + + + + + + E.)@b+9+W.6+Q.+ + . !@!@. + at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@M+$ $ M++ + @ M+$ L+[@$@%@@ + + + + + + + > r.<+V+f at 2@r.$.$.H.&@d.f+$+2 at f@t+p+H+q+J.}+}+}+}+}+}+}+}+}+}+> > $.G.C _.N O 2+f f g+n+T O 8 (.6 s.N |.L.4.*@F+d.<+9@}+}+}+}+> > #.N e T s t ~ -.-.7 t B G+3._ h h f F.{ 8 (.6 |.*+r.[+v+X+}+>                                             [...]
+"    v v v v v v v v v v v g at W 0.0.0.0.h at i@j@<.0.>@>@k at l@m at n@[.[.u.Y Y [.[.w v v v v v v v v v v v v v v v v v v v v v v v v     + + + + + + + + R.X.0+b+]+m+k.+ + ; S+. + at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@M+^+m++ + @ %@$@o at p@q at M+@ + + + + + + + > N.}+W+v+p+<+:+I.I.8@;+%+d+<+v+r at 1+y+}+}+}+}+}+}+}+}+}+}+}+}+> > p+}+M.#.O.h+6 8 O 8 3+(.6 6 N -+g.|.4.O.c.*+d.o+1+}+}+}+}+}+> > %+O+g.s.3+g+_ B B G+3._ s h f n+n+T 8 3+(.s.|.#.q.[+s at 9@}+}+>                                             [...]
+"    v v v v v v v v v v v v W t at t@t at t@t at t@t at t@t@>@k at k@k at u.>@>@Y Y Y Y u.j.v v v v v v v v v v v v v v v v v v v v v v v v v     + + + + + + + ++~+b+0+X.A.+++ + . S+; + at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@m+^+M++ + @ # $ u at v@$@%@+ + + + + + + > > }+u+u+u+1+1 at p+=+p+p+H+r+N.u+J.}+}+}+}+}+}+}+}+}+}+}+}+}+> > > > O+r.z+$.#.9.g.N N N |+|+-+|.L._.C ;.*+M.|@o+1+}+}+}+}+}+> > > > p+O._.g.s.O g+h f 2+f g+n+F.{ O e 6 s.D L.#.q.[+s at O+}+}+> >                                             [...]
+"    v v v v v v v v v v v v w at x@t at y@y at y@t at t@t at t@t at t@t at k@>@>@W Y Y [.u.j.w v v v v v v v v v v v v v v z@>+>+X v v v v v v v     + + + + + + k.m+X.R+a+)@.++ + + ; S++ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@^+m++ + @ %@A at v@u@$ N+@ + + + + @ + > > O+}+}+}+}+}+B at 9@O+q+y+B@}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+> > > > 4+}+;+I+q.$.;.4.L._._._.4.#+*@t.*+p.H.I+t+q+}+}+}+}+}+}+> > > > o+X+F+C _.g.6 O T { { O O 3+(.P+s.|+-+4.*+r.[+4+9@}+}+}+> >                                             [...]
+"    v v v v v v v v v v v v v C at h@h at t@t at t@t at t@t at t@t at t@t at t@>@0.Y [.u.[.`+v v v v v v v v v v v v v D@>+>+E at E@>+X v v v v v v     + + + + + + ++6+b+j+X.D.l.+ + . S+; + at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@m+^+M++ + @ U+q@% [@U++ + + + + @ + > > > }+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+> > > > > > }+}+V+[+;+f+2.*+F+t.F+#.*+f.E+&@f+:+H+J.}+}+}+}+}+}+> > > > > > }+}+f.#.c.4.h+s.6 P+6 (+s.N -+h+_.*@$.I+o+v+9@}+}+}+> > >                                             [...]
+"    v v v v v v v v v v v v v v t at y@t at t@h at h@t at t@t at t@t at y@y at F@Y u.u.u.[.v v v v v v v v v v v v G@>+>+E at E@E at E@>+<.Y v v v v v     ++E.w.Q.Q.x.A.C+9+b+{+Q.k.+ + ; S++ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@^+m++ + @ N+7 at H@L+M+++w.w.++E.k.@ > > > > }+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+> > > > > > > > }+}+v+s at P.<+%+8 at r.d.d.|@_+x+d+H+B@}+}+}+}+}+}+}+> > > > > > > > }+}+d.H.p.w+;.#+_.5 5 L._.C #.$.f+[+p+N.X+}+}+}+> > > >                                             [...]
+"    v v v v v v v v v v v v v v I at t@y at y@y at i@t at h@h at h@t at J@I at u.u.u.u.V v v v v v v v v v v G@<.>+>+E at E@E at E@E at E@>+<.0.v v v v v     .+B.{+{+~+`.C+D+j+V.z.l.+ + + - - + at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@b+b++ + + @ $@K at L@+ y.C.6+B.~+~+x.> > > > > }+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+> > > > > > > > > > }+}+u+1+O+r at N.1@H+H+1 at r@X+}+}+}+}+}+}+}+}+}+> > > > > > > > > > }+}+8 at _+r.q.d.2.$.E+H.&@r.2 at f@t+H+9@}+}+}+}+> > > > >                                             [...]
+"    v v v v v v v v v v v v v v M at J@N at J@N at y@y at y@y at t@O@>@>@>@u.Y >@P at 3@[.V V W W :.<.<.>+>+>+E at E@E at E@E at E@E at E@>+>+0.W v v v v     ,+U.Y.T.C+X.U.k+b+]+x.k.+ + . S+; + at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@m+^+M++ + @ N+$@~@.+^+!+c+c+b+k+Y.> > > > > > }+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+> > > > > > > > > > > > }+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+> > > > > > > > > > > > }+}+o+%+[+]@]@[+f@%+<+P.v+1 at 9@}+}+}+}+}+> > > > > >                                             [...]
+"    v v v v v v v v v v v v v v Q at y@J at N@M at J@M at J@N at O@k@>@u.>@>@R at R@R at S@6 at u.Y Y 0.<.<.>+>+E at E@E at E@E at E@E at E@E at E@>+<.0.0.v v v v     7+W.C+Z.7+T.X.Y.!+y.l.+ + + ; S++ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@^+m++ + @ @ @ k. +6+.@!+T@'+'+c+> > > > > > > }+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+> > > > > > > > > > > > > > }+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+}+> > > > > > > > > > > > > > }+}+}+r+W+v+W+H+1 at N.u+B@}+}+}+}+}+}+> > > > > > >                                             [...]
+"    v v v v v v v v v v v v W V Y y at J@J at J@J at J@N at O@u.>@k at u.>@`+R at R@R at S@6 at k@Y 0.0.<.<.>+>+>+E at E@E at E@E at E@E at E@>+>+>+<.:.[.v v v     + %@l.A.C.C.B.D.x.l.+ + + + - - + at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@b+b++ + + @ + k.w.R.D.B.~+. at A.+ > > > > > > > > > }+}+}+}+}+}+}+}+}+}+}+}+}+}+> > > > > > > > > > > > > > > > > > }+}+}+}+}+}+}+}+}+}+}+}+}+}+> > > > > > > > > > > > > > > > > > }+}+}+}+}+}+}+}+}+}+}+}+}+}+> > > > > > > > >                                             [...]
+"    v v v v v v v v v v v U@:.0.Y >@V at y@y at M@J at O@`+`+u.`+k@`+B+W at R@X at S@6 at u.0.0.<.<.>+>+>+>+E at E@E at E@E at E@E at E@>+>+<.<.0.V v v v     + @ + l.E.++l.k.+ + + + + + - - + at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@b+b++ + + + @ + k.l.++Q.x..++++ > > > > > > > > > > > > }+}+}+}+}+}+}+}+> > > > > > > > > > > > > > > > > > > > > > > > }+}+}+}+}+}+}+}+> > > > > > > > > > > > > > > > > > > > > > > > }+}+}+}+}+}+}+}+> > > > > > > > > > > >                                             [...]
+"    v v v v v v v v v v Y@<.<.<.0.Y u.t at t@I at 6@B+6 at B+`+`+`+<@B+W at Z@W at S@`+u.k at 0.0.0.<.>+>+>+E at E@E at E@E@>+>+E@>+>+<.<.0.W v v v     + + @ + + + + + + + + + + + - - + at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@b+b++ + + + + + @ @ %@@ k.k.+ + > > > > > > > > > > > > 0 }.l =.{.{.{.< > > > > > > > > > > > > > > > > > > > > > > > > J =.=.}.}.}.}.u > > > > > > > > > > > > > > > > > > > > > > > > Z } } [ < ] ] &+> > > > > > > > > > > >                                             [...]
+"    v v v v v v v v v <.>+<.<.<.0.>@>@6 at B+X@X at X@S at S@B+6@`+6 at B+B+B+6@`+u.0.>@0.0.<.<.>+>+>+E at E@E at E@E@>+E@>+>+>+<.0.0.W v v v     + @ @ @ @ @ @ @ @ @ + + + + - - + at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@b+b++ + + + + + + @ @ @ + + + + > > > > > > > > > 0 b H 6.R o H n.9 b./.} K } > > > > > > > > > > > > > > > > > > J c &.{.d.&@H.$.H.M.f +.S 8.> > > > > > > > > > > > > > > > > > A u {.[ }+}+}+}+}+}+;.3.3 t > > > > > > > > >                                             [...]
+"    v v v v v v v v <.>+>+>+<.<.<.0.>@F at B+X@I at X@X at X@6@`+`+`+`+`+`+u.>@Y 0.0.<.<.<.<.>+>+>+>+>+>+E@>+>+>+>+>+<.<.0.Y Y v v v     + @@q@$ `@ #@@$@# @ @ + + + - - + at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@b+b++ + + + + + + @ + k.k.+ + + > > > > > > > b.H R &.%.G H !.9 b.J e.~.}.{./+M +.> > > > > > > > > > > > > > J 6.a |@q.&@H.$.p.1.f.*+#.#.;.B < } > > > > > > > > > > > > > > A {.d }+}+}+}+}+}+}+}+}+X+y+u+_.&+-.> > > > > > >                                             [...]
+"    v v v v v v v <.>+>+>+>+>+<.<.0.>@u.6 at X@X at X@S at B+6@`+>@>@>@>@Y >@0.0.<.0.<.<.<.>+>+>+E at E@E at E@E@<.>+>+<.>+<.0.0.0.W v v v     .#+#@###$#%#% &##@N++ @ + + L+T++ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@*#=#+ + + + + + + + + + + + + -#> > > > > > S G n o F n.!.q 0 *.e.~.b l {.K k z ' n+> > > > > > > > > > > > }.!.z+z+z+&@p.M.1.1.*+#.t.t.c.O.9.4.g P+> > > > > > > > > > > > ] =.}+}+}+}+}+}+}+}+}+;#u+9 at O+1@v+4+e t.> > > > > >                                             [...]
+"    v v v v v v >+>+>+>+>+>+>+<.0.<.0.>@F at S@W at X@S at 6@`+u.Y k@>@0.0.0.0.<.<.<.<.<.>+>+E at E@>+E at E@E@>+<.>+>+>+<.<.0.0.W W v v v     >#.#& ,#. '#)#!#@@+ k.+ + + M+T+L++ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@=#*#l++ + + + + + + + + + + + + .#> > > > > }.H o H n.9 0 a ~.}.l =.m.m.c >.k d : 7.-.O > > > > > > > > > > ~.o H.E+E+$.M.M.f.f.*+#.c.*@#+4._._.|.g.^ 3+> > > > > > > > > > 3 q }+}+}+}+}+}+}+}+}+;#9 at 1+1@v+P.P.o+[+g+C > > > > >                                             [...]
+"    v v v v v v >+<.>+>+>+>+>+>+<.<.0.0.>@6 at 6@6 at F@u.Y 0.0.0.0.0.<.0.<.<.<.<.>+>+>+>+E at E@>+E@>+E@>+<.<.<.<.<.<.<.0.W ~#v v v     = $@ #[@v@&#q@$@l. +x.k.+ + + - - + at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@b+b++ + + + + + + + + + + + + + {#> > > > l n.H !.9 J r l m.>.k ` ].d d d ].d i A 2 [ G+3+> > > > > > > > ~.%.2.E+M.M.f.w+*+;.C 9.#+9.#+_.|.|.h+g.D @.u O > > > > > > > > 3 !.}+}+}+}+}+}+}+J.9 at e+e+1@1 at s@d+o+V+f@;+$+_ 9.> > > >                                             [...]
+"    v v v v v >+>+>+>+>+>+E@>+>+>+<.<.0.0.Y >@>@Y 0.>@0.0.0.<.<.<.<.>+>+>+<.>+E@>+E at E@>+E@>+<.E@<.0.<.<.<.<.<.0.W W v v v v     ]#$@~@U+$@U+# k.R.B.y.l.@ + + L+T++ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@*#=#+ + + + + + + + + + + + + + - > > > =.I I q J r l K  .].d z z i : A A E E 7.2 3 8.^ s (.> > > > > > e.n H.$.w+*+*+G.;.O.9.o._.5 |.g.g.|+|+N (+s.s. at .3 T > > > > > > ..p }+}+}+}+}+}+J.1+N.H+4+P.<+o+V+[+:+2 at _+I+_+I.-.4.> > >                                             [...]
+"    v v v v v >+>+>+>+>+E@>+>+>+>+>+<.0.0.0.0.>@0.0.0.0.<.>+>+>+<.>+E at E@>+>+E at E@>+E@>+<.E at E@<.>+<.0.<.<.<.<.<.0.W ^#v v v v     - + + @ @ @ + k..+S. +k.+ @ + M+T+L++ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@=#*#l++ + + + + + + + + + + + + + - > > ( q q J a b m. .].d z i : Z E 7.7.^.2 ..j 3 [ /./ g n+&@> > > > | Q *+*+#.;.;.;.*@9.o.L.L.5 |.|+s.(+s.6 (.3+8 { F.F.i f@> > > > T F }+}+}+B at B@J.q+e+H+4+4+p+t+f at 8@I+I.f+q.2.H.M.w+w+K.9@> >                                             [...]
+"    v v v v /#<.>+>+>+E at E@>+>+>+>+>+>+<.<.0.0.0.0.<.<.<.>+>+>+>+<.E at E@E@<.E@>+>+<.E@>+<.E@>+>+<.0.<.<.<.0.0.0.W W v v v v v     - + + + + + + k.E.m+x.++k.+ + + L+T++ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@*#=#+ + + + + + + + + + + + + + + - > > 7.*.e.~.l K ` L z i Z A E 7.^.2 ..j 3 < ] [ 8.1 ( a.7 c.> > > >  .G.;.;.*@c.O.#+_._.L.|.|+N s.s.6 e O { T T f f h f f 4.> > > > , J.q+q+9 at u+O+N.v+v+4+=+[+x+8 at 8@_+d.$.M.M.f.;.;.*@;.;.I+> >                                             [...]
+"    v v v v >+<.>+>+E at E@E at E@>+>+>+>+>+<.<.<.0.<.<.<.<.>+E@>+>+<.E at E@E@>+<.E@>+>+>+>+<.<.>+<.<.0.0.0.<.<.0.<.0.W X v v v v v     - + + + + @ + k.++m+R.w.++k.@ + M+T+L++ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@=#*#l++ + + + + + + + + + + + + + + - > /+a S }.{.>.d i : Z A E 7.7.2 ..j 3 ] [ } 8.u 4 / g ' t 3+d.> > a.P F+;.c.C O.4.5 h+g.D s.6 6 e 8 { F.f f g+f h h h _ 3.].[+> > n+%.y+q+9 at O+r@H+P.<+<+[+8 at f+_+d.E+M.w+;.t.#.;.*@*@*@#+4.( O+>                                             [...]
+"    v v v v >+>+>+>+E@>+>+>+E at E@>+>+>+>+>+>+<.>+>+>+>+E at E@>+<.E at E@E@>+<.E@>+>+<.E@>+<.<.<.<.<.<.0.<.0.<.0.0.W V v v v v v v     - + + + + + + + k.w.m+x.Q.k.+ + + L+T+M++ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@l+*#=#+ + + + + + + + + + + + + + + + - > T =.{.c  .L Z Z A E 7.^.2 ..j 3 < ] } +.8./.M 1 ( a.! B f 4+> > s.;.c.C O.9.L.g.-+|+(+3+{ O F.f h _ _ s _ G+B 3.3.B &+&+B }+> > #.9 at O+N.N.r+p+d+o+[+I.H.M.M.G.c.4._.o.9.4.5 5 o.4.L.|.|._.}+>                                             [...]
+"    v v v v >+<.<.>+>+>+>+>+>+>+>+E@>+>+>+<.>+<.>+>+>+E at E@>+<.E at E@>+>+E at E@>+<.>+>+>+<.<.0.<.0.0.<.<.<.0.0.:.W (#v v v v v v     - + + + + + @ + + k.Q.m+x.+++ @ + M+$ $ M++ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@l+_#_#l++ + + + + + + + + + + + + + + + - > ] >. at +k L Z E 7.7.^...j 3 3 ] [ } } 8.u /.M ^ / /+' -.3.n+1.> > {.C #+_._.|.|+N @.6 8 T n+n+h s G+B t &+t -.-.~ ~ ! -.-.-.h+> > /.N.r+p+p+<+f@:+;+f+H.1.;.F+o._.g.D @.|+D s.s. at .N s.D |+|+z+>                                             [...]
+"    v v v D at i.<.>+>+>+>+>+>+>+E at E@E@>+>+>+>+>+>+>+E@>+E@>+>+E at E@E@<.<.>+>+<.>+>+<.<.<.<.<.<.<.<.0.<.0.<.W W X v v v v v v v     - + + + + + + @ + k.++y.R.w.k.+ @ + M+$ ^+m++ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@=#*#_#l++ + + + + + + + + + + + + + + + + - a.}.].].L : 7.^...j 3 < ] [ } +.8.u /.M 1 ^ / / ( g ) t _ F.-+r.g '._.5 |.g. at .s.6 3+n+n+n+f _ G+&+B -.) a.| a.a.K.K.K.K.a.g K ;+f F p+<+d+%+8 at I._+z+#.#.F+C L.|+s.N 3+T f T T T n+{ O O 3+O 4 e+                                            [...]
+"    v v v :#i.<.<.>+>+>+>+>+>+>+E@>+>+>+>+>+>+>+>+>+E at E@>+E at E@E@>+<.>+>+<.0.>+<.<.<.<.<.<.<.<.<.<.0.0.0.W X v v v v v v v v     - + + + + + + + + + l. +m+l.+ + + @ + M+m+^+$ + at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@_#*#=#l++ + + + @ @ @ + + + + + + + + + + + - O : i i Z 7...j < ] ] [ } } 8.u /.4 4 1 / / ( ( /+K.! B h O D v+(.|.g.|+-+s.(.O O n+s 3.3.&+-.-.' a.( ( ( / / 1 / / ( ^ / ^ / }+c.V+f@:+[+$+q.E+$.#.4.|.g.s.O O h 3.-.-.-.7 &+7 G+_ f s h h g+}+                                            [...]
+"    v v v D@>+>+>+<.<.>+>+>+>+>+>+>+>+>+E@>+>+>+>+E@>+>+>+E@>+<.<.E@>+<.<.<.<.<.0.0.0.<.<.0.0.0.0.<.W W X /#v v v v v v v v     - + + + + + + + @ + k.++k.N+# %@@ @ @ + + M+$ ^+m++ at +@+ at +@+ at +@+ at +@+ at +@+ at +@+ at +@=#*#_#l++ + + + %@$@# M+~@# @ @ + + + + + + + + - 3+2 7.7.2 j < ] ] ] } +.u /.u 4 M 1 ^ / , , ( g K.| 7 _ g+e h+r+(.h+|+ at .s.3+O F.f _ 3.B t ' a.g ( / / 1 1 +.u } u +././.4 1 / }+c.%+x+8 at I.H.$.w+;._.|.|+P+2+t ! a.( K.g K./ K.K.' ' &+B G+s g+}+                                            [...]
+"    v v v v i.>+<.<.>+<.>+>+<.>+>+>+E@>+>+>+>+<.<.<.<.<.<.<.>+<.<.<.<.<.>+<.<.0.<.0.<.<.0.0.W 0.W W W X Y at v v v v v v v v v     - + + + + + + + + @ + k.+ M+$@~@# %@@ @ + + M+m+^+^+b+m++ at +@+ at +@+ at +@+ at +@=#b+*#*#=#l++ + @ %@~@q at u@'#@#<#v@$@@ @ + + + + + + + - (.] 3 3 3 ] } } +.8.u /.4 M M 1 / / / ( /+g g a.| ) &+h T 6 L.e+3+N (+6 (.T g+f _ G+-.) | g , 1 4 +.[ ] < 3 3 3 3 3 < ] ] [ } J.C $+_+r.q.f.#.;.o.|.(.n+h t g 1 8.< 3 3 < 8././ / ( ' ! ! -.7 }+                                            [...]
+"    v v v v U@<.>+>+<.>+>+>+>+>+>+>+>+>+>+>+<.>+>+>+>+E@>+E@>+<.<.0.0.>+<.<.<.<.<.0.<.<.0.0.:.W W W X [#v v v v v v v v v v     - + + + + + + + + + @ + k.%@$@#@$@~@N+@ @ + + + M+m+b+^+^+b+b+b+b+b+b+*#*#b+=#l++ + + + @ U+q@,#}#> > > > A@# @ @ + + + + + + - (./.8.+.} +.8.u /.M M 1 1 ^ / / ( ( ( g K.a.a.' ' ~ 3.n+3+D #+N.O (.e 8 O n+s s &+7 a.g , ^ /.+.] j E A Z ^.A ^.E ^.7.^.2 7.7.X+#+d.z+H.$.G.#+#+|+s.h B ' ( } 2 : d @+ .k ^.^.+.[ 1 , ( g g g }+                                            [...]
+"    v v v v ^#i.<.<.>+>+>+<.<.<.>+>+<.>+>+<.>+<.>+>+>+>+>+>+<.<.<.0.<.<.<.<.<.<.0.0.0.<.<.W W W X i.U at v v v v v v v v v v v     - + + + + + + + + + + + + @ M+@@q@$ $@%@@ @ @ + + + + M+m+b+b+b+b+b+b+=#l++ + + + + + + @ U+)#+#> > > > > > # @ k.@ + + + + + - 6 , ^ M 4 4 4 M M M 1 / / , , ( ( g g K.a.a.| ) ~ t h O 6 h+c.r at 8 P+8 T f h B &+-.' ( / / } j E A i i z z d d z L L d Z A ^.7.B@#+q.E+M.;.C |.g.(+F.t ' a.3 L {.l ~.}.l =.>.d A A 3 ] 1 / K.g }+                                            [...]
+"    v v v v Y@>+i.<.<.<.>+>+>+<.>+<.<.<.>+<.<.>+<.<.>+<.<.<.0.<.<.<.<.<.<.Y <.<.W <.<.<.:.X X X i.U at v v v v v v v v v v v v     - + + + + + + + + + + @ + @ %@~@`@L at 7@$@# %@@ @ @ + + + + + + + + + + + + + + + + + + + %@ ###> > > > > > > > R.E.+ + + + + + - f.M.( ( / / ^ / / / / / ( ( ( /+g K.K.a.| ' ! ~ 7 3.F.(.D 4.}+}+E+I.n+h s 3.-.' a.( 1 8.< A A L ` @+>. at + .K K K @+ .k k ].L y+}+o+}+G.c.C 4.N O T G+a.^ < >.m.a 9 p n.9 J e.l {.k A ^...[ 4 }+}+                                            [...]
+"    v v v v v ^#:.i.0.<.<.>+<.<.<.<.<.<.<.<.>+<.<.>+>+<.<.<.0.0.<.<.<.0.<.0.0.W :.<.<.X W X X i.|#v v v v v v v v v v v v v     - + + + + + + + + + + + @ + @ %@~@#@{@&#q at 7@A at U+N+%@@ @ @ + + + + + + + + + + + + + + + @ A at 1#> > > > > > > > T.+++ + + + + + - > M.| K./+( , , ( ( /+/+g g K.a.a.| ' ) ! ~ -.t B 2+8 s.|.c.}+> > M.s 3.B -.' g ( M [ < ^.: d ` K K m.=.}.b l l l =.m.m.c c }+> > 4+C 4.5 D (.g+_ ! ^ [ Z c ~.b.G G o G G !.J r =. at +d i E 7.}+>                                             [...]
+"    v v v v v Y at i.<.i.0.<.<.<.<.<.<.<.<.<.<.<.<.>+>+>+<.<.<.<.0.0.0.0.<.<.0.:.:.:.:.W W i.W (#:.v v v v v v v v v v v v v v     - + + + + + + + + + + + + + @ @ N+U+7 at o@2#3#v at K@{@`@7 at A@$@$@U+%@@ + + + + + + + + + + + @ $@4#> > > > > > > > l+k.+ + + + + + - > N -.) ' K.g /+g g g K.a.| | ' ) ) ! ~ -.7 t &+_ T (+g.#+f.X+> > n+3.B ~ a.g ( M [ 3 2 Z L k K =.{.l ~.e.a r r e.r S l =.l 1+> > L.4.5 N 3+T h -.( M 3 k l *.p R R n &.R o n.0 e.S c ].i z }+>                                             [...]
+"    v v v v v v U at i.i.i.<.<.<.<.<.<.<.<.<.<.0.<.<.<.<.<.0.<.0.0.<.0.:.<.X W :.X W W X X X i.|#v v v v v v v v v v v v v v v     - + + + + + + + + + + + + @ @ @ @ N+U+@@$ 5#)#6#$#%#u at 2#v@[@L at A@%@@ + + + + + + + + + + @ ~@7#> > > > > > > > b+E.+ + + + + + - > $.d.&+-.! ' a.a.a.a.| ' ' ' ! ! ~ -.7 t t B _ F.6 -+4.#.}+}+> > M.E+-.| g ( M [ 3 2 : ` K =.b S e.*.0 J J b.b.J *.a r b 1@}+> > f@}+D e { f B a./ 8.A K a p %.&.Q ,.Q 6.n o n.J e.S c ].}+}+>                                             [...]
+"    v v v v v v 8#i.i.i.:.<.<.<.0.<.<.<.<.<.<.0.<.<.<.<.<.0.0.0.<.:.:.V W X W W W W i.^#(#U at v v v v v v v v v v v v v v v v     - + + + + + + + + + + + + + + + @ @ %@N+U+#@K at 7#%#-#9#6#$#6#2# #%@+ @ + + + + + + + + + @ N+$@@@> > > > > >  @T.l.+ + + + + + - > > 2.h 3.B t ~ ) ' ) ) ! ! ! ~ -.-.t &+B G+s F.P+g.o.t.E+}+> > > > *+' | g / 8.< 2 : ` K l b r a b.9 9 9 9 9 9 0 J a *.r }+> > > > <+6 e T s ! g ^ ..].=.0 p R m P '.'.Q 6.R F q a S }. .}+> >                                             [...]
+"    v v v v v v v 0#i.X :.i.:.:.:.:.<.<.0.0.<.0.<.<.0.<.<.0.:.:.<.X W V W W W X W X ^#a#b#v v v v v v v v v v v v v v v v v     - + + + + + + + + + + + + + + + + + @ + @ # ~@#@`@{@K at 3#9#)#}@%@w.E.+ @ + + + + + + + + @ @ + k.k.> > > > 0+Y..+k.+ + + + + + - > > H.I+n+2+_ G+t -.~ -.-.-.-.t t &+B 3.3.h T 6 g.4.;.p.}+}+> > > > f.G./+/ 8.< 2 Z ]. .c S *.J b.q I !.p H p n.!.9 q 0 s@}+> > > > ]@9 at F.f 7 a./ 8.A k l I G n m ,.).'.P 5.&.%.H b.*.S }+}+> >                                             [...]
+"    v v v v v v v v /#i.X X X X X :.X :.:.:.:.:.:.X :.X W 0.:.X X V X W X W (#V i.a#a#v v v v v v v v v v v v v v v v v v v     - + + + + + + + + + + + + + + + + + + + @ @ %@N+N+# $@ #q at 7@++D.A.y.++@ @ @ + + + + + + + @ + + %@.+c+W.W.]+y.+++ + + + + + + - > > > N.2@{ F.f h 3.B &+t &+B B G+3._ h g+8 s.h+4.;.M.}+}+> > > > > > 1+_.8.[ 2 i d k m.}.~.*.0 9 !.p F G o G F F F F o+}+> > > > > > }+<+&+~ /+} 3 E @+~.q H n 5.P '.'.P ,.Q n F p !.}+}+> > >                                             [...]
+"    v v v v v v v v v Y@^#U at i.i.X X :.:.:.:.X :.X i.X W :.X X W X W W i.W i.X i.a#D at v v v v v v v v v v v v v v v v v v v v     - + + + + + + + + + + + + + + + + + + @ @ @ @ @ @ @ N+# # l.C.`.)@A.Q.@ @ + + + + + + + + + @ @ + l. +R.x.E.l.+ + + + + + + + - > > > > O+:+P+3+O T n+f h _ _ s h f T 3+(+-+_.C #.$.}+}+> > > > > > > > e+h+< : d ` @+=.r *.b.q !.F o %.%.%.R R o G %+}+> > > > > > > > }+f@! 1 ] j A >.r q G R 6.,.P '.P ,.Q 6.G F }+}+> > > >                                             [...]
+"    v v v v v v v v v v /#Y@|#U@<.i.i.X X W i.i.i.X i.X X X i.X X U at V i.a#i.a#|#v v v v v v v v v v v v v v v v v v v v v v     - + + + + + + + + + + + + + + + + + + + + + + + @ @ @ @ + w.6+c+]+C..+@ @ k.+ + + + + + + + + @ + + k.k.+ + + + + + + + + + + - > > > > > u+%+D s.6 6 (.e 3+3+3+(.6 N g.L.#+t.f.2.}+}+> > > > > > > > > > e+g.z  . .m.b a J I p F o %.R n n n R %.[+}+> > > > > > > > > > }+:+u 2 2 L m.r J p o &.Q ,.P P Q Q m G }+}+> > > > >                                             [...]
+"    v v v v v v v v v v v c#G at G@a#|#|#i.X i.i.i.i.i.|#i.i.(#X X i.i.a#>+G at a#v v v v v v v v v v v v v v v v v v v v v v v v     - + + + + + + + + + + + + + + + + + + + + + + + + + + + k.x.{+T.C+{+x.k.+ k.+ + + + + + + + + + + + + + + + + + + + + + + + + - > > > > > > q+d+5 |.g.-+-+-+g.g.|.L.4.#+c.*+$.q.}+}+> > > > > > > > > > > > H+N  .c }.S *.9 !.H G o R &.6.6.6.6.:+}+> > > > > > > > > > > > }+_+j A ` K r 9 n.G n 6.Q ,.,.Q 5.m }+}+> > > > > >                                             [...]
+"    v v v v v v v v v v v v v d#e#G at a#a#|#i.i.>+|#(#i.U at a#|#(#<.i.>+a#/#v v v v v v v v v v v v v v v v v v v v v v v v v v     - + + + + + + + + + + + + + + + + + + + + + + + + + + + k.x.)@T.T.~+Q.k.+ + + + + + + + + + + + + + + + + + + + + + + + + + + - > > > > > > > }+}+p+C #+9.9.#+O.C t.#.f.E+q.}+}+}+> > > > > > > > > > > > > > }+q+3+b r 0 I n.F o R &.6.m m 8@}+}+> > > > > > > > > > > > > > }+}+E+` K ~.q !.G R &.5.Q Q 5.}+}+}+> > > > > > >                                             [...]
+"    v v v v v v v v v v v v v v v v b#a#e#e#G at a#a#a#a#a#U@>+|#<.c#v v v v v v v v v v v v v v v v v v v v v v v v v v v v v     - + + + + + + + + + + + + + + + + + + + + + + + + + + + + Q.6+c+!+z.++@ @ @ + + + + + + + + + + + + + + + + + + + + + + + + + - > > > > > > > > > }+}+}+r+f.f.M.$.H.d.}+}+}+}+> > > > > > > > > > > > > > > > > > }+}+N.n+p n.G R R &.$+}+}+}+> > > > > > > > > > > > > > > > > > }+}+}+G.q 9 H R %.6.}+}+}+}+> > > > > > > > >                                             [...]
+"    v v v v v v v v v v v v v v v v v v v v v v D at D@D at v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v v     - + + + + + + + + + + + + + + + + + + + + + + + + + + + + w.C.!+. at D.++%@@ + + + + + + + + + + + + + + + + + + + + + + + + + + - f#f#f#f#f#g#h#i#j#k#l#m#n#o#p#q#r#s#t#u#v#w#w#w#w#w#w#v#u#t#s#r#q#p#o#n#m#l#k#j#i#h#g#f#f#f#f#f#x#x#x#x#y#z#A#B#C#D#E#F#G#H#I#J#K#L#M#N#O#>.O#N#M#L#K#J#I#H#G#F#E#D#C#B#A#z#y#x#x#x#x#x#x#x#x#x#                                            [...]
+"                                                                                                                                - + + + + + + + + + + + + + + + + + + + + + + + + + + + + w.6+c+!+B.Q.@ @ k.+ + + + + + + + + + + + + + + + + + + + + + + + + - f#f#f#f#f#g#h#i#j#k#l#m#n#o#p#q#r#s#t#u#v#w#w#w#w#w#w#v#u#t#s#r#q#p#o#n#m#l#k#j#i#h#g#f#f#f#f#f#x#x#x#x#y#z#A#B#C#D#E#F#G#H#I#J#K#L#M#N#O#>.O#N#M#L#K#J#I#H#G#F#E#D#C#B#A#z#y#x#x#x#x#x#x#x#x#x#                                            [...]
+"                                                                                                                                ; + + + + + + + + + + + + + + + + + + + + + + + + + + + + k.l.U+v@,#P#= - = - - - - - - - - - - - - - - - - - - - - - - - - - !@f#f#f#f#f#g#h#i#j#k#l#m#n#o#p#q#r#s#t#u#v#w#w#w#w#w#w#v#u#t#s#r#q#p#o#n#m#l#k#j#i#h#g#f#f#f#f#f#x#x#x#x#y#z#A#B#C#D#E#F#G#H#I#J#K#L#M#N#O#>.O#N#M#L#K#J#I#H#G#F#E#D#C#B#A#z#y#x#x#x#x#x#x#x#x#x#                                            [...]
diff --git a/xpms/date.xpm b/xpms/date.xpm
new file mode 100644
index 0000000..4e9f67e
--- /dev/null
+++ b/xpms/date.xpm
@@ -0,0 +1,24 @@
+/* XPM */
+static char *date_xpm[] = {
+/* width height num_colors chars_per_pixel */
+"    90    13        4            1",
+/* colors */
+". c #000000",
+"# c #555555",
+"a c #aaaaaa",
+"b c #ffffff",
+/* pixels */
+"bbb....bbbbbb..bbbbbba..abbbb....abbbbbbb..bbbb......bbbbba...bbb......bbba..abbbbb...abbb",
+"bb..aa..bbbb#..bbbbb.....abb..bb..abbbbba..bbba.....bbbba...bbbb.......bba.bb.abbb..a...bb",
+"bb.abba.bbb....bbbb..bba..bb.bbbb..bbbba...bbba.bbbbbbba..bbbbbb.bbba.abb..bb..bba.abb..ab",
+"ba.bbbb.abbbb..bbbb.bbbb..bbbbbba.abbbb....bbb..bbbbbbb..bbbbbbbbbbb..bbb..bb..bb..bbbb..b",
+"b..bbbb..bbbb..bbbbbbbbb..bbbbba..bbbba.b..bbb....abbba..bbbbbbbbbba.abbba..b.abb..bbbb..b",
+"b..bbbb..bbbb..bbbbbbbbb..bbbb...bbbba.ab..bbbaaa...bb......abbbbbb..bbbbb....bbb..bbbb..b",
+"b..bbbb..bbbb..bbbbbbbba.abbbb....bbb..bb..bbbbbbb..ab..bbb..abbbbb.abbbbb....bbba..bbb..b",
+"b..bbbb..bbbb..bbbbbbbb..bbbbbbb..aba.bbb..bbbbbbbb..b..bbbb..bbbba.bbbbb..b...bbb.......b",
+"b..bbbb..bbbb..bbbbbbb..bbbbbbbbb..b.aaaa..abbbbbbb..b..bbbb..bbbb..bbbba.abb..abbba.a..ab",
+"ba.bbbb.abbbb..bbbbbb..bbbbbbbbbb..b........bbbbbbb..b..bbbb..bbbb.abbbb..bbbb..bbbbba..bb",
+"bb.abba.bbbbb..bbbbb..bbbabbbbbba.abbbbbb..bbbabbba.ab..abbb.abbba.bbbbba.bbbb.abbbba..abb",
+"bb..aa..bbbba..abbba.aaaa.bb.aba..bbbbbbb..bbb.aaa..bbb...a..bbbb..bbbbbb..aa..bbba...bbbb",
+"bbb....bbbb......bb.......bb....abbbbbbbb..bbb....abbbbb....bbbbb..bbbbbbba..abbb...abbbbb"
+};
diff --git a/xpms/duck.xcf b/xpms/duck.xcf
new file mode 100644
index 0000000..d022ede
Binary files /dev/null and b/xpms/duck.xcf differ
diff --git a/xpms/duck.xpm b/xpms/duck.xpm
new file mode 100644
index 0000000..387283f
--- /dev/null
+++ b/xpms/duck.xpm
@@ -0,0 +1,55 @@
+/* XPM */
+static char *duck_xpm[] = {
+/* columns rows colors chars-per-pixel */
+"288 32 17 1",
+"  c black",
+". c #00002A2AFFFF",
+"X c #01012B2BFEFE",
+"o c #848423232323",
+"O c #F4F411111111",
+"+ c #EAEA7D7D0909",
+"@ c #CDCD9F9F1818",
+"# c #CECEAEAE1111",
+"$ c #D1D1B0B00E0E",
+"% c #E5E5BFBF0000",
+"& c #EAEAC4C40707",
+"* c #FAFAD1D10505",
+"= c #FEFED3D30000",
+"- c #FFFFD4D40000",
+"; c #FFFFD5D50505",
+": c gray100",
+"> c None",
+/* pixels */
+">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>",
+">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>",
+">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>",
+">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>>>>>>>>>>>>> + >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>",
+">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ++ >>>>>>>>>>>>>>>>>>>>>>>>>>>> +++ >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>",
+">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ++ >>>>>>>>>>>>>>>>>>>>>>>>>>>> +++ >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>  ++ >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>",
+">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ---- >>>>>>>>>>>>>>>>>>>>>>>>>>> --- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ++++ >>>>>>>>>>>>>>>>>>>>>>   >>>>>>>>>>>>",
+">>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> +  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - :- >>>>>>>>>>>>>>>>>>>>>>>>>>  ---  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> --++ >>>>>>>>>>>>>>>>>>>>>> OOO >>>    >>>>",
+">>>>>>>>>>>>>>>>>>>>>>>>   - >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> +++   >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> --::- >>>>>>>>>>>>>>>>>>>>>>>>>> :---: >>>>>>>>>>>>>>>>>>>>>>>>>>>>> -: -+ >>>>>>>>>>>>>>>>> >>>> OOO >> OOOO >>>",
+">>>>>>>>>>>   >>>>>>>>  ---- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ++--- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ----- >>>>>>>>>>>>>>>>>>>>>>>>>> ---- >>>>>>>>>>>>>>>>>>>>>>>>>>>>> --::- >>>>>>>>>>>>>>>>> O >>> OOO > OOOOO >>>",
+">>>>>>>>>  --- >>>>>  -&&&&- >>>>>>>>>>>>   >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> +-- :- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ----- >>>>>>>>>>>>>>>>>>>>>>>>>> ---- >>>>>>>>>>>>>>>>>>>>>>>>>>>>> ----- >>>>>>>>>>>>>>>> OOO > OOO > OOOOO >>>>",
+">>>>>>>  -- :-- >>> --&&&&& >>>>>>>>>>>  --- >>>>>>>>      >>>>>>>>>>>>   >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> --::- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> --- >>>>>>>>>>>>>>>>>>>>>>>>>>>> -- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>  ----- >>>>>>>>>>>>>>>> OOOO  OO > OOOOOO >>>>",
+">>>>>> ++--::-- >> -&&&&&&- >>>>>>>>>  -- :-- >>>>   $$$$$$ >>>>>>>>>  --- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> --;--- >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> --- >>>>>>>>>>>>>>>>>>>>>>>>>>>  -- >>>>>>>>>>>>>>>>>>>>>>>>>>>  -----  >>>>>>>>>>>>>>>>> OOOO >  >> OOOO  >>>>>",
+">>>>> +++------ > -&&&&&&&- >>>>>>>> ++--::-- >>  $$$%%%%%$ >>>>>>>  --::-- >>>>      >>>>>>>>>>>>>>>>   >>>>>>>      >>>>>>>>>>>>>>>> ------  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> -----  >>>>>>>>>>>>>>>>>>>>>>   -----   >>>>>>>>>>>>>>>>>>>>    ------- >>>>>>>>>>>>>>>>>> OOOO     >     >>>>>>>",
+">>>>>>   ------  -&&&&&&&& >>>>>>>> +++------ > $$%%%%%%%  >>>>>>> ++-- :--  >  %%%%%% >>>>>>>>>>>>>  --- >>>>  %%%%%% >>>>>>>>>>>>>>>>  -----$    >>>>>>>>>>>>>>>>>>>>>>>>>>> ---$$$$ >>>>>>>>>>>>>>>>>>>  --$-----$$-  >>>>>>>>>>>>>>>>> $$$$$$---- >>>>>>>>>>>  >> :::- OOO OOOO %% >>>>>>>>>",
+">>>>>>>>>   --- --&&&&&&-- >>>>>>>>>   ------- $$%%%%%%% >  >>>>> +++-------- %%------%    >>>>>>>  --::-- >  %%-----$-    >>>>>>>>>>>>>>  ---$----   >>>>>>>>>>>>>>>>>>>>>>> $----$%$ >>>>>>>>>>>>>>>>>> $---$------$--$ >>>>>>>>>>>>>>> $%%%%$----- >>>>>>>>>> ++  :o:o:-   OOOOO -$-    >>>>>",
+">>>>>>>>>>>> ----$$$&&&&-   >>>>>>>>>>>   ------$$$%%%%%  -- >>>>>    --------$%%-----%---- >>>>> ++-- :--  --$------$----- >>>>>>>>>>>>>> ---$------- >>>>>>>>>>>>>>>>>>>>> $$----$%$$ >>>>>>>>>>>>>>>> $----$------$---$ >>>>>>>>>>>>> $$%%%%$-----$ >>>>>>>>>> ++-::o::- OOOOOO --OOO--- >>>>",
+">>>>>>>>>>>>> -----$$$$$$--- >>>>>>>>>>>>>  ------$$$$$$--- >>>>>>>>>>     ---%$$%%%-%$---- >>>> +++----------$%-----$----- >>>>>>>>>>>>>> *--$------- >>>>>>>>>>>>>>>>>>>> $$$----$%%$$ >>>>>>>>>>>>>> $-----$------$---$$ >>>>>>>>>>>> $%%%%%$----$$$ >>>>>>>>>> ++:o:o:- OOOOOO -OOOOOOO >>>>",
+">>>>>>>>>>>>>> ------------ >>>>>>>>>>>>>>>> ------------- >>>>>>>>>>>>>>>> ----%$$$$$$--  >>>>>>    ----------$%-----$--  >>>>>>>>>>>>>>>> ---$=------ >>>>>>>>>>>>>>>>>>> $%$----$%%%$ >>>>>>>>>>>>> $------$------$-----$ >>>>>>>>>> $$%%%%%$----$%$ >>>>>>>>>> ++-:::- OOOOOOO  -OOOOOO >>>>",
+">>>>>>>>>>>>>> ----------- >>>>>>>>>>>>>>>>>> ----------- >>>>>>>>>>>>>>>>>> ---------$$ >>>>>>>>>>>>       ----$%----$$ >>>>>>>>>>>>>>>>>> ---$$-------  >>>>>>>>>>>>>>>>> $%$+--+$$%%$$ >>>>>>>>>>>> -------$+----+$------ >>>>>>>>> $$%%%%%%$+--+$%$ >>>>>>>>> ++------ OOOOO$OO --$$   >>>>>",
+">>>>>>>>>>>>>>>   ---+--  >>>>>>>>>>>>>>>>>>>>   ---+--  >>>>>>>>>>>>>>>>>>>>   ---+--  >>>>>>>>>>>>>>>>>>>>    -$$$$$$$$ >>>>>>>>>>>>>>>>>>  --$$$$-$$--- >>>>>>>>>>>>>>>> $$$+--+-$%%%$ >>>>>>>>>>> $-------$+----+$------$ >>>>>>> $$%%%%%$$-+--+%%$ >>>>>>>> +          OO  OO $$$$$$ >>>>>>",
+">>>>>>>>>>>>>>>>>>   +++ >>>>>>>>>>>>>>>>>>>>>>>>   +++ >>>>>>>>>>>>>>>>>>>>>>>>   +++ >>>>>>>>>>>>>>>>>>>>>>>>>   ++++  >>>>>>>>>>>>>>>>>>>> ----+------- >>>>>>>>>>>>>>>> $$ ++-++-$$$$ >>>>>>>>>>> $--------++--++$------$ >>>>>>> $%%%%%$$-++-++$%$ >>>>>>>>> >>>>>>>>>>   OOO ++++  >>>>>>>",
+">>>>>>>>>>>>>>>>>>>>> ++ >>>>>>>>>>>>>>>>>>>>>>>>>>> ++ >>>>>>>>>>>>>>>>>>>>>>>>>>> ++ >>>>>>>>>>>>>>>>>>>>>>>>>>>>    >>>>>>>>>>>>>>>>>>>>>>>   +-+++-  - >>>>>>>>>>>>>>>>>  > +--+- $$ >>>>>>>>>>>>>  $$$$$$  +--+- $$$---$ >>>>>>> $$$$$$$--+- + $$$ >>>>>>>>>>>>>>>>>>>>>> OOO     >>>>>>>>>",
+">>>>>>>>>>>>>>>>>>>>>>  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> +++@# >> >>>>>>>>>>>>>>>>>>>>>> ----  $ >>>>>>>>>>>>>>>      > -----  $$$$$ >>>>>>>> $    ----  > >  $ >>>>>>>>>>>>>>>>>>>>>> OO >>>>>>>>>>>>>>",
+">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>     >>>>>>>>>>>>>>>>>>>>>>>>>>> -- >> >>>>>>>>>>>>>>>>>>>>>>>> ---- >     >>>>>>>>>> >>> --  >>>>>>> >>>>>>>>>>>>>>>>>>>>>> OO >>>>>>>>>>>>>>>",
+">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> - >>>>>>>>>>>>>>>>>>>>>>>>>>> ---- >>>>>>>>>>>>>>>>>>>>> - >>>>>>>>>>>>>>>>>>>>>>>>>>>>>> OOO >>>>>>>>>>>>>>>",
+">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>  -- >>>>>>>>>>>>>>>>>>>>>> >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> OOO >>>>>>>>>>>>>>>",
+">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>  >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> OOO >>>>>>>>>>>>>>>",
+">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>   >>>>>>>>>>>>>>>>",
+">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>",
+">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>",
+">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>"
+};
diff --git a/xpms/editwin_minib.xcf b/xpms/editwin_minib.xcf
new file mode 100644
index 0000000..299625a
Binary files /dev/null and b/xpms/editwin_minib.xcf differ
diff --git a/xpms/editwin_minib.xpm b/xpms/editwin_minib.xpm
new file mode 100644
index 0000000..a431d90
--- /dev/null
+++ b/xpms/editwin_minib.xpm
@@ -0,0 +1,173 @@
+/* XPM */
+static char * editwin_minib_xpm[] = {
+"152 12 158 2",
+" 	c None",
+". 	c #0000FF",
+"+ 	c #849689",
+"@ 	c #6B9A7B",
+"# 	c #619188",
+"$ 	c #56889A",
+"% 	c #598DA1",
+"& 	c #346A6C",
+"* 	c #234D42",
+"= 	c #22413D",
+"- 	c #213D41",
+"; 	c #1E4041",
+"> 	c #1D4040",
+", 	c #21423E",
+"' 	c #214041",
+") 	c #20403C",
+"! 	c #FF0000",
+"~ 	c #007F00",
+"{ 	c #B0C6B4",
+"] 	c #8BCAA0",
+"^ 	c #78BB9A",
+"/ 	c #518D94",
+"( 	c #4A7C96",
+"_ 	c #2D5471",
+": 	c #2F4963",
+"< 	c #304368",
+"[ 	c #2D4067",
+"} 	c #294462",
+"| 	c #29515A",
+"1 	c #2C5D56",
+"2 	c #2B5A52",
+"3 	c #29574A",
+"4 	c #B4CAB8",
+"5 	c #8DC8A8",
+"6 	c #78B594",
+"7 	c #517D80",
+"8 	c #53688E",
+"9 	c #525A7E",
+"0 	c #7B7E95",
+"a 	c #6B6E8E",
+"b 	c #595D86",
+"c 	c #4A5388",
+"d 	c #556894",
+"e 	c #3D6571",
+"f 	c #2E6258",
+"g 	c #316858",
+"h 	c #BAD0BB",
+"i 	c #9CD2AF",
+"j 	c #81B394",
+"k 	c #566D73",
+"l 	c #4F5978",
+"m 	c #88868A",
+"n 	c #C2BAB1",
+"o 	c #948E8E",
+"p 	c #8E878D",
+"q 	c #696781",
+"r 	c #303867",
+"s 	c #2F4C67",
+"t 	c #43807E",
+"u 	c #4F9993",
+"v 	c #BCD4C0",
+"w 	c #A4DBAE",
+"x 	c #8DBC8D",
+"y 	c #5C6765",
+"z 	c #696E7C",
+"A 	c #9D978E",
+"B 	c #B3AB9E",
+"C 	c #D7D0BE",
+"D 	c #A8A095",
+"E 	c #827B79",
+"F 	c #4A4B60",
+"G 	c #263961",
+"H 	c #458399",
+"I 	c #5DADB9",
+"J 	c #BCCAB2",
+"K 	c #AED0AB",
+"L 	c #9CC69E",
+"M 	c #637775",
+"N 	c #686E74",
+"O 	c #6A6A69",
+"P 	c #8A8783",
+"Q 	c #EBE3D1",
+"R 	c #9F9A95",
+"S 	c #616063",
+"T 	c #76757B",
+"U 	c #2B3A5E",
+"V 	c #528FA1",
+"W 	c #59AAAB",
+"X 	c #B2C1AC",
+"Y 	c #9CB7A6",
+"Z 	c #99B7A4",
+"` 	c #698A8B",
+" .	c #7F878D",
+"..	c #CCC3BE",
+"+.	c #DCCEC3",
+"@.	c #F1DFCE",
+"#.	c #DACBC1",
+"$.	c #C4B8B7",
+"%.	c #9B979C",
+"&.	c #304362",
+"*.	c #67A7B0",
+"=.	c #70BCB6",
+"-.	c #A4C3BE",
+";.	c #82BCBD",
+">.	c #86BAB3",
+",.	c #6EA1A8",
+"'.	c #758588",
+").	c #EAE0CF",
+"!.	c #E2CDBD",
+"~.	c #D4B4A9",
+"{.	c #D7B6AE",
+"].	c #EEDDCF",
+"^.	c #7C787C",
+"/.	c #4D6577",
+"(.	c #9DCDC7",
+"_.	c #A3D5CD",
+":.	c #A2BBBC",
+"<.	c #8CC0C2",
+"[.	c #8BC3BF",
+"}.	c #85BCBC",
+"|.	c #90A4A3",
+"1.	c #DFD9CA",
+"2.	c #DABBB0",
+"3.	c #CE9596",
+"4.	c #D29FA2",
+"5.	c #D4CBBE",
+"6.	c #5F6E64",
+"7.	c #45725E",
+"8.	c #639F72",
+"9.	c #6DAA7A",
+"0.	c #A8C1C4",
+"a.	c #88BCC8",
+"b.	c #7BB1B5",
+"c.	c #A9C6C0",
+"d.	c #D7D5C9",
+"e.	c #F2E9D7",
+"f.	c #ECE2CE",
+"g.	c #DFD3BF",
+"h.	c #EDDFCF",
+"i.	c #F0E6D4",
+"j.	c #B2B4AF",
+"k.	c #6F8F8C",
+"l.	c #427D51",
+"m.	c #50994A",
+"n.	c #798C8E",
+"o.	c #6B9094",
+"p.	c #6C908C",
+"q.	c #9EA8A0",
+"r.	c #B1ACA0",
+"s.	c #B5ADA1",
+"t.	c #B2AB9D",
+"u.	c #A6A090",
+"v.	c #B5ADA0",
+"w.	c #B5ACA0",
+"x.	c #A8A29D",
+"y.	c #969CA1",
+"z.	c #587460",
+"A.	c #3D6E3B",
+"                                                                . .                   . . .                                                                                                                                                                   . .         . .       + @ # $ % & * = - ; > , ' ) ",
+"  ! !           ! !                                             . .                   . . .                                                                                           ~ ~ ~ ~ ~               ~ ~ ~ ~ ~ ~ ~                                   . .         . .       { ] ^ / ( _ : < [ } | 1 2 3 ",
+"  ! ! !       ! ! !           !             !                                           . .                                                                                           ~ ~ ~ ~               ~           ~ ~           ~ ~ ~ ~ ~               . .         . .       4 5 6 7 8 9 0 a b c d e f g ",
+"    ! ! !   ! ! !           ! !             ! !               . . . .                   . .   . .                       . . . . . .           . . .     . . .                         ~ ~ ~               ~           ~   ~         ~ ~ ~ ~ ~ ~ ~             . . . . . . . . . .   h i j k l m n o p q r s t u ",
+"      ! ! ! ! !           ! ! !             ! ! !             . . . .                   . . . . . . .                 . . . . . . .           . . .     . . .                         ~ ~   ~           ~           ~     ~       ~ ~ ~       ~ ~ ~           . . . . . . . . . .   v w x y z A B C D E F G H I ",
+"        ! ! !           ! ! ! ! ! ! ! ! ! ! ! ! ! !               . .                   . . .     . .                 . .         .             . .       . .                         ~     ~ ~       ~           ~       ~       ~ ~           ~ ~           . .         . .       J K L M N O P Q R S T U V W ",
+"        ! ! !           ! ! ! ! ! ! ! ! ! ! ! ! ! !               . .                   . .         . .                 . . . .                 . .       . .                                 ~     ~ ~ ~ ~ ~ ~ ~       ~         ~ ~           ~ ~           . .         . .       X Y Z `  ...+. at .#.$.%.&.*.=.",
+"      ! ! ! ! !           ! ! !             ! ! !                 . .                   . .         . .                     . . . .             . .       . .           ~ ~                   ~     ~           ~     ~           ~ ~ ~       ~ ~ ~           . .         . .       -.;.>.,.'.).!.~.{.].^./.(._.",
+"    ! ! !   ! ! !           ! !             ! !                   . .                   . .       . . .             . .         . .             . .       . .             ~ ~               ~ ~     ~           ~   ~               ~ ~ ~ ~ ~ ~ ~             . .         . .       :.<.[.}.|.1.2.3.4.5.6.7.8.9.",
+"  ! ! !       ! ! !           !             !               . . . . . . . .           . . . . . . . .               . . . . . . . .               . . . . . . .             ~ ~ ~         ~ ~       ~           ~ ~                   ~ ~ ~ ~ ~               . . . .     . . . .   0.a.b.c.d.e.f.g.h.i.j.k.l.m.",
+"  ! !           ! !                                         . . . . . . . .           . . . . . . .                     . . . . .                 . . . . . . .                 ~ ~ ~ ~ ~ ~         ~ ~ ~ ~ ~ ~ ~                                               . . .       . . .   n.o.p.q.r.s.t.u.v.w.x.y.z.A.",
+"                                                                                                                                                                                                                                                                                                                "};
diff --git a/xpms/icon.xpm b/xpms/icon.xpm
new file mode 100644
index 0000000..b59338e
--- /dev/null
+++ b/xpms/icon.xpm
@@ -0,0 +1,28 @@
+/* XPM */
+static char *icon_xpm[] = {
+/* columns rows colors chars-per-pixel */
+"16 16 6 1",
+"  c #000000",
+". c #0055ff",
+"X c #209aff",
+"o c #96ba61",
+"O c #ffb241",
+"+ c #ffff00",
+/* pixels */
+"XXXXXXXXXXXXXXXX",
+"XXXXX++++XXXXXXX",
+"XXXX++++++XXXXXX",
+"XOOO+ ++++XXXXXX",
+"XXOO++++++XXXXXX",
+"XXXX++++++XXXXXX",
+"XXXXX++++XXXXXXX",
+"XXXXXX++XXXXXXXX",
+"XXXXX+++++++XXXX",
+"XXXX++++++++++XX",
+"XXX++++++++++++X",
+"XXX++++++++++++X",
+"...ooooooooooo..",
+"....ooooooooo...",
+".....oooooo.....",
+"................"
+};
diff --git a/xpms/led.xpm b/xpms/led.xpm
new file mode 100644
index 0000000..21abb14
--- /dev/null
+++ b/xpms/led.xpm
@@ -0,0 +1,19 @@
+/* XPM */
+char * led_xpm[] = {
+"135 11 3 1",
+" 	c #282828",
+"O	c #20b2aa",
+"/	c #004300",
+"    OOOO        O     OOOO     OOOO    O    O     OOOO     OOOO    OOOO     OOOO     OOOO                                              ",
+"   O    O       O         O        O   O    O    O        O            O   O    O   O    O                                             ",
+"  /O   /O      /O        /O       /O  /O   /O   /O       /O           /O  /O   /O  /O   /O                                             ",
+"  O/   O/      O/        O/       O/  O/   O/   O/       O/           O/  O/   O/  O/   O/  O                                          ",
+"  O    O       O         O        O   O    O    O        O            O   O    O   O    O   O                                          ",
+"  O   O        O    OOOOO     OOOO     OOOO      OOOO    OOOOO        O   OOOOO    OOOOO              O   O   O       OOO  O   O       ",
+" O    O       O    O             O        O         O   O    O       O   O    O        O             /O   OO OO       O  O OO OO       ",
+"/O   /O      /O   /O            /O       /O        /O  /O   /O      /O  /O   /O       /O  O          O O  O O O       O  O O O O       ",
+"O/   O/      O/   O/            O/       O/        O/  O/   O/      O/  O/   O/       O/  O         O  O /O  /O      /OOO /O  /O       ",
+"O    O       O    O             O        O         O   O    O       O   O    O        O             OOOO O/  O/      O/   O/  O/       ",
+" OOOO        O     OOOO     OOOO         O     OOOO     OOOO        O    OOOO     OOOO             O   O O   O       O    O   O        "}; 
+/*
+ 012345678012345678012345678012345678012345678012345678012345678012345678012345678012345678012^45678012345678012^45678012345678012^45678 */
diff --git a/xpms/leds.h b/xpms/leds.h
new file mode 100644
index 0000000..9342127
--- /dev/null
+++ b/xpms/leds.h
@@ -0,0 +1,100 @@
+/* GIMP RGBA C-Source image dump (leds.h) */
+
+static const struct {
+  unsigned int 	 width;
+  unsigned int 	 height;
+  unsigned int 	 bytes_per_pixel; /* 3:RGB, 4:RGBA */ 
+  unsigned char	 pixel_data[100 * 5 * 4 + 1];
+} leds_image = {
+  100, 5, 4,
+  "<<\273\377<<\273\377<<\273\377<<\273\377<<\273\377<<\273\377<<\273\377<<"
+  "\273\377SS\322\377N\267{\377N\267{\377N\267{\377N\267{\377N\267{\377N\267"
+  "{\377N\267{\377N\267{\377`\311\214\377\335\303\36\377\335\303\36\377\335"
+  "\303\36\377\335\303\36\377\335\303\36\377\335\303\36\377\335\303\36\377\335"
+  "\303\36\377\350\317*\377\251G\256\377\251G\256\377\251G\256\377\251G\256"
+  "\377\251G\256\377\251G\256\377\251G\256\377\251G\256\377\304b\311\377G\252"
+  "\256\377G\252\256\377G\252\256\377G\252\256\377G\252\256\377G\252\256\377"
+  "G\252\256\377G\252\256\377b\305\311\377\316**\377\316**\377\316**\377\316"
+  "**\377\316**\377\316**\377\316**\377\316**\377\337;;\377j\252*\377j\252*"
+  "\377j\252*\377j\252*\377j\252*\377j\252*\377j\252*\377j\252*\377z\272;\377"
+  "\377\377\377\0\377\377\377\0\204\204\204\0\204\204\204\0\204\204\204\0\204"
+  "\204\204\0\204\204\204\0\204\204\204\0\204\204\204\0\204\204\204\0\256\256"
+  "\256\0\377\377\377\0\377\377\377\0\204\204\204\0\204\204\204\0\204\204\204"
+  "\0\204\204\204\0\204\204\204\0\204\204\204\0\204\204\204\0\204\204\204\0"
+  "\256\256\256\0\377\377\377\0\377\377\377\0\250^^\377\250^^\377\250^^\377"
+  "\250^^\377\250^^\377\250^^\377\250^^\377\250^^\377\306||\377\377\377\377"
+  "\377\377\377\377\377\377\377\377\377\377\377\377\377<<\273\377\200\200\377"
+  "\377\200\200\377\377\200\200\377\377\200\200\377\377\200\200\377\377\200"
+  "\200\377\377\200\200\377\377ee\344\377N\267{\377\203\354\257\377\203\354"
+  "\257\377\203\354\257\377\203\354\257\377\203\354\257\377\203\354\257\377"
+  "\203\354\257\377n\327\232\377\335\303\36\377\377\346@\377\377\346@\377\377"
+  "\346@\377\377\346@\377\377\346@\377\377\346@\377\377\346@\377\361\3303\377"
+  "\251G\256\377\372\230\377\377\372\230\377\377\372\230\377\377\372\230\377"
+  "\377\372\230\377\377\372\230\377\377\372\230\377\377\331x\337\377G\252\256"
+  "\377\230\373\377\377\230\373\377\377\230\373\377\377\230\373\377\377\230"
+  "\373\377\377\230\373\377\377\230\373\377\377x\333\337\377\316**\377\377Z"
+  "Z\377\377ZZ\377\377ZZ\377\377ZZ\377\377ZZ\377\377ZZ\377\377ZZ\377\354HH\377"
+  "j\252*\377\233\332Z\377\233\332Z\377\233\332Z\377\233\332Z\377\233\332Z\377"
+  "\233\332Z\377\233\332Z\377\207\310H\377\377\377\377\0\204\204\204\0\214;"
+  ";\377\214;;\377\214;;\377\214;;\377\214;;\377\214;;\377\214;;\377\214;;\377"
+  "\316\316\316\0\377\377\377\0\204\204\204\0\377hh\377\377hh\377\377hh\377"
+  "\377hh\377\377hh\377\377hh\377\377hh\377\377hh\377\316\316\316\0\377\377"
+  "\377\0\250^^\377\377\0\0\377\377\0\0\377\377\0\0\377\377\0\0\377\377\0\0"
+  "\377\377\0\0\377\377\0\0\377\377\0\0\377\334\222\222\377\377\377\377\377"
+  "\377\377\377\377\377\377\377\377\377\377\377\377<<\273\377\200\200\377\377"
+  "\200\200\377\377\200\200\377\377\200\200\377\377\200\200\377\377\200\200"
+  "\377\377\200\200\377\377ee\344\377N\267{\377\203\354\257\377\203\354\257"
+  "\377\203\354\257\377\203\354\257\377\203\354\257\377\203\354\257\377\203"
+  "\354\257\377n\327\232\377\335\303\36\377\377\346@\377\377\346@\377\377\346"
+  "@\377\377\346@\377\377\346@\377\377\346@\377\377\346@\377\361\3303\377\251"
+  "G\256\377\372\230\377\377\372\230\377\377\372\230\377\377\372\230\377\377"
+  "\372\230\377\377\372\230\377\377\372\230\377\377\331x\337\377G\252\256\377"
+  "\230\373\377\377\230\373\377\377\230\373\377\377\230\373\377\377\230\373"
+  "\377\377\230\373\377\377\230\373\377\377x\333\337\377\316**\377\377ZZ\377"
+  "\377ZZ\377\377ZZ\377\377ZZ\377\377ZZ\377\377ZZ\377\377ZZ\377\354HH\377j\252"
+  "*\377\233\332Z\377\233\332Z\377\233\332Z\377\233\332Z\377\233\332Z\377\233"
+  "\332Z\377\233\332Z\377\207\310H\377\204\204\204\0\214;;\377\214;;\377\214"
+  ";;\377\214;;\377\214;;\377\214;;\377\214;;\377\214;;\377\214;;\377\316\316"
+  "\316\0\204\204\204\0\377hh\377\377hh\377\377hh\377\377hh\377\377hh\377\377"
+  "hh\377\377hh\377\377hh\377\377hh\377\316\316\316\0\250^^\377\377\0\0\377"
+  "\377\0\0\377\377\0\0\377\377\0\0\377\377\0\0\377\377\0\0\377\377\0\0\377"
+  "\377\0\0\377\377\0\0\377\334\222\222\377\377\377\377\377\377\377\377\377"
+  "\377\377\377\377\377\377\377\377SS\322\377ee\344\377ee\344\377ee\344\377"
+  "ee\344\377ee\344\377ee\344\377ee\344\377ee\344\377`\311\214\377n\327\232"
+  "\377n\327\232\377n\327\232\377n\327\232\377n\327\232\377n\327\232\377n\327"
+  "\232\377n\327\232\377\350\317*\377\361\3303\377\361\3303\377\361\3303\377"
+  "\361\3303\377\361\3303\377\361\3303\377\361\3303\377\361\3303\377\304b\311"
+  "\377\331x\337\377\331x\337\377\331x\337\377\331x\337\377\331x\337\377\331"
+  "x\337\377\331x\337\377\331x\337\377b\305\311\377x\333\337\377x\333\337\377"
+  "x\333\337\377x\333\337\377x\333\337\377x\333\337\377x\333\337\377x\333\337"
+  "\377\337;;\377\354HH\377\354HH\377\354HH\377\354HH\377\354HH\377\354HH\377"
+  "\354HH\377\354HH\377z\272;\377\207\310H\377\207\310H\377\207\310H\377\207"
+  "\310H\377\207\310H\377\207\310H\377\207\310H\377\207\310H\377\204\204\204"
+  "\0\214;;\377\214;;\377\214;;\377\214;;\377\214;;\377\214;;\377\214;;\377"
+  "\214;;\377\214;;\377\316\316\316\0\204\204\204\0\377hh\377\377hh\377\377"
+  "hh\377\377hh\377\377hh\377\377hh\377\377hh\377\377hh\377\377hh\377\316\316"
+  "\316\0\250^^\377\377\0\0\377\377\0\0\377\377\0\0\377\377\0\0\377\377\0\0"
+  "\377\377\0\0\377\377\0\0\377\377\0\0\377\377\0\0\377\334\222\222\377\377"
+  "\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"
+  "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"
+  "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377"
+  "\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0"
+  "\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377"
+  "\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377"
+  "\377\0\377\377\377\0\377\377\377\0\377\377\377\0\377\377\377\0\256\256\256"
+  "\0\316\316\316\0\316\316\316\0\316\316\316\0\316\316\316\0\316\316\316\0"
+  "\316\316\316\0\316\316\316\0\316\316\316\0\316\316\316\0\316\316\316\0\256"
+  "\256\256\0\316\316\316\0\316\316\316\0\316\316\316\0\316\316\316\0\316\316"
+  "\316\0\316\316\316\0\316\316\316\0\316\316\316\0\316\316\316\0\316\316\316"
+  "\0\306||\377\334\222\222\377\334\222\222\377\334\222\222\377\334\222\222"
+  "\377\334\222\222\377\334\222\222\377\334\222\222\377\334\222\222\377\334"
+  "\222\222\377\334\222\222\377\377\377\377\377\377\377\377\377\377\377\377"
+  "\377\377\377\377\377",
+};
+
diff --git a/xpms/leds.xcf b/xpms/leds.xcf
new file mode 100644
index 0000000..d965ef7
Binary files /dev/null and b/xpms/leds.xcf differ
diff --git a/xpms/logo.xpm b/xpms/logo.xpm
new file mode 100644
index 0000000..e81e544
--- /dev/null
+++ b/xpms/logo.xpm
@@ -0,0 +1,427 @@
+/* XPM */
+static char * logo_xpm[] = {
+"50 410 14 1",
+" 	c None",
+".	c #91B7A4",
+"+	c #BA5D49",
+"@	c #C6432F",
+"#	c #C0503C",
+"$	c #97AA97",
+"%	c #A3907D",
+"&	c #A88470",
+"*	c #B46A56",
+"=	c #AE7763",
+"-	c #9D9E8A",
+";	c #C5432F",
+">	c #B46A57",
+",	c #A2907D",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..........+@#$$#@+$.....%@@&.*@#%.+@#$............",
+".........%@@@*=@@@&.....@@@@.@@@#%@@@*............",
+".........%@@@*=@@@=.....@@@@-@@@@%@@@*............",
+"..........+@@%$#@#-.....%@@*.*@@=.*@@%............",
+".......-............$-..................%.........",
+"......#@%..........%@@#...............-@@#$.......",
+".....-@@#..........*@@@%..............=@@@=.......",
+".....$@@#..........*@@@%..............&@@@=.......",
+"......%@%..........$+@*................*@+$.......",
+"......$%............%%$................-%-........",
+"......#@=..........=@@#$..............-@@@-.......",
+".....-@@@..........*@@@%..............=@@@*.......",
+"......@@#..........=@@@-..............%@@@&.......",
+"......%*-..........$=*=................=*=$.......",
+"......-*$..........$=*-................&*&........",
+"......@@+..........=@@@$..............%@@@%.......",
+".....%@@@..........*@@@%..............*@@@*.......",
+"......#@+..........=@@@-..............-@@@&.......",
+"......$=$...........&*-................-*&........",
+"..........=*=$....................=*=$............",
+".........%@@;=...................-@@@=............",
+".........%@@@*...................%@@@*............",
+".........$#@@=...................$#@@=............",
+"..........$%-.....................$%%.............",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"...........-....$.............$$...-..............",
+"..........#@@%$#@@-..........*@@=.+@@%............",
+".........%@@@*=@@@=.........$@@@@%@@@*............",
+".........%@@@*=@@@&..........@@@#%@@@*............",
+"..........+@#$$#@+$..........=@#%.+@#$............",
+".......%..$%-..$%-............%%..$%-..-%$........",
+"......#@=$#@@&-@@@-..........+@@*$#@@=-@@@-.......",
+".....-@@@%@@@**@@@=.........$@@@@%@@@*=@@@*.......",
+"......@@+%@@@==@@@%..........@@@#-@@@*%@@@=.......",
+"......%*$.=*=$$**=...........%**$.=**$.=**$.......",
+"......$=$.-*&.....................-=&..%*-........",
+"......#@+$@@@=...................$@@@=%@@@-.......",
+".....-@@@%@@@*...................%@@@**@;;>.......",
+"......@@+-@@@=...................-@@@=-;;;&.......",
+"......-*$.%*&.....................%*&..%*&........",
+"......-*$.%**$....................%**$.=*=........",
+"......@@#-@@@*...................-@@@*&@@@&.......",
+"....-@@@@%@@@*...................%@@@*=@;;*.......",
+".....#@@=-@@@%...................$@@@&-@@@-.......",
+".....$%%..-%-.....................-%-..-%-........",
+".....%@#%.=@#$.*@+$$+@=.%#@=.%##%.=@#-$+ at +$.......",
+"....$@@@#%@@@*&@@@&*@@@%#@@@.@@@@-@@@*&@@@=.......",
+"....-@@@#%@@@**@@@=*@@@%@@@@-@@@@%@@@*=@@@*.......",
+".....#@@%$#@@%-@@#$%@@#.=@@*.#@@=$#@@%$#@@-.......",
+"......%$...%$..$%...$%...--...%$...%$...%$........",
+"..........+@@%$#@#$-#@#.%@@*.*@@=.*@@%............",
+".........%@@@*=@@@=*@@@%@@@@-@@@@%@@@*............",
+".........%@@@*=@@@&*@@@%@@@@.@@@#%@@@*............",
+"..........+@#$$#@+$%@@*.%@@&.*@@%.+@#$............",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+".....$%%..$%%..-%-..-%-..%%$.$%%$.$%%..-%-........",
+".....#@@+$@@@=-@@@-&@@@$*@@#.#@@+$#@@=-@@@-.......",
+"....-@@@@%@@@**@@@**@@@%@@@@-@@@@%@@@**@@@*.......",
+".....@@@+-@@@=&@@@%*@@@-#@@#.@@@+-@@@=%@@@&.......",
+".....%**$.&*=..=*&.$**%.-**-.%**$.&*=..&*=........",
+".....$**$.-*=$.&*&..=*%.$=*-.$**$.-*=$.&*&........",
+".....#@@+-@@@=&@@@%=@@@-+@@@.#@@#-@@@*%@@@&.......",
+"....%@@@@%@@@**@@@=*@@@%@@@@-@@@@%@@@*=@@@*.......",
+".....@@@=-@@@&&@@@-=@@@$+@@#.#@@*-@@@=-@@@&.......",
+".....-=&..-=%..%*-..&=-.$&&$.$=&..-=%..-*,........",
+"..........=#*$.=+*$...............................",
+".........-@@@*&@@@&...............................",
+".........%@@@**@@@=...............................",
+".........$@@@%-@@@-...............................",
+"..........$%-..-%$................................",
+"..............$+@#$$#@+...........................",
+"..............=@;@&*@@@%..........................",
+"..............*;@@&*;;;,..........................",
+"..............-@@#$%;;*...........................",
+"................%...$%............................",
+"..............$#@@-%@@#$..........................",
+"..............=@@@=*@@@%..........................",
+"..............=@@@&*@@@-..........................",
+"..............$+@*.-#@=...........................",
+"..........$%%..-%-................................",
+".........$#@@=-@@@-...............................",
+".........%@@@**@@@*...............................",
+".........%@@@=&@@@%...............................",
+"..........=*=..=*=................................",
+".....$*=$.-*=..%*&..&*-.$=*-.$==$.-*=$.&*&........",
+".....#@@+-@@@=-@@@%=@@@-+@@@.#@@#$@@@=%@@@&.......",
+"....%@@@@%@@@**@@@**@@@%@@@@-@@@@%@@@**@@@*.......",
+".....@@@=-@@@=&@@@-=@@@$+@@#.@@@+-@@@=-@@@&.......",
+".....-*&..-*&..&*-..&*-.$==$.-*&$.-*&..-*&........",
+".....%**-.&**$.=*=.$=*=.$**%.%**%.%**$.=*=........",
+".....@@@#-@@@*&@@@&=@@@-#@@@.@@@#-@@@*&@@@&.......",
+"....-@@@@%@@@**@@@=*@@@%@@@@-@@@@%@@@*=@@@*.......",
+".....#@@=$@@@%-@@@-=@@#$*@@+.#@@=$@@@%-@@@-.......",
+".....$%%..$%-..-%$..%%$..%%..$%%..$%-..$%-........",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+".....*@@&.+@@%$#@#$-#@#.%@@*.*@@=.*@@%$#@#$.......",
+"....$@@@@%@@@*=@@@=*@@@%@@@@-@@@@%@@@*=@@@=.......",
+"....$@@@#%@@@*=@@@&*@@@%@@@@.@@@#%@@@*&@@@=.......",
+".....*@@%.+@#$$#@+$%@@*.&@@&.*@@%.+@#$$+@#$.......",
+"......%%...%-..$%$..-%$..-%...%%...%-..$%$........",
+".....*@@=$#@@&-@@@-%@@#$=@@#.*@@*$#@@=-@@@-.......",
+"....-@@@@%@@@**@@@=*@@@%@@@@-@@@@%@@@*=@@@*.......",
+"....$@@@+%@@@==@@@%*@@@-#@@@.@@@#%@@@*%@@@=.......",
+".....=#+$.=#*$$*@=.$+#=.%++%.%#+$.=#*$.=@*$.......",
+".............................$&&$.$=%.............",
+".............................#@@+$@@@=............",
+"............................$@@@@%@@@*............",
+".............................@@@+-@@@=............",
+".............................-*=$.&*=.............",
+"........................$=*%.-**$.................",
+"........................+@@@.#@@#.................",
+"........................@@@@$@@@@.................",
+"........................+@@#.#@@*.................",
+"........................$%%$.$%%..................",
+"........................$+#=.%##%.................",
+"........................#@@@.@@@#.................",
+"........................@@@@-@@@@.................",
+"........................*@@*.#@@=.................",
+".........................-%...%-..................",
+".............................=@@&.*@@%............",
+".............................@@@@%@@@*............",
+".............................@@@@%@@@*............",
+".............................*@@%.#@#-............",
+"......%-...%-..$%$..$%...-%...--...%-..$%$........",
+".....*@@=$#@@%$#@@-%@@#$=@@#.*@@*.#@@&-@@@-.......",
+"....-@@@@%@@@*=@@@=*@@@%@@@@-@@@@%@@@*=@@@*.......",
+"....$@@@+%@@@*=@@@&*@@@-#@@@.@@@#%@@@*&@@@=.......",
+".....=@+$.=@+$$+@=.$+@=.%##%.=@+%.=@+$.=@+$.......",
+".....$%%..$%%..-%-..-%-..%%$.$%%$.$%%..-%-........",
+".....#@@+$@@@=-@@@-&@@@$*@@#.#@@+$#@@=-@@@-.......",
+"....-@@@@%@@@**@@@**@@@%@@@@-@@@@%@@@**@@@*.......",
+".....@@@+-@@@=&@@@%*@@@-#@@#.@@@+-@@@=%@@@&.......",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+"..................................................",
+".................................................."};
diff --git a/xpms/miniduck.xpm b/xpms/miniduck.xpm
new file mode 100644
index 0000000..b62b2dd
--- /dev/null
+++ b/xpms/miniduck.xpm
@@ -0,0 +1,26 @@
+/* XPM */
+static char * miniduck_xpm[] = {
+"38 11 12 1",
+" 	c None",
+".	c #000000",
+"+	c #4D4D4D",
+"@	c #FFFFFF",
+"#	c #FFD400",
+"$	c #A6A6A6",
+"%	c #EA7D09",
+"&	c #D1B00E",
+"*	c #E5BF00",
+"=	c #A2A2A2",
+"-	c #9B9B9B",
+";	c #9D9D9D",
+"    ...                +++            ",
+"  ..@@#.    ......   ++@@$+    ++++++ ",
+" .%#@.##. ..&&****. +=$@.$$+ ++--;;;;+",
+".%%#####..&&*****. +==$$$$$++--;;;;;+ ",
+" ..#####.&&*****... ++$$$$$+--;;;;;+++",
+"   ....#####&&&&##.   ++++$$$$$----$$+",
+"       .##########.       +$$$$$$$$$$+",
+"        .########.         +$$$$$$$$+ ",
+"         ....%#..           ++++=$++  ",
+"             .%.                +=+   ",
+"              .                  +    "};
diff --git a/xpms/mkduck.sh b/xpms/mkduck.sh
new file mode 100755
index 0000000..c3b9c4c
--- /dev/null
+++ b/xpms/mkduck.sh
@@ -0,0 +1,5 @@
+#!/bin/sh
+convert duck.xcf duck.png
+montage -geometry 32x32 -tile 50x1 duck.png.* duck_xpm.xpm
+mogrify -transparent \#002aff duck_xpm.xpm
+mv duck_xpm.xpm duck.xpm && rm -f duck.png.*
\ No newline at end of file
diff --git a/xpms/month.xpm b/xpms/month.xpm
new file mode 100644
index 0000000..f92eadd
--- /dev/null
+++ b/xpms/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/xpms/porte.h b/xpms/porte.h
new file mode 100644
index 0000000..02552e5
--- /dev/null
+++ b/xpms/porte.h
@@ -0,0 +1,738 @@
+/* GIMP RGBA C-Source image dump (porte.c) */
+
+static const struct {
+  unsigned int 	 width;
+  unsigned int 	 height;
+  unsigned int 	 bytes_per_pixel; /* 3:RGB, 4:RGBA */ 
+  unsigned char	 pixel_data[64 * 64 * 4 + 1];
+} porte_image = {
+  64, 64, 4,
+  "\333\333\333\310\333\333\333\310\333\333\333\310\333\333\333\310\333\333"
+  "\333\310\333\333\333\310\333\333\333\310\333\333\333\310\333\333\333\310"
+  "\333\333\333\310\333\333\333\310\333\333\333\310\333\333\333\310\333\333"
+  "\333\310\333\333\333\310\333\333\333\310\333\333\333\310\333\333\333\310"
+  "\333\333\333\310\333\333\333\310\333\333\333\310\333\333\333\310\333\333"
+  "\333\310\333\333\333\310\333\333\333\310\333\333\333\310\333\333\333\310"
+  "\333\333\333\310\333\333\333\310\333\333\333\310\333\333\333\310\333\333"
+  "\333\310\333\333\333\310\333\333\333\310\333\333\333\310\333\333\333\310"
+  "\333\333\333\310\333\333\333\310\333\333\333\310\333\333\333\310\333\333"
+  "\333\310\333\333\333\310\333\333\333\310\333\333\333\310\333\333\333\310"
+  "\333\333\333\310\333\333\333\310\333\333\333\310\333\333\333\310\333\333"
+  "\333\310\333\333\333\310\333\333\333\310\333\333\333\310\333\333\333\310"
+  "\333\333\333\310\333\333\333\310\333\333\333\310\333\333\333\310\333\333"
+  "\333\310\333\333\333\310\333\333\333\310\333\333\333\310\333\333\333\310"
+  "~~~\310\333\333\333\310\333\333\333\310\333\333\333\310\333\333\333\310\333"
+  "\333\333\310\333\333\333\310\333\333\333\310\333\333\333\310\333\333\333"
+  "\310\333\333\333\310\333\333\333\310\333\333\333\310\333\333\333\310\333"
+  "\333\333\310\333\333\333\310\333\333\333\310\333\333\333\310\333\333\333"
+  "\310\333\333\333\310\333\333\333\310\333\333\333\310\333\333\333\310\333"
+  "\333\333\310\333\333\333\310\333\333\333\310\333\333\333\310\333\333\333"
+  "\310\333\333\333\310\333\333\333\310\333\333\333\310\333\333\333\310\333"
+  "\333\333\310\333\333\333\310\333\333\333\310\333\333\333\310\333\333\333"
+  "\310\333\333\333\310\333\333\333\310\333\333\333\310\333\333\333\310\333"
+  "\333\333\310\333\333\333\310\333\333\333\310\333\333\333\310\333\333\333"
+  "\310\333\333\333\310\333\333\333\310\333\333\333\310\333\333\333\310\333"
+  "\333\333\310\333\333\333\310\333\333\333\310\333\333\333\310\333\333\333"
+  "\310\333\333\333\310\333\333\333\310\333\333\333\310\333\333\333\310\333"
+  "\333\333\310\333\333\333\310\333\333\333\310\333\333\333\310~~~\310CCC\310"
+  "\333\333\333\310\333\333\333\310CCC\377CCC\377CCC\377CCC\377CCC\377CCC\377"
+  "CCC\377CCC\377CCC\377CCC\377CCC\377CCC\377CCC\377CCC\377CCC\377CCC\377CC"
+  "C\377CCC\377CCC\377CCC\377CCC\377CCC\377CCC\377CCC\377CCC\377CCC\377CCC\377"
+  "CCC\377CCC\377CCC\377CCC\377CCC\377CCC\377CCC\377CCC\377CCC\377CCC\377CC"
+  "C\377CCC\377CCC\377CCC\377CCC\377CCC\377CCC\377CCC\377CCC\377CCC\377CCC\377"
+  "CCC\377CCC\377CCC\377CCC\377CCC\377CCC\377CCC\377CCC\377CCC\377CCC\377\250"
+  "\250\250\377\177\177\177\377CCC\310CCC\310\333\333\333\310\333\333\333\310"
+  "CCC\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\333\333\333\377\177"
+  "\177\177\377CCC\310CCC\310\333\333\333\310\333\333\333\310CCC\377\177\177"
+  "\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377"
+  "\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177"
+  "\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377"
+  "\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177"
+  "\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377"
+  "\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177"
+  "\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377"
+  "\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177"
+  "\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377"
+  "\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177"
+  "\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377"
+  "\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177"
+  "\177\377\177\177\177\377\177\177\177\377\333\333\333\377\177\177\177\377"
+  "CCC\310CCC\310\333\333\333\310\333\333\333\310CCC\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\333\333\333\377\177\177\177\377CCC\310CCC\310"
+  "\333\333\333\310\333\333\333\310CCC\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\333\333\333\377\177\177\177\377CCC\310CCC\310\333\333\333\310"
+  "\333\333\333\310CCC\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\333"
+  "\333\333\377\177\177\177\377CCC\310CCC\310\333\333\333\310\333\333\333\310"
+  "CCC\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\333\333\333\377\177"
+  "\177\177\377CCC\310CCC\310\333\333\333\310\333\333\333\310CCC\377\177\177"
+  "\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377"
+  "\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177"
+  "\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377"
+  "\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177"
+  "\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377"
+  "\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177"
+  "\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377"
+  "\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177"
+  "\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377"
+  "\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177"
+  "\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377"
+  "\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177"
+  "\177\377\177\177\177\377\177\177\177\377\333\333\333\377\177\177\177\377"
+  "CCC\310CCC\310\333\333\333\310\333\333\333\310CCC\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\333\333\333\377\177\177\177\377CCC\310CCC\310"
+  "\333\333\333\310\333\333\333\310CCC\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\333\333\333\377\177\177\177\377CCC\310CCC\310\333\333\333\310"
+  "\333\333\333\310CCC\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\333"
+  "\333\333\377\177\177\177\377CCC\310CCC\310\333\333\333\310\333\333\333\310"
+  "CCC\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\333\333\333\377\177"
+  "\177\177\377CCC\310CCC\310\333\333\333\310\333\333\333\310\250\250\250\377"
+  "\333\333\333\377\333\333\333\377\333\333\333\377\333\333\333\377\333\333"
+  "\333\377\333\333\333\377\333\333\333\377\333\333\333\377\333\333\333\377"
+  "\333\333\333\377\333\333\333\377\333\333\333\377\333\333\333\377\333\333"
+  "\333\377\333\333\333\377\333\333\333\377\333\333\333\377\333\333\333\377"
+  "\333\333\333\377\333\333\333\377\333\333\333\377\333\333\333\377\333\333"
+  "\333\377\333\333\333\377\333\333\333\377\333\333\333\377\333\333\333\377"
+  "\333\333\333\377\333\333\333\377\333\333\333\377\333\333\333\377\333\333"
+  "\333\377\333\333\333\377\333\333\333\377\333\333\333\377\333\333\333\377"
+  "\333\333\333\377\333\333\333\377\333\333\333\377\333\333\333\377\333\333"
+  "\333\377\333\333\333\377\333\333\333\377\333\333\333\377\333\333\333\377"
+  "\333\333\333\377\333\333\333\377\333\333\333\377\333\333\333\377\333\333"
+  "\333\377\333\333\333\377\333\333\333\377\333\333\333\377\333\333\333\377"
+  "\333\333\333\377\333\333\333\377\333\333\333\377\333\333\333\377\177\177"
+  "\177\377CCC\310CCC\310\333\333\333\310\333\333\333\310\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377CCC\310CCC\310\333\333\333\310\333\333\333\310CCC\377CCC\377CCC\377C"
+  "CC\377CCC\377CCC\377CCC\377CCC\377\250\250\250\377\177\177\177\377\177\177"
+  "\177\377CCC\377CCC\377CCC\377CCC\377CCC\377CCC\377CCC\377CCC\377\250\250"
+  "\250\377\177\177\177\377\177\177\177\377CCC\377CCC\377CCC\377CCC\377CCC\377"
+  "CCC\377CCC\377CCC\377\250\250\250\377\177\177\177\377\177\177\177\377CCC"
+  "\377CCC\377CCC\377CCC\377CCC\377CCC\377CCC\377CCC\377\250\250\250\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377CCC\377CCC\377CCC\377"
+  "CCC\377CCC\377CCC\377CCC\377CCC\377CCC\377CCC\377CCC\310CCC\310\333\333\333"
+  "\310\333\333\333\310CCC\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0"
+  "\377\0\0\0\377\0\0\0\377\333\333\333\377\177\177\177\377\177\177\177\377"
+  "CCC\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\11\11"
+  "\0\377\333\333\333\377\177\177\177\377\177\177\177\377CCC\377\0\0\0\377\0"
+  "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\333\333\333\377"
+  "\177\177\177\377\177\177\177\377CCC\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0"
+  "\0\377\0\0\0\377\0\0\0\377\0\0\0\377\333\333\333\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377CCC\377\333\333\333\346\333\333\333\346\333\333\333\346"
+  "\333\333\333\346\333\333\333\346\333\333\333\346\333\333\333\346\333\333"
+  "\333\346\333\333\333\346\333\333\333\346CCC\310CCC\310\333\333\333\310\333"
+  "\333\333\310CCC\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0"
+  "\0\377\0\0\0\377\333\333\333\377\177\177\177\377\177\177\177\377CCC\377\0"
+  "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\11\11\0\377\333"
+  "\333\333\377\177\177\177\377\177\177\177\377CCC\377\0\0\0\377\0\0\0\377\0"
+  "\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\333\333\333\377\177\177"
+  "\177\377\177\177\177\377CCC\377\0\0\0\377\0\0\0\377\0\0\0\377\0\0\0\377\0"
+  "\0\0\377\0\0\0\377\0\0\0\377\333\333\333\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377CCC\377"
+  "\333\333\333\346CCC\346CCC\346CCC\346CCC\346CCC\346CCC\346CCC\346CCC\346"
+  "\250\250\250\346\177\177\177\346CCC\310CCC\310\333\333\333\310\333\333\333"
+  "\310\250\250\250\377\333\333\333\377\333\333\333\377\333\333\333\377\333"
+  "\333\333\377\333\333\333\377\333\333\333\377\333\333\333\377\333\333\333"
+  "\377\177\177\177\377\177\177\177\377\250\250\250\377\333\333\333\377\333"
+  "\333\333\377\333\333\333\377\333\333\333\377\333\333\333\377\333\333\333"
+  "\377\333\333\333\377\333\333\333\377\177\177\177\377\177\177\177\377\250"
+  "\250\250\377\333\333\333\377\333\333\333\377\333\333\333\377\333\333\333"
+  "\377\333\333\333\377\333\333\333\377\333\333\333\377\333\333\333\377\177"
+  "\177\177\377\177\177\177\377\250\250\250\377\333\333\333\377\333\333\333"
+  "\377\333\333\333\377\333\333\333\377\333\333\333\377\333\333\333\377\333"
+  "\333\333\377\333\333\333\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377CCC\377\333\333\333\346CCC\346\0\0\0"
+  "\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346"
+  "\333\333\333\346\177\177\177\346CCC\310CCC\310\333\333\333\310\333\333\333"
+  "\310\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177"
+  "\177\177\377\177\177\177\377\177\177\177\377\177\177\177\377\177\177\177"
+  "\377\177\177\177\377CCC\377\333\333\333\346CCC\346\0\0\0\346\0\0\0\346\0"
+  "\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\333"
+  "\333\333\346\177\177\177\346CCC\310CCC\310\333\333\333\310\333\333\333\310"
+  "CCC\377CCC\377CCC\377CCC\377CCC\377CCC\377CCC\377CCC\377CCC\377CCC\377CC"
+  "C\377CCC\377CCC\377CCC\377CCC\377CCC\377CCC\377CCC\377CCC\377CCC\377CCC\377"
+  "CCC\377CCC\377CCC\377CCC\377CCC\377CCC\377CCC\377CCC\377CCC\377CCC\377CC"
+  "C\377CCC\377CCC\377CCC\377CCC\377CCC\377CCC\377CCC\377CCC\377CCC\377CCC\377"
+  "CCC\377CCC\377CCC\377CCC\377\333\333\333\346\177\177\177\346CCC\346\0\0\0"
+  "\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346"
+  "\0\0\0\346\333\333\333\346\177\177\177\346CCC\310CCC\310\333\333\333\310"
+  "\333\333\333\310\333\333\333\346\333\333\333\346\333\333\333\346\333\333"
+  "\333\346\333\333\333\346\333\333\333\346\333\333\333\346\333\333\333\346"
+  "\333\333\333\346\333\333\333\346\333\333\333\346\333\333\333\346\333\333"
+  "\333\346\333\333\333\346\333\333\333\346\333\333\333\346\333\333\333\346"
+  "\333\333\333\346\333\333\333\346\333\333\333\346\333\333\333\346\333\333"
+  "\333\346\333\333\333\346\333\333\333\346\333\333\333\346\333\333\333\346"
+  "\333\333\333\346\333\333\333\346\333\333\333\346\333\333\333\346\333\333"
+  "\333\346\333\333\333\346\333\333\333\346\333\333\333\346\333\333\333\346"
+  "\333\333\333\346\333\333\333\346\333\333\333\346\333\333\333\346\333\333"
+  "\333\346\333\333\333\346\333\333\333\346\333\333\333\346\333\333\333\346"
+  "\333\333\333\346\333\333\333\346\177\177\177\346\177\177\177\346\250\250"
+  "\250\346\333\333\333\346\333\333\333\346\333\333\333\346\333\333\333\346"
+  "\333\333\333\346\333\333\333\346\333\333\333\346\333\333\333\346\333\333"
+  "\333\346\333\333\333\346\177\177\177\346CCC\310CCC\310\333\333\333\310\333"
+  "\333\333\310\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346CCC\310CCC\310\333\333\333\310\333\333"
+  "\333\310CCC\346CCC\346CCC\346CCC\346CCC\346CCC\346CCC\346CCC\346CCC\346C"
+  "CC\346CCC\346CCC\346CCC\346CCC\346CCC\346CCC\346CCC\346CCC\346CCC\346CCC"
+  "\346CCC\346CCC\346CCC\346CCC\346CCC\346CCC\346CCC\346CCC\346CCC\346CCC\346"
+  "CCC\346CCC\346CCC\346CCC\346CCC\346CCC\346CCC\346CCC\346CCC\346CCC\346CC"
+  "C\346CCC\346CCC\346CCC\346CCC\346CCC\346CCC\346CCC\346CCC\346CCC\346CCC\346"
+  "CCC\346CCC\346CCC\346CCC\346CCC\346CCC\346CCC\346\250\250\250\346\177\177"
+  "\177\346CCC\310CCC\310\333\333\333\310\333\333\333\310CCC\346\0\0\0\346\0"
+  "\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0"
+  "\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0"
+  "\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346"
+  "\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0"
+  "\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0"
+  "\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0"
+  "\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346"
+  "\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\333\333\333\346\177\177"
+  "\177\346CCC\310CCC\310\333\333\333\310\333\333\333\310CCC\346\0\0\0\346\0"
+  "\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0"
+  "\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0"
+  "\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346"
+  "\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0"
+  "\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0"
+  "\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0"
+  "\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346"
+  "\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\333\333\333\346\177\177"
+  "\177\346CCC\310CCC\310\333\333\333\310\333\333\333\310CCC\346\0\0\0\346\0"
+  "\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0"
+  "\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0"
+  "\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346"
+  "\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0"
+  "\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0"
+  "\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0"
+  "\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346"
+  "\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\333\333\333\346\177\177"
+  "\177\346CCC\310CCC\310\333\333\333\310\333\333\333\310CCC\346\0\0\0\346\0"
+  "\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0"
+  "\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0"
+  "\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346"
+  "\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0"
+  "\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0"
+  "\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0"
+  "\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346"
+  "\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\333\333\333\346\177\177"
+  "\177\346CCC\310CCC\310\333\333\333\310\333\333\333\310CCC\346\0\0\0\346\0"
+  "\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0"
+  "\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0"
+  "\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346"
+  "\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0"
+  "\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0"
+  "\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0"
+  "\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346"
+  "\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\333\333\333\346\177\177"
+  "\177\346CCC\310CCC\310\333\333\333\310\333\333\333\310CCC\346\0\0\0\346\0"
+  "\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0"
+  "\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0"
+  "\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346"
+  "\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0"
+  "\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0"
+  "\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0"
+  "\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346"
+  "\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\333\333\333\346\177\177"
+  "\177\346CCC\310CCC\310\333\333\333\310\333\333\333\310CCC\346\0\0\0\346\0"
+  "\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0"
+  "\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0"
+  "\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346"
+  "\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0"
+  "\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0"
+  "\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0"
+  "\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346"
+  "\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\333\333\333\346\177\177"
+  "\177\346CCC\310CCC\310\333\333\333\310\333\333\333\310CCC\346\0\0\0\346\0"
+  "\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0"
+  "\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0"
+  "\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346"
+  "\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0"
+  "\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0"
+  "\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0"
+  "\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346"
+  "\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\333\333\333\346\177\177"
+  "\177\346CCC\310CCC\310\333\333\333\310\333\333\333\310CCC\346\0\0\0\346\0"
+  "\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0"
+  "\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0"
+  "\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346"
+  "\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0"
+  "\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0"
+  "\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0"
+  "\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346"
+  "\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\333\333\333\346\177\177"
+  "\177\346CCC\310CCC\310\333\333\333\310\333\333\333\310CCC\346\0\0\0\346\0"
+  "\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0"
+  "\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0"
+  "\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346"
+  "\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0"
+  "\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0"
+  "\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0"
+  "\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346"
+  "\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\333\333\333\346\177\177"
+  "\177\346CCC\310CCC\310\333\333\333\310\333\333\333\310CCC\346\0\0\0\346\0"
+  "\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0"
+  "\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0"
+  "\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346"
+  "\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0"
+  "\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0"
+  "\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0"
+  "\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346"
+  "\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\333\333\333\346\177\177"
+  "\177\346CCC\310CCC\310\333\333\333\310\333\333\333\310CCC\346\0\0\0\346\0"
+  "\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0"
+  "\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0"
+  "\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346"
+  "\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0"
+  "\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0"
+  "\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0"
+  "\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346"
+  "\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\333\333\333\346\177\177"
+  "\177\346CCC\310CCC\310\333\333\333\310\333\333\333\310CCC\346\0\0\0\346\0"
+  "\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0"
+  "\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0"
+  "\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346"
+  "\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0"
+  "\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0"
+  "\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0"
+  "\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346"
+  "\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\333\333\333\346\177\177"
+  "\177\346CCC\310CCC\310\333\333\333\310\333\333\333\310CCC\346\0\0\0\346\0"
+  "\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0"
+  "\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0"
+  "\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346"
+  "\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0"
+  "\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0"
+  "\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0"
+  "\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346"
+  "\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\333\333\333\346\177\177"
+  "\177\346CCC\310CCC\310\333\333\333\310\333\333\333\310CCC\346\0\0\0\346\0"
+  "\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0"
+  "\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0"
+  "\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346"
+  "\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0"
+  "\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0"
+  "\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0"
+  "\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346"
+  "\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\333\333\333\346\177\177"
+  "\177\346CCC\310CCC\310\333\333\333\310\333\333\333\310CCC\346\0\0\0\346\0"
+  "\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0"
+  "\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0"
+  "\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346"
+  "\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0"
+  "\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0"
+  "\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0"
+  "\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346"
+  "\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\333\333\333\346\177\177"
+  "\177\346CCC\310CCC\310\333\333\333\310\333\333\333\310CCC\346\0\0\0\346\0"
+  "\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0"
+  "\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0"
+  "\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346"
+  "\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0"
+  "\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0"
+  "\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0"
+  "\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346"
+  "\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\333\333\333\346\177\177"
+  "\177\346CCC\310CCC\310\333\333\333\310\333\333\333\310CCC\346\0\0\0\346\0"
+  "\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0"
+  "\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0"
+  "\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346"
+  "\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0"
+  "\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0"
+  "\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0"
+  "\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346"
+  "\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\333\333\333\346\177\177"
+  "\177\346CCC\310CCC\310\333\333\333\310\333\333\333\310CCC\346\0\0\0\346\0"
+  "\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0"
+  "\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0"
+  "\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346"
+  "\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0"
+  "\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0"
+  "\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0"
+  "\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346"
+  "\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\333\333\333\346\177\177"
+  "\177\346CCC\310CCC\310\333\333\333\310\333\333\333\310CCC\346\0\0\0\346\0"
+  "\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0"
+  "\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0"
+  "\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346"
+  "\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0"
+  "\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0"
+  "\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0"
+  "\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346"
+  "\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\333\333\333\346\177\177"
+  "\177\346CCC\310CCC\310\333\333\333\310\333\333\333\310CCC\346\0\0\0\346\0"
+  "\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0"
+  "\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0"
+  "\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346"
+  "\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0"
+  "\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0"
+  "\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0"
+  "\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346"
+  "\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\0\0\0\346\333\333\333\346\177\177"
+  "\177\346CCC\310CCC\310\333\333\333\310\333\333\333\310\250\250\250\346\333"
+  "\333\333\346\333\333\333\346\333\333\333\346\333\333\333\346\333\333\333"
+  "\346\333\333\333\346\333\333\333\346\333\333\333\346\333\333\333\346\333"
+  "\333\333\346\333\333\333\346\333\333\333\346\333\333\333\346\333\333\333"
+  "\346\333\333\333\346\333\333\333\346\333\333\333\346\333\333\333\346\333"
+  "\333\333\346\333\333\333\346\333\333\333\346\333\333\333\346\333\333\333"
+  "\346\333\333\333\346\333\333\333\346\333\333\333\346\333\333\333\346\333"
+  "\333\333\346\333\333\333\346\333\333\333\346\333\333\333\346\333\333\333"
+  "\346\333\333\333\346\333\333\333\346\333\333\333\346\333\333\333\346\333"
+  "\333\333\346\333\333\333\346\333\333\333\346\333\333\333\346\333\333\333"
+  "\346\333\333\333\346\333\333\333\346\333\333\333\346\333\333\333\346\333"
+  "\333\333\346\333\333\333\346\333\333\333\346\333\333\333\346\333\333\333"
+  "\346\333\333\333\346\333\333\333\346\333\333\333\346\333\333\333\346\333"
+  "\333\333\346\333\333\333\346\333\333\333\346\333\333\333\346\177\177\177"
+  "\346CCC\310CCC\310\333\333\333\310\333\333\333\310\177\177\177\346\177\177"
+  "\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346"
+  "\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177"
+  "\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346"
+  "\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177"
+  "\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346"
+  "\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177"
+  "\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346"
+  "\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177"
+  "\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346"
+  "\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177"
+  "\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346"
+  "\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177"
+  "\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346"
+  "CCC\310CCC\310\333\333\333\310\333\333\333\310CCC\346CCC\346CCC\346CCC\346"
+  "CCC\346CCC\346CCC\346CCC\346CCC\346CCC\346CCC\346CCC\346CCC\346CCC\346CC"
+  "C\346CCC\346CCC\346CCC\346CCC\346CCC\346CCC\346CCC\346CCC\346CCC\346CCC\346"
+  "CCC\346CCC\346CCC\346CCC\346CCC\346CCC\346CCC\346CCC\346CCC\346CCC\346CC"
+  "C\346CCC\346CCC\346CCC\346CCC\346CCC\346CCC\346CCC\346CCC\346CCC\346CCC\346"
+  "CCC\346CCC\346CCC\346CCC\346CCC\346CCC\346CCC\346CCC\346CCC\346CCC\346CC"
+  "C\346CCC\346\250\250\250\346\177\177\177\346CCC\310CCC\310\333\333\333\310"
+  "\333\333\333\310CCC\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\333"
+  "\333\333\346\177\177\177\346CCC\310CCC\310\333\333\333\310\333\333\333\310"
+  "CCC\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\333\333\333\346\177"
+  "\177\177\346CCC\310CCC\310\333\333\333\310\333\333\333\310CCC\346\177\177"
+  "\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346"
+  "\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177"
+  "\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346"
+  "\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177"
+  "\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346"
+  "\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177"
+  "\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346"
+  "\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177"
+  "\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346"
+  "\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177"
+  "\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346"
+  "\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177"
+  "\177\346\177\177\177\346\177\177\177\346\333\333\333\346\177\177\177\346"
+  "CCC\310CCC\310\333\333\333\310\333\333\333\310CCC\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\333\333\333\346\177\177\177\346CCC\310CCC\310"
+  "\333\333\333\310\333\333\333\310CCC\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\333\333\333\346\177\177\177\346CCC\310CCC\310\333\333\333\310"
+  "\333\333\333\310CCC\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\333"
+  "\333\333\346\177\177\177\346CCC\310CCC\310\333\333\333\310\333\333\333\310"
+  "CCC\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\333\333\333\346\177"
+  "\177\177\346CCC\310CCC\310\333\333\333\310\333\333\333\310CCC\346\177\177"
+  "\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346"
+  "\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177"
+  "\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346"
+  "\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177"
+  "\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346"
+  "\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177"
+  "\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346"
+  "\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177"
+  "\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346"
+  "\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177"
+  "\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346"
+  "\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177"
+  "\177\346\177\177\177\346\177\177\177\346\333\333\333\346\177\177\177\346"
+  "CCC\310CCC\310\333\333\333\310\333\333\333\310CCC\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\333\333\333\346\177\177\177\346CCC\310CCC\310"
+  "\333\333\333\310\333\333\333\310CCC\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\333\333\333\346\177\177\177\346CCC\310CCC\310\333\333\333\310"
+  "\333\333\333\310CCC\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\333"
+  "\333\333\346\177\177\177\346CCC\310CCC\310\333\333\333\310\333\333\333\310"
+  "\250\250\250\346\333\333\333\346\333\333\333\346\333\333\333\346\333\333"
+  "\333\346\333\333\333\346\333\333\333\346\333\333\333\346\333\333\333\346"
+  "\333\333\333\346\333\333\333\346\333\333\333\346\333\333\333\346\333\333"
+  "\333\346\333\333\333\346\333\333\333\346\333\333\333\346\333\333\333\346"
+  "\333\333\333\346\333\333\333\346\333\333\333\346\333\333\333\346\333\333"
+  "\333\346\333\333\333\346\333\333\333\346\333\333\333\346\333\333\333\346"
+  "\333\333\333\346\333\333\333\346\333\333\333\346\333\333\333\346\333\333"
+  "\333\346\333\333\333\346\333\333\333\346\333\333\333\346\333\333\333\346"
+  "\333\333\333\346\333\333\333\346\333\333\333\346\333\333\333\346\333\333"
+  "\333\346\333\333\333\346\333\333\333\346\333\333\333\346\333\333\333\346"
+  "\333\333\333\346\333\333\333\346\333\333\333\346\333\333\333\346\333\333"
+  "\333\346\333\333\333\346\333\333\333\346\333\333\333\346\333\333\333\346"
+  "\333\333\333\346\333\333\333\346\333\333\333\346\333\333\333\346\333\333"
+  "\333\346\177\177\177\346CCC\310CCC\310\333\333\333\310\333\333\333\310\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177"
+  "\177\177\346\177\177\177\346\177\177\177\346\177\177\177\346\177\177\177"
+  "\346\177\177\177\346CCC\310CCC\310\333\333\333\310~~~\310CCC\310CCC\310C"
+  "CC\310CCC\310CCC\310CCC\310CCC\310CCC\310CCC\310CCC\310CCC\310CCC\310CCC"
+  "\310CCC\310CCC\310CCC\310CCC\310CCC\310CCC\310CCC\310CCC\310CCC\310CCC\310"
+  "CCC\310CCC\310CCC\310CCC\310CCC\310CCC\310CCC\310CCC\310CCC\310CCC\310CC"
+  "C\310CCC\310CCC\310CCC\310CCC\310CCC\310CCC\310CCC\310CCC\310CCC\310CCC\310"
+  "CCC\310CCC\310CCC\310CCC\310CCC\310CCC\310CCC\310CCC\310CCC\310CCC\310CC"
+  "C\310CCC\310CCC\310CCC\310CCC\310CCC\310CCC\310CCC\310~~~\310CCC\310CCC\310"
+  "CCC\310CCC\310CCC\310CCC\310CCC\310CCC\310CCC\310CCC\310CCC\310CCC\310CC"
+  "C\310CCC\310CCC\310CCC\310CCC\310CCC\310CCC\310CCC\310CCC\310CCC\310CCC\310"
+  "CCC\310CCC\310CCC\310CCC\310CCC\310CCC\310CCC\310CCC\310CCC\310CCC\310CC"
+  "C\310CCC\310CCC\310CCC\310CCC\310CCC\310CCC\310CCC\310CCC\310CCC\310CCC\310"
+  "CCC\310CCC\310CCC\310CCC\310CCC\310CCC\310CCC\310CCC\310CCC\310CCC\310CC"
+  "C\310CCC\310CCC\310CCC\310CCC\310CCC\310CCC\310CCC\310CCC\310",
+};
+
diff --git a/xpms/porte.xcf b/xpms/porte.xcf
new file mode 100644
index 0000000..f19bf25
Binary files /dev/null and b/xpms/porte.xcf differ
diff --git a/xpms/totoz.xpm b/xpms/totoz.xpm
new file mode 100644
index 0000000..dee8f0b
--- /dev/null
+++ b/xpms/totoz.xpm
@@ -0,0 +1,3965 @@
+/* XPM */
+static char * totoz_xpm[] = {
+"200 60 3902 2",
+"  	c None",
+". 	c #FFFFFF",
+"+ 	c #202020",
+"@ 	c #000000",
+"# 	c #FFFFEF",
+"$ 	c #FFD673",
+"% 	c #FFCC66",
+"& 	c #FFD66B",
+"* 	c #FF6060",
+"= 	c #AB9440",
+"- 	c #B5AD84",
+"; 	c #C5C3C5",
+"> 	c #522452",
+", 	c #840084",
+"' 	c #E600E7",
+") 	c #FF00FF",
+"! 	c #D600D4",
+"~ 	c #CCCCCC",
+"{ 	c #454138",
+"] 	c #E08D8C",
+"^ 	c #FF9999",
+"/ 	c #C07B79",
+"( 	c #755753",
+"_ 	c #996666",
+": 	c #6B7331",
+"< 	c #78673C",
+"[ 	c #604B17",
+"} 	c #191919",
+"| 	c #59FFC8",
+"1 	c #82CE26",
+"2 	c #85CE27",
+"3 	c #87CE28",
+"4 	c #8ACE29",
+"5 	c #8BCE27",
+"6 	c #8DCE28",
+"7 	c #8DCF27",
+"8 	c #8BCD25",
+"9 	c #8BCD23",
+"0 	c #8DCF25",
+"a 	c #8FD125",
+"b 	c #8FD326",
+"c 	c #91D528",
+"d 	c #92D82A",
+"e 	c #92D925",
+"f 	c #92D91D",
+"g 	c #93DA1A",
+"h 	c #94DB1B",
+"i 	c #95DA1B",
+"j 	c #94D91C",
+"k 	c #96D81C",
+"l 	c #95D71B",
+"m 	c #99D920",
+"n 	c #9ADA22",
+"o 	c #9ADB25",
+"p 	c #9BDC26",
+"q 	c #9CDD29",
+"r 	c #9ADE29",
+"s 	c #9ADD2B",
+"t 	c #9CE029",
+"u 	c #9BE129",
+"v 	c #9AE12B",
+"w 	c #9AE12D",
+"x 	c #9CDF2D",
+"y 	c #9EDE2F",
+"z 	c #A4DE31",
+"A 	c #A4DC30",
+"B 	c #A6DB31",
+"C 	c #A6DC30",
+"D 	c #A3DB2F",
+"E 	c #A1DD2F",
+"F 	c #9EDD2E",
+"G 	c #9DDE2C",
+"H 	c #9ADE25",
+"I 	c #9ADF24",
+"J 	c #99DD26",
+"K 	c #99DD28",
+"L 	c #98DB29",
+"M 	c #97DA2A",
+"N 	c #98DB2C",
+"O 	c #98DA30",
+"P 	c #96D830",
+"Q 	c #94D52F",
+"R 	c #92D32F",
+"S 	c #90D12D",
+"T 	c #8ECF2D",
+"U 	c #8CCE2E",
+"V 	c #EFF2F4",
+"W 	c #D5D4CC",
+"X 	c #A79E84",
+"Y 	c #7B6A40",
+"Z 	c #624D19",
+"` 	c #7A693F",
+" .	c #A59B81",
+"..	c #D4D3CA",
+"+.	c #18B029",
+"@.	c #18B129",
+"#.	c #17AF28",
+"$.	c #16A827",
+"%.	c #159E24",
+"&.	c #139021",
+"*.	c #FFDE76",
+"=.	c #E2A952",
+"-.	c #D6AB52",
+";.	c #FFE66F",
+">.	c #E4B55D",
+",.	c #D6AD5D",
+"'.	c #E4BD5D",
+").	c #F1BA5A",
+"!.	c #C39C50",
+"~.	c #D29C52",
+"{.	c #BD944A",
+"].	c #B9A54A",
+"^.	c #725A4A",
+"/.	c #660066",
+"(.	c #DE00DE",
+"_.	c #D28685",
+":.	c #6F5307",
+"<.	c #AF8A04",
+"[.	c #D7AE02",
+"}.	c #F5C700",
+"|.	c #F4C400",
+"1.	c #D4A602",
+"2.	c #AC8104",
+"3.	c #6E5007",
+"4.	c #315247",
+"5.	c #22624D",
+"6.	c #626262",
+"7.	c #A8FFE2",
+"8.	c #87D027",
+"9.	c #88D128",
+"0.	c #89D028",
+"a.	c #8AD228",
+"b.	c #8DD229",
+"c.	c #8FD328",
+"d.	c #90D228",
+"e.	c #90D226",
+"f.	c #8FD223",
+"g.	c #91D425",
+"h.	c #92D526",
+"i.	c #93D728",
+"j.	c #95DA29",
+"k.	c #96DC2B",
+"l.	c #96DD27",
+"m.	c #97DE20",
+"n.	c #98DE1C",
+"o.	c #98E01C",
+"p.	c #99DF1C",
+"q.	c #98DE1B",
+"r.	c #9ADD1C",
+"s.	c #9ADB1B",
+"t.	c #9FDD20",
+"u.	c #A0DC22",
+"v.	c #A2DE26",
+"w.	c #A2E027",
+"x.	c #A1E226",
+"y.	c #9EE324",
+"z.	c #9DE424",
+"A.	c #9FE425",
+"B.	c #9FE427",
+"C.	c #9EE527",
+"D.	c #9EE529",
+"E.	c #9DE329",
+"F.	c #9EE229",
+"G.	c #A1E12B",
+"H.	c #A5E22D",
+"I.	c #A7E12D",
+"J.	c #A8DE2E",
+"K.	c #A8DF2C",
+"L.	c #A5DF2B",
+"M.	c #A3DE2A",
+"N.	c #A1DE29",
+"O.	c #9FDF27",
+"P.	c #9DDF23",
+"Q.	c #9DE021",
+"R.	c #9EE024",
+"S.	c #9DDF25",
+"T.	c #9DDF26",
+"U.	c #9CDD27",
+"V.	c #9BDC2A",
+"W.	c #9ADA2B",
+"X.	c #9ADA2C",
+"Y.	c #99D82F",
+"Z.	c #97D62F",
+"`.	c #95D42E",
+" +	c #92D02D",
+".+	c #90CE2D",
+"++	c #8ECC2D",
+"@+	c #8BCB2E",
+"#+	c #E4E5E3",
+"$+	c #A2987C",
+"%+	c #6C530A",
+"&+	c #A78A11",
+"*+	c #D2B216",
+"=+	c #EECC1A",
+"-+	c #ECC919",
+";+	c #CDAA14",
+">+	c #A4830F",
+",+	c #6A5009",
+"'+	c #19BE2C",
+")+	c #1AC52D",
+"!+	c #1BC72E",
+"~+	c #1AC42D",
+"{+	c #19BC2B",
+"]+	c #16A426",
+"^+	c #149322",
+"/+	c #11831E",
+"(+	c #CECEE6",
+"_+	c #DEEAEF",
+":+	c #7394BD",
+"<+	c #6B8CB5",
+"[+	c #98AFCE",
+"}+	c #E6E5E6",
+"|+	c #A09CA0",
+"1+	c #F7EFEF",
+"2+	c #E6F3F7",
+"3+	c #FBF7FF",
+"4+	c #C18C52",
+"5+	c #8C902E",
+"6+	c #252908",
+"7+	c #735226",
+"8+	c #483A13",
+"9+	c #FFF979",
+"0+	c #796529",
+"a+	c #42310C",
+"b+	c #313A08",
+"c+	c #9C7746",
+"d+	c #4B014A",
+"e+	c #EF00EF",
+"f+	c #7F8880",
+"g+	c #705E30",
+"h+	c #9F7D04",
+"i+	c #F4CC06",
+"j+	c #FBD70D",
+"k+	c #FCD911",
+"l+	c #FBD70E",
+"m+	c #FAD207",
+"n+	c #F7CA00",
+"o+	c #EDB900",
+"p+	c #9A7004",
+"q+	c #89D328",
+"r+	c #8BD329",
+"s+	c #90D429",
+"t+	c #92D42A",
+"u+	c #92D428",
+"v+	c #91D327",
+"w+	c #93D627",
+"x+	c #95D828",
+"y+	c #96DB2A",
+"z+	c #98DD2C",
+"A+	c #98DF2B",
+"B+	c #9ADF2A",
+"C+	c #9BE025",
+"D+	c #9BE021",
+"E+	c #9BE31F",
+"F+	c #9BE31D",
+"G+	c #9CE31D",
+"H+	c #9DE11C",
+"I+	c #9EE01E",
+"J+	c #A0DD1E",
+"K+	c #A5DD22",
+"L+	c #A6DE25",
+"M+	c #A8DE26",
+"N+	c #A6E125",
+"O+	c #A5E423",
+"P+	c #A2E61F",
+"Q+	c #9FE81D",
+"R+	c #A1E724",
+"S+	c #A3E625",
+"T+	c #A1E725",
+"U+	c #A1E627",
+"V+	c #A3E627",
+"W+	c #A2E428",
+"X+	c #A3E428",
+"Y+	c #A6E429",
+"Z+	c #A7E329",
+"`+	c #A7E12A",
+" @	c #A7E228",
+".@	c #A6E029",
+"+@	c #A5DF28",
+"@@	c #A4DE27",
+"#@	c #A3DF25",
+"$@	c #010101",
+"%@	c #9DDE28",
+"&@	c #9BDB2C",
+"*@	c #99D92D",
+"=@	c #98D72E",
+"-@	c #96D52F",
+";@	c #93D130",
+">@	c #90CE2F",
+",@	c #8CC92D",
+"'@	c #89C92D",
+")@	c #D8D8D1",
+"!@	c #756336",
+"~@	c #9A7E10",
+"{@	c #EFD11C",
+"]@	c #F8DB1E",
+"^@	c #FADD1F",
+"/@	c #F5D61D",
+"(@	c #F0CE1A",
+"_@	c #E4BC16",
+":@	c #92720C",
+"<@	c #1CCF30",
+"[@	c #1DD631",
+"}@	c #1DD732",
+"|@	c #1CD531",
+"1@	c #1BCD2F",
+"2@	c #1AC22D",
+"3@	c #18B42A",
+"4@	c #117E1D",
+"5@	c #849CBD",
+"6@	c #003588",
+"7@	c #4A76B5",
+"8@	c #2F63A7",
+"9@	c #001681",
+"0@	c #7798C5",
+"a@	c #292929",
+"b@	c #150C15",
+"c@	c #3A3A3E",
+"d@	c #666666",
+"e@	c #FFDE6B",
+"f@	c #A58431",
+"g@	c #7B633A",
+"h@	c #100C08",
+"i@	c #424221",
+"j@	c #584617",
+"k@	c #CEAD52",
+"l@	c #211919",
+"m@	c #52293A",
+"n@	c #CC00CC",
+"o@	c #C600C5",
+"p@	c #EB9191",
+"q@	c #68521D",
+"r@	c #CBA402",
+"s@	c #FDDC16",
+"t@	c #FEDF1A",
+"u@	c #FFE21D",
+"v@	c #FEE01B",
+"w@	c #FDDD17",
+"x@	c #FBD80F",
+"y@	c #F8CC00",
+"z@	c #F2BD00",
+"A@	c #C28C02",
+"B@	c #69531E",
+"C@	c #8AD32A",
+"D@	c #8CD42A",
+"E@	c #8DD52B",
+"F@	c #91D42C",
+"G@	c #92D62B",
+"H@	c #94D62C",
+"I@	c #96D62A",
+"J@	c #99D92B",
+"K@	c #97DA2B",
+"L@	c #9ADF2E",
+"M@	c #9CE130",
+"N@	c #9CE12E",
+"O@	c #9BDF28",
+"P@	c #9CE126",
+"Q@	c #9AE121",
+"R@	c #98E01D",
+"S@	c #9AE11B",
+"T@	c #9FE31E",
+"U@	c #A1E01F",
+"V@	c #A2DB1D",
+"W@	c #B1E42D",
+"X@	c #ACDE27",
+"Y@	c #ABDB25",
+"Z@	c #AEE226",
+"`@	c #ACE826",
+" #	c #A6E91F",
+".#	c #A2EB18",
+"+#	c #A2EC19",
+"@#	c #A4E821",
+"##	c #A5E725",
+"$#	c #A9E827",
+"%#	c #ABEA29",
+"&#	c #AAE928",
+"*#	c #A7E625",
+"=#	c #A8E726",
+"-#	c #A7E425",
+";#	c #A7E424",
+">#	c #A9E426",
+",#	c #AAE527",
+"'#	c #98D82A",
+")#	c #95D42B",
+"!#	c #94D32D",
+"~#	c #91CF2E",
+"{#	c #8FCC30",
+"]#	c #8DCA2F",
+"^#	c #8BC82F",
+"/#	c #87C32D",
+"(#	c #83C22D",
+"_#	c #DDDDD8",
+":#	c #695520",
+"<#	c #C2A415",
+"[#	c #FCE120",
+"}#	c #FEE421",
+"|#	c #FEE522",
+"1#	c #F2D11B",
+"2#	c #E9C216",
+"3#	c #1CD231",
+"4#	c #1EDD33",
+"5#	c #1EE334",
+"6#	c #1FE535",
+"7#	c #1EE234",
+"8#	c #159D24",
+"9#	c #12881F",
+"0#	c #F7F7F7",
+"a#	c #5A8CB9",
+"b#	c #7B98CE",
+"c#	c #21589F",
+"d#	c #A3A8A3",
+"e#	c #5F5A56",
+"f#	c #848484",
+"g#	c #F7CE5F",
+"h#	c #6B5423",
+"i#	c #242110",
+"j#	c #BDB15A",
+"k#	c #554724",
+"l#	c #3A2110",
+"m#	c #313131",
+"n#	c #F500F7",
+"o#	c #ACB1AB",
+"p#	c #B18D03",
+"q#	c #FEDF19",
+"r#	c #FFE21E",
+"s#	c #FFE31F",
+"t#	c #FFE420",
+"u#	c #FEE01A",
+"v#	c #F7CB00",
+"w#	c #F0B700",
+"x#	c #A87604",
+"y#	c #8BD42B",
+"z#	c #91D62D",
+"A#	c #93D62E",
+"B#	c #95D72F",
+"C#	c #0202A2",
+"D#	c #9BE222",
+"E#	c #9EE422",
+"F#	c #A4E725",
+"G#	c #A7E427",
+"H#	c #B1DE2C",
+"I#	c #B3DB2D",
+"J#	c #B3E02D",
+"K#	c #B0E427",
+"L#	c #AAE920",
+"M#	c #A4ED18",
+"N#	c #A5EE1B",
+"O#	c #A7E623",
+"P#	c #A8E327",
+"Q#	c #ABE328",
+"R#	c #ADE628",
+"S#	c #AFE629",
+"T#	c #AEE728",
+"U#	c #B0E92A",
+"V#	c #AFEB29",
+"W#	c #ABE926",
+"X#	c #A9E825",
+"Y#	c #A8E724",
+"Z#	c #AAE825",
+"`#	c #94D32C",
+" $	c #92D02F",
+".$	c #8CC930",
+"+$	c #8AC632",
+"@$	c #87C330",
+"#$	c #83BE2E",
+"$$	c #7FBC30",
+"%$	c #EFF2F3",
+"&$	c #938665",
+"*$	c #B09312",
+"=$	c #F9DB1F",
+"-$	c #FDE221",
+";$	c #433410",
+">$	c #FFE622",
+",$	c #FFE522",
+"'$	c #1CCE30",
+")$	c #1DDC33",
+"!$	c #1FE735",
+"~$	c #20ED37",
+"{$	c #20EE37",
+"]$	c #EDEDED",
+"^$	c #E2E2E2",
+"/$	c #107A1C",
+"($	c #1556A0",
+"_$	c #C5D6EF",
+":$	c #D6E2EA",
+"<$	c #054392",
+"[$	c #B8DEE6",
+"}$	c #716F71",
+"|$	c #9C8642",
+"1$	c #4A3A21",
+"2$	c #E2CE63",
+"3$	c #8C733A",
+"4$	c #735231",
+"5$	c #A500A4",
+"6$	c #7B017B",
+"7$	c #730071",
+"8$	c #735707",
+"9$	c #F8CF06",
+"0$	c #000008",
+"a$	c #FFE521",
+"b$	c #FDDF19",
+"c$	c #FAD308",
+"d$	c #F4C200",
+"e$	c #EAA900",
+"f$	c #6E4E07",
+"g$	c #414141",
+"h$	c #80D6BA",
+"i$	c #8DD42C",
+"j$	c #8ED52D",
+"k$	c #91D62E",
+"l$	c #92D72F",
+"m$	c #95D830",
+"n$	c #97D931",
+"o$	c #9AD932",
+"p$	c #FEFE02",
+"q$	c #A2E728",
+"r$	c #A9EA2C",
+"s$	c #ADE730",
+"t$	c #AFDF31",
+"u$	c #AFD42E",
+"v$	c #B9D938",
+"w$	c #BFDD3D",
+"x$	c #BDE139",
+"y$	c #B5E22F",
+"z$	c #AEE726",
+"A$	c #A8EC1D",
+"B$	c #A8ED20",
+"C$	c #ADE52C",
+"D$	c #B1E332",
+"E$	c #B2E330",
+"F$	c #B3E32F",
+"G$	c #B4E42E",
+"H$	c #B5E52D",
+"I$	c #B1E529",
+"J$	c #ACE325",
+"K$	c #AAE926",
+"L$	c #A8EA24",
+"M$	c #C0C0C0",
+"N$	c #527EBA",
+"O$	c #8BCB2F",
+"P$	c #88C730",
+"Q$	c #85C330",
+"R$	c #82C031",
+"S$	c #7EBB30",
+"T$	c #7BB82F",
+"U$	c #78B430",
+"V$	c #D2D0C7",
+"W$	c #6F560A",
+"X$	c #F3D41D",
+"Y$	c #20F338",
+"Z$	c #FAFAFA",
+"`$	c #F4F4F4",
+" %	c #E9E9E9",
+".%	c #17AD28",
+"+%	c #149623",
+"@%	c #117F1D",
+"#%	c #B5CEDE",
+"$%	c #295694",
+"%%	c #FEFFF7",
+"&%	c #506EAD",
+"*%	c #ADADAD",
+"=%	c #EEEFEE",
+"-%	c #F3C561",
+";%	c #990099",
+">%	c #B18C03",
+",%	c #FBD910",
+"'%	c #F6C900",
+")%	c #EFB100",
+"!%	c #A67104",
+"~%	c #92D72E",
+"{%	c #97D92F",
+"]%	c #A8E82F",
+"^%	c #AFE434",
+"/%	c #B1DC35",
+"(%	c #A3C026",
+"_%	c #B4CA37",
+":%	c #C1D746",
+"<%	c #C3DD46",
+"[%	c #BBE03B",
+"}%	c #A9E828",
+"|%	c #B0E235",
+"1%	c #B8E33E",
+"2%	c #BBE13C",
+"3%	c #B8DD37",
+"4%	c #B7DD32",
+"5%	c #B8E032",
+"6%	c #B4E12E",
+"7%	c #ACE026",
+"8%	c #ADE82A",
+"9%	c #A8EA28",
+"0%	c #A8EC27",
+"a%	c #A9ED28",
+"b%	c #85C530",
+"c%	c #81BF2E",
+"d%	c #7CBB2F",
+"e%	c #7AB630",
+"f%	c #75B32E",
+"g%	c #72AD2C",
+"h%	c #6EAB2C",
+"i%	c #A1977B",
+"j%	c #AD8F12",
+"k%	c #DEDEDE",
+"l%	c #FDFDFD",
+"m%	c #FBFBFB",
+"n%	c #149823",
+"o%	c #11801E",
+"p%	c #587EC3",
+"q%	c #D6E6F7",
+"r%	c #8CAFCE",
+"s%	c #002173",
+"t%	c #A5B1D2",
+"u%	c #FFC561",
+"v%	c #756337",
+"w%	c #DFB401",
+"x%	c #FFE41F",
+"y%	c #FCDB13",
+"z%	c #F0B600",
+"A%	c #CF8D01",
+"B%	c #78663C",
+"C%	c #90D52C",
+"D%	c #91D62B",
+"E%	c #95D72D",
+"F%	c #A6E32C",
+"G%	c #ABDC32",
+"H%	c #AED336",
+"I%	c #8AA115",
+"J%	c #9DAD29",
+"K%	c #B6C141",
+"L%	c #C4D450",
+"M%	c #C1DF4D",
+"N%	c #B8E242",
+"O%	c #AEE738",
+"P%	c #AFE839",
+"Q%	c #B6DF43",
+"R%	c #BCDD48",
+"S%	c #B8D53F",
+"T%	c #ACC931",
+"U%	c #ABC92D",
+"V%	c #B6D633",
+"W%	c #BAE138",
+"X%	c #B4E333",
+"Y%	c #ACE62F",
+"Z%	c #A8E92D",
+"`%	c #A5EA2B",
+" &	c #4E7AB7",
+".&	c #79B82C",
+"+&	c #73B22D",
+"@&	c #70AD2C",
+"#&	c #6BA92C",
+"$&	c #69A52B",
+"%&	c #66A12B",
+"&&	c #D8B717",
+"*&	c #DCDCDC",
+"=&	c #003399",
+"-&	c #B5B5D6",
+";&	c #426EAA",
+">&	c #F3C76B",
+",&	c #B59261",
+"'&	c #540153",
+")&	c #F3C600",
+"!&	c #FFE623",
+"~&	c #FCDB14",
+"{&	c #F7CC00",
+"]&	c #DF9700",
+"^&	c #644F1D",
+"/&	c #8CD428",
+"(&	c #8DD529",
+"_&	c #8FD429",
+":&	c #90D628",
+"<&	c #A3E02B",
+"[&	c #A7D831",
+"}&	c #A9CB38",
+"|&	c #768707",
+"1&	c #858C18",
+"2&	c #A0A435",
+"3&	c #BCC552",
+"4&	c #C4D95A",
+"5&	c #BADD4F",
+"6&	c #AFE142",
+"7&	c #B3E546",
+"8&	c #BEDF52",
+"9&	c #BCD34D",
+"0&	c #A9BD37",
+"a&	c #94A91E",
+"b&	c #99AF20",
+"c&	c #B0C832",
+"d&	c #B9DB3C",
+"e&	c #B5E039",
+"f&	c #AEE436",
+"g&	c #A7E731",
+"h&	c #A2E92D",
+"i&	c #4976B4",
+"j&	c #70AF2A",
+"k&	c #6BAA28",
+"l&	c #67A52A",
+"m&	c #64A12A",
+"n&	c #609D28",
+"o&	c #5E9A28",
+"p&	c #65501D",
+"q&	c #E9C719",
+"r&	c #D5D5D5",
+"s&	c #E3E3E3",
+"t&	c #EEEEEE",
+"u&	c #F5F5F5",
+"v&	c #F3F3F3",
+"w&	c #ECECEC",
+"x&	c #DEDDDE",
+"y&	c #4A4646",
+"z&	c #865A4A",
+"A&	c #63634A",
+"B&	c #735A52",
+"C&	c #FF2828",
+"D&	c #B300B5",
+"E&	c #AD00AD",
+"F&	c #604A16",
+"G&	c #F2C400",
+"H&	c #FEE11C",
+"I&	c #F6CA00",
+"J&	c #EFB200",
+"K&	c #DF9500",
+"L&	c #8ED728",
+"M&	c #8ED726",
+"N&	c #90D626",
+"O&	c #91D727",
+"P&	c #A7D534",
+"Q&	c #AACA3B",
+"R&	c #6A7701",
+"S&	c #6F7008",
+"T&	c #858221",
+"U&	c #A6A845",
+"V&	c #B2C051",
+"W&	c #A2BF41",
+"X&	c #94C132",
+"Y&	c #9BC638",
+"Z&	c #ABC546",
+"`&	c #A2B43C",
+" *	c #8C9A1F",
+".*	c #808C0E",
+"+*	c #94A11D",
+"@*	c #B7CA3D",
+"#*	c #C1DE48",
+"$*	c #B3DB3D",
+"%*	c #ADE23A",
+"&*	c #A6E536",
+"**	c #749BD1",
+"=*	c #63A328",
+"-*	c #5F9E29",
+";*	c #5C9B28",
+">*	c #599826",
+",*	c #599426",
+"'*	c #E7C418",
+")*	c #D2D2D2",
+"!*	c #EBEBEB",
+"~*	c #1CD030",
+"{*	c #8C94C5",
+"]*	c #B5B5B2",
+"^*	c #EFF3F9",
+"/*	c #AD945A",
+"(*	c #424246",
+"_*	c #8C018C",
+":*	c #736235",
+"<*	c #DEAE01",
+"[*	c #FDDE18",
+"}*	c #F4C300",
+"|*	c #ECAB00",
+"1*	c #CE8601",
+"2*	c #76653A",
+"3*	c #92D726",
+"4*	c #A9D53A",
+"5*	c #ABC945",
+"6*	c #636E05",
+"7*	c #5B5B03",
+"8*	c #686516",
+"9*	c #8B8A3A",
+"0*	c #979D43",
+"a*	c #849431",
+"b*	c #749021",
+"c*	c #7B9527",
+"d*	c #889634",
+"e*	c #828828",
+"f*	c #717610",
+"g*	c #73790D",
+"h*	c #9BA232",
+"i*	c #CAD55F",
+"j*	c #D3E869",
+"k*	c #BEDF54",
+"l*	c #B0DF43",
+"m*	c #6E96CD",
+"n*	c #4572B1",
+"o*	c #5C9C24",
+"p*	c #5B9725",
+"q*	c #589423",
+"r*	c #579322",
+"s*	c #D3B015",
+"t*	c #F6D71D",
+"u*	c #D2D6F7",
+"v*	c #94B9DA",
+"w*	c #962D1D",
+"x*	c #5E1654",
+"y*	c #BD00BD",
+"z*	c #FFFF00",
+"A*	c #AF8403",
+"B*	c #F0B800",
+"C*	c #E9A200",
+"D*	c #A66C03",
+"E*	c #92D120",
+"F*	c #91D01F",
+"G*	c #90D021",
+"H*	c #A5C04D",
+"I*	c #607018",
+"J*	c #4E5511",
+"K*	c #6A6A2E",
+"L*	c #7A783F",
+"M*	c #6A682B",
+"N*	c #646323",
+"O*	c #616220",
+"P*	c #626222",
+"Q*	c #716C35",
+"R*	c #706A30",
+"S*	c #746E24",
+"T*	c #6E6917",
+"U*	c #969140",
+"V*	c #DADA84",
+"W*	c #E5EE91",
+"X*	c #CBE172",
+"Y*	c #AFD448",
+"Z*	c #658EC7",
+"`*	c #6992CA",
+" =	c #6891C9",
+".=	c #5F89C3",
+"+=	c #5B85C0",
+"@=	c #5782BE",
+"#=	c #416FAE",
+"$=	c #63A124",
+"%=	c #619D23",
+"&=	c #5E9921",
+"*=	c #5C9721",
+"==	c #A1967A",
+"-=	c #A8860F",
+";=	c #F1CF1A",
+">=	c #E6BC14",
+",=	c #D6D6D6",
+"'=	c #94945A",
+")=	c #63554A",
+"!=	c #C5A967",
+"~=	c #A5885F",
+"{=	c #424A3A",
+"]=	c #AD12A3",
+"^=	c #715307",
+"/=	c #F1BC00",
+"(=	c #F3BF00",
+"_=	c #E39500",
+":=	c #6F4D07",
+"<=	c #92CD1B",
+"[=	c #91CE1B",
+"}=	c #8ECD1C",
+"|=	c #4E6014",
+"1=	c #505B21",
+"2=	c #676B39",
+"3=	c #605F31",
+"4=	c #494518",
+"5=	c #494214",
+"6=	c #4C4318",
+"7=	c #52461E",
+"8=	c #5E512F",
+"9=	c #75683E",
+"0=	c #7E7437",
+"a=	c #69601D",
+"b=	c #89803F",
+"c=	c #D8D391",
+"d=	c #F0F2A7",
+"e=	c #D8E886",
+"f=	c #B4D44F",
+"g=	c #618AC4",
+"h=	c #547FBB",
+"i=	c #4C79B6",
+"j=	c #3B6AAB",
+"k=	c #6AA725",
+"l=	c #68A524",
+"m=	c #66A123",
+"n=	c #639D22",
+"o=	c #D1CFC5",
+"p=	c #6F5409",
+"q=	c #E6BF16",
+"r=	c #DEAF10",
+"s=	c #D09B0A",
+"t=	c #C5A55A",
+"u=	c #9C8452",
+"v=	c #736B5A",
+"w=	c #D200DE",
+"x=	c #EF00FF",
+"y=	c #AD7E03",
+"z=	c #F2BF00",
+"A=	c #EDAE00",
+"B=	c #E79C00",
+"C=	c #A56A03",
+"D=	c #E2DFE1",
+"E=	c #BFBCBC",
+"F=	c #445C10",
+"G=	c #43541D",
+"H=	c #4F5829",
+"I=	c #464C20",
+"J=	c #3C3D13",
+"K=	c #3C3B0F",
+"L=	c #3B3910",
+"M=	c #4A451F",
+"N=	c #4E4420",
+"O=	c #695E31",
+"P=	c #766C31",
+"Q=	c #645B1A",
+"R=	c #857B40",
+"S=	c #CFC98B",
+"T=	c #E5E79E",
+"U=	c #D3E283",
+"V=	c #B7D752",
+"W=	c #5D87C1",
+"X=	c #3F6EAD",
+"Y=	c #74B22B",
+"Z=	c #71AF2A",
+"`=	c #6FAB27",
+" -	c #6DA827",
+".-	c #EEF1F2",
+"+-	c #928563",
+"@-	c #A6820D",
+"#-	c #DFB211",
+"$-	c #D5A10B",
+"%-	c #9B7007",
+"&-	c #8F4656",
+"*-	c #94733A",
+"=-	c #B56B6B",
+"--	c #AB437F",
+";-	c #B64D98",
+">-	c #B929B5",
+",-	c #67501C",
+"'-	c #C28B02",
+")-	c #F3C100",
+"!-	c #F6C800",
+"~-	c #F3C200",
+"{-	c #ECAA00",
+"]-	c #BB7702",
+"^-	c #68511D",
+"/-	c #A09D9A",
+"(-	c #837E74",
+"_-	c #A17C3C",
+":-	c #473E34",
+"<-	c #4B5F2A",
+"[-	c #4E5E31",
+"}-	c #515C34",
+"|-	c #4D542B",
+"1-	c #3C4119",
+"2-	c #363A15",
+"3-	c #575731",
+"4-	c #67623A",
+"5-	c #6C6435",
+"6-	c #70672E",
+"7-	c #71682D",
+"8-	c #9B915C",
+"9-	c #CEC991",
+"0-	c #D2D590",
+"a-	c #C7D478",
+"b-	c #BCDA56",
+"c-	c #B3DF40",
+"d-	c #7EBF2D",
+"e-	c #7DBC2D",
+"f-	c #7BBA2D",
+"g-	c #79B62B",
+"h-	c #77B429",
+"i-	c #67531E",
+"j-	c #B68F0E",
+"k-	c #E5BC14",
+"l-	c #EBC517",
+"m-	c #EFCC19",
+"n-	c #EBC617",
+"o-	c #DDAF10",
+"p-	c #AD7D07",
+"q-	c #66501C",
+"r-	c #97CEA4",
+"s-	c #92CEB4",
+"t-	c #EFB552",
+"u-	c #F1C350",
+"v-	c #D6AD3E",
+"w-	c #AD298F",
+"x-	c #9CA573",
+"y-	c #B485B4",
+"z-	c #643A64",
+"A-	c #986B04",
+"B-	c #E7A600",
+"C-	c #E09300",
+"D-	c #956204",
+"E-	c #BF8F3D",
+"F-	c #79623C",
+"G-	c #445C2A",
+"H-	c #4E6036",
+"I-	c #566641",
+"J-	c #5D6943",
+"K-	c #56603B",
+"L-	c #525C3A",
+"M-	c #707652",
+"N-	c #797B4C",
+"O-	c #7A7742",
+"P-	c #77723A",
+"Q-	c #7C753F",
+"R-	c #ABA374",
+"S-	c #D8D2A0",
+"T-	c #D2D493",
+"U-	c #C8D57B",
+"V-	c #C1DF5D",
+"W-	c #AFE130",
+"X-	c #88CA2C",
+"Y-	c #86C72D",
+"Z-	c #85C42D",
+"`-	c #83C22B",
+" ;	c #81C02B",
+".;	c #7FBD2A",
+"+;	c #D8D7D0",
+"@;	c #736133",
+"#;	c #8F6D0A",
+"$;	c #D9AC10",
+"%;	c #E2B712",
+"&;	c #E5BB14",
+"*;	c #DEB010",
+"=;	c #D8A70D",
+"-;	c #CE9909",
+";;	c #896407",
+">;	c #725F31",
+",;	c #D7D6CF",
+"';	c #9ED3A5",
+");	c #8EC9A9",
+"!;	c #BDBDBD",
+"~;	c #7B7B7B",
+"{;	c #7F7F6F",
+"];	c #7B4D31",
+"^;	c #7B4A29",
+"/;	c #844A31",
+"(;	c #FFCCFF",
+"_;	c #60445F",
+":;	c #491849",
+"<;	c #3F033F",
+"[;	c #6D4D07",
+"};	c #CC8B02",
+"|;	c #E69900",
+"1;	c #CA8402",
+"2;	c #A46B04",
+"3;	c #6C4B07",
+"4;	c #DAA13F",
+"5;	c #EBAC40",
+"6;	c #375121",
+"7;	c #344A23",
+"8;	c #3C4D29",
+"9;	c #5A6A46",
+"0;	c #778562",
+"a;	c #6A7759",
+"b;	c #5B6540",
+"c;	c #565A28",
+"d;	c #6D6E35",
+"e;	c #737039",
+"f;	c #726C3A",
+"g;	c #A59E74",
+"h;	c #DBD7AA",
+"i;	c #DBDCA0",
+"j;	c #D1DE86",
+"k;	c #C7E162",
+"l;	c #BCE446",
+"m;	c #ACE326",
+"n;	c #ACE429",
+"o;	c #ABE62A",
+"p;	c #ADE627",
+"q;	c #9DDC29",
+"r;	c #96D92A",
+"s;	c #94D62A",
+"t;	c #8ECF29",
+"u;	c #8CCD29",
+"v;	c #8BCC2A",
+"w;	c #89C92A",
+"x;	c #87C72A",
+"y;	c #87C428",
+"z;	c #F7FFF3",
+"A;	c #E1EEE7",
+"B;	c #F9FDFF",
+"C;	c #694D08",
+"D;	c #9E760A",
+"E;	c #BE900B",
+"F;	c #D5A20C",
+"G;	c #D49F0B",
+"H;	c #BB8A09",
+"I;	c #9A6F07",
+"J;	c #684B08",
+"K;	c #47C700",
+"L;	c #B0E4B3",
+"M;	c #9BD2AB",
+"N;	c #92CBAB",
+"O;	c #88C3A7",
+"P;	c #9BD3B8",
+"Q;	c #A7DCBE",
+"R;	c #709F7D",
+"S;	c #709A76",
+"T;	c #9CBD9E",
+"U;	c #A8BDAC",
+"V;	c #6B7979",
+"W;	c #2D3C51",
+"X;	c #384669",
+"Y;	c #283360",
+"Z;	c #2C3462",
+"`;	c #283054",
+" >	c #292F45",
+".>	c #D5D6DA",
+"+>	c #9E9D98",
+"@>	c #11100E",
+"#>	c #ACA7A3",
+"$>	c #F0E8DB",
+"%>	c #F4E8D8",
+"&>	c #F5EAD8",
+"*>	c #F4E8DA",
+"=>	c #E2D5CD",
+"->	c #665C5A",
+";>	c #222021",
+">>	c #C8C7C3",
+",>	c #F0EADC",
+"'>	c #E8E0D5",
+")>	c #9B9597",
+"!>	c #1C151D",
+"~>	c #423C3E",
+"{>	c #EDE5E3",
+"]>	c #DAD1CC",
+"^>	c #B3A8AC",
+"/>	c #373249",
+"(>	c #353358",
+"_>	c #20254D",
+":>	c #1A2250",
+"<>	c #2A3261",
+"[>	c #293162",
+"}>	c #252D5E",
+"|>	c #232F5F",
+"1>	c #273562",
+"2>	c #203A5D",
+"3>	c #295264",
+"4>	c #699FA1",
+"5>	c #529282",
+"6>	c #589F8D",
+"7>	c #63AAA6",
+"8>	c #63ACB3",
+"9>	c #63AFBC",
+"0>	c #6FBDCA",
+"a>	c #6ABAC3",
+"b>	c #77663B",
+"c>	c #5F4914",
+"d>	c #FBB440",
+"e>	c #94D11C",
+"f>	c #476134",
+"g>	c #364C25",
+"h>	c #324621",
+"i>	c #4E5F3B",
+"j>	c #748362",
+"k>	c #617053",
+"l>	c #39451F",
+"m>	c #404912",
+"n>	c #616729",
+"o>	c #75753F",
+"p>	c #7F7C4F",
+"q>	c #B6B18B",
+"r>	c #E5E0B6",
+"s>	c #DCDDA3",
+"t>	c #D2DE88",
+"u>	c #CAE467",
+"v>	c #C0E54A",
+"w>	c #B7E432",
+"x>	c #B0E324",
+"y>	c #B2E629",
+"z>	c #B2E528",
+"A>	c #B1E328",
+"B>	c #B1E52B",
+"C>	c #ADE32B",
+"D>	c #ABE129",
+"E>	c #A4E029",
+"F>	c #A0DD26",
+"G>	c #9DDD27",
+"H>	c #99DA26",
+"I>	c #95D826",
+"J>	c #94D426",
+"K>	c #92D226",
+"L>	c #91D027",
+"M>	c #90CF26",
+"N>	c #8ECD26",
+"O>	c #8DCA25",
+"P>	c #F5FFF2",
+"Q>	c #F9FFF6",
+"R>	c #EFF5EB",
+"S>	c #F5F8E3",
+"T>	c #D4D2C9",
+"U>	c #A3997E",
+"V>	c #77663A",
+"W>	c #A8DDB1",
+"X>	c #93CCA3",
+"Y>	c #83BC99",
+"Z>	c #9DD4B4",
+"`>	c #A8DBBA",
+" ,	c #73A37D",
+".,	c #70996D",
+"+,	c #A3BE95",
+"@,	c #C1C9B1",
+"#,	c #575853",
+"$,	c #2D354A",
+"%,	c #495679",
+"&,	c #2D3963",
+"*,	c #293259",
+"=,	c #232A46",
+"-,	c #767988",
+";,	c #E4E3DF",
+">,	c #8E8A7F",
+",,	c #39352C",
+"',	c #D9D2C8",
+"),	c #EFE6D5",
+"!,	c #F4E9D7",
+"~,	c #F1E6D4",
+"{,	c #EDE0D0",
+"],	c #B7ADA3",
+"^,	c #1C1713",
+"/,	c #8E8B84",
+"(,	c #F4EDDB",
+"_,	c #F3EAD9",
+":,	c #E4DBD6",
+"<,	c #82797A",
+"[,	c #1B1718",
+"},	c #817C78",
+"|,	c #F3E9DD",
+"1,	c #DBD1C7",
+"2,	c #B3A8B0",
+"3,	c #322A41",
+"4,	c #313050",
+"5,	c #10143A",
+"6,	c #29305A",
+"7,	c #2B3361",
+"8,	c #1B2352",
+"9,	c #25305E",
+"0,	c #25325F",
+"a,	c #233960",
+"b,	c #214460",
+"c,	c #6697A6",
+"d,	c #5A9C9A",
+"e,	c #4B9691",
+"f,	c #5CA6AF",
+"g,	c #519EB0",
+"h,	c #53A4B9",
+"i,	c #64B6CB",
+"j,	c #69BFCE",
+"k,	c #FEBA41",
+"l,	c #93D019",
+"m,	c #97D21E",
+"n,	c #9BD423",
+"o,	c #4D6438",
+"p,	c #4B6039",
+"q,	c #4A5B37",
+"r,	c #4C5C37",
+"s,	c #677752",
+"t,	c #6D7A5C",
+"u,	c #606C44",
+"v,	c #606B2F",
+"w,	c #757E3D",
+"x,	c #8C8F5A",
+"y,	c #ACAB7F",
+"z,	c #E5E1BC",
+"A,	c #F7F4CB",
+"B,	c #D9DAA0",
+"C,	c #D0DC88",
+"D,	c #CDE46F",
+"E,	c #C3E552",
+"F,	c #B8E334",
+"G,	c #B2E327",
+"H,	c #B3E524",
+"I,	c #B5E726",
+"J,	c #B6E429",
+"K,	c #B4E228",
+"L,	c #B5E62B",
+"M,	c #B2E429",
+"N,	c #AFE327",
+"O,	c #ABE225",
+"P,	c #AAE227",
+"Q,	c #A3E023",
+"R,	c #A1DF24",
+"S,	c #9DDE22",
+"T,	c #9ADA21",
+"U,	c #97D721",
+"V,	c #96D522",
+"W,	c #95D423",
+"X,	c #94D324",
+"Y,	c #94D022",
+"Z,	c #92CE21",
+"`,	c #F9FBF8",
+" '	c #F9FDE2",
+".'	c #FFFFBD",
+"+'	c #3D4400",
+"@'	c #A0A612",
+"#'	c #F4F947",
+"$'	c #FDFF32",
+"%'	c #FFFF2B",
+"&'	c #FFFF2A",
+"*'	c #EBEB19",
+"='	c #F9FC29",
+"-'	c #F2F42F",
+";'	c #FFFD56",
+">'	c #A6DFAC",
+",'	c #9ED8A6",
+"''	c #92CDA1",
+")'	c #81BB93",
+"!'	c #A3DAB3",
+"~'	c #75A57B",
+"{'	c #729865",
+"]'	c #A0B687",
+"^'	c #AEAA8D",
+"/'	c #443B34",
+"('	c #373E51",
+"_'	c #424F72",
+":'	c #2D3961",
+"<'	c #293155",
+"['	c #1A2134",
+"}'	c #C6C9D0",
+"|'	c #E5E2DD",
+"1'	c #8D857A",
+"2'	c #6C6459",
+"3'	c #E7DECF",
+"4'	c #F2E7D5",
+"5'	c #F4E9D5",
+"6'	c #ECE4CF",
+"7'	c #C3B8A4",
+"8'	c #F2E5D2",
+"9'	c #D8CCBC",
+"0'	c #6C655B",
+"a'	c #504C41",
+"b'	c #F7F0DE",
+"c'	c #F1EAD7",
+"d'	c #F3EADB",
+"e'	c #C5BDB2",
+"f'	c #7A736D",
+"g'	c #39322C",
+"h'	c #BCB4A9",
+"i'	c #F1E7DB",
+"j'	c #DECFC8",
+"k'	c #AB9CA1",
+"l'	c #281F34",
+"m'	c #1F1C3B",
+"n'	c #191D42",
+"o'	c #2D355C",
+"p'	c #1E254F",
+"q'	c #27305B",
+"r'	c #232E5B",
+"s'	c #243560",
+"t'	c #1A365B",
+"u'	c #4E7A95",
+"v'	c #498496",
+"w'	c #5196A5",
+"x'	c #4D96A7",
+"y'	c #388597",
+"z'	c #4695A6",
+"A'	c #4B9EAE",
+"B'	c #5DB3C2",
+"C'	c #97D31C",
+"D'	c #9DD723",
+"E'	c #566E34",
+"F'	c #4E6134",
+"G'	c #576740",
+"H'	c #67784E",
+"I'	c #57663B",
+"J'	c #46552A",
+"K'	c #66724E",
+"L'	c #788358",
+"M'	c #7D8949",
+"N'	c #7B8642",
+"O'	c #9BA06A",
+"P'	c #B1B084",
+"Q'	c #DAD6B1",
+"R'	c #ECE9BE",
+"S'	c #EDEEB4",
+"T'	c #C0C978",
+"U'	c #D1E576",
+"V'	c #CFEE64",
+"W'	c #B7E52D",
+"X'	c #BAE929",
+"Y'	c #B3E021",
+"Z'	c #B8E228",
+"`'	c #B9E32A",
+" )	c #B6E229",
+".)	c #B5E328",
+"+)	c #B3E428",
+"@)	c #AFE424",
+"#)	c #ABE322",
+"$)	c #A5E11F",
+"%)	c #A3E020",
+"&)	c #A4E121",
+"*)	c #9FDE1E",
+"=)	c #9CDA1D",
+"-)	c #9BD91E",
+";)	c #98D51E",
+">)	c #96D31E",
+",)	c #99D422",
+"')	c #9ED929",
+"))	c #FFFAFE",
+"!)	c #FFFFDA",
+"~)	c #202400",
+"{)	c #E9F048",
+"])	c #FFFF43",
+"^)	c #FFFF2C",
+"/)	c #F8F301",
+"()	c #FFF901",
+"_)	c #FCF109",
+":)	c #FAF014",
+"<)	c #F2EA1B",
+"[)	c #BDB700",
+"})	c #DCD71B",
+"|)	c #9CD8A2",
+"1)	c #97D5A2",
+"2)	c #94D2A3",
+"3)	c #82BB90",
+"4)	c #76A778",
+"5)	c #749B62",
+"6)	c #A2B683",
+"7)	c #A19A80",
+"8)	c #403533",
+"9)	c #4E5568",
+"0)	c #303F60",
+"a)	c #2E3B5E",
+"b)	c #222B48",
+"c)	c #383E4A",
+"d)	c #E6E8E7",
+"e)	c #E6E2D9",
+"f)	c #9E9488",
+"g)	c #A3998D",
+"h)	c #F0E4D6",
+"i)	c #F3E7D7",
+"j)	c #BEB3A1",
+"k)	c #978F7C",
+"l)	c #F5EAD4",
+"m)	c #EBE0CC",
+"n)	c #D5CEBE",
+"o)	c #524C3C",
+"p)	c #E5E0CC",
+"q)	c #F5EFD9",
+"r)	c #F3EBD8",
+"s)	c #BFB5AB",
+"t)	c #6E645B",
+"u)	c #554F43",
+"v)	c #DDD5CA",
+"w)	c #F1E5D9",
+"x)	c #DACDC7",
+"y)	c #8D828A",
+"z)	c #161125",
+"A)	c #0F102E",
+"B)	c #2B3155",
+"C)	c #272C54",
+"D)	c #222953",
+"E)	c #242D58",
+"F)	c #24335E",
+"G)	c #223963",
+"H)	c #34587C",
+"I)	c #39708E",
+"J)	c #397B95",
+"K)	c #559DB3",
+"L)	c #4A97AB",
+"M)	c #4695A4",
+"N)	c #5BADBB",
+"O)	c #70C3D3",
+"P)	c #CFCFCE",
+"Q)	c #95D21B",
+"R)	c #9BD521",
+"S)	c #475C23",
+"T)	c #38491C",
+"U)	c #455528",
+"V)	c #667345",
+"W)	c #586432",
+"X)	c #44501E",
+"Y)	c #697547",
+"Z)	c #8E9864",
+"`)	c #97A45F",
+" !	c #7A8541",
+".!	c #868A57",
+"+!	c #A8A97D",
+"@!	c #E3E1B8",
+"#!	c #F7F5C5",
+"$!	c #E5E6AA",
+"%!	c #ACB564",
+"&!	c #D3E47E",
+"*!	c #D5EF70",
+"=!	c #BDE046",
+"-!	c #B6DE30",
+";!	c #BEE82E",
+">!	c #B7E223",
+",!	c #B9E128",
+"'!	c #BDE52C",
+")!	c #BAE42A",
+"!!	c #B8E528",
+"~!	c #B8E729",
+"{!	c #B3E625",
+"]!	c #AFE420",
+"^!	c #A9E31D",
+"/!	c #A6E31C",
+"(!	c #A5E11D",
+"_!	c #A1DD1B",
+":!	c #9FDB1B",
+"<!	c #9ED91B",
+"[!	c #9BD61C",
+"}!	c #98D21B",
+"|!	c #9BD21D",
+"1!	c #9FD623",
+"2!	c #080300",
+"3!	c #BBBD3E",
+"4!	c #FFFF51",
+"5!	c #EFEB27",
+"6!	c #F2E70F",
+"7!	c #FFFF17",
+"8!	c #FFF70D",
+"9!	c #FFFF35",
+"0!	c #D2BC0E",
+"a!	c #CAB420",
+"b!	c #C7B523",
+"c!	c #2175D9",
+"d!	c #9EDDA4",
+"e!	c #96D9A3",
+"f!	c #95D8A3",
+"g!	c #94D2A1",
+"h!	c #85BB89",
+"i!	c #739B5F",
+"j!	c #9EB483",
+"k!	c #898675",
+"l!	c #3D363D",
+"m!	c #576278",
+"n!	c #2A3B59",
+"o!	c #2B385A",
+"p!	c #111832",
+"q!	c #787D81",
+"r!	c #E7E8E2",
+"s!	c #E9E3D7",
+"t!	c #C3B9AD",
+"u!	c #B5AB9F",
+"v!	c #645A4E",
+"w!	c #80766A",
+"x!	c #B4A89C",
+"y!	c #D7CBBD",
+"z!	c #F6EBD9",
+"A!	c #F5EAD6",
+"B!	c #DDD6C3",
+"C!	c #E6E1CD",
+"D!	c #BCB7A1",
+"E!	c #F5EDD8",
+"F!	c #D8CDBB",
+"G!	c #BAA89A",
+"H!	c #B3A298",
+"I!	c #60574E",
+"J!	c #47433A",
+"K!	c #968F85",
+"L!	c #DCD5CD",
+"M!	c #D1C8C3",
+"N!	c #595259",
+"O!	c #110F25",
+"P!	c #1C1F40",
+"Q!	c #2D3156",
+"R!	c #1E234B",
+"S!	c #252E59",
+"T!	c #263360",
+"U!	c #233563",
+"V!	c #2A4A73",
+"W!	c #396B8E",
+"X!	c #4585A1",
+"Y!	c #4F95AE",
+"Z!	c #408DA1",
+"`!	c #54A3B2",
+" ~	c #4EA0AC",
+".~	c #57A9B5",
+"+~	c #676767",
+"@~	c #ABDC20",
+"#~	c #70863B",
+"$~	c #516329",
+"%~	c #2F3D0C",
+"&~	c #273400",
+"*~	c #4D5A22",
+"=~	c #556123",
+"-~	c #566224",
+";~	c #717C40",
+">~	c #838F51",
+",~	c #58651F",
+"'~	c #4B5813",
+")~	c #606733",
+"!~	c #8F9162",
+"~~	c #D4D3A3",
+"{~	c #F1F0BA",
+"]~	c #D9DB9A",
+"^~	c #9DA657",
+"/~	c #C7D67B",
+"(~	c #DAF081",
+"_~	c #C3E258",
+":~	c #B5D939",
+"<~	c #BEE532",
+"[~	c #BBE227",
+"}~	c #BDE129",
+"|~	c #C0E62E",
+"1~	c #BEE729",
+"2~	c #BBE927",
+"3~	c #BCEA28",
+"4~	c #BBEB27",
+"5~	c #B7E925",
+"6~	c #B3E722",
+"7~	c #AFE51D",
+"8~	c #ABE41B",
+"9~	c #A8E11A",
+"0~	c #A4DE18",
+"a~	c #A2DC18",
+"b~	c #A1DA19",
+"c~	c #9FD619",
+"d~	c #9CD218",
+"e~	c #A0D31C",
+"f~	c #A4D722",
+"g~	c #FEF6E1",
+"h~	c #140F00",
+"i~	c #999A1A",
+"j~	c #F5F652",
+"k~	c #D5CC27",
+"l~	c #DED017",
+"m~	c #DBCD00",
+"n~	c #FFF31A",
+"o~	c #FAE639",
+"p~	c #C1AA2A",
+"q~	c #493100",
+"r~	c #190400",
+"s~	c #9FDEA5",
+"t~	c #99DDA4",
+"u~	c #99DCA6",
+"v~	c #96D6A2",
+"w~	c #8FC591",
+"x~	c #749D61",
+"y~	c #9EB686",
+"z~	c #807E71",
+"A~	c #3A343E",
+"B~	c #636F87",
+"C~	c #263957",
+"D~	c #2A3757",
+"E~	c #091126",
+"F~	c #A4A8A9",
+"G~	c #E6E6DA",
+"H~	c #D7D1C5",
+"I~	c #91897E",
+"J~	c #413A30",
+"K~	c #362F27",
+"L~	c #484139",
+"M~	c #625B53",
+"N~	c #504740",
+"O~	c #948C81",
+"P~	c #E3DAC9",
+"Q~	c #F4ECD7",
+"R~	c #EEE6D1",
+"S~	c #F1EBD5",
+"T~	c #F2ECD6",
+"U~	c #F4EDDA",
+"V~	c #B7AB9B",
+"W~	c #817164",
+"X~	c #8D7F76",
+"Y~	c #938C86",
+"Z~	c #989590",
+"`~	c #918E89",
+" {	c #57544D",
+".{	c #6F685E",
+"+{	c #9B9693",
+"@{	c #3E3A48",
+"#{	c #13132B",
+"${	c #313455",
+"%{	c #1A1F47",
+"&{	c #262F5A",
+"*{	c #263765",
+"={	c #24416D",
+"-{	c #46769A",
+";{	c #3B7B97",
+">{	c #4288A1",
+",{	c #388396",
+"'{	c #4A98A5",
+"){	c #6CBCC7",
+"!{	c #5FAFB8",
+"~{	c #898A8A",
+"{{	c #212121",
+"]{	c #101010",
+"^{	c #AEDC21",
+"/{	c #ABDE1D",
+"({	c #A9C360",
+"_{	c #6F853A",
+":{	c #536529",
+"<{	c #404F18",
+"[{	c #344205",
+"}{	c #54601E",
+"|{	c #576319",
+"1{	c #606C20",
+"2{	c #636F27",
+"3{	c #556119",
+"4{	c #525F17",
+"5{	c #74813C",
+"6{	c #A1A874",
+"7{	c #C2C493",
+"8{	c #E5E4AE",
+"9{	c #F0F0B2",
+"0{	c #D0D38C",
+"a{	c #9BA254",
+"b{	c #ABB866",
+"c{	c #DBEF8C",
+"d{	c #D3EF76",
+"e{	c #BBDD4A",
+"f{	c #BEE236",
+"g{	c #BEE22A",
+"h{	c #C0E22B",
+"i{	c #C2E62C",
+"j{	c #C0E92B",
+"k{	c #BFEA28",
+"l{	c #BEEC29",
+"m{	c #BDEB26",
+"n{	c #BBEB25",
+"o{	c #B6E920",
+"p{	c #B2E71D",
+"q{	c #B0E71C",
+"r{	c #ACE318",
+"s{	c #A8DE16",
+"t{	c #A5DA16",
+"u{	c #A4D919",
+"v{	c #A4D71A",
+"w{	c #A3D51C",
+"x{	c #A8D822",
+"y{	c #AEDE2A",
+"z{	c #1E1E00",
+"A{	c #BABA64",
+"B{	c #A7AA35",
+"C{	c #4B4900",
+"D{	c #140900",
+"E{	c #C7BC3E",
+"F{	c #CAC207",
+"G{	c #FDF469",
+"H{	c #796D1B",
+"I{	c #0F0000",
+"J{	c #190900",
+"K{	c #A2DEA8",
+"L{	c #A0DFA8",
+"M{	c #9DDEA8",
+"N{	c #9CDAA7",
+"O{	c #90C692",
+"P{	c #759E62",
+"Q{	c #A3BB8B",
+"R{	c #878878",
+"S{	c #3A373E",
+"T{	c #657189",
+"U{	c #293A58",
+"V{	c #25304E",
+"W{	c #070E21",
+"X{	c #AFB1AE",
+"Y{	c #B8B9AB",
+"Z{	c #8D8B7F",
+"`{	c #3F3C33",
+" ]	c #54534E",
+".]	c #DBDCD7",
+"+]	c #D5D5D3",
+"@]	c #21211F",
+"#]	c #575654",
+"$]	c #56534E",
+"%]	c #EBE5D7",
+"&]	c #F2EAD7",
+"*]	c #F4ECD9",
+"=]	c #F5EDDA",
+"-]	c #F6EDDC",
+";]	c #F7EDE1",
+">]	c #857D72",
+",]	c #9F9892",
+"']	c #A8A39F",
+")]	c #C7C6C2",
+"!]	c #434240",
+"~]	c #2E2D2B",
+"{]	c #94938F",
+"]]	c #6F6F67",
+"^]	c #ABA8A3",
+"/]	c #AEAAA9",
+"(]	c #2B2833",
+"_]	c #282945",
+":]	c #161B41",
+"<]	c #2A335E",
+"[]	c #23305D",
+"}]	c #273866",
+"|]	c #26436D",
+"1]	c #5787AB",
+"2]	c #4686A2",
+"3]	c #3B8296",
+"4]	c #5AA3B2",
+"5]	c #78C5CD",
+"6]	c #7BC8CE",
+"7]	c #5AA9B0",
+"8]	c #DFDFE0",
+"9]	c #555555",
+"0]	c #FDFDFE",
+"a]	c #EDECED",
+"b]	c #656565",
+"c]	c #BDE840",
+"d]	c #D0F74E",
+"e]	c #B1DE23",
+"f]	c #ACDE1B",
+"g]	c #A5DF11",
+"h]	c #BDE449",
+"i]	c #B9DC5A",
+"j]	c #ABC665",
+"k]	c #6A8035",
+"l]	c #405214",
+"m]	c #546328",
+"n]	c #6B7A35",
+"o]	c #919F50",
+"p]	c #717F28",
+"q]	c #5C6A12",
+"r]	c #56640C",
+"s]	c #525F0D",
+"t]	c #7F8D42",
+"u]	c #A9B472",
+"v]	c #D6DBA5",
+"w]	c #EFF2BD",
+"x]	c #EFEFB3",
+"y]	c #D4D58F",
+"z]	c #A1A558",
+"A]	c #798032",
+"B]	c #939D54",
+"C]	c #D9E895",
+"D]	c #E6FD93",
+"E]	c #CCEA66",
+"F]	c #C1E13E",
+"G]	c #BDE02C",
+"H]	c #C2E42D",
+"I]	c #BEE125",
+"J]	c #C1EA2A",
+"K]	c #BDEB28",
+"L]	c #BCEA25",
+"M]	c #B9E921",
+"N]	c #B5E81D",
+"O]	c #B3E61B",
+"P]	c #B1E61A",
+"Q]	c #B0E51B",
+"R]	c #ABDF18",
+"S]	c #A8DC18",
+"T]	c #A8DA19",
+"U]	c #AAD81D",
+"V]	c #ABD921",
+"W]	c #B2DE29",
+"X]	c #BAE533",
+"Y]	c #0A0D00",
+"Z]	c #DCDF76",
+"`]	c #F0F285",
+" ^	c #6A6708",
+".^	c #0F0400",
+"+^	c #110700",
+"@^	c #D6D52B",
+"#^	c #E4EA32",
+"$^	c #9EA11C",
+"%^	c #FFFFB7",
+"&^	c #756C71",
+"*^	c #060000",
+"=^	c #A7E0AD",
+"-^	c #A7E1AE",
+";^	c #A6E2AE",
+">^	c #A1DDAA",
+",^	c #97CD99",
+"'^	c #77A066",
+")^	c #9EB889",
+"!^	c #808370",
+"~^	c #3D3C41",
+"{^	c #667288",
+"]^	c #2A3B57",
+"^^	c #1E2945",
+"/^	c #0D1323",
+"(^	c #CFD1CC",
+"_^	c #E1E2D4",
+":^	c #4D4D43",
+"<^	c #51504B",
+"[^	c #969694",
+"}^	c #F9FBFA",
+"|^	c #D3D4D6",
+"1^	c #222627",
+"2^	c #16171B",
+"3^	c #777775",
+"4^	c #EBE7DB",
+"5^	c #F0E9D6",
+"6^	c #F1E9D6",
+"7^	c #F7EBDB",
+"8^	c #F6EDDE",
+"9^	c #F0E8DD",
+"0^	c #C4BFB9",
+"a^	c #373332",
+"b^	c #FBF9FA",
+"c^	c #EFEFEF",
+"d^	c #3D3D3D",
+"e^	c #1F1F21",
+"f^	c #1D1D1F",
+"g^	c #AFB0AB",
+"h^	c #57574F",
+"i^	c #DED9D3",
+"j^	c #736E72",
+"k^	c #1F1D33",
+"l^	c #161A3D",
+"m^	c #2D365F",
+"n^	c #202F5A",
+"o^	c #24416B",
+"p^	c #6596B7",
+"q^	c #5393AC",
+"r^	c #5FA4B3",
+"s^	c #78C1CA",
+"t^	c #8ED7DD",
+"u^	c #6BB6B9",
+"v^	c #47969A",
+"w^	c #767676",
+"x^	c #FEFEFD",
+"y^	c #FCFCFC",
+"z^	c #CBF048",
+"A^	c #C6EC41",
+"B^	c #BCE233",
+"C^	c #B5DC27",
+"D^	c #B1DE21",
+"E^	c #ABDD19",
+"F^	c #A4D90F",
+"G^	c #A3DA0D",
+"H^	c #A5DE13",
+"I^	c #A9DE1C",
+"J^	c #ABDF22",
+"K^	c #B2E133",
+"L^	c #C3EB54",
+"M^	c #C1E466",
+"N^	c #A8C666",
+"O^	c #5E762A",
+"P^	c #455A19",
+"Q^	c #566927",
+"R^	c #7D9041",
+"S^	c #C1D47B",
+"T^	c #A0B24F",
+"U^	c #7E8F29",
+"V^	c #788825",
+"W^	c #8B9A3D",
+"X^	c #BCCA7D",
+"Y^	c #CBD694",
+"Z^	c #E2E7B1",
+"`^	c #FFFFCF",
+" /	c #FFFFBC",
+"./	c #D0D185",
+"+/	c #8B8E3D",
+"@/	c #6F7628",
+"#/	c #89924F",
+"$/	c #C8D58D",
+"%/	c #E5FA9D",
+"&/	c #DBF77E",
+"*/	c #C7E64A",
+"=/	c #BBDE2C",
+"-/	c #C4E32D",
+";/	c #BCDF23",
+">/	c #C0E929",
+",/	c #BEE927",
+"'/	c #BAE823",
+")/	c #B7E61E",
+"!/	c #B5E61B",
+"~/	c #B4E51A",
+"{/	c #B2E618",
+"]/	c #B1E517",
+"^/	c #B1E419",
+"//	c #ADE019",
+"(/	c #AEDD1D",
+"_/	c #AFDC21",
+":/	c #B2DB25",
+"</	c #B8E12F",
+"[/	c #C0E637",
+"}/	c #0B0E00",
+"|/	c #EDF07F",
+"1/	c #E8E981",
+"2/	c #6F6C1B",
+"3/	c #FFFBD1",
+"4/	c #110900",
+"5/	c #E8EF49",
+"6/	c #F4FF42",
+"7/	c #9EAF15",
+"8/	c #FBFFAB",
+"9/	c #FCFFF4",
+"0/	c #ACE0B2",
+"a/	c #AADFB1",
+"b/	c #A7DFAE",
+"c/	c #99CE9A",
+"d/	c #77A068",
+"e/	c #ACC898",
+"f/	c #B3B8A2",
+"g/	c #3E403F",
+"h/	c #687586",
+"i/	c #2A3B55",
+"j/	c #19253B",
+"k/	c #454B57",
+"l/	c #D9DAD5",
+"m/	c #8D8D81",
+"n/	c #85857D",
+"o/	c #222220",
+"p/	c #2C2C2E",
+"q/	c #313236",
+"r/	c #131416",
+"s/	c #101115",
+"t/	c #212227",
+"u/	c #F0ECE0",
+"v/	c #EFE8D5",
+"w/	c #F5EEDE",
+"x/	c #EEE8DC",
+"y/	c #1C1A1D",
+"z/	c #59585D",
+"A/	c #2F2D2E",
+"B/	c #0D0D0D",
+"C/	c #17181D",
+"D/	c #7F8180",
+"E/	c #7E7F79",
+"F/	c #C3BFB6",
+"G/	c #B4AEAE",
+"H/	c #141124",
+"I/	c #1A1B3A",
+"J/	c #2F385F",
+"K/	c #1C2B56",
+"L/	c #243563",
+"M/	c #254169",
+"N/	c #6194B3",
+"O/	c #5A9BAF",
+"P/	c #64A9B0",
+"Q/	c #85CDCC",
+"R/	c #8FD7D6",
+"S/	c #529E9C",
+"T/	c #429396",
+"U/	c #FBFCFC",
+"V/	c #FAF9FA",
+"W/	c #B4D82E",
+"X/	c #AFD425",
+"Y/	c #ADD41F",
+"Z/	c #AFD91D",
+"`/	c #A8D814",
+" (	c #9ED307",
+".(	c #9ED506",
+"+(	c #A3DC11",
+"@(	c #A5DD1A",
+"#(	c #A6DD20",
+"$(	c #ABDE27",
+"%(	c #ABDD30",
+"&(	c #C0ED56",
+"*(	c #C2E96C",
+"=(	c #A8C769",
+"-(	c #577225",
+";(	c #5B722E",
+">(	c #536921",
+",(	c #6B812C",
+"'(	c #CAE07E",
+")(	c #C6DC70",
+"!(	c #B2C655",
+"~(	c #9BAF40",
+"{(	c #9FB14D",
+"](	c #C4D283",
+"^(	c #D7E1A2",
+"/(	c #E2E7AF",
+"((	c #FEFFC5",
+"_(	c #F5F7AE",
+":(	c #CFD17E",
+"<(	c #8B8F3A",
+"[(	c #727629",
+"}(	c #889054",
+"|(	c #A5B173",
+"1(	c #C8DB89",
+"2(	c #DFFA89",
+"3(	c #CEEC56",
+"4(	c #B9DB2C",
+"5(	c #C5E42E",
+"6(	c #C0E327",
+"7(	c #BEE727",
+"8(	c #BBE624",
+"9(	c #B5E31E",
+"0(	c #B2E119",
+"a(	c #B0E116",
+"b(	c #B0E114",
+"c(	c #AFE315",
+"d(	c #B0E416",
+"e(	c #B2E318",
+"f(	c #B0E018",
+"g(	c #B1E11D",
+"h(	c #B4E122",
+"i(	c #B6E027",
+"j(	c #B7DE2D",
+"k(	c #BDE135",
+"l(	c #191A00",
+"m(	c #EFF071",
+"n(	c #FAFB7C",
+"o(	c #837C14",
+"p(	c #FFEEB3",
+"q(	c #C0AF5F",
+"r(	c #FEFC52",
+"s(	c #F9FF36",
+"t(	c #AAB705",
+"u(	c #7A8606",
+"v(	c #FCFFCE",
+"w(	c #A9DCB3",
+"x(	c #97C89B",
+"y(	c #79A373",
+"z(	c #A5C59C",
+"A(	c #B4C5B2",
+"B(	c #4F5B59",
+"C(	c #677888",
+"D(	c #2A3C54",
+"E(	c #1A273A",
+"F(	c #5B616D",
+"G(	c #E6E7E2",
+"H(	c #636155",
+"I(	c #B3B2AD",
+"J(	c #2B2B2B",
+"K(	c #2E2D33",
+"L(	c #12121A",
+"M(	c #0A0A12",
+"N(	c #0D0E13",
+"O(	c #64646C",
+"P(	c #585858",
+"Q(	c #EDE6D3",
+"R(	c #EFE7D2",
+"S(	c #F3ECDC",
+"T(	c #F2EEE2",
+"U(	c #91908B",
+"V(	c #28262B",
+"W(	c #28272F",
+"X(	c #110E17",
+"Y(	c #0E0D15",
+"Z(	c #1B1B25",
+"`(	c #676A71",
+" _	c #7B7C7E",
+"._	c #A6A7A1",
+"+_	c #A9A59A",
+"@_	c #D9D4D0",
+"#_	c #221E2C",
+"$_	c #1C1C38",
+"%_	c #1B2854",
+"&_	c #243561",
+"*_	c #1D3A62",
+"=_	c #5487A4",
+"-_	c #5798AA",
+";_	c #6DB4B8",
+">_	c #85D0CC",
+",_	c #71BCB8",
+"'_	c #4C9B98",
+")_	c #429696",
+"!_	c #BABABA",
+"~_	c #F9F9FA",
+"{_	c #BFBFBF",
+"]_	c #A4C921",
+"^_	c #A2C819",
+"/_	c #A5CE18",
+"(_	c #A9D61B",
+"__	c #A3D514",
+":_	c #9ACE09",
+"<_	c #9BD109",
+"[_	c #A1D914",
+"}_	c #A3D921",
+"|_	c #A3D621",
+"1_	c #A2D228",
+"2_	c #BEE651",
+"3_	c #C6E96B",
+"4_	c #ADCB69",
+"5_	c #5D7625",
+"6_	c #5C742A",
+"7_	c #556C1C",
+"8_	c #688221",
+"9_	c #CAE477",
+"0_	c #D3EC76",
+"a_	c #C6DE64",
+"b_	c #94AC34",
+"c_	c #778A21",
+"d_	c #9BA75D",
+"e_	c #D3DB9F",
+"f_	c #EBF1B3",
+"g_	c #F6FCB4",
+"h_	c #EEF598",
+"i_	c #E4EC85",
+"j_	c #B3BB54",
+"k_	c #99A446",
+"l_	c #879349",
+"m_	c #86934D",
+"n_	c #AABC6A",
+"o_	c #DEF38A",
+"p_	c #D3EE61",
+"q_	c #BBD832",
+"r_	c #C7E434",
+"s_	c #C8E82F",
+"t_	c #BEE528",
+"u_	c #B9E422",
+"v_	c #B4E01B",
+"w_	c #AFDE16",
+"x_	c #ADDC12",
+"y_	c #AEDD13",
+"z_	c #B0DF17",
+"A_	c #B2E01B",
+"B_	c #B1DF1D",
+"C_	c #BAE32D",
+"D_	c #B9E22E",
+"E_	c #B5DE2A",
+"F_	c #B3DC26",
+"G_	c #B6DD2C",
+"H_	c #0F0E00",
+"I_	c #F4F363",
+"J_	c #FFFF52",
+"K_	c #B3AA05",
+"L_	c #A38513",
+"M_	c #B28F17",
+"N_	c #FFEB35",
+"O_	c #FFF421",
+"P_	c #FFF529",
+"Q_	c #F8F649",
+"R_	c #707100",
+"S_	c #90BC9B",
+"T_	c #83AB90",
+"U_	c #82A496",
+"V_	c #5E7C7C",
+"W_	c #647E8D",
+"X_	c #293E53",
+"Y_	c #162238",
+"Z_	c #515763",
+"`_	c #E8E7E3",
+" :	c #6F6D61",
+".:	c #BAB9B4",
+"+:	c #7F7F7F",
+"@:	c #51515B",
+"#:	c #302F3D",
+"$:	c #232232",
+"%:	c #2C2C38",
+"&:	c #8D8C92",
+"*:	c #B2B1AF",
+"=:	c #ECE8DC",
+"-:	c #EEE7D4",
+";:	c #F1E9D4",
+">:	c #EFEBDF",
+",:	c #CAC9C4",
+"':	c #26232A",
+"):	c #494657",
+"!:	c #201D32",
+"~:	c #1F1C31",
+"{:	c #4A4959",
+"]:	c #C4C4CE",
+"^:	c #B5B6B8",
+"/:	c #989993",
+"(:	c #B7B3A7",
+"_:	c #E7E3DA",
+"::	c #423C46",
+"<:	c #23233D",
+"[:	c #2E3359",
+"}:	c #1A2751",
+"|:	c #253661",
+"1:	c #234165",
+"2:	c #558DA6",
+"3:	c #4F94A4",
+"4:	c #65B0B6",
+"5:	c #66B4B6",
+"6:	c #58AAA8",
+"7:	c #4CA19E",
+"8:	c #469C9B",
+"9:	c #8A898A",
+"0:	c #FDFEFE",
+"a:	c #FAFAF9",
+"b:	c #DAD9DA",
+"c:	c #DEDDDD",
+"d:	c #0F0F0F",
+"e:	c #DBDCDC",
+"f:	c #DCDCDB",
+"g:	c #B9E536",
+"h:	c #BCE936",
+"i:	c #B2E22C",
+"j:	c #ACDE25",
+"k:	c #9ED218",
+"l:	c #91C70D",
+"m:	c #97CD17",
+"n:	c #B0E533",
+"o:	c #B3E536",
+"p:	c #ACD829",
+"q:	c #AAD12A",
+"r:	c #C5E64F",
+"s:	c #D5F06F",
+"t:	c #A2B853",
+"u:	c #5A6E17",
+"v:	c #586E1B",
+"w:	c #3A5300",
+"x:	c #728E20",
+"y:	c #C7E569",
+"z:	c #C5E55E",
+"A:	c #B6D44E",
+"B:	c #A4BE3F",
+"C:	c #5D7007",
+"D:	c #60692A",
+"E:	c #8E915C",
+"F:	c #CFD78E",
+"G:	c #EDF898",
+"H:	c #DBED73",
+"I:	c #CDE35C",
+"J:	c #CCE25B",
+"K:	c #C2D85A",
+"L:	c #AFC257",
+"M:	c #708123",
+"N:	c #7F9034",
+"O:	c #B0C159",
+"P:	c #E8F87B",
+"Q:	c #CEE04E",
+"R:	c #D6E844",
+"S:	c #D1E939",
+"T:	c #CEF23A",
+"U:	c #C1EC2D",
+"V:	c #B8E321",
+"W:	c #B5DF19",
+"X:	c #B5E017",
+"Y:	c #B7E01A",
+"Z:	c #B7DE1F",
+"`:	c #B6DC25",
+" <	c #B0D428",
+".<	c #BEE13D",
+"+<	c #BBDF3D",
+"@<	c #B9DF3A",
+"#<	c #C3ED41",
+"$<	c #BFEC37",
+"%<	c #B1E224",
+"&<	c #B3E426",
+"*<	c #0F0D00",
+"=<	c #E6E45D",
+"-<	c #FCF73B",
+";<	c #D7C205",
+"><	c #FFDF56",
+",<	c #FFD755",
+"'<	c #FFE947",
+")<	c #FFDF2A",
+"!<	c #FFF238",
+"~<	c #FFE538",
+"{<	c #99BFAA",
+"]<	c #8AB5AC",
+"^<	c #7EA7AB",
+"/<	c #658793",
+"(<	c #253E52",
+"_<	c #16253A",
+":<	c #3A404E",
+"<<	c #B2AFAA",
+"[<	c #B1B0AC",
+"}<	c #F0F0F0",
+"|<	c #9D9DA5",
+"1<	c #23232D",
+"2<	c #1E1C29",
+"3<	c #2A2931",
+"4<	c #9C9A9D",
+"5<	c #F7F4EF",
+"6<	c #EDE7D9",
+"7<	c #F0E8D5",
+"8<	c #F6E9D6",
+"9<	c #F5ECDB",
+"0<	c #F2ECDC",
+"a<	c #F7F3EA",
+"b<	c #B4AFB3",
+"c<	c #797583",
+"d<	c #332E44",
+"e<	c #322F44",
+"f<	c #1E1C2A",
+"g<	c #76767E",
+"h<	c #F6F7FB",
+"i<	c #686964",
+"j<	c #E2E0D4",
+"k<	c #ECE9E2",
+"l<	c #48454E",
+"m<	c #282840",
+"n<	c #2F3559",
+"o<	c #1A2650",
+"p<	c #23365E",
+"q<	c #25476A",
+"r<	c #5A94AC",
+"s<	c #4D96A5",
+"t<	c #52A1A8",
+"u<	c #59AAAD",
+"v<	c #5AAFAC",
+"w<	c #50A5A0",
+"x<	c #4A9F9C",
+"y<	c #444444",
+"z<	c #989899",
+"A<	c #757575",
+"B<	c #B7B7B7",
+"C<	c #737373",
+"D<	c #E8E7E8",
+"E<	c #F6F5F6",
+"F<	c #515252",
+"G<	c #424243",
+"H<	c #F3F2F3",
+"I<	c #808080",
+"J<	c #E0DFDF",
+"K<	c #B5B5B4",
+"L<	c #A2A3A2",
+"M<	c #DCDBDC",
+"N<	c #DBDBDC",
+"O<	c #B4E436",
+"P<	c #BFF03D",
+"Q<	c #BCED39",
+"R<	c #B5E633",
+"S<	c #ADE02C",
+"T<	c #ABDD2E",
+"U<	c #B1E336",
+"V<	c #B5E63C",
+"W<	c #BBEB3F",
+"X<	c #B5E132",
+"Y<	c #ACD129",
+"Z<	c #B8D73C",
+"`<	c #C1DB54",
+" [	c #9AB041",
+".[	c #5E7410",
+"+[	c #435B00",
+"@[	c #4F6A01",
+"#[	c #8BAB2E",
+"$[	c #BDE257",
+"%[	c #B5D846",
+"&[	c #B2D441",
+"*[	c #A4C339",
+"=[	c #5E7405",
+"-[	c #49530E",
+";[	c #73793B",
+">[	c #B3BD64",
+",[	c #D4E771",
+"'[	c #CEE757",
+")[	c #C5E345",
+"![	c #BEDE3F",
+"~[	c #B1CF3B",
+"{[	c #A0BB3A",
+"][	c #6C8311",
+"^[	c #6B7E15",
+"/[	c #97A73C",
+"([	c #EAFA80",
+"_[	c #DEEC61",
+":[	c #DCEC4E",
+"<[	c #DFF54A",
+"[[	c #D2F342",
+"}[	c #C6EE35",
+"|[	c #B8E01D",
+"1[	c #B7DB19",
+"2[	c #B7DA1B",
+"3[	c #C0DF29",
+"4[	c #CAE83B",
+"5[	c #CEEA4A",
+"6[	c #D2EF57",
+"7[	c #C8E952",
+"8[	c #C3E64A",
+"9[	c #CAF34C",
+"0[	c #C4F13C",
+"a[	c #B0E420",
+"b[	c #ABDF1B",
+"c[	c #2C2900",
+"d[	c #CCC45F",
+"e[	c #FDED40",
+"f[	c #ECC40D",
+"g[	c #F8A523",
+"h[	c #B44300",
+"i[	c #FFBB4E",
+"j[	c #BF3900",
+"k[	c #BA4300",
+"l[	c #FFE365",
+"m[	c #8CB7B0",
+"n[	c #80AFB5",
+"o[	c #6B939D",
+"p[	c #223F4D",
+"q[	c #17283C",
+"r[	c #20293A",
+"s[	c #E1E4EB",
+"t[	c #DFDFE1",
+"u[	c #DFDDE0",
+"v[	c #E1DFE0",
+"w[	c #EAE9E7",
+"x[	c #DDD9D8",
+"y[	c #EFEBE8",
+"z[	c #F3F0E7",
+"A[	c #F2ECE0",
+"B[	c #F5E8D7",
+"C[	c #F3E4CF",
+"D[	c #F4E5D0",
+"E[	c #F1E2CD",
+"F[	c #F4E7D4",
+"G[	c #F5EBDF",
+"H[	c #FBF4EE",
+"I[	c #CCC6C6",
+"J[	c #868188",
+"K[	c #817E87",
+"L[	c #BEBBC2",
+"M[	c #F2F1F7",
+"N[	c #E9EAEF",
+"O[	c #C0C1C5",
+"P[	c #E5E6E1",
+"Q[	c #1C1C28",
+"R[	c #2C2E45",
+"S[	c #2A2E53",
+"T[	c #1B2751",
+"U[	c #21375E",
+"V[	c #446C8F",
+"W[	c #5C9CB7",
+"X[	c #54A1B3",
+"Y[	c #55A8AE",
+"Z[	c #6FC4C1",
+"`[	c #74C6C0",
+" }	c #5CAFA7",
+".}	c #6CBEB8",
+"+}	c #CDCDCE",
+"@}	c #878787",
+"#}	c #303030",
+"$}	c #F6F7F7",
+"%}	c #F5F6F5",
+"&}	c #959595",
+"*}	c #2E2F2E",
+"=}	c #404040",
+"-}	c #5E5E5E",
+";}	c #EAEAEB",
+">}	c #5B5B5B",
+",}	c #DFE0E0",
+"'}	c #A4A5A5",
+")}	c #DBDBDB",
+"!}	c #ACDE2D",
+"~}	c #B6E734",
+"{}	c #B6E736",
+"]}	c #BBEB3D",
+"^}	c #BFEF45",
+"/}	c #BBEA42",
+"(}	c #ACE035",
+"_}	c #B9EB3E",
+":}	c #BDEC3A",
+"<}	c #B5DD2F",
+"[}	c #B5D836",
+"}}	c #C3E050",
+"|}	c #B3CD50",
+"1}	c #8BA635",
+"2}	c #8BAD34",
+"3}	c #AED449",
+"4}	c #BDE850",
+"5}	c #B0DA3A",
+"6}	c #B1D93A",
+"7}	c #AFD33D",
+"8}	c #809E1C",
+"9}	c #57680A",
+"0}	c #87953D",
+"a}	c #C6D868",
+"b}	c #DDF76F",
+"c}	c #CDED4E",
+"d}	c #BCE036",
+"e}	c #B9DE36",
+"f}	c #B6DA3A",
+"g}	c #9FBE32",
+"h}	c #6A8707",
+"i}	c #4B6400",
+"j}	c #6E830C",
+"k}	c #D9EE6D",
+"l}	c #E7FA6C",
+"m}	c #E5F95A",
+"n}	c #EEFF5D",
+"o}	c #D3F346",
+"p}	c #CAED39",
+"q}	c #C6E831",
+"r}	c #C7EA2C",
+"s}	c #C7E629",
+"t}	c #C5E329",
+"u}	c #CFEB37",
+"v}	c #DEF84F",
+"w}	c #E3FC60",
+"x}	c #E1FB64",
+"y}	c #D0EE58",
+"z}	c #C6E84C",
+"A}	c #C8EF48",
+"B}	c #C1ED38",
+"C}	c #AFE11E",
+"D}	c #A6DA16",
+"E}	c #FFFFDF",
+"F}	c #181200",
+"G}	c #DFC733",
+"H}	c #D99E00",
+"I}	c #AD3B00",
+"J}	c #B51D00",
+"K}	c #E53000",
+"L}	c #D11500",
+"M}	c #D92A00",
+"N}	c #BD2C00",
+"O}	c #8BB4B0",
+"P}	c #81B2B9",
+"Q}	c #75A0A9",
+"R}	c #1E404C",
+"S}	c #192B3F",
+"T}	c #0D1627",
+"U}	c #DBDEE5",
+"V}	c #E0DEE1",
+"W}	c #E2DCDE",
+"X}	c #E8E0DE",
+"Y}	c #EDE6DE",
+"Z}	c #E9E0D7",
+"`}	c #E7DDD3",
+" |	c #ECE2D8",
+".|	c #F0E7D8",
+"+|	c #F0E3D3",
+"@|	c #EBD9CB",
+"#|	c #E7D4C5",
+"$|	c #E8D6C2",
+"%|	c #ECDAC6",
+"&|	c #EEDCC8",
+"*|	c #F0DDCC",
+"=|	c #F1E0D0",
+"-|	c #F3E3D4",
+";|	c #F0DFD5",
+">|	c #F1E2DB",
+",|	c #F0E5E1",
+"'|	c #F5EAE8",
+")|	c #F4EAE9",
+"!|	c #F0E7E8",
+"~|	c #E8E3E7",
+"{|	c #E5E3E8",
+"]|	c #E3E1E2",
+"^|	c #B9B8BD",
+"/|	c #0C0E1B",
+"(|	c #2A2E47",
+"_|	c #272B50",
+":|	c #1D2951",
+"<|	c #1B355A",
+"[|	c #5481A2",
+"}|	c #5395AD",
+"||	c #4E9DAA",
+"1|	c #55A6A9",
+"2|	c #88D9D3",
+"3|	c #79C5BB",
+"4|	c #78C4BA",
+"5|	c #7FCCC6",
+"6|	c #888888",
+"7|	c #A7A7A7",
+"8|	c #F5F5F6",
+"9|	c #B3B3B3",
+"0|	c #F2F1F2",
+"a|	c #A1A0A0",
+"b|	c #F0EFEF",
+"c|	c #EFEFF0",
+"d|	c #AFAFAF",
+"e|	c #9C9D9D",
+"f|	c #EAE9EA",
+"g|	c #797979",
+"h|	c #686767",
+"i|	c #1D1D1D",
+"j|	c #94C917",
+"k|	c #A5D726",
+"l|	c #ACDC2E",
+"m|	c #BAE83F",
+"n|	c #BEEB46",
+"o|	c #ACDB37",
+"p|	c #99CD23",
+"q|	c #A5D92C",
+"r|	c #B6E533",
+"s|	c #B3DE2F",
+"t|	c #B3D832",
+"u|	c #C7E84F",
+"v|	c #CFEE65",
+"w|	c #B9D857",
+"x|	c #B4D755",
+"y|	c #B9DF56",
+"z|	c #BBE84F",
+"A|	c #C5F44E",
+"B|	c #BEEC41",
+"C|	c #B3DF34",
+"D|	c #B5DD3C",
+"E|	c #ACCE3C",
+"F|	c #859D25",
+"G|	c #ACC14C",
+"H|	c #D4EE66",
+"I|	c #E0FF64",
+"J|	c #CEF246",
+"K|	c #BEE530",
+"L|	c #B5DF35",
+"M|	c #B1D63B",
+"N|	c #7C9D0E",
+"O|	c #567400",
+"P|	c #6D8803",
+"Q|	c #CAE258",
+"R|	c #E2FA66",
+"S|	c #E1F95B",
+"T|	c #DFF852",
+"U|	c #CFEC44",
+"V|	c #C2E235",
+"W|	c #C3E22F",
+"X|	c #D0EE38",
+"Y|	c #D8F43D",
+"Z|	c #D8F13D",
+"`|	c #DBF347",
+" 1	c #E4FA57",
+".1	c #EAFF68",
+"+1	c #E7FF6B",
+"@1	c #D8F55F",
+"#1	c #C6E84B",
+"$1	c #BBE03A",
+"%1	c #B0DC27",
+"&1	c #A8D715",
+"*1	c #A1D511",
+"=1	c #F5FDEE",
+"-1	c #A6A272",
+";1	c #DCBC4B",
+">1	c #F2A727",
+",1	c #C13600",
+"'1	c #D71E00",
+")1	c #E30A00",
+"!1	c #F81300",
+"~1	c #E30600",
+"{1	c #80AFB7",
+"]1	c #7EAAB3",
+"^1	c #1F434F",
+"/1	c #1D2F43",
+"(1	c #070E1E",
+"_1	c #CBCBCB",
+":1	c #E2DBD3",
+"<1	c #E4D7CF",
+"[1	c #E9D8CE",
+"}1	c #ECD8CD",
+"|1	c #EDD7CA",
+"11	c #EFD9CC",
+"21	c #EED7C9",
+"31	c #EAD3C5",
+"41	c #EDD3C4",
+"51	c #F1D7CA",
+"61	c #EFD5C8",
+"71	c #EED4C5",
+"81	c #F0D6C7",
+"91	c #F2D8C9",
+"01	c #EDD2C7",
+"a1	c #F0D5CA",
+"b1	c #E7CFC5",
+"c1	c #E9D2CA",
+"d1	c #ECD8D1",
+"e1	c #EBD9D7",
+"f1	c #ECDEDE",
+"g1	c #EBE1E2",
+"h1	c #948F95",
+"i1	c #0B0C1E",
+"j1	c #2A2E4B",
+"k1	c #21254B",
+"l1	c #223057",
+"m1	c #1C385D",
+"n1	c #5C8BA7",
+"o1	c #4E92A5",
+"p1	c #51A0A7",
+"q1	c #7CC7C2",
+"r1	c #A6ECE1",
+"s1	c #AAE6DC",
+"t1	c #9DDBD0",
+"u1	c #7BC2BC",
+"v1	c #FEFEFE",
+"w1	c #F8F7F8",
+"x1	c #B1B1B0",
+"y1	c #EFF0EF",
+"z1	c #ECEBEC",
+"A1	c #ACACAC",
+"B1	c #B0B0B0",
+"C1	c #98CD19",
+"D1	c #A4D625",
+"E1	c #A5D52B",
+"F1	c #B1DE39",
+"G1	c #B8E143",
+"H1	c #A9D536",
+"I1	c #8FBF1B",
+"J1	c #94C51C",
+"K1	c #A5D426",
+"L1	c #A7D223",
+"M1	c #A2C920",
+"N1	c #B8DC3C",
+"O1	c #C8EA55",
+"P1	c #B8DB49",
+"Q1	c #AFD743",
+"R1	c #B3E045",
+"S1	c #B0E138",
+"T1	c #BBED3C",
+"U1	c #BAED36",
+"V1	c #AADB27",
+"W1	c #B2DE31",
+"X1	c #BDE340",
+"Y1	c #B8D944",
+"Z1	c #C1DF4B",
+"`1	c #C5E846",
+" 2	c #CDF344",
+".2	c #D7FF48",
+"+2	c #D4FF42",
+"@2	c #C3F136",
+"#2	c #B5E22D",
+"$2	c #BDE73D",
+"%2	c #98C021",
+"&2	c #8CB018",
+"*2	c #98BA25",
+"=2	c #BDDB45",
+"-2	c #C9E64C",
+";2	c #D2EE4E",
+">2	c #CBE543",
+",2	c #CEEA47",
+"'2	c #BED934",
+")2	c #B9D32A",
+"!2	c #CAE236",
+"~2	c #DAF244",
+"{2	c #DDF348",
+"]2	c #D8ED48",
+"^2	c #D5EB4B",
+"/2	c #D8EC57",
+"(2	c #DEF461",
+"_2	c #DEF863",
+":2	c #CDEC50",
+"<2	c #A3CF1A",
+"[2	c #9FCE0E",
+"}2	c #9BCE0D",
+"|2	c #F5FEFD",
+"12	c #FFFFE6",
+"22	c #2C1200",
+"32	c #FFE788",
+"42	c #FFB768",
+"52	c #D33400",
+"62	c #D91F00",
+"72	c #D71200",
+"82	c #E12100",
+"92	c #81B1BB",
+"02	c #7BAAB4",
+"a2	c #234956",
+"b2	c #20354A",
+"c2	c #080F1F",
+"d2	c #BFBEBA",
+"e2	c #E2DACD",
+"f2	c #E5D8C8",
+"g2	c #E9D6C7",
+"h2	c #EFD8C8",
+"i2	c #F1D7C8",
+"j2	c #F4DACB",
+"k2	c #F6DCCD",
+"l2	c #F1DACA",
+"m2	c #F0D9C9",
+"n2	c #F3D9CA",
+"o2	c #F2DBCD",
+"p2	c #F1D5C7",
+"q2	c #FFBA98",
+"r2	c #EDD1C5",
+"s2	c #E7D0C8",
+"t2	c #E7D4D0",
+"u2	c #EBDDDC",
+"v2	c #6B646C",
+"w2	c #100E24",
+"x2	c #2C2F4E",
+"y2	c #1A1F45",
+"z2	c #26365A",
+"A2	c #2F4D6F",
+"B2	c #6797AE",
+"C2	c #5EA0AC",
+"D2	c #6AB2B1",
+"E2	c #8CCFC6",
+"F2	c #AEEADE",
+"G2	c #B2E6DA",
+"H2	c #9BCEC5",
+"I2	c #82C1B9",
+"J2	c #BAB9BA",
+"K2	c #434344",
+"L2	c #535353",
+"M2	c #F8F7F7",
+"N2	c #F4F5F5",
+"O2	c #F4F3F4",
+"P2	c #858585",
+"Q2	c #1F1F1F",
+"R2	c #F1F1F2",
+"S2	c #909091",
+"T2	c #EEEDEE",
+"U2	c #ACABAC",
+"V2	c #A3A4A3",
+"W2	c #333333",
+"X2	c #9F7F9F",
+"Y2	c #BF99BF",
+"Z2	c #4F3F4F",
+"`2	c #707070",
+" 3	c #BC8A33",
+".3	c #735625",
+"+3	c #302718",
+"@3	c #18140C",
+"#3	c #252D0E",
+"$3	c #4C5C1F",
+"%3	c #5B7718",
+"&3	c #769A1A",
+"*3	c #A4CF28",
+"=3	c #A9D22B",
+"-3	c #A2C721",
+";3	c #B3D735",
+">3	c #C1E448",
+",3	c #ACD338",
+"'3	c #9AC627",
+")3	c #AEDD37",
+"!3	c #A8DA29",
+"~3	c #A2D51E",
+"{3	c #A1D51B",
+"]3	c #B8E533",
+"^3	c #C3EE3F",
+"/3	c #CEF449",
+"(3	c #CDF145",
+"_3	c #C1E835",
+":3	c #C2EA31",
+"<3	c #D3FE3F",
+"[3	c #D5FF41",
+"}3	c #C7F634",
+"|3	c #BDEC2E",
+"13	c #B8E530",
+"23	c #AAD526",
+"33	c #B0D730",
+"43	c #B0D432",
+"53	c #A7CA28",
+"63	c #AECE2D",
+"73	c #CAE946",
+"83	c #D6F250",
+"93	c #D8F454",
+"03	c #C6E041",
+"a3	c #B9D230",
+"b3	c #C1D832",
+"c3	c #CFE63E",
+"d3	c #D4EB45",
+"e3	c #CEE243",
+"f3	c #C4D940",
+"g3	c #ADC12E",
+"h3	c #BAD240",
+"i3	c #CBE852",
+"j3	c #ADD42D",
+"k3	c #9FCC19",
+"l3	c #9DCE10",
+"m3	c #98CC0F",
+"n3	c #FEFDFF",
+"o3	c #FFFFF6",
+"p3	c #FFFCD7",
+"q3	c #664D14",
+"r3	c #CF9D54",
+"s3	c #FFD87C",
+"t3	c #933A00",
+"u3	c #D17500",
+"v3	c #FFE53A",
+"w3	c #7FB3BE",
+"x3	c #78ACB7",
+"y3	c #3A6472",
+"z3	c #223B4F",
+"A3	c #061220",
+"B3	c #ACAEA9",
+"C3	c #E9E6D7",
+"D3	c #EAE1D0",
+"E3	c #F3E4D1",
+"F3	c #F6E5D3",
+"G3	c #F9E6D5",
+"H3	c #FAE7D8",
+"I3	c #F8E7D7",
+"J3	c #F8E7D5",
+"K3	c #FAE9D7",
+"L3	c #F9EAD7",
+"M3	c #F8E9D6",
+"N3	c #FAE9D9",
+"O3	c #F9E8D6",
+"P3	c #F2DBCB",
+"Q3	c #ECD5C7",
+"R3	c #ECD8CF",
+"S3	c #EEE0DD",
+"T3	c #4A434B",
+"U3	c #2C2F50",
+"V3	c #171D41",
+"W3	c #26395A",
+"X3	c #557792",
+"Y3	c #92C1D1",
+"Z3	c #90CACC",
+"`3	c #9BD6D0",
+" 4	c #ADE2D8",
+".4	c #ABDDD2",
+"+4	c #B2E0D5",
+"@4	c #B5E4DA",
+"#4	c #A9DED4",
+"$4	c #FBFCFB",
+"%4	c #969696",
+"&4	c #F7F7F8",
+"*4	c #E5E5E5",
+"=4	c #616161",
+"-4	c #505050",
+";4	c #EEEEEF",
+">4	c #DEDEDF",
+",4	c #ECEBEB",
+"'4	c #2D2C2C",
+")4	c #6D6D6D",
+"!4	c #5F4C5F",
+"~4	c #6F596F",
+"{4	c #A0A0A0",
+"]4	c #C99033",
+"^4	c #8D6726",
+"/4	c #32240D",
+"(4	c #330033",
+"_4	c #20290B",
+":4	c #48581B",
+"<4	c #73882B",
+"[4	c #92AD2E",
+"}4	c #C3E546",
+"|4	c #CEF053",
+"14	c #B6DC3B",
+"24	c #A2CD28",
+"34	c #B0E036",
+"44	c #9BCE19",
+"54	c #A2D41D",
+"64	c #B3E32D",
+"74	c #CAF544",
+"84	c #CAF341",
+"94	c #C1E931",
+"04	c #C6EC34",
+"a4	c #B9E226",
+"b4	c #B1DA1C",
+"c4	c #B9E423",
+"d4	c #B8E624",
+"e4	c #B5E223",
+"f4	c #B2DF24",
+"g4	c #B3DF26",
+"h4	c #B4DD29",
+"i4	c #B2D829",
+"j4	c #ACD024",
+"k4	c #AECF28",
+"l4	c #C1E03C",
+"m4	c #DBFA57",
+"n4	c #D9F75B",
+"o4	c #D2ED52",
+"p4	c #C5E043",
+"q4	c #C0DA3B",
+"r4	c #C4DC3C",
+"s4	c #C7DF41",
+"t4	c #C1D63D",
+"u4	c #B4CB35",
+"v4	c #98B01E",
+"w4	c #A1BA28",
+"x4	c #B4D23C",
+"y4	c #B6D93D",
+"z4	c #A3CC25",
+"A4	c #9CCB19",
+"B4	c #9DD013",
+"C4	c #FFF9FF",
+"D4	c #FDFBFE",
+"E4	c #FCFEF1",
+"F4	c #FFFFE1",
+"G4	c #807440",
+"H4	c #1E0700",
+"I4	c #C7A63B",
+"J4	c #FFEC61",
+"K4	c #82B8C2",
+"L4	c #7AB3BC",
+"M4	c #5E8C9B",
+"N4	c #1F3A4F",
+"O4	c #0C1929",
+"P4	c #989D99",
+"Q4	c #EAE8DB",
+"R4	c #ECE5D2",
+"S4	c #F0E5D1",
+"T4	c #F5E8D5",
+"U4	c #F7EAD7",
+"V4	c #F7EAD9",
+"W4	c #F8E8D8",
+"X4	c #FAEADA",
+"Y4	c #F9E8D8",
+"Z4	c #F8E5D4",
+"`4	c #F6E6D7",
+" 5	c #EFE4E0",
+".5	c #241D25",
+"+5	c #100E26",
+"@5	c #2F3253",
+"#5	c #151D41",
+"$5	c #233654",
+"%5	c #A7CADE",
+"&5	c #AEDAE3",
+"*5	c #B3E3E3",
+"=5	c #BCEDE7",
+"-5	c #BAE8DE",
+";5	c #B0DBD1",
+">5	c #B7E1D7",
+",5	c #BAE5DB",
+"'5	c #B8E5DE",
+")5	c #B8B7B8",
+"!5	c #F1F0F0",
+"~5	c #EBEBEC",
+"{5	c #E0E0E0",
+"]5	c #D0D0D0",
+"^5	c #976C26",
+"/5	c #64481A",
+"(5	c #2C200D",
+"_5	c #53303C",
+":5	c #4F5B20",
+"<5	c #7C8E32",
+"[5	c #ACC549",
+"}5	c #BCE040",
+"|5	c #A4CD29",
+"15	c #A5D32A",
+"25	c #9DCD1F",
+"35	c #A9DA29",
+"45	c #BFEE3E",
+"55	c #CFFA4B",
+"65	c #D6FD52",
+"75	c #C8ED3E",
+"85	c #ACD316",
+"95	c #A5CE12",
+"05	c #B7E024",
+"a5	c #B9E327",
+"b5	c #AED81C",
+"c5	c #ACD61A",
+"d5	c #B4DF20",
+"e5	c #C0EA2E",
+"f5	c #B7DF26",
+"g5	c #BEE42D",
+"h5	c #D0F341",
+"i5	c #C3E336",
+"j5	c #B1D128",
+"k5	c #C3E23F",
+"l5	c #D0EF56",
+"m5	c #CCEB50",
+"n5	c #C1DE44",
+"o5	c #BCD73C",
+"p5	c #B9D33A",
+"q5	c #B2CA34",
+"r5	c #A5BE2C",
+"s5	c #A9C534",
+"t5	c #A4C230",
+"u5	c #ABCD38",
+"v5	c #A8D032",
+"w5	c #98C61E",
+"x5	c #97C918",
+"y5	c #96CC12",
+"z5	c #87BF08",
+"A5	c #FFFCFF",
+"B5	c #F1F0F6",
+"C5	c #FBFFFD",
+"D5	c #E9F1E2",
+"E5	c #FFFFED",
+"F5	c #FCF5D9",
+"G5	c #AF9F7E",
+"H5	c #A18E64",
+"I5	c #82BBC6",
+"J5	c #7BB5C0",
+"K5	c #82B3C1",
+"L5	c #1E3D51",
+"M5	c #142433",
+"N5	c #595F5F",
+"O5	c #E9E9DD",
+"P5	c #E9E6D3",
+"Q5	c #EEE8D0",
+"R5	c #F3EBD6",
+"S5	c #F6EBD7",
+"T5	c #F3E3D3",
+"U5	c #E1D0C0",
+"V5	c #D6C3B4",
+"W5	c #E0CDBE",
+"X5	c #E4CEC0",
+"Y5	c #D4BEB1",
+"Z5	c #B4998E",
+"`5	c #957A71",
+" 6	c #9D827B",
+".6	c #F2E9D8",
+"+6	c #C5C0BA",
+"@6	c #111129",
+"#6	c #2B3050",
+"$6	c #192444",
+"%6	c #475B76",
+"&6	c #BADCE6",
+"*6	c #B9E1E3",
+"=6	c #B6DEDD",
+"-6	c #B6DDD8",
+";6	c #B8DFDA",
+">6	c #BBE3DB",
+",6	c #BCE4DB",
+"'6	c #BDE5DD",
+")6	c #BBE4E0",
+"!6	c #DDDDDD",
+"~6	c #D9D8D9",
+"{6	c #F0EFF0",
+"]6	c #5F5F60",
+"^6	c #DADADA",
+"/6	c #E0E0DF",
+"(6	c #D2D1D1",
+"_6	c #5F5F5F",
+":6	c #AF8CAF",
+"<6	c #DFB2DF",
+"[6	c #664A1A",
+"}6	c #5C2536",
+"|6	c #CA00CC",
+"16	c #970099",
+"26	c #640066",
+"36	c #310033",
+"46	c #772A61",
+"56	c #54303D",
+"66	c #282D10",
+"76	c #282F10",
+"86	c #242C0C",
+"96	c #222A0A",
+"06	c #455615",
+"a6	c #6E8626",
+"b6	c #A4C141",
+"c6	c #C1E140",
+"d6	c #BAD933",
+"e6	c #BEDF2E",
+"f6	c #B6DA22",
+"g6	c #AACD19",
+"h6	c #97BC0A",
+"i6	c #A4C917",
+"j6	c #B6DB29",
+"k6	c #ABD01E",
+"l6	c #A8D018",
+"m6	c #ADD31B",
+"n6	c #B3DA1F",
+"o6	c #B6DA20",
+"p6	c #CAEC35",
+"q6	c #D8FA44",
+"r6	c #996600",
+"s6	c #999999",
+"t6	c #666600",
+"u6	c #CC6600",
+"v6	c #BFE049",
+"w6	c #9FBF2D",
+"x6	c #A3C332",
+"y6	c #A1C432",
+"z6	c #9FC730",
+"A6	c #A9D737",
+"B6	c #A0D42A",
+"C6	c #8FC515",
+"D6	c #8BC50E",
+"E6	c #7DB605",
+"F6	c #78B3B7",
+"G6	c #81BDC7",
+"H6	c #7AB8C3",
+"I6	c #83B8C6",
+"J6	c #456A7C",
+"K6	c #182E3C",
+"L6	c #0F181F",
+"M6	c #C2C4BF",
+"N6	c #E7E5D6",
+"O6	c #ECE7D3",
+"P6	c #EEE8D2",
+"Q6	c #F2EAD5",
+"R6	c #AF9C8B",
+"S6	c #82665A",
+"T6	c #805E55",
+"U6	c #7F5851",
+"V6	c #805952",
+"W6	c #825953",
+"X6	c #865A57",
+"Y6	c #90605E",
+"Z6	c #EDEADB",
+"`6	c #53524E",
+" 7	c #110F1A",
+".7	c #17172F",
+"+7	c #1D2441",
+"@7	c #1A2946",
+"#7	c #698497",
+"$7	c #86ACAF",
+"%7	c #8EB9B2",
+"&7	c #99C2BA",
+"*7	c #A1C9C0",
+"=7	c #ABD3CA",
+"-7	c #BBE3DA",
+";7	c #BCE4D9",
+">7	c #B9E0DD",
+",7	c #CDCDCD",
+"'7	c #737473",
+")7	c #F7F8F8",
+"!7	c #C6C5C5",
+"~7	c #C4C5C4",
+"{7	c #ECECEB",
+"]7	c #E9E9EA",
+"^7	c #E8E9E9",
+"/7	c #AAA9A9",
+"(7	c #8A8B8A",
+"_7	c #DFE0DF",
+":7	c #8F728F",
+"<7	c #CFA5CF",
+"[7	c #836126",
+"}7	c #574019",
+"|7	c #261D0C",
+"17	c #FD00FF",
+"27	c #973399",
+"37	c #996699",
+"47	c #976699",
+"57	c #643366",
+"67	c #757B5E",
+"77	c #6D793E",
+"87	c #708026",
+"97	c #8EA326",
+"07	c #B2D229",
+"a7	c #A8C81B",
+"b7	c #ABCD21",
+"c7	c #ADCE25",
+"d7	c #9FC017",
+"e7	c #90B206",
+"f7	c #A1C315",
+"g7	c #B2D521",
+"h7	c #99BC06",
+"i7	c #97B902",
+"j7	c #BDDF28",
+"k7	c #666633",
+"l7	c #A7CA38",
+"m7	c #8BAE1E",
+"n7	c #89AC1C",
+"o7	c #8BB31F",
+"p7	c #85B018",
+"q7	c #91C022",
+"r7	c #98CD27",
+"s7	c #90CA1D",
+"t7	c #8CC916",
+"u7	c #81B90D",
+"v7	c #4EA487",
+"w7	c #80C3CB",
+"x7	c #76B8C4",
+"y7	c #7FBBC6",
+"z7	c #78A6B5",
+"A7	c #153240",
+"B7	c #061421",
+"C7	c #8B9096",
+"D7	c #DCDDD5",
+"E7	c #E9E8D6",
+"F7	c #EFE8D6",
+"G7	c #F9E9D9",
+"H7	c #BBA192",
+"I7	c #946C62",
+"J7	c #B17775",
+"K7	c #B47274",
+"L7	c #B06B6E",
+"M7	c #B26B71",
+"N7	c #B76E75",
+"O7	c #F4EBDC",
+"P7	c #F2EBDB",
+"Q7	c #F1EBDD",
+"R7	c #A29F98",
+"S7	c #141318",
+"T7	c #0F0E1C",
+"U7	c #1E2039",
+"V7	c #151F38",
+"W7	c #274152",
+"X7	c #678E95",
+"Y7	c #679892",
+"Z7	c #73A99B",
+"`7	c #86B9A6",
+" 8	c #A2D1BD",
+".8	c #A9D6C1",
+"+8	c #B1DCC9",
+"@8	c #BAE5D4",
+"#8	c #BAE4D6",
+"$8	c #ACD5CD",
+"%8	c #FEFDFD",
+"&8	c #FBFBFC",
+"*8	c #F4F4F3",
+"=8	c #F2F2F1",
+"-8	c #EAEAE9",
+";8	c #E8E7E7",
+">8	c #6A6A6A",
+",8	c #E0DFE0",
+"'8	c #E8768F",
+")8	c #FFA9CF",
+"!8	c #EB7F9F",
+"~8	c #DB3F4F",
+"{8	c #614E30",
+"]8	c #4F4C46",
+"^8	c #34322E",
+"/8	c #431940",
+"(8	c #C800CC",
+"_8	c #C700CC",
+":8	c #950099",
+"<8	c #953399",
+"[8	c #C866CC",
+"}8	c #CA99CC",
+"|8	c #A4A98E",
+"18	c #8E975F",
+"28	c #85933B",
+"38	c #9BB133",
+"48	c #B3D22F",
+"58	c #B3D131",
+"68	c #B6D434",
+"78	c #B9D737",
+"88	c #AECC2C",
+"98	c #A2C11E",
+"08	c #B5D42E",
+"a8	c #BEDE35",
+"b8	c #A0C013",
+"c8	c #A1BF11",
+"d8	c #CC9900",
+"e8	c #8DB425",
+"f8	c #8CB324",
+"g8	c #95BF2D",
+"h8	c #83B019",
+"i8	c #80B215",
+"j8	c #8EC521",
+"k8	c #8CC61C",
+"l8	c #84C012",
+"m8	c #7BB20C",
+"n8	c #84C9CE",
+"o8	c #78BBC3",
+"p8	c #80BCC6",
+"q8	c #A2D4DD",
+"r8	c #2D525B",
+"s8	c #0B1D2B",
+"t8	c #969DA7",
+"u8	c #B2B4AF",
+"v8	c #D2D0C1",
+"w8	c #E2DDCA",
+"x8	c #FBEADA",
+"y8	c #B9998C",
+"z8	c #B3827B",
+"A8	c #C37D7F",
+"B8	c #C8777E",
+"C8	c #C7747E",
+"D8	c #C7717E",
+"E8	c #C97380",
+"F8	c #F0EDDE",
+"G8	c #B5B9AA",
+"H8	c #7F897E",
+"I8	c #646D6A",
+"J8	c #0A131A",
+"K8	c #1F2839",
+"L8	c #0E202E",
+"M8	c #4E7272",
+"N8	c #57897D",
+"O8	c #59937D",
+"P8	c #5B977B",
+"Q8	c #66A280",
+"R8	c #79B18E",
+"S8	c #7EB492",
+"T8	c #80B392",
+"U8	c #97C8AA",
+"V8	c #9DCFB4",
+"W8	c #92C3AD",
+"X8	c #F9F8F8",
+"Y8	c #F7F8F7",
+"Z8	c #F6F6F5",
+"`8	c #F3F4F3",
+" 9	c #F2F1F1",
+".9	c #F0F0EF",
+"+9	c #EDEEED",
+"@9	c #EAE9E9",
+"#9	c #E7E6E6",
+"$9	c #7C7C7C",
+"%9	c #E2E1E2",
+"&9	c #E1E1E1",
+"*9	c #EF8FAF",
+"=9	c #7F667F",
+"-9	c #FF99BF",
+";9	c #999696",
+">9	c #888687",
+",9	c #5A335C",
+"'9	c #620066",
+")9	c #940099",
+"!9	c #C500CC",
+"~9	c #F700FF",
+"{9	c #C733CC",
+"]9	c #A3A78C",
+"^9	c #869058",
+"/9	c #7A8B32",
+"(9	c #7A9218",
+"_9	c #84A30A",
+":9	c #759400",
+"<9	c #8CAB0F",
+"[9	c #A9C82C",
+"}9	c #A4C425",
+"|9	c #A2C223",
+"19	c #B7D736",
+"29	c #B6D532",
+"39	c #B2D12D",
+"49	c #A4CB3C",
+"59	c #B8E250",
+"69	c #9FCC35",
+"79	c #8CBB1F",
+"89	c #92C626",
+"99	c #8EC722",
+"09	c #8BC41D",
+"a9	c #8BC121",
+"b9	c #7ABBBD",
+"c9	c #88C4C5",
+"d9	c #ACDEDF",
+"e9	c #72989B",
+"f9	c #162A31",
+"g9	c #788186",
+"h9	c #CACDC4",
+"i9	c #D8D7C5",
+"j9	c #E2DDC9",
+"k9	c #D5CEBB",
+"l9	c #D9D0BF",
+"m9	c #DFCFC0",
+"n9	c #DFC2B4",
+"o9	c #AE7D76",
+"p9	c #C17B7D",
+"q9	c #C7767F",
+"r9	c #C5737F",
+"s9	c #C4727E",
+"t9	c #EAE4D6",
+"u9	c #A5A998",
+"v9	c #627A64",
+"w9	c #63836B",
+"x9	c #7C9882",
+"y9	c #0A2215",
+"z9	c #192C30",
+"A9	c #274442",
+"B9	c #619179",
+"C9	c #5E9870",
+"D9	c #5C996D",
+"E9	c #549462",
+"F9	c #569662",
+"G9	c #559660",
+"H9	c #4C8D57",
+"I9	c #4C8C58",
+"J9	c #508E5B",
+"K9	c #559362",
+"L9	c #559364",
+"M9	c #F1F2F2",
+"N9	c #4D4D4D",
+"O9	c #5C5C5C",
+"P9	c #B8B8B8",
+"Q9	c #807E7B",
+"R9	c #5A595A",
+"S9	c #2D2D2D",
+"T9	c #CA33CC",
+"U9	c #CA66CC",
+"V9	c #CC99CC",
+"W9	c #CC66CC",
+"X9	c #993399",
+"Y9	c #A0A58A",
+"Z9	c #848D56",
+"`9	c #738630",
+" 0	c #748F1A",
+".0	c #7C9F07",
+"+0	c #6A8D00",
+"@0	c #89AB0F",
+"#0	c #B2D437",
+"$0	c #ABCD31",
+"%0	c #9CBD24",
+"&0	c #A2C32C",
+"*0	c #B5D33D",
+"=0	c #ABC933",
+"-0	c #333366",
+";0	c #A0C834",
+">0	c #84B118",
+",0	c #81B014",
+"'0	c #7EB212",
+")0	c #8ABE1E",
+"!0	c #98C92F",
+"~0	c #7FB5B5",
+"{0	c #92C0BE",
+"]0	c #AFD8D4",
+"^0	c #8EACAA",
+"/0	c #526464",
+"(0	c #E6ECEA",
+"_0	c #E7E7DB",
+":0	c #EEE9D6",
+"<0	c #F3ECD9",
+"[0	c #F3E6D6",
+"}0	c #E4CABD",
+"|0	c #E2BCB3",
+"10	c #DBA4A1",
+"20	c #E3A3A4",
+"30	c #E6A8AB",
+"40	c #E8AAAF",
+"50	c #EAACB1",
+"60	c #CFC9BB",
+"70	c #B5B9A8",
+"80	c #99B197",
+"90	c #5F8063",
+"00	c #6C8A70",
+"a0	c #021F0B",
+"b0	c #18332C",
+"c0	c #64887A",
+"d0	c #498059",
+"e0	c #44834E",
+"f0	c #4B8A51",
+"g0	c #4F9154",
+"h0	c #509556",
+"i0	c #569B5C",
+"j0	c #549A5B",
+"k0	c #4A9051",
+"l0	c #4C9150",
+"m0	c #4C9351",
+"n0	c #488F4B",
+"o0	c #F9FAF9",
+"p0	c #E2E1E1",
+"q0	c #B5B2B4",
+"r0	c #403F3E",
+"s0	c #663366",
+"t0	c #9EA488",
+"u0	c #78864D",
+"v0	c #6A812A",
+"w0	c #74931A",
+"x0	c #8FB61B",
+"y0	c #9EC325",
+"z0	c #A6CB2D",
+"A0	c #97BC1F",
+"B0	c #97BB23",
+"C0	c #A5C735",
+"D0	c #B8D94C",
+"E0	c #81A914",
+"F0	c #6E9901",
+"G0	c #689500",
+"H0	c #7AA90F",
+"I0	c #8AB821",
+"J0	c #6F8F8E",
+"K0	c #667A78",
+"L0	c #C1D5D3",
+"M0	c #ACBBB6",
+"N0	c #B6BBB5",
+"O0	c #E8E8DE",
+"P0	c #EDE7D7",
+"Q0	c #F2EBD8",
+"R0	c #FAEADB",
+"S0	c #E1CEC0",
+"T0	c #F2D7CC",
+"U0	c #FFE5D9",
+"V0	c #FFE5DA",
+"W0	c #FFE4DD",
+"X0	c #F2EBD9",
+"Y0	c #EDEAD7",
+"Z0	c #E9EED7",
+"`0	c #B2BEA8",
+" a	c #515F4E",
+".a	c #091F12",
+"+a	c #448649",
+"@a	c #478C4D",
+"#a	c #488D4C",
+"$a	c #4C934D",
+"%a	c #539B52",
+"&a	c #5DA559",
+"*a	c #66AF5D",
+"=a	c #F6F5F5",
+"-a	c #EEEEED",
+";a	c #CACACA",
+">a	c #E3E3E4",
+",a	c #DDDEDE",
+"'a	c #737171",
+")a	c #53324D",
+"!a	c #552C45",
+"~a	c #CC33CC",
+"{a	c #9CA387",
+"]a	c #798950",
+"^a	c #708A32",
+"/a	c #86AA2E",
+"(a	c #A9D635",
+"_a	c #A5D02B",
+":a	c #96C11C",
+"<a	c #8CB416",
+"[a	c #A0C730",
+"}a	c #B0D549",
+"|a	c #C1E55F",
+"1a	c #99BC2A",
+"2a	c #7EA410",
+"3a	c #729A05",
+"4a	c #81AC16",
+"5a	c #87B31E",
+"6a	c #FF5F00",
+"7a	c #F0E9D9",
+"8a	c #F4EBDA",
+"9a	c #F5ECDD",
+"0a	c #E4DCC9",
+"aa	c #D8D0BB",
+"ba	c #CFC6B7",
+"ca	c #E1D8C7",
+"da	c #F2EDD7",
+"ea	c #F0EFDB",
+"fa	c #3B8041",
+"ga	c #468B48",
+"ha	c #408741",
+"ia	c #468E44",
+"ja	c #4D9645",
+"ka	c #56A248",
+"la	c #FCFBFB",
+"ma	c #FFFF33",
+"na	c #E8E8E7",
+"oa	c #E5E5E6",
+"pa	c #DDDDDE",
+"qa	c #2B251F",
+"ra	c #2C2C1D",
+"sa	c #9BA286",
+"ta	c #78894E",
+"ua	c #708C2F",
+"va	c #81A626",
+"wa	c #95C420",
+"xa	c #88B711",
+"ya	c #81B00A",
+"za	c #83AF10",
+"Aa	c #9EC931",
+"Ba	c #ADD447",
+"Ca	c #BCE259",
+"Da	c #663300",
+"Ea	c #87AD1A",
+"Fa	c #7DA511",
+"Ga	c #8DB521",
+"Ha	c #8AB420",
+"Ia	c #2F7B32",
+"Ja	c #58E75E",
+"Ka	c #5EFF65",
+"La	c #4CC852",
+"Ma	c #1D4D1F",
+"Na	c #BFB9A1",
+"Oa	c #C9C2A6",
+"Pa	c #C9C2A8",
+"Qa	c #B6AE9B",
+"Ra	c #E3DACB",
+"Sa	c #9C9C9C",
+"Ta	c #F6E9D8",
+"Ua	c #3B7F44",
+"Va	c #397E3D",
+"Wa	c #438A44",
+"Xa	c #499145",
+"Ya	c #5CA752",
+"Za	c #816330",
+"`a	c #4C3918",
+" b	c #4E2441",
+".b	c #6D7659",
+"+b	c #576A2B",
+"@b	c #617D1A",
+"#b	c #82A923",
+"$b	c #A1D52B",
+"%b	c #8EC11A",
+"&b	c #87BC16",
+"*b	c #7DAF0E",
+"=b	c #8AB91D",
+"-b	c #A5D03A",
+";b	c #999900",
+">b	c #CCFFFF",
+",b	c #A0CB35",
+"'b	c #89B520",
+")b	c #102010",
+"!b	c #F5E9D9",
+"~b	c #F3EDD7",
+"{b	c #D2CCB2",
+"]b	c #C6BDA0",
+"^b	c #B2A98C",
+"/b	c #ECE1CF",
+"(b	c #F4E7D6",
+"_b	c #F3E8D4",
+":b	c #33773C",
+"<b	c #377E3C",
+"[b	c #418940",
+"}b	c #60AB58",
+"|b	c #65B458",
+"1b	c #52A241",
+"2b	c #55A840",
+"3b	c #59AC42",
+"4b	c #904A33",
+"5b	c #B16642",
+"6b	c #AE8132",
+"7b	c #582236",
+"8b	c #959F84",
+"9b	c #70844A",
+"0b	c #688423",
+"ab	c #81A71E",
+"bb	c #A2D329",
+"cb	c #A1D62C",
+"db	c #8FC41C",
+"eb	c #85BC18",
+"fb	c #7CB00E",
+"gb	c #88BA1B",
+"hb	c #A2CD35",
+"ib	c #8CBA24",
+"jb	c #7BA2D7",
+"kb	c #779FD4",
+"lb	c #7299D0",
+"mb	c #F1EAD0",
+"nb	c #B7AE91",
+"ob	c #BDB398",
+"pb	c #30733D",
+"qb	c #3A8042",
+"rb	c #5AA553",
+"sb	c #60AF54",
+"tb	c #55A544",
+"ub	c #50A13B",
+"vb	c #55A83C",
+"wb	c #33250D",
+"xb	c #3B3351",
+"yb	c #246650",
+"zb	c #359978",
+"Ab	c #1B4E3E",
+"Bb	c #856685",
+"Cb	c #853385",
+"Db	c #AD33AD",
+"Eb	c #A366A3",
+"Fb	c #AD99AD",
+"Gb	c #6AC1A5",
+"Hb	c #85AADD",
+"Ib	c #84AADD",
+"Jb	c #7FA5D9",
+"Kb	c #52D858",
+"Lb	c #F4ECD5",
+"Mb	c #F4EDD3",
+"Nb	c #ADA388",
+"Ob	c #D9BD11",
+"Pb	c #E3C71B",
+"Qb	c #CFB307",
+"Rb	c #F2E5D4",
+"Sb	c #3A7E45",
+"Tb	c #3F8642",
+"Ub	c #4F994A",
+"Vb	c #59A84F",
+"Wb	c #5FAF50",
+"Xb	c #4FA03A",
+"Yb	c #56A73E",
+"Zb	c #61B347",
+"`b	c #987027",
+" c	c #5E451A",
+".c	c #4F1D35",
+"+c	c #143B2E",
+"@c	c #47CCA0",
+"#c	c #5C335C",
+"$c	c #7D7D7D",
+"%c	c #8BB0E2",
+"&c	c #339933",
+"*c	c #40A945",
+"=c	c #F5EDD6",
+"-c	c #EDD125",
+";c	c #64B058",
+">c	c #63B052",
+",c	c #56A441",
+"'c	c #5AA842",
+")c	c #60AE48",
+"!c	c #003366",
+"~c	c #CCCCFF",
+"{c	c #DAB910",
+"]c	c #CB9534",
+"^c	c #20190C",
+"/c	c #7A3D7A",
+"(c	c #523D52",
+"_c	c #7A7A7A",
+":c	c #669999",
+"<c	c #296C2C",
+"[c	c #F2E8DC",
+"}c	c #F0E9D7",
+"|c	c #FFE539",
+"1c	c #42754A",
+"2c	c #508652",
+"3c	c #5B9C4C",
+"4c	c #60A04C",
+"5c	c #5E9E4A",
+"6c	c #F3DA21",
+"7c	c #614A24",
+"8c	c #403218",
+"9c	c #2F220D",
+"0c	c #661F70",
+"ac	c #66528F",
+"bc	c #7099AD",
+"cc	c #A3CCCC",
+"dc	c #336699",
+"ec	c #336666",
+"fc	c #CC9999",
+"gc	c #89857C",
+"hc	c #8A867D",
+"ic	c #FFEF43",
+"jc	c #F7DB2F",
+"kc	c #8B8680",
+"lc	c #7A7772",
+"mc	c #918F90",
+"nc	c #8F8F8F",
+"oc	c #8E908D",
+"pc	c #8C918D",
+"qc	c #2D4932",
+"rc	c #314F33",
+"sc	c #3A5C39",
+"tc	c #3B6037",
+"uc	c #3A5E30",
+"vc	c #385C2E",
+"wc	c #0A0A0A",
+"xc	c #FFE339",
+"yc	c #493B24",
+"zc	c #290047",
+"Ac	c #1F005C",
+"Bc	c #140052",
+"Cc	c #7ACCCC",
+"Dc	c #99CCCC",
+"Ec	c #46B94B",
+"Fc	c #173D19",
+"Gc	c #030000",
+"Hc	c #040100",
+"Ic	c #020100",
+"Jc	c #010000",
+"Kc	c #FFF94D",
+"Lc	c #000100",
+"Mc	c #000201",
+"Nc	c #000600",
+"Oc	c #000900",
+"Pc	c #000800",
+"Qc	c #000A00",
+"Rc	c #000B00",
+"Sc	c #AAD7C8",
+"Tc	c #290A47",
+"Uc	c #140070",
+"Vc	c #7AA3A3",
+"Wc	c #FFFF57",
+"Xc	c #997231",
+"Yc	c #5B2436",
+"Zc	c #1F0047",
+"`c	c #141F70",
+" d	c #471F33",
+".d	c #703D47",
+"+d	c #333D70",
+"@d	c #5C3329",
+"#d	c #85661F",
+"$d	c #AD9914",
+"%d	c #CC7A00",
+"&d	c #6B3937",
+"*d	c #491935",
+"=d	c #853352",
+"-d	c #662952",
+";d	c #520014",
+">d	c #7A5200",
+",d	c #FFCC00",
+"'d	c #4472B1",
+")d	c #A0A0A4",
+"!d	c #AD337A",
+"~d	c #7A2952",
+"{d	c #140014",
+"]d	c #CC9933",
+"^d	c #3C6AAB",
+"/d	c #844A39",
+"(d	c #1A1A1A",
+"_d	c #272727",
+":d	c #66AB95",
+"<d	c #6CEBC1",
+"[d	c #999933",
+"}d	c #292914",
+"|d	c #290000",
+"1d	c #7A1F7A",
+"2d	c #80ECC8",
+"3d	c #222B28",
+"4d	c #323232",
+"5d	c #FF33CC",
+"6d	c #FF66CC",
+"7d	c #996633",
+"8d	c #663333",
+"9d	c #330000",
+". . . . . . . . . . . . . . . . . + @ @ @ @ + . . . . . . . . . . . . . . . . . . # $ % & % & % & & % % & & & & & % @ @ * * * * * @ @ % & = - ; > , ' ) ) ) ) ) ! ~ { ] ^ / ( _ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ _ @ : @ ^ ^ ^ ] _ { ( ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ < [ [ < ~ } | @ . @ @ | @ 1 1 2 3 4 5 6 7 8 9 0 a b c d e f g g h i j k l m n o p q r s r t t u v v w x y z A B C D E F G H I H H J K L M N O P Q R S T U ",
+". . . . V W X Y Z Z `  ...V . . + +. at .#.$.%.&.+ + . . . . . . . . . . . . . . . . # *.=.-.;.>.,.'.'.& ).'.-.!.~.{.@ * * * * * * * * * @ & ].^./.(.) ) ) ) ) ) ) ~ { _.^ _ ( ] ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ @ @ : @ @ ^ ^ ^ ^ _./ _ { ] ^ ^ ^ ^ ^ ^ ^ ^ ^ :.<.[.}.|.1.2.3.4.5.@ @ 6.7.@ 8.9.0.a.b.c.d.e.a f.g.h.i.j.k.l.m.n.o.o.p.q.r.s.t.u.v.w.x.y.z.z.A.B.C.D.D.E.F.G.H.I.J.K.L.M.N.O.P.Q.R.S.T.U.V.W.X.Y.Z.`. +.+++ at +",
+". . . #+$+%+&+*+=+-+;+>+,+$+#++ '+)+!+~+{+ at .]+^+/++ (+. . _+:+<+:+:+[+. }+|+1+2+3+# *.4+@ 5+6+!.7+8+9+0+a+= b+@ @ * * * * * * * * * * * @ c+d+e+) ) ) ) ) ) ) . f+( ^ / ( ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ @ : : : @ ^ ^ ^ ^ / _ _ _ { { ^ ^ ^ ^ ^ ^ ^ g+h+i+j+k+k+l+m+n+o+p+g+5.@ @ @ | q+q+r+r+c.s+t+u+v+h.w+x+y+z+A+B+C+D+E+F+G+H+I+J+K+L+M+N+O+P+Q+Q+R+S+T+U+U+V+W+X+Y+Z+`+ @. at +@@@#@$@$@$@$@$@%@q &@*@=@-@;@>@++,@'@",
+". . )@!@~@{@]@^@^@]@/@(@_@:@+ )+<@[@}@|@1 at 2@3@]+&.4 at + . . 5 at 6@7 at 8@9 at 0@. a at b@c at d@3+# $ e at f@@ g at 9+0+h@i at h@j at 9+k@l@@ * * * * * * * * * * * @ m at n@) o at d+(.) ) ) ) . { ] p@( ] ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ @ : @ @ : : @ ^ ^ ^ ] / / / / ( _ ^ ^ ^ ^ ^ q at r@j+s at t@u at u@v at w@x at y@z at A@B at 4.| 5.5.C at C@D at E@F at G@H at I@*@J at K@N z+L at M@N at O@P at Q@R at S@T at U@V at W@X at Y@Z@`@ #.#+#@###$#%#&#*#=#&#&#=#-#;#>#,#$@$@. . $@. . $@$@'#)#!#~#{#]#^#/#(#",
+". _#:#<#]@[#}#|#|#}#[#]@1#2#+ 3#4#5#6#7#@ @ 2 at +.8#9#+ 0#. 8 at a#. b#c#. d#e#}+f#d at . # $ g#h#h at j@$ h#i#j#k#l#;.4+@ * * m#m#* * * * * m#m#* * @ ) ) o@/.' ' n#) ) o#{ ^ ( _ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ @ @ _._.@ : @ @ ^ ^ _._ f+f+( _ _ _ ^ ^ ^ ^ p#j+q#r#s#s#t#t#s#u#x at v#w#x#} @ @ @ y#y#E at z#A#B#=@Y.C#C#C#C#C#C#C#C#C#C#C#D#E#F#G#M+H#I#I#J#K#L#M#N#O#P#Q#R#S#T#U#V#W#X#Y#Y#Z#$@. . . . $@. . . . $@`# ${#.$+$@$#$$$",
+"%$&$*$=$-$;$;$;$>$>$,$-$=$+ '$)$!$~${$@ ]$^$@ {+$.&./$+ 0#($_$:$<$[$. }$~ . . . . # *.|$1$2$k#|$3$4$9+c+k#;.~.@ * * * m#m#m#* m#m#m#* * * @ ) ) ) ) 5$6$7$e+) f+_ ^ ( ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ _ / / o#~ . @ : @ ^ / ( . . . . ( _ ( / ^ ^ 8$9$w at r#s#t#0$0$a$0$0$b$c$d$e$f$g$g$h$i$j$k$l$m$n$o$C#p$p$p$p$p$p$p$p$p$p$p$C#q$r$s$t$u$v$w$x$y$z$A$B$C$D$E$F$G$H$I$J$W#K$L$L$$@. . . . M$$@. . . . N$$@O$P$Q$R$S$T$U$",
+"V$W$X$[#;$. . . ;$>$;$;$;$@ @ 5#~$Y$@ Z$`$ %@ 2 at .%+%@%@ #%$%%%&%9 at 5@. *%=%. . . . # $ -%% e@% -%% % % % % % % @ * * @ @ * * * @ @ * * * * @ ) ) ) ) ;%, 7$(.) { _./ _ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ / ( _ o#. . @ : @ @ _ ( o#f+o#. . . { _ ( ^ ^ >%j+v at s#t#@ a$a$,$t#a$0$,%'%)%!%@ @ | i$j$k$~%P {%C#p$p$p$p$p$p$p$C#C#p$p$p$p$C#]%^%/%(%_%:%<%[%E$$#}%|%1%2%3%4%5%6%7%8%9%0%a%$@. . M$$@M$$@M$$@M$. N$$@b%c%d%e%f%g%h%",
+"i%j%]@;$. . . . . ;$. . . @ k%@ {$@ l%m%@ @ @ )+@ n%o%@ p%&%. q%r%s%t%=%0#. . . . # $ u%% % % % % % % % % & & @ * * * * * * * * * * * * * @ ) ) ) ! /.! 7$n#) { ^ / _.^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ _ _ ( . . . @ : @ o#{ ( ~ f+f+. . . f+_ ( ] v%w%k+u at s#t#t#,$>$>$t#,$x%y%v#z%A%B%@ | D at E@C%D%E%C#p$p$p$p$p$p$p$p$C#C#p$p$p$p$C#F%G%H%I%J%K%L%M%N%O%P%Q%R%S%T%U%V%W%X%Y%Z%`%$@. . M$$@$@M$$@M$$@$@M$.  &$@.&+&@&#&$&%&",
+"< &&^@;$. . . . ;$. ;$. . @ *&@ @ Z$m%Z$@ @ @ 2@@ +%@%@ =&-&. . . ;&8 at . . . . . . # $ u%& >&>.% % % % % >&,&,&@ * * @ @ @ @ @ @ @ * * * * @ ) ) o@'&! ) ' ) ) { ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ _ / o#. . . @ : @ f+( ( ~ . . . . . o#_ ( / [ )&k+u at 0$0$a$>$!&!&t#>$x%~&{&z%]&^&@ | /&(&_&:&C#p$p$p$p$p$C#p$p$p$p$p$p$p$p$p$C#<&[&}&|&1&2&3&4&5&6&7&8&9&0&a&b&c&d&e&f&g&h&$@. . M$$@M$M$$@M$$@M$. . i&$@j&k&l&m&n&o&",
+"p&q&^@;$. . . . . ;$. . . @ r&s&t&`$u&v&w&@ 1@{+@ &./$+ <$_+:$. . &%c#1+. . . x&=%# $ % ,&y&^.% % % % >&e#z&A&B&@ @ C&C&@ C&C&@ * @ * * @ D&(.E&'&(.) ) ) ) ) { ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ _ _.f+. . . @ : @ { _./ f+. . . . . f+_ ( / F&G&l+H&0$. 0$0$0$0$0$0$0$0$I&J&K&^&g$h$L&M&N&O&C#p$p$p$p$p$p$C#p$p$p$p$p$p$p$p$C#<&P&Q&R&S&T&U&V&W&X&Y&Z&`& *.*+*@*#*$*%*&*$@**$@. M$M$M$M$$@M$M$M$M$M$$@i&$@=*-*;*>*,*",
+"p&'*]@}#;$. . . ;$>$;$;$;$+ )*@ @  %!* %@ ~*2@@ 8#9#+ {*;&_+<$r%[$6 at r%]*]*=%]*y&^*%%$ u%,&^.^.% % % & /*(*& >&(*@ C&C&@ C&C&@ * * * * * @ d+;%_*e+e+, D&D&;%) { ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ^ ( / { ~ . . @ : @ ( ^ ^ ( f+~ . . f+{ / { ^ :*<*c$[*0$. . 0$. . 0$. . 0$}*|*1*2*@ @ 3*3*3*3*C#p$p$p$p$p$p$p$C#C#C#C#p$p$p$C#C#C#4*5*6*7*8*9*0*a*b*c*d*e*f*g*h*i*j*k*l*$@m*m***$@$@$@$@$@$@$@$@$@$@$@ &n*n*$@o*p*q*r*",
+"< s*t*[#,$;$;$;$>$>$>$,$[#t*+ ~+1@@ @ @ 1 at 2@@ ]+&.4 at + u*v*. t%<$=&p%. =%d at a@a@; . # $ u%e@/*^.% % & e@/*y&& >&(*@ C&C&@ C&C&@ * * * * @ w*x*! ' n at 6$y*) D&;%) { p@^ ^ ^ ^ ^ ^ ^ @ @ @ @ @ ^ ( _ _.( f+@ z*z*z*@ _.p@^ _ ( ( ( ( p@/ @ @ @ A*n+x at 0$. . 0$. . 0$. . @ B*C*D*h$| 5.E*F*G*C#p$p$p$p$p$p$p$p$p$p$p$p$C#C#C#p$p$p$C#H*I*J*K*L*M*N*O*P*Q*R*S*T*U*V*W*X*Y*$@Z*`*`*`*`*`* =Z*Z*.=+=@=N$ &i&n*#=$@$=%=&=*=",
+"==-=;==$-$,$>$>$>$>$,$-$=$;=>=+ {+2@)+2@{+@ ]+^+/++ . . . . . ^*u*. . . . ,=}+. . # $ u%& '=)=% % {.-%!=c@!=~={=@ C&C&C&C&@ * * * @ @ n@]=n@! e+e+) n#;%;%) ) ( / ^ ^ ^ ^ ^ @ @ z*z*z*z*z*@ @ { ^ ^ / @ z*z*z*@ _.] ^ ^ ^ p at p@^ @ @ z*z*z*^=/=y at x@0$. 0$. . 0$. 0$(=|*_=:=| | | <=[=}=C#p$p$p$p$p$p$p$p$p$p$p$C#p$p$p$p$p$p$p$C#|=1=2=3=4=5=6=7=8=9=0=a=b=c=d=e=f=$@Z*Z*Z*Z*Z*Z*Z*g=.=+=@=h= &i=n*#=j=$@k=l=m=n=",
+"o=p=q=1#]@[#}#|#|#}#[#=$1#2#r=s=+ + #..%$.8#&.+ + . . . . . . . . . . . . . . . . # $ u%% t=u=% % v=,.& ,&A&)=j#& @ @ @ @ @ @ @ @ (.n#w=x=) ) n#e+! _*y*) ) ) f+( ^ ^ ^ ^ @ z*z*z*z*z*z*z*z*z*@ ^ ^ ^ @ z*z*z*@ / _.^ ^ ^ ^ ^ @ z*z*z*z*z*z*y=z at v#c$0$0$0$0$0$0$z=A=B=C=@ @ D=E=E=E=D=C#p$p$p$p$p$p$p$p$p$p$C#p$p$p$p$C#C#p$p$C#F=G=H=I=J=K=L=M=N=O=P=Q=R=S=T=U=V=$@.=g=g=g=g=g=.=W=$@$@h=N$i&i&n*X=j=$@Y=Z=`= -",
+".-+- at -2#(@/@]@^@^@;$;$(@2##-$-%-+-.-+ @ @ @ + . . . . . . . . . . . . . . . . . . # *.% % & & % % & & & & & & & % % % % % e@= x*) ' &-*-=---;->-'&o@) ) ) ) ) o#{ ^ ^ ^ @ z*z*z*z*z*z*z*z*z*z*z*@ ^ ^ ^ @ @ @ p at _._.^ ^ ^ ^ @ z*z*z*z*z*z*z*,-'-z%)-!-v#{&'%~-w#{-B=]-^-/-(-_-:-:-:-:-(-C#p$p$p$p$p$p$p$p$C#p$p$p$p$p$C#C#p$p$p$C#<-[-}-|-1-2-3-4-5-6-7-8-9-0-a-b-c-$@+=+=+=$@+=@=@=@=N$ &i&i&$@#=j=$@d-e-f-g-h-",
+". _#i-j-k-l-m-;=;=m-n-k-o-$-p-q-_#r-s-x&0#}+=%=%=%=%=%=%=%=%=%=%=%=%=%=%=%=%=%=%=%}+-%t-t-t-t-t-t-t-t-t-t-t-t-t-t-t-t-t-t-u-v-4$w-&-v-u-u-5+x-3+y-z-7$5$o@! y*. { _.^ @ z*z*z*z*z*@ z*z*z*z*z*z*@ @ ^ p@@ : @ _ _._.^ ^ ^ @ z*z*z*z*z*z*z*z*z*g+A-B-)%z%z%J&|*C*C-D-g+_-E-_-:-:-:-F-:-:-C#p$p$p$p$p$p$p$C#p$p$p$p$p$p$p$p$p$p$p$C#G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-N%W-$@$@$@$@$@h=N$N$ &i=$@$@$@$@$@X-Y-Z-`- ;.;",
+". . +;@;#;$;%;&;&;%;*;=;-;;;>;,;@ ';);!;f#~;~;~;~;~;~;~;~;~;~;~;~;~;~;~;~;~;~;~;~;{;];^;^;^;^;^;^;^;^;^;^;^;^;^;^;^;^;^;^;^;/;^;j at 7+];^;];8+{;. (;3+*%_;:;<;:;}$o#( ^ @ z*z*z*z*z*z*@ @ z*z*z*@ z*@ ^ @ : : @ p@] _._.^ p@@ z*z*z*z*z*z*z*z*z*z*z*[;!%};B=|;1;2;3;_-4;5;F-:-F-F-E-F-F-:-D=C#p$p$p$p$p$p$C#p$p$p$p$p$p$p$p$p$p$p$C#6;7;8;9;0;a;b;c;d;e;f;g;h;i;j;k;l;E$m;n;o;p;$@$@$@$@$@$@q;W.r;s;s+t;u;v;w;x;y;",
+"z;A;B;#+$+C;D;E;F;G;H;I;J;$+#+K;@ L;M;N;O;P;Q;R;S;T;U;V;W;X;Y;Z;`; >.>+>@>#>$>%>&>*>=>->;>>>,>'>)>!>~>{>]>^>/>(>_>:><>[>}>|>1>2>3>4>5>6>7>8>9>0>a>@ @ @ @ @ @ @ ~ { @ z*z*z*z*z*z*z*@ @ @ @ @ @ z*z*@ @ @ @ _._ / / / ^ @ z*z*z*z*z*z*z*z*z*z*z*z*z*z*b>c>c>b>. 4;d>4;F-F-E-_-4;F-F-F-:-D=e>C#p$p$p$p$C#p$p$p$p$C#p$p$p$p$p$p$p$C#f>g>h>i>j>k>l>m>n>o>p>q>r>s>t>u>v>w>x>K#y>z>A>B>C>D> @. at E>F>G>H>I>J>K>L>M>N>O>",
+"P>Q>R>S>V T>U>V>c>c>V>U>T>V K;K;K;@ W>X>Y>Z>`> ,.,+,@,#,$,%,&,*,=,-,;,>,,,',),!,&>~,{,],^,/,(,_,:,<,[,},|,1,2,3,4,5,6,7,8,9,0,a,b,c,d,e,f,g,h,i,j,@ . . . . . . . o#@ z*z*z*z*z*z*z*@ @ z*z*@ @ z*z*@ / ( ^ ] ^ ^ ^ ^ ^ @ @ z*z*z*z*z*z*z*@ z*z*z*z*z*z*@ f+~ k,k,4;F-E-E-5;5;5;E-4;:-(-l,m,n,C#C#C#C#p$p$p$p$p$p$C#p$p$p$p$p$p$C#o,p,q,r,s,t,u,v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,N+Q,R,S,T,U,V,W,X,Y,Z,",
+"`, '.'+'@'#'$'%'&'*'='-';'@ K;K;K;@ >',''')'!'~'{']'^'/'('_':'<'['}'|'1'2'3'4'5'6'7'8'9'0'a'b'c'd'e'f'g'h'i'j'k'l'm'n'o'p'q'r's't'u'v'w'x'y'z'A'B'@ . . . . . . . . @ z*z*z*z*z*z*z*@ @ z*z*@ @ z*z*@ _.( ^ ^ _._ _ / ^ @ z*@ z*z*z*z*z*@ z*z*z*z*z*z*z*@ _-F-E-k,F-F-_-_-_-_-5;k,_-F-E=C'D'/-F-(-C#p$p$p$p$p$p$p$p$C#C#C#C#C#C#E'F'G'H'I'J'K'L'M'N'O'P'Q'R'S'T'U'V'2%W'X'Y'Z'`' ).)+)z>@)#)$)%)&)*)=)-);)>),)')",
+"))!)~){)])^)/)()_):)<)[)})@ K;K;K;@ >'|)1)2)3)4)5)6)7)8)9)0)a)b)c)d)e)f)g)h)i)j)k)~,l)m)n)o)p)q)r)_,s)t)u)v)w)x)y)z)A)B)C)D)E)F)G)H)I)J)K)L)M)N)O)@ . . . . . . P)x&@ z*z*z*z*z*z*z*@ @ z*z*@ @ z*z*@ ^ ( ^ ] / ] p at p@^ @ z*z*@ z*z*z*@ z*z*z*z*z*z*z*z*@ 4;F-:-F-:-E-d>k,5;_-F-4;_-(-Q)R)E=(-/-/-/-C#C#C#p$p$p$p$p$p$p$p$p$p$C#S)T)U)V)W)X)Y)Z)`) !.!+!@!#!$!%!&!*!=!-!;!>!,!'!)!!!~!I,{!]!^!/!(!_!:!<![!}!|!1!",
+"))2!3!4!5!6!7!8!9!0!a!b!@ c!c!c!c!c!@ d!e!f!g!h!i!j!k!l!m!n!o!p!q!r!s!t!t!u!v!w!x!y!z!A!B!C!D!q)E!F!G!H!I!J!K!L!M!N!O!P!Q!R!S!T!U!V!W!X!Y!Z!`! ~.~@ . . . . . +~@ @ @ z*z*z*z*z*z*z*@ @ z*z*@ @ z*z*@ ( { / ^ ] / _ _.^ @ z*z*z*@ z*@ z*z*z*z*z*z*z*z*z*@ k,k,E-:-4;k,d>d>k,k,4;F-F-F-E=E=E=/-(-(-(-E=@~C#p$p$p$p$p$p$p$p$p$C##~$~%~&~*~=~-~;~>~,~'~)~!~~~{~]~^~/~(~_~:~<~[~}~|~1~2~3~4~5~6~7~8~9~0~a~b~c~d~e~f~",
+"g~h~i~j~k~l~m~n~o~p~q~r~@ c!c!c!c!c!@ s~t~u~v~w~x~y~z~A~B~C~D~E~F~G~H~I~J~K~L~M~N~O~P~Q~R~S~T~U~r)V~W~X~Y~Z~`~ {.{+{@{#{${%{&{0,*{={-{;{>{,{'{){!{@ . . . . ~{@ {{]{@ @ z*z*z*z*z*z*@ @ z*z*@ @ z*@ / { { ( ^ ] _./ p@^ ( @ z*z*z*@ z*z*z*z*z*z*z*z*z*@ d>d>d>d>_-d>d>d>d>d>d>k,4;F-_-:-(-/-E=E=/-(-(-^{/{C#C#p$p$p$p$p$C#C#({_{:{<{[{}{|{1{2{3{4{5{6{7{8{9{0{a{b{c{d{e{f{g{h{i{j{k{l{m{n{o{p{q{r{s{t{u{v{w{x{y{",
+"z{A{B{C{D{E{F{])G{H{I{J{@ K;K;K;K;K;@ K{L{M{N{O{P{Q{R{S{T{U{V{W{X{Y{Z{`{ ].]+]@]#]$]%]&]&]*]=]-];]>],]'])]!]~]{]]]^]/](]_]:]<][]}]|]1]2]3]4]5]6]7]@ . . . 8]]{9]0]a]b]@ z*z*z*z*z*z*z*z*z*z*z*z*z*@ / ( ~ { p@^ _./ / ^ _ @ z*z*z*z*z*z*z*z*z*z*z*z*z*@ d>d>d>5;_-d>d>d>d>d>d>d>k,E-F-:-:-(-c]d]D=D=D=e]f]s{g]C#C#C#C#C#h]i]j]k]l]m]n]o]p]q]r]s]t]u]v]w]x]y]z]A]B]C]D]E]F]G]H]I]J]k{K]L]M]N]O]P]Q]R]S]T]U]V]W]X]",
+"Y]Z]`] ^.^+^@^#^$^%^&^*^@ K;K;K;K;K;@ =^-^;^>^,^'^)^!^~^{^]^^^/^(^_^:^<^[^}^|^1^2^3^4^5^6^&>7^8^9^0^a^b^c^d^e^f^g^h^i^j^k^l^m^n^}]o^p^q^r^s^t^u^v^@ . . . w^@ x&x^y^y^m%@ z*z*z*z*z*z*z*z*z*z*z*@ ^ ( f+a]f+( p at _.] ^ ^ / { @ z*z*z*z*z*z*z*z*z*z*z*@ d>d>d>d>5;_-d>d>d>d>d>d>d>k,5;F-E-:-:-D=z^A^B^C^D^E^F^G^H^I^J^M,K^L^M^N^O^P^Q^R^S^T^U^V^W^X^Y^Z^`^ /./+/@/#/$/%/&/*/=/-/;/>/,/'/)/!/~/{/]/^///E^(/_/:/</[/",
+"}/|/1/2/3/4/5/6/7/8/9/@ c!c!c!c!c!c!c!@ 0/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/9]u/v/6^A!=]w/x/Z~y/z/A/B/C/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/@ . . . ]{w^0]0]y^U/m%V/@ z*z*@ @ @ @ @ z*z*@ ^ ] { ~ a]. { / ^ / / p at p@{ ~ @ z*z*z*z*z*z*z*z*z*@ d>d>d>d>d>5;_-d>d>d>d>d>d>d>d>k,_-_-F-:-F-D=W/X/Y/Z/`/ (.(+(@(#($(%(&(*(=(-(;(>(,('()(!(~({(](^(/(((_(:(<([(}(|(1(2(3(4(5(6(7(8(9(0(a(b(c(d(e(f(g(h(i(C^j(k(",
+"l(m(n(o(p(q(r(s(t(u(v(@ c!c!c!c!c!c!c!@ @ g$w(x(y(z(A(B(C(D(E(F(G(H(I(J(K(L(M(N(O(P(u/Q(R(5'*]S(T(U(V(W(X(Y(Z(`( _._+_ at _#_$_o'%_&_*_=_-_;_>_,_'_)_@ . . !_@ x&0]0]y^m%m%V/~_@ @ z*z*z*z*z*@ @ ^ ^ ( f+a]{_]{o#( ] / ] ^ ^ ( f+s&@ @ z*z*z*z*z*@ @ @ d>d>d>d>d>5;_-d>d>d>d>d>d>d>d>k,E-F-E-F-F-(-]_^_/_(___:_<_[_#(}_|_1_2_3_4_5_6_7_8_9_0_a_b_c_d_e_f_g_h_i_j_k_l_m_n_o_p_q_r_s_t_u_v_w_x_y_z_A_B_D^i(C_D_E_F_G_",
+"H_I_J_K_L_M_N_O_P_Q_R_@ K;K;K;K;K;K;K;@ | h$g$g$S_T_U_V_W_X_Y_Z_`_ :.:+:@:#:$:%:&:*:=:-:;:A!=]S(>:,:':):!:~:{:]:^:/:(:_:::<:[:}:|:1:2:3:4:5:6:7:8:@ . . 9:m#0:0]y^y^m%V/a:b:@ ]{@ @ @ @ @ { ^ ^ _.{ . c:]{@ o#{ ^ ] ] ^ ^ _.{ . d:d:@ @ @ @ @ e:f:@ d>d>d>d>d>5;_-k,d>d>d>d>d>d>d>k,4;F-d>d>5;F-/-g:h:i:j:k:l:m:n:o:p:q:r:s:t:u:v:w:x:y:z:A:B:C:D:E:F:G:H:I:J:K:L:M:N:O:P:Q:R:S:T:U:V:W:X:Y:Z:`: <.<+<@<#<$<%<&<",
+"*<=<-<;<><,<'<)<!<~<@ K;K;K;K;K;K;K;K;K;@ | | h$g${<]<^</<(<_<:< %<<[<}<|<1<2<3<4<5<6<7<A!8<&>9<0<a<b<c<d<e<f<g<h<i<j<k<l<m<n<o<p<q<r<s<t<u<v<w<x<@ . . y<w^0]y^z<A<y<y<B<C<]{D<E<F<G<H<. { ( ( { o#a]I<]{{_o#{ / _ / ^ ^ ^ { ~ @ B<J<K<@ L<M<f:N<@ d>d>d>d>d>5;_-k,d>d>d>d>d>d>d>d>d>F-5;k,E-:-F-O<P<Q<R<S<T<U<V<W<X<Y<Z<`< [.[+[@[#[$[%[&[*[=[-[;[>[,['[)[![~[{[][^[/[([_[:[<[[[}[t_|[1[2[3[4[5[6[7[8[9[0[a[b[",
+"c[d[e[f[g[h[i[j[k[l[@ c!c!c!c!c!c!c!c!c!@ @ @ | h$g$m[n[o[p[q[r[s[t[u[v[c^w[x[y[z[A[d'B[C[D[E[F[z!G[H[I[J[K[L[M[N[O[P[^$Q[R[S[T[U[V[W[X[Y[Z[`[ }.}@ . . {{z<+}{{@ @ @ @ @}#}C<$}%}&}@ H<*}. . . . . a]=}-};}f+( ^ ^ ^ ^ ^ ^ ( f+>},}'}d:d:P)e:e:)}@ d>d>d>d>d>5;E-k,d>d>d>d>d>d>d>d>k,_-4;k,_-:-:-E=!}~}{}]}^}/}(}_}:}<}[}}}|}1}b*2}3}4}5}6}7}8}9}0}a}b}c}d}e}f}g}h}i}j}k}l}m}n}o}p}q}r}s}t}u}v}w}x}y}z}A}B}C}D}",
+"E}F}G}H}I}J}K}L}M}N}@ c!c!c!c!c!c!c!c!c!@ | | @ | g$O}P}Q}R}S}T}U}V}W}X}Y}Z}`} |.|+|@|#|$|%|&|*|=|-|;|>|,|'|)|!|~|{|]|^|/|(|_|:|<|[|}|||1|2|3|4|5|@ . . @ !_6|@ y<6|7|@ B<@ '}E<8|9|@ 0|@ a|b|c|d|@ a]@ e|f|{ / p@/ / p@^ ^ _ f+g|h|@ i|9|M<M<f:)}@ d>d>d>d>d>5;E-k,d>d>d>d>d>d>d>d>k,_-4;4;F-:-:-(-j|k|l|m|n|o|p|q|r|s|t|u|v|w|x|y|z|A|B|C|D|E|F|G|H|I|J|K|</L|M|N|O|P|Q|R|S|T|U|V|W|X|Y|Z|`| 1.1+1 at 1#1$1%1&1*1",
+"=1-1;1>1,1'1)1!1~1@ K;K;K;K;K;K;K;K;K;K;K;@ | | | h$g${1]1^1/1(1_1:1<1[1}1|111213141516141718191616101a1@ b1c1d1e1f1g1h1i1j1k1l1m1n1o1p1q1r1s1t1u1@ . v1@ !_a]M<m%V/7|@ w1@ K<8|8|9|@ 0|@ x1b|y1d|@ z1@ A1~ { p@^ ] _.p@^ ^ _ f+d:@ +~B1=}@ @ @ @ @ =}~ d>d>d>5;E-k,d>d>d>d>d>d>d>d>k,_-4;_-:-:-:-F-C1D1E1F1G1H1I1J1K1L1M1N1O1P1Q1R1S1T1U1V1W1X1Y1Z1`1 2.2+2 at 2#2$2%2&2*2=2-2;2>2,2'2)2!2~2{2]2^2/2(2_2:2t|<2[2}2",
+"|21222324252627282@ K;K;K;K;K;K;K;K;K;K;K;@ @ @ @ | @ 9202a2b2c2d2e2f2g2h281i2j2k2i291j2l2m2j2n2o2i2p2@ q2@ r201s2t2u2v2w2x2y2z2A2B2C2D2E2F2G2H2I2@ . v1@ J2y^m%m%V/K2L2M2]{&}N2O2P2Q2R2]{S2c|T2I<Q2z1@ U2o#( ^ p at _ / p@^ ^ ( f+J(V2W2]{X2(;(;(;(;(;Y2Z2`2d>d>5;E-k,d>d>d>d>d>d>d>d>k,_- 3.3+3 at 3@ @ @ @ @ @ #3$3%3&3*3=3-3;3>3,3'3)3!3~3{3w{]3^3/3(3_3:3<3[3}3|313233343536373839303a3b3c3d3e3f3g3h3i3z}j3k3l3m3",
+"n3o3p3q3r3s3t3u3v3@ c!@ @ @ c!c!c!@ @ @ c!@ . . @ | @ w3x3y3z3A3B3C3D3E3F3G3H3I3J3J3K3K3L3M3K3N3O3O3F3@ q2@ P3o2Q3R3S3T3w2U3V3W3X3Y3Z3`3 4.4+4 at 4#4@ v10]m#A<y^$4V/7|@ %4&4F<G<N2*4Q2=4R2-4=};4>4Q2-},4'4)4o#( ^ ^ ^ ^ ^ ^ _ { . P(B1!4(;(;(;(;(;(;(;(;(;~4{4d>5;E-k,d>d>d>d>d>d>d>]4^4+3/4@ (4(4(4(4/.(4/././.(4(4_4:4<4[4}4|4142434D144546474849404a4b4c4d4B_e4f4g4h4i4j4k4l4m4n4o4p4q4r4s4t4u4v4w4x4y4z4A4B4l:",
+"C4D4E4F4G4H4I4J4@ c!@ . . . @ c!@ . . . @ c!@ . @ | @ K4L4M4N4O4P4Q4R4S4T4U4V4V4A!A!M3L3U4U4W4X4N3N3Y4@ q2@ G3Z4G3`4 5.5+5 at 5#5$5%5&5*5=5-5;5>5,5'5@ v10]A<]{z<)5@}@ #}&4$}&}@ *}Q2@ x1!5S2@ *}Q2@ A1~5I<@ . ( ( { _ ^ ] { f+~ g|{5Z2(;(;(;(;(;(;(;(;(;(;(;Z2]55;E-k,d>d>d>d>d>]4^5/5(5(4(4/./.;%/.;%;%n@;%n@;%;%/./.(4_5:5<5[5}5|515253545556575|~t_859505a5b5c5d5e5f5g5h5i5j5k5:2l5m5n5o5p5q5r5s5t5u5v5w5x5y5z5",
+"A5B5C5D5E5F5G5H5@ @ @ . @ . @ @ @ . @ . @ @ @ 6.@ h$g$I5J5K5L5M5N5O5P5Q5R(5'A!A!R5S5T5U5V5W5X5Y5Z5`5 6@ q2@ B[T4A!.6+6X(@6#6$6%6&6*6=6-6;6>6,6'6)6@ v10]!6]{@ @ @ ]{~6&4E<%}6.@ @ `2R2{6c|]6@ @ )4,4,4^6'4@ d:z<o#{ ^ / { . /6(6_6:6(;(;(;(;(;(;!4@ @ (;(;<6W24;E-k,d>d>d>]4^5[6}6(4(4(4/.(4/.;%n@|6|6162636@ @ (4/././.4656667686@ 9606a6b6c6d6e6f6g6h6i6j6k6l6m6n6o6p6q6r6s6. . . . t6u6v6~[w6x6y6z6A6B6C6D6E6",
+"g$h$| | | | | | @ z*@ . . . @ z*@ @ . . @ z*@ | | } F6G6H6I6J6K6L6M6N6O6P6Q6A!5'F[R6S6T6U6V6W6X6Y6@ @ @ q2@ .6&]c'Z6`6 7.7+7 at 7#7$7%7&7*7=7-7;7,6>7@ 0]0]y^,7b]y<'7D<)7$}E<8|O2!7~7R2!5{6;4T2{_{_{7~5f|]7^7/7~6(7~ { ^ _.{ . _78]+ (;(;Y2=}:7(;<7@ @ @ :7(;(;Z2]5E-k,d>d> 3[7}7|7@ (4(4/.;%n@|617|6162737s6~ . . ~ s64757365747s6~ . ~ s66777879707a7b7c7c7d7e7f7g7h7i7j7r6~ . . . . . . ~ k7l7m7n7o7p7q7r7s7t7u7",
+"h$| @ @ | | | @ @ z*z*@ @ @ z*z*z*@ @ @ z*z*@ @ | v7g$w7x7y7z7A7B7C7D7E7F7&]r)G7H7I7J7K7L7M7N7@ @ @ q2@ q2@ O7P7Q7R7S7T7U7V7W7X7Y7Z7`7 8.8+8 at 8#8$8@ %80]&8m%V/V/~_w1&4$}8|N2*8H<=8R2{6c|;4T2a]z1~5f|-8]7D<;8}+>8. o#{ { o#,8_7~ W2'8)8!4@ =}(;(;@ @ @ Y2!8~8~4I<(-(-F-{8]8^8/8(4/.16(8(8(8_8_8:8<8[8}8~ . . . . . . ~ }847575747d at s6~ ~ s6|818283848586878889808a8b8c8d8~ . . . . . . . . . s6e8f8g8h8i8j8k8l8m8",
+"| @ | | @ | @ | @ @ @ z*z*z*z*z*z*z*z*z*@ @ @ | @ | g$n8o8p8q8r8s8t8u8v8w87<_,x8y8z8A8B8C8D8E8@ q2@ q2q2q2@ |,F8G8H8I8J8K8L8M8N8O8P8Q8R8S8T8U8V8W8@ 0]y^$4m%V/~_X8Y8E<Z88|O2`80| 9!5.9c|T2+9z1z1~5f|@9D<;8#9~6Q2$9s&%9&9,8,88]~ + ~8*9(;:7<6(;(;(;=9:6(;-9~8W2I</-D=;9>9d@,936'9'9)9)9!9!9~9!9{9[8}8~ . . . . ~ ~ ~ ~ s6}847575747s6~ . . ~ ]9^9/9(9_9:9<9[9}9|9192939s6. . . . . . . . . . . r649596979899909a9",
+"| | | | | | | @ z*z*z*@ z*z*z*z*z*z*z*@ z*z*z*@ | | h$g$b9c9d9e9f9g9h9i9j9k9l9m9n9o9p9q9r9s9r9@ q2q2q2q2q2@ t9u9v9w9x9y9z9A9B9C9D9E9F9G9H9I9J9K9L9@ y^y^m%a:V/X8w1&4$}%}8|O2H<M9R2!5y1T2T2a]z1,4;}f|^7N9O9$9'4@ P9s&%9&9,8J<>4~ @ ]{X2(;(;(;(;(;(;(;(;:6Z2@ ]{I<(-Q9>9R9S9@ (4/.16|6|6|6|6|616T9U9}8~ . . . . . . . . ~ V9W9X9X9W9V9~ . . ~ Y9Z9`9 0.0+0 at 0#0$0%0&0*0=0. . . . . . . . . . . . . . -0;0>0,0'0)0!0",
+"@ @ @ @ @ @ @ z*z*z*z*z*z*z*@ z*z*z*z*z*z*z*z*z*@ @ | @ ~0{0]0^0/0(0_0:0c'<0_,[0}0|01020304050@ q2q2q2q2@ @ 6070809000a0b0c0d0e0f0g0h0i0j0k0l0m0n0@ y^$4m%a:o0X8w1$}Z88|O2H<H<R2!5c|;4T2a]a]z1~5f|]7D<d:@ @ @ >}s&%9p0&9,8>4x&{5]{W2=}@ Z2=9=9=9~4W2@ @ I<_6@ B1q0>9r0/8(4/./.;%;%n at n@1717|6T9U9V9~ . . . . . . . . . . ~ V937s0s037s6~ . . ~ t0u0v0w0x0y0z0A0B0C0D0r6. . . . . . . . . . . . . . . k7E0F0G0H0I0",
+"@ . . @ . . @ z*z*z*z*z*z*z*@ @ @ z*z*z*z*z*z*z*@ @ | @ J0K0L0M0N0O0P0Q0r)*]=]7^R0S0T0U0V0V0W0@ @ q2q2q2@ X0X0Y0Z0`0 a.a@ @ @ @ @ +a at a#an0$a%a&a*a@ &8m%m%~_X8w1&4$}=aN2*8@ @ @ @ @ ;4-aa]z1~5;}f|D<D<;a$9$9z<>as&%9&9,8J<x&,a!6]{@ . Z2_6I<I<@ I<~ . + {4{4@ {5;9'a)a!a/.;%n@|6|6|6|6|6n at n@~aW9V9~ . . . . . . . . . . ~ V9W9X9X9W9V9~ . . ~ {a]a^a/a(a_a:a<a[a}a|ak7. . . . . . . . . . . . . . . . 1a2a3a4a5a",
+"@ . . @ . . @ z*z*z*z*z*z*z*6a6a@ z*z*z*z*z*z*z*@ B1+ @ @ @ @ -4]57a),r)=]*]=]8a9aO70aaaE!E!8^baca@ @ @ @ *]&]R5daea@ @ q2q2q2q2q2@ @ fagahaiajaka@ lam%V/~_X8w1&4E<8|@ @ mamamamama@ @ z1z1~5f|]7D<na#9oa*4>as&%9&9,},8>4x&paM<_6W2. I<I<. . + {5. . I<Z2Z2_6{8qa^8ra(4(4/./.;%;%n@|61717|6T9W9V9~ . . . . . . . . . . ~ V9W9X9/.X937s6~ . ~ satauavawaxayazaAaBaCa_ ~ . . . . . . . . . . . . . . . DaEaFaGaHa",
+"@ . . @ . . . @ z*z*z*@ z*6a6az*z*z*z*@ z*z*z*{5W2IaJaKaKaKaKaLaMad at . _,*]<0=]=]9<<0U~NaOaPaQaRa_,Sa!,TaSa!,5'Q6T~@ q2q2q2q2q2q2q2q2q2@ UaVaWaXaYa@ @ @ @ @ @ @ @ @ @ mamamamamamamamama@ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ _6s6I<I<. . =}~ . . {5@ W2. Za.3`a b(4/.;%n at n@) ) ) ) ) n@;%X937s6~ . . . . . . . . ~ s637X9;%;%~aW9V9~ ~ s6.b+b at b#b$b%b&b*b=b-b;b>b~ . . . . . . . . . . . . . . . . >br6,b'b",
+"| @ . @ . $@$@$@$@$@@ g$6a6a@ @ @ @ @ . @ @ . W2IaKaKaKaKaKaKaKaKa)b=}!b=]=]=]=]=]<0~b{b]b^b/b_,&]SaSa(bSaSaA!_b@ q2q2@ @ q2q2q2@ @ q2q2@ :b<b[b}b|b1b2b3b@ | @ . @ ma@ @ @ mamama@ @ @ ma@ @ @ 4b5b5b@ . @ . . @ | @ . . . . . . /-_6W2Z2. . =}~ . . {4_6E-6b^5[67b(4/./.;%;%n at n@) ) ) ) ) n@~aW9V9~ . . . . . . . . ~ V9W9X9;%n@;%X9W9V9s68b9b0babbbcbdbebfbgbhbr6. . . . . . . ~ s6d at d@d at s6~ . . . . . . r6ib",
+"h$| @ $@$@jbkblb`*`*$@$@6a| 5.| | @ @ . . . d at MaKaLaIaIaKaKaKaKaKaJaMa`2&>z!&>z!*]r)R5mbnbob5'$@$@$@$@$@(bSaSa5'@ q2@ q2q2@ q2@ q2q2@ q2@ pbqbharbsbtbubvbg$h$@ . @ @ . . . @ ma@ . . . @ @ @ @ 5b5b5b@ . @ . . @ h$g$. . . . . . . /-{4@ + `2=}W2I<W2I<k,k,]4^5[6wb(4/.;%n@) n at n@n at n@n@) ) n@;%X937s6~ . . . . . . ~ s637X9;%n@) ) n@;%/.xbybzbAb| | @ @ @ @ @ 5.r6. . . . . ~ s6BbCb;%;%DbEbFb~ . s6. . . s6. ",
+"g$Gb$@HbIbJbjblbm*$@. . $@| | 5.| | @ @ @ {4@ JaKaIa@ @ KaKaKaKaKaKaKb@ ]5&>Taz!z!R5LbMbNb$@$@ObPbPbObQb$@$@Rb@ q2q2q2q2q2q2q2q2q2q2q2q2q2@ SbTbUbVbWbXbYbZbg$| @ @ . . . . . @ . . . . . @ @ @ 5b5b5b@ . @ . @ | g$. . @ @ @ @ @ . . (-_-{4I<I<I<s6. d>d>d>]4`b c.c(4/./.;%;%n at n@) ) ) ) ) ) n@;%/.s0d at s6~ . . ~ s6d at s0/.;%n@) ) n at n@n at n@;%;%/.(4@ @ +c at c| | | v7Da. ~ ~ s6d@#c/.;%n@) ) n at DbEbFb~ @ . . . . . ",
+"$c$@Hb%cHbJbjb**$@$@. . . $@| | @ @ 5.| | =}&cKaKa*cIaIaKaJa@ @ &cKaKaMas6%>!bz!&>R5Lb=c$@ObPb-c-c-c-cPbObQb$@@ q2q2q2q2q2q2q2q2q2q2q2q2q2@ SaSaSa;c>c,c'c)cg$h$@ @ . . . !c~c@ ~c!c. . . @ @ @ 5b5b5b@ . @ @ | h$g$@ @ {c{c{c{c{c@ @ /-4;4;F-_-_-F-4;k,d>d>]c.3+3^c(4/.;%n@) ) ) ) ) ) ) ) ) ) ) n@;%/.(4@ @ @ @ (4/.;%n@) ) ) n at n@n at n@n@) ) ) ) n@;%/.(4@ @ @ @ @ @ @ (4/./.;%n at n@;%n at n@;%Cb/c(c_c:c. . . . r6",
+"| $@IbHbIbJbkb**$@. . $@. $@| @ 5.| | | | @ JaKaKaKaKaKaKa*c@ @ IaKaKa<cI<[c|,d'O7X0}c$@Ob-c$@$@|c|c|c$@$@ObQb$@q2@ @ @ @ @ @ @ @ @ @ @ q2@ 1c2cSaSaSa3c4c5c. g$@ ma@ . . ~c. @ . ~c. . @ ma@ @ 5b5b5b@ @ @ 5.h$} @ {c{c{c6c6c6c{c{c{c@ F-F-4;k,k,4;_-4;k,]c7c8c9c(4(4/./.;%;%n at n@n at n@n at n@n@) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) n at n@n at n@n@) ) ) n at n@n at n@n@) ) n at n@n at n@n@) n at n@n at n@;%;%/./././.0cacbcccdc@ ecfc. ",
+"$@jbJbJbJbjbkblb$@. . $@$@. $@5.| | @ @ | @ KaKaKaKaKaKaKaKaKaKaKaKaKa*c=}gchchchchchc$@Pb$@|cicicicic|cjc$@Qb$@q2@ kclc@ mcncoc@ ocpc@ q2@ qcrcsctcSaSaucvc$c$c@ mama@ @ @ @ ma@ @ @ @ mama@ @ 5b5b5b@ | | v7wc@ a at a@{c{c{cxcxc6c{c{c{c@ E-5;_-F-_-_-_-k,6byc[6wb@ (4(4/.;%n at n@) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) n at n@n at n@n@) ) ) ) ) ) ) ) ) n at n@n at n@n@) ) n at n@n at n@n@) ) n at n@n@;%/./.(4@ (4(4zcAcBcCcDc@ d@~c~ ",
+"$@kbjbjbjbkb**m*$@. $@$@@=N$$@@ | @ | | @ @ EcFcMa)b@ @ @ Ma)bFc@ @ @ @ -4GcHcGcIcJc$@Ob-c$@$@KcKcKcKc$@|c$@ObQb$@@ GcGc@ Jc@ $@@ LcMc@ q2@ NcOcPcOcQcSaRc$cSc| @ mamamamamamamamamamamamama@ @ 5b5b5b@ | | | | @ . . a at a@a@@ a at a@a at a@@ @ F-_-E-4;4;_-F-]c.3.3[6/4/4/4(4/./.;%n@;%;%n at n@n@) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) n at n@n@;%;%n at n@;%n at n@n at n@) ) ) ) ) n@;%/.(4@ (4(4TcAcUcVcDc@ @ . r6",
+"$@lblb**lb$@$@$@$@$@W=+=N$ &i&$@| | | | | + Mad@~ @ . . I<d@~ d at I<. . @ s6. . . . . $@Pb-c$@icKcWcWcKcic|c$@PbQb$@q2@ . @ . . . @ . @ q2@ . SaSaSa. . Sa$cSc| @ @ @ mamamamamamamamamama@ @ 5.@ 4b5b4b@ | | @ @ @ . . . @ . . . @ . . . @ @ k,k,4;_-E-_-XcXc 3^5/5/5Yc/./.;%n@;%/.;%;%/.;%n at n@n@) ) n at n@n@;%;%n at n@n@) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) ) n at n@n at n@n@) ) n at n@n@;%/./.(4@ (4(4zcZc`cccec@ @ . . ",
+"$@m*m*m*$@$@`*Z*Z*.=+=@=N$ &i&$@@ @ @ @ @ `2@ I<. @ . . I<I<. I<I<. . @ {5. . . . . $@Pb-c|c$@$@WcWcKc$@$@jcPbQb$@q2q2@ @ . . . @ @ q2q2@ . . . SaSa. SaSa| @ | | @ mamamamamamamama@ @ ma@ @ @ @ 5b5b@ | @ | @ @ . . . . a at a@. . . . . @ @ 5;_-_-E-E-F-{8Za]4]c^5^5/5Yc/.;%n at n@n at n@n at n@) ) n at n@n@;%/.;%;%;%n@) ) n at n@n at n@n at n@n at n@n@;%n at n@;%;%n at n@n@) n at n@n at n@n@) ) n at n@n at n@n@) n@;%/.(4@ (4(4 d.d+d@ @ @ @ . . ",
+"$@`*`*$@`*`*Z*g=.=+=@=N$$@i&n*$@@ . . @ . {5@ ~ . @ @ @ @ I<. =}~ . . @ . . . . . . $@Ob-c|cicKcKcKcKcic|cjcPbQb$@@ q2q2@ @ @ @ @ q2q2@ . . . . . Sa. $cSa| | | | | @ mamama@ @ @ @ mama@ 6.@ 6cxc@ 5b@ @ @ @ @ {c@ a at a@a at xcxca@a at a@a@@ {c@ @ E-k,k,k,d>{8Xc]c]4^5^5/5wb(4/././././.(4/.;%n at n@) ) n at n@;%;%;%n at n@n@;%/./.(4/.;%n@;%n at n@n@;%n@;%;%/.;%/.;%/.;%/.;%/.;%;%n at n@n at n@n at n@;%;%/./.(4 at d#d$d%d@ d8@ Da. . ",
+". $@g=$@g=Z*.=W=+=@=N$N$$@i&$@$@@ . . @ . . =}W2=}@ KaKa*c+ =}]{W2=}W2+ . . . . . . $@QbPbjc$@$@$@$@$@$@jcjcObQb$@. @ @ q2q2q2q2q2@ @ . . . . . . @ @ @ @ @ @ @ @ @ @ @ @ @ mamamama@ @ . @ @ xc{c@ @ 6cxc@ @ @ {c6cxcxcxcxcxcxcxcxc6c{c{c@ _-@ d>d>d>_-_-]c]4]4]4`b[7&d*d/././.(4(4(4(4/./.;%/.;%/././././.;%n@;%;%;%/././.;%/.;%/.;%/./.(4(4@ @ @ @ @ @ @ @ @ @ @ @ (4/./.;%n at n@n at n@n at n@;%=d-d;d>d,d@ @ Da. . ",
+". $@W=$@W=+=+=+=@=N$N$ &$@'dX=$@@ . . @ . . {5B1]{<cKaKaKaLa*cLa)bd@~ @ . . . . . . . $@Ob$@. )d. )d. )d$@PbQb$@. . . . @ @ @ @ @ . . . . . . . . @ q2q2q2@ @ . @ . . . @ @ @ @ @ @ . @ . @ @ {c{c@ @ {c{c@ @ @ {c{c6cxcxcxcxcxcxc6c6c{c{c@ @ @ @ 5;_-_-k,d>d>d>k,6byc`a7b/.;%;%;%/.(4@ @ @ @ (4(4(4(4(4(4/.;%n@) n@;%/.(4@ @ (4(4(4(4(4@ @ @ @ @ @c@ . @ . . . @ . _cs6@ @ @ (4/.;%n@) n@!d~d{d@ @ @ @ @ ]d. . ",
+". @ $@$@@=@=@=N$N$ &i&i&'dX=^d$@| @ . @ . . . @ ]5W2Fc<cIa<cIa)bs6$cSc@ . . . . . . . $@Qb$@. )d. )d. )d$@ObQb$@. . . . . . . . . . . . . . . . @ @ q2q2q2q2@ . @ . . . @ . . @ | @ . @ . @ @ @ @ 4b4b@ @ . @ . @ {c{cxcxcxcxcxcxcxc{c{c@ @ xcxc{c@ E-k,d>d>d>k,E-{8[7/dYc/.;%n at n@n@;%/.(4@ @ @ @ @ @ @ @ (4(4/.;%n at n@n@;%/.(4@ @ @ } (d_d:d| | 5.<d| @ @ . . . @ @ [ds6(;@ @ @ @ }d@ @ |d;d1d@ @ @ @ @ ,d. . . ",
+"@ @ . $@N$N$N$ & &i&i&'dX=^d$@5.<d| @ @ . . . @ @ | {4I<I<I<B1. | h$$c| . . . . . . . . $@Qb$@$@$@$@$@$@QbQb$@. . . . . . . . . . . . . . . . . @ q2q2q2q2q2@ . @ . . . @ . . @ 2d| @ @ . 6.7.@ 5b5b5b@ . . @ . @ {c{c{cxc@ @ @ xc{c{c{c@ @ xc6c{c@ d>d>d>d>k,E-F- 3`b/5Yc(4/./.;%;%;%/./.(4|7+3ycq0. ~ s6d@#c(4/./.;%;%;%/./.(43d4ds6~ . g$@ @ @ } h$| @ @ @ @ @ | u6. . ~ @ @ @ @ @ @ 5d6dW2@ @ @ @ 7d. . . . ",
+"| @ @ @ $@ &i&i&i&'d#=X=$@$@@ @ } h$| @ @ @ @ @ | v7} h$| | | h$g$g$$cSc. . . . . . . . . $@$@QbQbQbQbQb$@$@. . . . . . . . . . . . . . . . . . @ q2q2q2@ q2@ . @ . . . @ . @ | #}h$| @ @ @ @ @ 5b5b4b@ . . @ . @ @ {c{ca@{c{c{ca@{c{c@ d>@ {c{c{c@ d>d>d>d>_-:-5;]c^5/5/4@ @ (4(4(4/./.(4(4(4(58c'a~ ~ s6d at W2@ @ (4(4(4/./.(4(4(4W2d at s6~ . . . . . g$g$h$| | | h$g$g$r6k7~ 8d@ @ @ @ @ @ @ s6@ @ @ @ . . . . . ",
+"$cSc| | | $@$@$@$@$@$@$@. . . . . g$g$h$| | | h$g$g$. g$@ @ @ g$. . . $c. . . . . . . . . . . $@$@$@$@$@. . . . . . . . . . . . . . . . . . . . @ q2@ q2@ @ @ @ @ . . . @ @ | Sc$cg$g$h$| | 5.@ 5b4b4b@ . . @ @ | | @ @ {c{c{c{c{c@ @ d>d>k,@ @ @ k,k,k,5;_-_-_-F-E- 3`b[6wb@ @ @ @ @ /4/5^5]4k,_-(-. . ~ s6d at W2@ @ @ @ @ @ 4ds6~ . . . . . . . . . . . g$@ @ @ g$. . . . . . @ @ 9d@ @ @ @ @ @ @ Da. . . . . . "};
diff --git a/xpms/weekday.xpm b/xpms/weekday.xpm
new file mode 100644
index 0000000..fc0c069
--- /dev/null
+++ b/xpms/weekday.xpm
@@ -0,0 +1,47 @@
+/* XPM */
+static char * weekday_xpm[] = {
+"20 42 2 1",
+" 	c #FFFFFFFFFFFF",
+".	c #000000000000",
+"                    ",
+" .     .    . .   . ",
+" .     .    . ..  . ",
+" .     .    . . . . ",
+" .     .    . .  .. ",
+" ....   ....  .   . ",
+"                    ",
+" .   .   ..   ..... ",
+" .. ..  .  .  .    .",
+" . . .  .  .  ..... ",
+" .   . ...... .   . ",
+" .   . .    . .    .",
+"                    ",
+" .   .  ..... ..... ",
+" .. ..  .     .    .",
+" . . .  ....  ..... ",
+" .   .  .     .   . ",
+" .   .  ..... .    .",
+"                    ",
+"    ... ..... .    .",
+"     .  .     .    .",
+" .   .  ....  .    .",
+" .   .  .     .    .",
+"  ...   .....  .... ",
+"                    ",
+" .    . ..... .   . ",
+" .   .. .     ..  . ",
+"  .  .  ....  . . . ",
+"  .  .  .     .  .. ",
+"   ..   ..... .   . ",
+"                    ",
+"  ....   ..   .   . ",
+" .      .  .  .. .. ",
+"  ...   .  .  . . . ",
+"     . ...... .   . ",
+" ....  .    . .   . ",
+"                    ",
+" ....  .....  .   . ",
+" .   .   .    .. .. ",
+" .   .   .    . . . ",
+" .   .   .    .   . ",
+" ....  .....  .   . "};

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-wmaker/wmcoincoin.git



More information about the Pkg-wmaker-commits mailing list