[Pkg-wmaker-commits] [wmcoincoin] 06/87: Imported Upstream version 2.5.1e

Doug Torrance dtorrance-guest at moszumanska.debian.org
Fri Aug 28 17:27:26 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 013952d0c1a7c78e6a9a4a826a2776abef84a7e1
Author: Doug Torrance <dtorrance at monmouthcollege.edu>
Date:   Wed Oct 15 20:53:50 2014 -0500

    Imported Upstream version 2.5.1e
---
 ABOUT-NLS                         |   405 +
 AUTHORS                           |    28 +
 COPYING                           |   340 +
 ChangeLog                         |  1327 +++
 INSTALL                           |   229 +
 MACOSX                            |    23 +
 Makefile.am                       |   130 +
 Makefile.in                       |   632 ++
 NEWS                              |    23 +
 README                            |    71 +
 TODO                              |     0
 aclocal.m4                        |  3906 +++++++++
 compile                           |   107 +
 config.guess                      |  1465 ++++
 config.h.in                       |   392 +
 config.rpath                      |   513 ++
 config.sub                        |  1569 ++++
 configure                         | 16445 ++++++++++++++++++++++++++++++++++++
 configure.ac                      |   552 ++
 depcomp                           |   479 ++
 genoptlst.sh                      |    34 +
 install-sh                        |   294 +
 intl/ChangeLog                    |     4 +
 intl/Makefile.in                  |   337 +
 intl/VERSION                      |     1 +
 intl/bindtextdom.c                |   369 +
 intl/config.charset               |   454 +
 intl/dcgettext.c                  |    59 +
 intl/dcigettext.c                 |  1168 +++
 intl/dcngettext.c                 |    61 +
 intl/dgettext.c                   |    59 +
 intl/dngettext.c                  |    61 +
 intl/eval-plural.h                |   106 +
 intl/explodename.c                |   192 +
 intl/finddomain.c                 |   198 +
 intl/gettext.c                    |    64 +
 intl/gettextP.h                   |   205 +
 intl/gmo.h                        |   100 +
 intl/hash-string.h                |    59 +
 intl/intl-compat.c                |   166 +
 intl/l10nflist.c                  |   409 +
 intl/libgnuintl.h                 |   138 +
 intl/loadinfo.h                   |   121 +
 intl/loadmsgcat.c                 |   445 +
 intl/localcharset.c               |   345 +
 intl/locale.alias                 |    78 +
 intl/localealias.c                |   419 +
 intl/localename.c                 |   694 ++
 intl/ngettext.c                   |    68 +
 intl/os2compat.c                  |    98 +
 intl/os2compat.h                  |    46 +
 intl/osdep.c                      |    24 +
 intl/plural-exp.c                 |   156 +
 intl/plural-exp.h                 |   126 +
 intl/plural.c                     |  1322 +++
 intl/plural.y                     |   409 +
 intl/ref-add.sin                  |    31 +
 intl/ref-del.sin                  |    26 +
 intl/textdomain.c                 |   142 +
 m4/ChangeLog                      |    29 +
 m4/Makefile.am                    |     2 +
 m4/Makefile.in                    |   303 +
 m4/codeset.m4                     |    23 +
 m4/gettext.m4                     |   539 ++
 m4/glibc21.m4                     |    32 +
 m4/iconv.m4                       |    96 +
 m4/intdiv0.m4                     |    72 +
 m4/inttypes-pri.m4                |    32 +
 m4/inttypes.m4                    |    27 +
 m4/inttypes_h.m4                  |    28 +
 m4/isc-posix.m4                   |    26 +
 m4/lcmessage.m4                   |    32 +
 m4/lib-ld.m4                      |    97 +
 m4/lib-link.m4                    |   548 ++
 m4/lib-prefix.m4                  |   148 +
 m4/progtest.m4                    |    59 +
 m4/stdint_h.m4                    |    28 +
 m4/uintmax_t.m4                   |    29 +
 m4/ulonglong.m4                   |    23 +
 missing                           |   336 +
 mkinstalldirs                     |   111 +
 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              |   445 +
 platypus/fmalloc.c                |    41 +
 platypus/gif.h                    |   302 +
 platypus/giffunc.c                |   747 ++
 platypus/gifread.c                |   915 ++
 platypus/wmcoincoin_player.c      |   297 +
 po/ChangeLog                      |    27 +
 po/Makefile.in.in                 |   317 +
 po/Makevars                       |    25 +
 po/POTFILES.in                    |    25 +
 po/Rules-quot                     |    42 +
 po/boldquot.sed                   |    10 +
 po/en at boldquot.header             |    25 +
 po/en at quot.header                 |    22 +
 po/fr.gmo                         |   Bin 0 -> 16193 bytes
 po/fr.po                          |  2252 +++++
 po/insert-header.sin              |    23 +
 po/quot.sed                       |     6 +
 po/remove-potcdate.sin            |    19 +
 po/wmcoincoin.pot                 |  1894 +++++
 scripts/Makefile.am               |     2 +
 scripts/Makefile.in               |   325 +
 scripts/wmcoincoin-search-cookies |    44 +
 scripts/wmcoincoin-totoz-get      |   151 +
 scripts/wmpanpan                  |    53 +
 src/Makefile.am                   |   169 +
 src/Makefile.in                   |  1824 ++++
 src/balloon.c                     |   403 +
 src/balltrap.c                    |   463 +
 src/balltrap.h                    |    12 +
 src/base64.c                      |   115 +
 src/base64.h                      |     7 +
 src/board.c                       |  2150 +++++
 src/board_pop3.c                  |   332 +
 src/board_priv.h                  |    31 +
 src/board_rss.c                   |   444 +
 src/board_util.c                  |  1023 +++
 src/board_util.h                  |    26 +
 src/cc_queue.c                    |   286 +
 src/coin_util.c                   |  1330 +++
 src/coin_util.h                   |   117 +
 src/coin_xutil.c                  |   697 ++
 src/coin_xutil.h                  |    42 +
 src/coincoin.h                    |   716 ++
 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                |   241 +
 src/fontcoincoin.h                |    27 +
 src/general.h                     |   265 +
 src/global.h                      |   289 +
 src/http.c                        |  1301 +++
 src/http.h                        |   146 +
 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                |   306 +
 src/palmipede.c                   |  2718 ++++++
 src/picohtml.c                    |   693 ++
 src/picohtml.h                    |    66 +
 src/pinnipede.c                   |  4237 ++++++++++
 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                       |  1746 ++++
 src/prefs.h                       |   398 +
 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             |  3602 ++++++++
 src/wmccc_interface.h             |    20 +
 src/wmccc_save_prefs.c            |   412 +
 src/wmccc_support.c               |   144 +
 src/wmccc_support.h               |    69 +
 src/wmcoincoin.c                  |  2344 +++++
 src/xmlcoincoin.c                 |   175 +
 src/xmlcoincoin.h                 |    22 +
 wmccc.glade                       |  8743 +++++++++++++++++++
 wmcoincoin.spec                   |   126 +
 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 +
 219 files changed, 112839 insertions(+)

diff --git a/ABOUT-NLS b/ABOUT-NLS
new file mode 100644
index 0000000..224f72c
--- /dev/null
+++ b/ABOUT-NLS
@@ -0,0 +1,405 @@
+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 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 at translations should 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.
+
+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'.
+
+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 GNU `gettext' own
+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 be not what is 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 have usually 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.
+
+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.  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 country 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'.
+
+   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.
+
+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://www.iro.umontreal.ca/contrib/po/HTML/', in the "National 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 `translation at iro.umontreal.ca' 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 skill are praised more than
+programming skill, here.
+
+Available Packages
+==================
+
+   Languages are not equally supported in all packages.  The following
+matrix shows the current state of internationalization, as of April
+2002.  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    bg ca cs da de el en eo es et fi fr
+                     +-------------------------------------+
+     a2ps            |          [] []             []    [] |
+     bash            |             []       [] []       [] |
+     bfd             |                         []       [] |
+     binutils        |                         []       [] |
+     bison           |             []          [] []    [] |
+     clisp           |             []    []    []       [] |
+     cpio            |          [] []          []       [] |
+     diffutils       |       [] [] []       [] []       [] |
+     enscript        |             []                   [] |
+     error           |                         []       [] |
+     fetchmail       |    [] () [] []          []       () |
+     fileutils       |          [] []          [] []    [] |
+     findutils       |          [] []          [] []    [] |
+     flex            |    []    [] []          []       [] |
+     gas             |                         []       [] |
+     gawk            |             []          []       [] |
+     gcal            |    []                            [] |
+     gcc             |                         []       [] |
+     gettext         |    []    [] []          []       [] |
+     gnupg           |             [] []    [] [] []    [] |
+     gprof           |                         []       [] |
+     gpsdrive        |          () ()    ()    ()       () |
+     grep            | [] []       [] []       [] []    [] |
+     gretl           |                                     |
+     hello           |          [] [] []    [] [] [] [] [] |
+     id-utils        |          [] []                   [] |
+     indent          |    []       []       []    []    [] |
+     jpilot          |       () [] []                   [] |
+     jwhois          |                         []       [] |
+     kbd             |                         []       [] |
+     ld              |                         []       [] |
+     libc            |    [] [] [] [] []       []       [] |
+     lilypond        |          []                      [] |
+     lynx            |       [] [] []             []       |
+     m4              |       [] [] [] []                [] |
+     make            |          [] []          []       [] |
+     mysecretdiary   |             []                   [] |
+     nano            |    [] () [] []          []       [] |
+     nano_1_0        |    [] () [] []          []       [] |
+     opcodes         |          []             []       [] |
+     parted          |    []    [] []          []       [] |
+     ptx             |          [] []          [] []    [] |
+     python          |                                     |
+     recode          |          [] [] []    [] []       [] |
+     sed             |       [] [] [] []    [] [] []    [] |
+     sh-utils        |    [] [] [] [] []       [] []    [] |
+     sharutils       |       [] [] [] []       []       [] |
+     sketch          |             ()          []       () |
+     soundtracker    |             []          []       [] |
+     sp              |             []                      |
+     tar             |       [] [] []          [] []    [] |
+     texinfo         |       [] [] []       []          [] |
+     textutils       |    []    [] []          []       [] |
+     util-linux      |       [] [] []          [] []    [] |
+     vorbis-tools    |                                     |
+     wastesedge      |                                     |
+     wdiff           |    []    [] []          [] []    [] |
+     wget            | [] [] [] [] [] []       [] []    [] |
+                     +-------------------------------------+
+                       bg ca cs da de el en eo es et fi fr
+                        2 14 11 31 40 10  1  8 41 16  1 50
+     
+                       gl he hr hu id it ja ko lv nb nl nn
+                     +-------------------------------------+
+     a2ps            |                ()    ()       []    |
+     bash            |                                     |
+     bfd             |                   []                |
+     binutils        |                   []                |
+     bison           |                   []          []    |
+     clisp           |                               []    |
+     cpio            | []                   []       []    |
+     diffutils       | [] []       []    []                |
+     enscript        |       []                      []    |
+     error           |          []                         |
+     fetchmail       |                   []                |
+     fileutils       |          []    [] []                |
+     findutils       | []    []    [] [] [] []       []    |
+     flex            |                      []             |
+     gas             |                                     |
+     gawk            |    []                               |
+     gcal            |                                     |
+     gcc             |                                     |
+     gettext         |                   [] []             |
+     gnupg           | []          [] [] []                |
+     gprof           |                                     |
+     gpsdrive        |                ()             ()    |
+     grep            | [] [] []    [] [] []                |
+     gretl           |                                     |
+     hello           | [] [] [] [] [] [] [] [] [] [] [] [] |
+     id-utils        |                               []    |
+     indent          | []                []          []    |
+     jpilot          |                   ()          ()    |
+     jwhois          |             []                      |
+     kbd             |                                     |
+     ld              |                                     |
+     libc            | []                [] []    []       |
+     lilypond        |                   []          []    |
+     lynx            |                [] []          []    |
+     m4              | []          []    []          []    |
+     make            | [] [] []          [] []       []    |
+     mysecretdiary   |                                     |
+     nano            | []          [] [] ()       [] [] [] |
+     nano_1_0        | []          [] [] ()       []    [] |
+     opcodes         |                               []    |
+     parted          | []                []             [] |
+     ptx             | []          []             [] []    |
+     python          |                                     |
+     recode          | [] []          []                   |
+     sed             | [] []       [] [] [] []       []    |
+     sh-utils        | []             [] []       [] []    |
+     sharutils       | []                []          []    |
+     sketch          |                ()                   |
+     soundtracker    | []                                  |
+     sp              |                                     |
+     tar             | []    []       [] []       []       |
+     texinfo         |    [] []          []                |
+     textutils       | []                   []    []       |
+     util-linux      |                () []                |
+     vorbis-tools    |                                     |
+     wastesedge      |                                     |
+     wdiff           | []          []                      |
+     wget            | [] [] [] []       []          []    |
+                     +-------------------------------------+
+                       gl he hr hu id it ja ko lv nb nl nn
+                       23  9  8  4 12 12 25  9  1  8 20  4
+     
+                       no pl pt pt_BR ru sk sl sv tr uk zh_TW
+                     +----------------------------------------+
+     a2ps            | () () ()  []   []    [] [] ()          |  9
+     bash            |                                        |  4
+     bfd             |                         [] []          |  5
+     binutils        |                            []          |  4
+     bison           |                []       [] []          |  9
+     clisp           |                                        |  5
+     cpio            |    []     []   []       []             | 11
+     diffutils       |    []     []   []       [] []     []   | 16
+     enscript        |           []   []       []             |  7
+     error           |                   []       []     []   |  6
+     fetchmail       |    ()     ()               []          |  6
+     fileutils       |                []    [] [] []     []   | 13
+     findutils       |    []     []   [] [] [] [] []          | 19
+     flex            |                []       [] []          |  9
+     gas             |                            []          |  3
+     gawk            |                         [] []          |  6
+     gcal            |                         [] []          |  4
+     gcc             |                            []          |  3
+     gettext         |                [] [] [] [] []     []   | 13
+     gnupg           |    []                   [] []          | 13
+     gprof           |                         [] []          |  4
+     gpsdrive        |                            ()          |  0
+     grep            |    []          []    []    []          | 17
+     gretl           |                                        |  0
+     hello           | [] []          [] []    [] [] []       | 27
+     id-utils        |                []       []             |  6
+     indent          |                [] []    [] []          | 12
+     jpilot          | ()                      () []          |  4
+     jwhois          |                ()       () []     []   |  5
+     kbd             |                         [] []          |  4
+     ld              |                         [] []          |  4
+     libc            | [] []     []      []    [] []          | 17
+     lilypond        |                         []             |  5
+     lynx            |           []   []       []             | 10
+     m4              |    []          []       []             | 12
+     make            |    []     []   []          []          | 14
+     mysecretdiary   |                         [] []          |  4
+     nano            | () []          []       []    []       | 15
+     nano_1_0        | () []          []       []    []       | 14
+     opcodes         |                         [] []          |  6
+     parted          |       []  []            []             | 11
+     ptx             | [] [] []       []       [] []          | 15
+     python          |                                        |  0
+     recode          |    []          []    [] []             | 13
+     sed             |           []   [] [] [] [] []          | 21
+     sh-utils        | [] []     []   [] [] [] [] []     []   | 22
+     sharutils       |                []       [] []     []   | 13
+     sketch          |           []   ()                      |  3
+     soundtracker    |                         []             |  5
+     sp              |                                        |  1
+     tar             | [] []     []      [] [] [] []          | 18
+     texinfo         |                []       []             | 10
+     textutils       |                []    [] [] []     []   | 13
+     util-linux      |           []            [] []          | 10
+     vorbis-tools    |                         []             |  1
+     wastesedge      |                                        |  0
+     wdiff           |                [] []    [] []          | 12
+     wget            |    []          [] [] [] [] [] []  []   | 23
+                     +----------------------------------------+
+       35 teams        no pl pt pt_BR ru sk sl sv tr uk zh_TW
+       58 domains       5 16  2  14   27 11 11 41 36  4   9    536
+
+   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 April 2002 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://www.iro.umontreal.ca/contrib/po/HTML/matrix.html'.
+
+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
+to 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
+`translation at iro.umontreal.ca' to make the `.pot' files available to
+the translation teams.
+
diff --git a/AUTHORS b/AUTHORS
new file mode 100644
index 0000000..e828f59
--- /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..d60c31a
--- /dev/null
+++ b/COPYING
@@ -0,0 +1,340 @@
+		    GNU GENERAL PUBLIC LICENSE
+		       Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+     59 Temple Place, Suite 330, Boston, MA  02111-1307  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..5ba0b7d
--- /dev/null
+++ b/ChangeLog
@@ -0,0 +1,1327 @@
+--------------------------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..88ab0bb
--- /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
+
+CLEANFILES = stamp-h
diff --git a/Makefile.in b/Makefile.in
new file mode 100644
index 0000000..9f4a456
--- /dev/null
+++ b/Makefile.in
@@ -0,0 +1,632 @@
+# Makefile.in generated by automake 1.7.9 from Makefile.am.
+# @configure_input@
+
+# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
+# 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@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = .
+
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+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 = :
+host_triplet = @host@
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+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@
+GLIBC2 = @GLIBC2@
+GLIBC21 = @GLIBC21@
+GMSGFMT = @GMSGFMT@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+HAVE_ASPRINTF = @HAVE_ASPRINTF@
+HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@
+HAVE_SNPRINTF = @HAVE_SNPRINTF@
+HAVE_WPRINTF = @HAVE_WPRINTF@
+IMLIB2_CONFIG_IN_PATH = @IMLIB2_CONFIG_IN_PATH@
+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@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+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@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+WMCCC = @WMCCC@
+WMCOINCOIN_PLAYER = @WMCOINCOIN_PLAYER@
+XFT_CFLAGS = @XFT_CFLAGS@
+XFT_LIBS = @XFT_LIBS@
+XGETTEXT = @XGETTEXT@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+ac_pt_PKG_CONFIG = @ac_pt_PKG_CONFIG@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+oldincludedir = @oldincludedir@
+
+# pour faire plaisir � woof :�)
+prefix = $(DESTDIR)@prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+
+#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
+
+
+CLEANFILES = stamp-h
+subdir = .
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = config.h
+CONFIG_CLEAN_FILES = intl/Makefile
+DIST_SOURCES =
+DATA = $(pkgdata_DATA)
+
+
+RECURSIVE_TARGETS = info-recursive dvi-recursive pdf-recursive \
+	ps-recursive install-info-recursive uninstall-info-recursive \
+	all-recursive install-data-recursive install-exec-recursive \
+	installdirs-recursive install-recursive uninstall-recursive \
+	check-recursive installcheck-recursive
+DIST_COMMON = README $(srcdir)/Makefile.in $(srcdir)/configure \
+	ABOUT-NLS AUTHORS COPYING ChangeLog INSTALL Makefile.am NEWS \
+	TODO aclocal.m4 compile config.guess config.h.in config.rpath \
+	config.sub configure configure.ac depcomp install-sh missing \
+	mkinstalldirs
+DIST_SUBDIRS = $(SUBDIRS)
+all: config.h
+	$(MAKE) $(AM_MAKEFLAGS) all-recursive
+
+.SUFFIXES:
+
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno
+$(srcdir)/Makefile.in:  Makefile.am  $(top_srcdir)/configure.ac $(ACLOCAL_M4)
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  Makefile
+Makefile:  $(srcdir)/Makefile.in  $(top_builddir)/config.status
+	cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)
+
+$(top_builddir)/config.status: $(srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+	$(SHELL) ./config.status --recheck
+$(srcdir)/configure:  $(srcdir)/configure.ac $(ACLOCAL_M4) $(CONFIGURE_DEPENDENCIES)
+	cd $(srcdir) && $(AUTOCONF)
+
+$(ACLOCAL_M4):  configure.ac m4/codeset.m4 m4/gettext.m4 m4/glibc21.m4 m4/iconv.m4 m4/intdiv0.m4 m4/inttypes-pri.m4 m4/inttypes.m4 m4/inttypes_h.m4 m4/isc-posix.m4 m4/lcmessage.m4 m4/lib-ld.m4 m4/lib-link.m4 m4/lib-prefix.m4 m4/progtest.m4 m4/stdint_h.m4 m4/uintmax_t.m4 m4/ulonglong.m4
+	cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+
+config.h: stamp-h1
+	@if test ! -f $@; then \
+	  rm -f stamp-h1; \
+	  $(MAKE) 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:  $(top_srcdir)/configure.ac $(ACLOCAL_M4) 
+	cd $(top_srcdir) && $(AUTOHEADER)
+	touch $(srcdir)/config.h.in
+
+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 $@
+uninstall-info-am:
+pkgdataDATA_INSTALL = $(INSTALL_DATA)
+install-pkgdataDATA: $(pkgdata_DATA)
+	@$(NORMAL_INSTALL)
+	$(mkinstalldirs) $(DESTDIR)$(pkgdatadir)
+	@list='$(pkgdata_DATA)'; for p in $$list; do \
+	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+	  f="`echo $$p | sed -e 's|^.*/||'`"; \
+	  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="`echo $$p | sed -e 's|^.*/||'`"; \
+	  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):
+	@set fnord $$MAKEFLAGS; amf=$$2; \
+	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) \
+	   || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+	done; \
+	if test "$$dot_seen" = "no"; then \
+	  $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
+	fi; test -z "$$fail"
+
+mostlyclean-recursive clean-recursive distclean-recursive \
+maintainer-clean-recursive:
+	@set fnord $$MAKEFLAGS; amf=$$2; \
+	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) \
+	   || case "$$amf" in *=*) exit 1;; *k*) fail=yes;; *) exit 1;; esac; \
+	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
+
+ETAGS = etags
+ETAGSFLAGS =
+
+CTAGS = ctags
+CTAGSFLAGS =
+
+tags: TAGS
+
+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; } \
+	       END { for (i in files) print i; }'`; \
+	mkid -fID $$unique
+
+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; \
+	else \
+	  include_option=--include; \
+	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; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(ETAGS_ARGS)$$tags$$unique" \
+	  || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	     $$tags $$unique
+
+ctags: CTAGS
+CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
+		$(TAGS_FILES) $(LISP)
+	tags=; \
+	here=`pwd`; \
+	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; } \
+	       END { 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
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+
+top_distdir = .
+distdir = $(PACKAGE)-$(VERSION)
+
+am__remove_distdir = \
+  { test ! -d $(distdir) \
+    || { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
+         && rm -fr $(distdir); }; }
+
+GZIP_ENV = --best
+distuninstallcheck_listfiles = find . -type f -print
+distcleancheck_listfiles = find . -type f -print
+
+distdir: $(DISTFILES)
+	$(am__remove_distdir)
+	mkdir $(distdir)
+	$(mkinstalldirs) $(distdir)/intl $(distdir)/pixmaps $(distdir)/po $(distdir)/xpms
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+	list='$(DISTFILES)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkinstalldirs) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    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='$(SUBDIRS)'; for subdir in $$list; do \
+	  if test "$$subdir" = .; then :; else \
+	    test -d $(distdir)/$$subdir \
+	    || mkdir $(distdir)/$$subdir \
+	    || exit 1; \
+	    (cd $$subdir && \
+	      $(MAKE) $(AM_MAKEFLAGS) \
+	        top_distdir="$(top_distdir)" \
+	        distdir=../$(distdir)/$$subdir \
+	        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 $(SHELL) $(install_sh) -c -m a+r {} {} \; \
+	|| chmod -R a+r $(distdir)
+dist-gzip: distdir
+	$(AMTAR) chof - $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
+	$(am__remove_distdir)
+
+dist dist-all: distdir
+	$(AMTAR) chof - $(distdir) | 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
+	$(am__remove_distdir)
+	GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(AMTAR) xf -
+	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 ../.. && $(mkinstalldirs) "$$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-gzip \
+	  && rm -f $(distdir).tar.gz \
+	  && $(MAKE) $(AM_MAKEFLAGS) distcleancheck
+	$(am__remove_distdir)
+	@echo "$(distdir).tar.gz is ready for distribution" | \
+	  sed 'h;s/./=/g;p;x;p;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:
+	$(mkinstalldirs) $(DESTDIR)$(pkgdatadir)
+
+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:
+	-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:
+
+info: info-recursive
+
+info-am:
+
+install-data-am: install-pkgdataDATA
+
+install-exec-am:
+
+install-info: install-info-recursive
+
+install-man:
+
+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-info-am uninstall-pkgdataDATA
+
+uninstall-info: uninstall-info-recursive
+
+.PHONY: $(RECURSIVE_TARGETS) CTAGS GTAGS all all-am check check-am clean \
+	clean-generic clean-recursive ctags ctags-recursive dist \
+	dist-all dist-gzip distcheck distclean distclean-generic \
+	distclean-hdr distclean-recursive distclean-tags distcleancheck \
+	distdir distuninstallcheck dvi dvi-am dvi-recursive info \
+	info-am info-recursive install install-am install-data \
+	install-data-am install-data-recursive install-exec \
+	install-exec-am install-exec-recursive install-info \
+	install-info-am install-info-recursive install-man \
+	install-pkgdataDATA install-recursive install-strip \
+	installcheck installcheck-am installdirs installdirs-am \
+	installdirs-recursive maintainer-clean maintainer-clean-generic \
+	maintainer-clean-recursive mostlyclean mostlyclean-generic \
+	mostlyclean-recursive pdf pdf-am pdf-recursive ps ps-am \
+	ps-recursive tags tags-recursive uninstall uninstall-am \
+	uninstall-info-am uninstall-info-recursive \
+	uninstall-pkgdataDATA uninstall-recursive
+
+
+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..32f2b59
--- /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..fe46783
--- /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..e5da132
--- /dev/null
+++ b/aclocal.m4
@@ -0,0 +1,3906 @@
+# generated automatically by aclocal 1.7.9 -*- Autoconf -*-
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002
+# 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.
+
+# Do all the work for Automake.                            -*- Autoconf -*-
+
+# 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.
+
+# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 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 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.
+
+# serial 10
+
+AC_PREREQ([2.54])
+
+# Autoconf 2.50 wants to disallow AM_ names.  We explicitly allow
+# the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+
+# 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_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+ AC_REQUIRE([AC_PROG_INSTALL])dnl
+# test to see if srcdir already configured
+if test "`cd $srcdir && pwd`" != "`pwd`" &&
+   test -f $srcdir/config.status; then
+  AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+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
+ 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_MISSING_PROG(AMTAR, tar)
+AM_PROG_INSTALL_SH
+AM_PROG_INSTALL_STRIP
+# 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([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
+])
+])
+
+
+# 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_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $1 | $1:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $1" >`AS_DIRNAME([$1])`/stamp-h[]$_am_stamp_count])
+
+# Copyright 2002  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
+
+# 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.
+AC_DEFUN([AM_AUTOMAKE_VERSION],[am__api_version="1.7"])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION so it can be traced.
+# This function is AC_REQUIREd by AC_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+	 [AM_AUTOMAKE_VERSION([1.7.9])])
+
+# Helper functions for option handling.                    -*- Autoconf -*-
+
+# Copyright 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 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.
+
+# serial 2
+
+# _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.
+#
+
+# Copyright 1996, 1997, 2000, 2001 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.
+
+# serial 3
+
+# 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)])
+
+#  -*- Autoconf -*-
+
+
+# Copyright 1997, 1999, 2000, 2001 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.
+
+# serial 3
+
+# 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
+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
+])
+
+# AM_AUX_DIR_EXPAND
+
+# Copyright 2001 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.
+
+# 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.
+
+# Rely on autoconf to set up CDPATH properly.
+AC_PREREQ([2.50])
+
+AC_DEFUN([AM_AUX_DIR_EXPAND], [
+# expand $ac_aux_dir to an absolute path
+am_aux_dir=`cd $ac_aux_dir && pwd`
+])
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+
+# Copyright 2001 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.
+
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+install_sh=${install_sh-"$am_aux_dir/install-sh"}
+AC_SUBST(install_sh)])
+
+# AM_PROG_INSTALL_STRIP
+
+# Copyright 2001 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.
+
+# 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="\${SHELL} \$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+#                                                          -*- Autoconf -*-
+# 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 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.
+
+# serial 1
+
+# 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])])
+
+# serial 5						-*- Autoconf -*-
+
+# Copyright (C) 1999, 2000, 2001, 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 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.
+
+
+# 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], 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
+      : > 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/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
+      # (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored.
+      if grep 'ignoring option' 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 builds
+  --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])
+])
+
+# Generate code to set up dependency tracking.   -*- Autoconf -*-
+
+# Copyright 1999, 2000, 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 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.
+
+#serial 2
+
+# _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.
+  # So let's grep whole file.
+  if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
+    dirpart=`AS_DIRNAME("$mf")`
+  else
+    continue
+  fi
+  grep '^DEP_FILES *= *[[^ @%:@]]' < "$mf" > /dev/null || continue
+  # Extract the definition of DEP_FILES from the Makefile without
+  # running `make'.
+  DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"`
+  test -z "$DEPDIR" && continue
+  # When using ansi2knr, U may be empty or an underscore; expand it
+  U=`sed -n -e '/^U = / s///p' < "$mf"`
+  test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR"
+  # 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 -e '
+    /^DEP_FILES = .*\\\\$/ {
+      s/^DEP_FILES = //
+      :loop
+	s/\\\\$//
+	p
+	n
+	/\\\\$/ b loop
+      p
+    }
+    /^DEP_FILES = / s/^DEP_FILES = //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"])
+])
+
+# Check to see how 'make' treats includes.	-*- Autoconf -*-
+
+# Copyright (C) 2001, 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 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.
+
+# serial 2
+
+# 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
+])
+
+# AM_CONDITIONAL                                              -*- Autoconf -*-
+
+# Copyright 1997, 2000, 2001 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.
+
+# serial 5
+
+AC_PREREQ(2.52)
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[ifelse([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
+        [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])
+AC_SUBST([$1_FALSE])
+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])])
+
+# Like AC_CONFIG_HEADER, but automatically create stamp file. -*- Autoconf -*-
+
+# Copyright 1996, 1997, 2000, 2001 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.
+
+AC_PREREQ([2.52])
+
+# serial 6
+
+# AM_CONFIG_HEADER is obsolete.  It has been replaced by AC_CONFIG_HEADERS.
+AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)])
+
+# gettext.m4 serial 14 (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.
+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-2002.
+
+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.
+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], ,
+    [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT
+])])])
+  define(gt_included_intl, ifelse([$1], [external], [no], [yes]))
+  define(gt_libtool_suffix_prefix, ifelse([$1], [use-libtool], [l], []))
+
+  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])
+
+  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)
+
+  ifelse(gt_included_intl, yes, [
+    BUILD_INCLUDED_LIBINTL=no
+    USE_INCLUDED_LIBINTL=no
+  ])
+  LIBINTL=
+  LTLIBINTL=
+  POSUB=
+
+  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.
+
+        dnl Add a version number to the cache macros.
+        define([gt_api_version], ifelse([$2], [need-ngettext], 2, 1))
+        define([gt_cv_func_gnugettext_libc], [gt_cv_func_gnugettext]gt_api_version[_libc])
+        define([gt_cv_func_gnugettext_libintl], [gt_cv_func_gnugettext]gt_api_version[_libintl])
+
+        AC_CACHE_CHECK([for GNU gettext in libc], gt_cv_func_gnugettext_libc,
+         [AC_TRY_LINK([#include <libintl.h>
+extern int _nl_msg_cat_cntr;
+extern int *_nl_domain_bindings;],
+            [bindtextdomain ("", "");
+return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_domain_bindings],
+            gt_cv_func_gnugettext_libc=yes,
+            gt_cv_func_gnugettext_libc=no)])
+
+        if test "$gt_cv_func_gnugettext_libc" != "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_cv_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>
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias ();],
+              [bindtextdomain ("", "");
+return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias (0)],
+              gt_cv_func_gnugettext_libintl=yes,
+              gt_cv_func_gnugettext_libintl=no)
+            dnl Now see whether libintl exists and depends on libiconv.
+            if test "$gt_cv_func_gnugettext_libintl" != yes && test -n "$LIBICONV"; then
+              LIBS="$LIBS $LIBICONV"
+              AC_TRY_LINK([#include <libintl.h>
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias ();],
+                [bindtextdomain ("", "");
+return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias (0)],
+               [LIBINTL="$LIBINTL $LIBICONV"
+                LTLIBINTL="$LTLIBINTL $LTLIBICONV"
+                gt_cv_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 test "$gt_cv_func_gnugettext_libc" = "yes" \
+           || { test "$gt_cv_func_gnugettext_libintl" = "yes" \
+                && test "$PACKAGE" != gettext; }; 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.
+        INTLOBJS="\$(GETTOBJS)"
+        BUILD_INCLUDED_LIBINTL=yes
+        USE_INCLUDED_LIBINTL=yes
+        LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV"
+        LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV"
+        LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
+      fi
+
+      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 "$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
+
+  if test "$USE_NLS" = "yes"; then
+
+    if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+      if test "$gt_cv_func_gnugettext_libintl" = "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; 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)
+    AC_SUBST(INTLOBJS)
+
+    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 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 Checks for all prerequisites of the po subdirectory,
+dnl except for USE_NLS.
+AC_DEFUN([AM_PO_SUBDIRS],
+[
+  AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+  AC_REQUIRE([AC_PROG_INSTALL])dnl
+  AC_REQUIRE([AM_MKINSTALLDIRS])dnl
+
+  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 >/dev/null 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 Search for GNU xgettext 0.11 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= /dev/null >/dev/null 2>&1 &&
+     (if $ac_dir/$ac_word --omit-header --copyright-holder= /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 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 >/dev/null 2>&1], :)
+
+  dnl This could go away some day; the PATH_PROG_WITH_TEST already does it.
+  dnl Test whether we really found GNU msgfmt.
+  if test "$GMSGFMT" != ":"; then
+    dnl If it is no GNU msgfmt we define it as : so that the
+    dnl Makefiles still can work.
+    if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 &&
+       (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+      : ;
+    else
+      GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'`
+      AC_MSG_RESULT(
+        [found $GMSGFMT program is not GNU msgfmt; ignore it])
+      GMSGFMT=":"
+    fi
+  fi
+
+  dnl This could go away some day; the PATH_PROG_WITH_TEST already does it.
+  dnl Test whether we really found GNU xgettext.
+  if test "$XGETTEXT" != ":"; then
+    dnl If it is no GNU xgettext we define it as : so that the
+    dnl Makefiles still can work.
+    if $XGETTEXT --omit-header --copyright-holder= /dev/null >/dev/null 2>&1 &&
+       (if $XGETTEXT --omit-header --copyright-holder= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+      : ;
+    else
+      AC_MSG_RESULT(
+        [found xgettext program is not GNU xgettext; ignore it])
+      XGETTEXT=":"
+    fi
+    dnl Remove leftover from FreeBSD xgettext call.
+    rm -f messages.po
+  fi
+
+  AC_OUTPUT_COMMANDS([
+    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
+        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"
+          # ALL_LINGUAS, POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES 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 "$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" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+            # Hide the ALL_LINGUAS assigment from automake.
+            eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+          fi
+          case "$ac_given_srcdir" in
+            .) srcdirpre= ;;
+            *) srcdirpre='$(srcdir)/' ;;
+          esac
+          POFILES=
+          GMOFILES=
+          UPDATEPOFILES=
+          DUMMYPOFILES=
+          for lang in $ALL_LINGUAS; do
+            POFILES="$POFILES $srcdirpre$lang.po"
+            GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+            UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+            DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+          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|@GMOFILES@|$GMOFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@CATALOGS@|$CATALOGS|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, GMOFILES, UPDATEPOFILES, DUMMYPOFILES, CATALOGS. But hide it
+    # from automake.
+    eval 'ALL_LINGUAS''="$ALL_LINGUAS"'
+    # Capture the value of LINGUAS because we need it to compute CATALOGS.
+    LINGUAS="${LINGUAS-%UNSET%}"
+   ])
+])
+
+
+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_MKINSTALLDIRS])dnl
+  AC_REQUIRE([AC_PROG_CC])dnl
+  AC_REQUIRE([AC_CANONICAL_HOST])dnl
+  AC_REQUIRE([AC_PROG_RANLIB])dnl
+  AC_REQUIRE([AC_ISC_POSIX])dnl
+  AC_REQUIRE([AC_HEADER_STDC])dnl
+  AC_REQUIRE([AC_C_CONST])dnl
+  AC_REQUIRE([AC_C_INLINE])dnl
+  AC_REQUIRE([AC_TYPE_OFF_T])dnl
+  AC_REQUIRE([AC_TYPE_SIZE_T])dnl
+  AC_REQUIRE([AC_FUNC_ALLOCA])dnl
+  AC_REQUIRE([AC_FUNC_MMAP])dnl
+  AC_REQUIRE([jm_GLIBC21])dnl
+
+  AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h stddef.h \
+stdlib.h string.h unistd.h sys/param.h])
+  AC_CHECK_FUNCS([feof_unlocked fgets_unlocked getc_unlocked getcwd getegid \
+geteuid getgid getuid mempcpy munmap putenv setenv setlocale stpcpy \
+strcasecmp strdup strtoul tsearch __argz_count __argz_stringify __argz_next])
+
+  AM_ICONV
+  AM_LANGINFO_CODESET
+  AM_LC_MESSAGES
+
+  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
+])
+
+
+AC_DEFUN([AM_MKINSTALLDIRS],
+[
+  dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly
+  dnl find the mkinstalldirs script in another subdir but $(top_srcdir).
+  dnl Try to locate is.
+  MKINSTALLDIRS=
+  if test -n "$ac_aux_dir"; then
+    MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs"
+  fi
+  if test -z "$MKINSTALLDIRS"; then
+    MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
+  fi
+  AC_SUBST(MKINSTALLDIRS)
+])
+
+# lib-prefix.m4 serial 1 (gettext-0.11)
+dnl Copyright (C) 2001-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 Bruno Haible.
+
+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_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_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/lib"
+      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*) 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/lib"; 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/lib"; 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"
+])
+
+# lib-link.m4 serial 2 (gettext-0.11.2)
+dnl Copyright (C) 2001-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 Bruno Haible.
+
+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.
+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"
+  ])
+  LIB[]NAME="$ac_cv_lib[]Name[]_libs"
+  LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs"
+  INC[]NAME="$ac_cv_lib[]Name[]_cppflags"
+  AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
+  AC_SUBST([LIB]NAME)
+  AC_SUBST([LTLIB]NAME)
+  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.
+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=
+  fi
+  AC_SUBST([HAVE_LIB]NAME)
+  AC_SUBST([LIB]NAME)
+  AC_SUBST([LTLIB]NAME)
+  undefine([Name])
+  undefine([NAME])
+])
+
+dnl Determine the platform dependent parameters needed to use rpath:
+dnl libext, shlibext, hardcode_libdir_flag_spec, hardcode_libdir_separator,
+dnl hardcode_direct, hardcode_minus_L,
+dnl sys_lib_search_path_spec, sys_lib_dlsearch_path_spec.
+AC_DEFUN([AC_LIB_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"
+  libext="$acl_cv_libext"
+  shlibext="$acl_cv_shlibext"
+  hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
+  hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
+  hardcode_direct="$acl_cv_hardcode_direct"
+  hardcode_minus_L="$acl_cv_hardcode_minus_L"
+  sys_lib_search_path_spec="$acl_cv_sys_lib_search_path_spec"
+  sys_lib_dlsearch_path_spec="$acl_cv_sys_lib_dlsearch_path_spec"
+])
+
+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.
+AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
+[
+  define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+                               [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+  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_ARG_WITH([lib$1-prefix],
+[  --with-lib$1-prefix[=DIR]  search for lib$1 in DIR/include and DIR/lib
+  --without-lib$1-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/lib"
+      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=
+  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=
+          if test $use_additional = yes; then
+            if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then
+              found_dir="$additional_libdir"
+              found_so="$additional_libdir/lib$name.$shlibext"
+              if test -f "$additional_libdir/lib$name.la"; then
+                found_la="$additional_libdir/lib$name.la"
+              fi
+            else
+              if test -f "$additional_libdir/lib$name.$libext"; then
+                found_dir="$additional_libdir"
+                found_a="$additional_libdir/lib$name.$libext"
+                if test -f "$additional_libdir/lib$name.la"; then
+                  found_la="$additional_libdir/lib$name.la"
+                fi
+              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//'`
+                  if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then
+                    found_dir="$dir"
+                    found_so="$dir/lib$name.$shlibext"
+                    if test -f "$dir/lib$name.la"; then
+                      found_la="$dir/lib$name.la"
+                    fi
+                  else
+                    if test -f "$dir/lib$name.$libext"; then
+                      found_dir="$dir"
+                      found_a="$dir/lib$name.$libext"
+                      if test -f "$dir/lib$name.la"; then
+                        found_la="$dir/lib$name.la"
+                      fi
+                    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 "X$found_dir" = "X/usr/lib"; 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 "$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 "$hardcode_libdir_flag_spec" && test "$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 "$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 $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
+              */lib | */lib/)
+                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'`
+                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*) 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/lib"; then
+                      haveit=
+                      if test "X$additional_libdir" = "X/usr/local/lib"; then
+                        if test -n "$GCC"; then
+                          case $host_os in
+                            linux*) 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//'`
+                    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
+                    ;;
+                  -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 "$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:+$hardcode_libdir_separator}$found_dir"
+      done
+      dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl.
+      acl_save_libdir="$libdir"
+      libdir="$alldirs"
+      eval flag=\"$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=\"$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
+])
+
+# lib-ld.m4 serial 1 (gettext-0.11)
+dnl Copyright (C) 1996-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 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.
+if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
+  acl_cv_prog_gnu_ld=yes
+else
+  acl_cv_prog_gnu_ld=no
+fi])
+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
+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.
+      if "$acl_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
+	test "$with_gnu_ld" != no && break
+      else
+	test "$with_gnu_ld" != yes && break
+      fi
+    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
+])
+
+# iconv.m4 serial AM3 (gettext-0.11)
+dnl Copyright (C) 2000-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 Bruno Haible.
+
+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).
+
+  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])
+
+  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_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.])
+  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],
+[
+  AC_REQUIRE([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
+])
+
+# progtest.m4 serial 2 (gettext-0.10.40)
+dnl Copyright (C) 1996-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
+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.
+
+# 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],
+[# 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.
+  ;;
+  *)
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in ifelse([$5], , $PATH, [$5]); do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      if [$3]; then
+	ac_cv_path_$1="$ac_dir/$ac_word"
+	break
+      fi
+    fi
+  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
+])
+
+# 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"])
+  ]
+)
+
+# glibc21.m4 serial 2 (fileutils-4.1.3, gettext-0.10.40)
+dnl Copyright (C) 2000-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.
+
+# Test for the GNU C Library, version 2.1 or newer.
+# From Bruno Haible.
+
+AC_DEFUN([jm_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"
+  ]
+)
+
+# codeset.m4 serial AM1 (gettext-0.10.40)
+dnl Copyright (C) 2000-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 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);],
+      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
+])
+
+# lcmessage.m4 serial 2 (gettext-0.10.40)
+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.
+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([AM_LC_MESSAGES],
+  [if test $ac_cv_header_locale_h = yes; then
+    AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES,
+      [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
+       am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)])
+    if test $am_cv_val_LC_MESSAGES = yes; then
+      AC_DEFINE(HAVE_LC_MESSAGES, 1,
+        [Define if your <locale.h> file defines LC_MESSAGES.])
+    fi
+  fi])
+
+# gettext.m4 serial 37 (gettext-0.14.4)
+dnl Copyright (C) 1995-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-2000.
+dnl   Bruno Haible <haible at clisp.cons.org>, 2000-2003.
+
+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], [no], [yes]))
+  define([gt_libtool_suffix_prefix], ifelse([$1], [use-libtool], [l], []))
+
+  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 test "$gt_cv_func_gnugettext_libc" != "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.
+  AM_NLS
+
+  ifelse(gt_included_intl, yes, [
+    BUILD_INCLUDED_LIBINTL=no
+    USE_INCLUDED_LIBINTL=no
+  ])
+  LIBINTL=
+  LTLIBINTL=
+  POSUB=
+
+  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.
+
+        dnl Add a version number to the cache macros.
+        define([gt_api_version], ifelse([$2], [need-formatstring-macros], 3, ifelse([$2], [need-ngettext], 2, 1)))
+        define([gt_cv_func_gnugettext_libc], [gt_cv_func_gnugettext]gt_api_version[_libc])
+        define([gt_cv_func_gnugettext_libintl], [gt_cv_func_gnugettext]gt_api_version[_libintl])
+
+        AC_CACHE_CHECK([for GNU gettext in libc], gt_cv_func_gnugettext_libc,
+         [AC_TRY_LINK([#include <libintl.h>
+]ifelse([$2], [need-formatstring-macros],
+[#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
+], [])[extern int _nl_msg_cat_cntr;
+extern int *_nl_domain_bindings;],
+            [bindtextdomain ("", "");
+return * gettext ("")]ifelse([$2], [need-ngettext], [ + * ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_domain_bindings],
+            gt_cv_func_gnugettext_libc=yes,
+            gt_cv_func_gnugettext_libc=no)])
+
+        if test "$gt_cv_func_gnugettext_libc" != "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_cv_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>
+]ifelse([$2], [need-formatstring-macros],
+[#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
+], [])[extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);],
+              [bindtextdomain ("", "");
+return * gettext ("")]ifelse([$2], [need-ngettext], [ + * ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias ("")],
+              gt_cv_func_gnugettext_libintl=yes,
+              gt_cv_func_gnugettext_libintl=no)
+            dnl Now see whether libintl exists and depends on libiconv.
+            if test "$gt_cv_func_gnugettext_libintl" != yes && test -n "$LIBICONV"; then
+              LIBS="$LIBS $LIBICONV"
+              AC_TRY_LINK([#include <libintl.h>
+]ifelse([$2], [need-formatstring-macros],
+[#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
+], [])[extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);],
+                [bindtextdomain ("", "");
+return * gettext ("")]ifelse([$2], [need-ngettext], [ + * ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias ("")],
+               [LIBINTL="$LIBINTL $LIBICONV"
+                LTLIBINTL="$LTLIBINTL $LTLIBICONV"
+                gt_cv_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 test "$gt_cv_func_gnugettext_libc" = "yes" \
+           || { test "$gt_cv_func_gnugettext_libintl" = "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"
+        LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV"
+        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 test "$gt_cv_func_gnugettext_libintl" = "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 test "$gt_cv_func_gnugettext_libintl" = "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 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_MKINSTALLDIRS])dnl
+  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([AC_ISC_POSIX])dnl
+  AC_REQUIRE([AC_HEADER_STDC])dnl
+  AC_REQUIRE([AC_C_CONST])dnl
+  AC_REQUIRE([bh_C_SIGNED])dnl
+  AC_REQUIRE([AC_C_INLINE])dnl
+  AC_REQUIRE([AC_TYPE_OFF_T])dnl
+  AC_REQUIRE([AC_TYPE_SIZE_T])dnl
+  AC_REQUIRE([gl_AC_TYPE_LONG_LONG])dnl
+  AC_REQUIRE([gt_TYPE_LONGDOUBLE])dnl
+  AC_REQUIRE([gt_TYPE_WCHAR_T])dnl
+  AC_REQUIRE([gt_TYPE_WINT_T])dnl
+  AC_REQUIRE([gl_AC_HEADER_INTTYPES_H])
+  AC_REQUIRE([gl_AC_HEADER_STDINT_H])
+  AC_REQUIRE([gt_TYPE_INTMAX_T])
+  AC_REQUIRE([gt_PRINTF_POSIX])
+  AC_REQUIRE([AC_FUNC_ALLOCA])dnl
+  AC_REQUIRE([AC_FUNC_MMAP])dnl
+  AC_REQUIRE([gl_GLIBC21])dnl
+  AC_REQUIRE([gt_INTDIV0])dnl
+  AC_REQUIRE([gl_AC_TYPE_UINTMAX_T])dnl
+  AC_REQUIRE([gt_HEADER_INTTYPES_H])dnl
+  AC_REQUIRE([gt_INTTYPES_PRI])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([argz.h limits.h locale.h nl_types.h malloc.h stddef.h \
+stdlib.h string.h unistd.h sys/param.h])
+  AC_CHECK_FUNCS([asprintf fwprintf getcwd getegid geteuid getgid getuid \
+mempcpy munmap putenv setenv setlocale snprintf stpcpy strcasecmp strdup \
+strtoul tsearch wcslen __argz_count __argz_stringify __argz_next \
+__fsetlocking])
+
+  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(feof_unlocked, [#include <stdio.h>])
+  gt_CHECK_DECL(fgets_unlocked, [#include <stdio.h>])
+  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_ICONV
+  AM_LANGINFO_CODESET
+  if test $ac_cv_header_locale_h = yes; then
+    gt_LC_MESSAGES
+  fi
+
+  if test -n "$INTL_MACOSX_LIBS"; then
+    CPPFLAGS="$CPPFLAGS -I/System/Library/Frameworks/CoreFoundation.framework/Headers"
+  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 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_CPPFLAGS="$CPPFLAGS"
+     CPPFLAGS="$CPPFLAGS -I/System/Library/Frameworks/CoreFoundation.framework/Headers"
+     gt_save_LIBS="$LIBS"
+     LIBS="$LIBS -framework CoreFoundation"
+     AC_TRY_LINK([#include <CFPreferences.h>],
+       [CFPreferencesCopyAppValue(NULL, NULL)],
+       [gt_cv_func_CFPreferencesCopyAppValue=yes],
+       [gt_cv_func_CFPreferencesCopyAppValue=no])
+     CPPFLAGS="$gt_save_CPPFLAGS"
+     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_CPPFLAGS="$CPPFLAGS"
+     CPPFLAGS="$CPPFLAGS -I/System/Library/Frameworks/CoreFoundation.framework/Headers"
+     gt_save_LIBS="$LIBS"
+     LIBS="$LIBS -framework CoreFoundation"
+     AC_TRY_LINK([#include <CFLocale.h>], [CFLocaleCopyCurrent();],
+       [gt_cv_func_CFLocaleCopyCurrent=yes],
+       [gt_cv_func_CFLocaleCopyCurrent=no])
+     CPPFLAGS="$gt_save_CPPFLAGS"
+     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])
+])
+
+
+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.])
+])
+
+
+dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version])
+AC_DEFUN([AM_GNU_GETTEXT_VERSION], [])
+
+# iconv.m4 serial AM4 (gettext-0.11.3)
+dnl Copyright (C) 2000-2002 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).
+
+  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_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.])
+  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
+])
+
+# nls.m4 serial 2 (gettext-0.14.3)
+dnl Copyright (C) 1995-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>, 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)
+])
+
+AC_DEFUN([AM_MKINSTALLDIRS],
+[
+  dnl Tell automake >= 1.10 to complain if mkinstalldirs is missing.
+  m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([mkinstalldirs])])
+  dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly
+  dnl find the mkinstalldirs script in another subdir but $(top_srcdir).
+  dnl Try to locate it.
+  MKINSTALLDIRS=
+  if test -n "$ac_aux_dir"; then
+    case "$ac_aux_dir" in
+      /*) MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" ;;
+      *) MKINSTALLDIRS="\$(top_builddir)/$ac_aux_dir/mkinstalldirs" ;;
+    esac
+  fi
+  if test -z "$MKINSTALLDIRS"; then
+    MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
+  fi
+  AC_SUBST(MKINSTALLDIRS)
+])
+
+# 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"
+  ]
+)
+
+# signed.m4 serial 1 (gettext-0.10.40)
+dnl Copyright (C) 2001-2002 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([bh_C_SIGNED],
+[
+  AC_CACHE_CHECK([for signed], bh_cv_c_signed,
+   [AC_TRY_COMPILE(, [signed char x;], bh_cv_c_signed=yes, bh_cv_c_signed=no)])
+  if test $bh_cv_c_signed = no; then
+    AC_DEFINE(signed, ,
+              [Define to empty if the C compiler doesn't support this keyword.])
+  fi
+])
+
+# longlong.m4 serial 5
+dnl Copyright (C) 1999-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.
+
+dnl From Paul Eggert.
+
+# Define HAVE_LONG_LONG if 'long long' works.
+
+AC_DEFUN([gl_AC_TYPE_LONG_LONG],
+[
+  AC_CACHE_CHECK([for long long], ac_cv_type_long_long,
+  [AC_TRY_LINK([long long ll = 1LL; int i = 63;],
+    [long long llmax = (long long) -1;
+     return ll << i | ll >> i | llmax / ll | llmax % ll;],
+    ac_cv_type_long_long=yes,
+    ac_cv_type_long_long=no)])
+  if test $ac_cv_type_long_long = yes; then
+    AC_DEFINE(HAVE_LONG_LONG, 1,
+      [Define if you have the 'long long' type.])
+  fi
+])
+
+# longdouble.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 the compiler supports the 'long double' type.
+dnl Prerequisite: AC_PROG_CC
+
+AC_DEFUN([gt_TYPE_LONGDOUBLE],
+[
+  AC_CACHE_CHECK([for long double], gt_cv_c_long_double,
+    [if test "$GCC" = yes; then
+       gt_cv_c_long_double=yes
+     else
+       AC_TRY_COMPILE([
+         /* The Stardent Vistra knows sizeof(long double), but does not support it.  */
+         long double foo = 0.0;
+         /* On Ultrix 4.3 cc, long double is 4 and double is 8.  */
+         int array [2*(sizeof(long double) >= sizeof(double)) - 1];
+         ], ,
+         gt_cv_c_long_double=yes, gt_cv_c_long_double=no)
+     fi])
+  if test $gt_cv_c_long_double = yes; then
+    AC_DEFINE(HAVE_LONG_DOUBLE, 1, [Define if you have the 'long double' type.])
+  fi
+])
+
+# 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
+])
+
+# wint_t.m4 serial 1 (gettext-0.12)
+dnl Copyright (C) 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 <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([#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
+])
+
+# inttypes_h.m4 serial 6
+dnl Copyright (C) 1997-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.
+
+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;],
+    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
+])
+
+# stdint_h.m4 serial 5
+dnl Copyright (C) 1997-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.
+
+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;],
+    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
+])
+
+# intmax.m4 serial 2 (gettext-0.14.2)
+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;], 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
+])
+
+# printf-posix.m4 serial 2 (gettext-0.13.1)
+dnl Copyright (C) 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 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 _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
+])
+
+# 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"
+  ]
+)
+
+# intdiv0.m4 serial 1 (gettext-0.11.3)
+dnl Copyright (C) 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 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,
+    [
+      AC_TRY_RUN([
+#include <stdlib.h>
+#include <signal.h>
+
+static void
+#ifdef __cplusplus
+sigfpe_handler (int sig)
+#else
+sigfpe_handler (sig) int sig;
+#endif
+{
+  /* 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.
+          case "$host_cpu" in
+            alpha* | i[34567]86 | m68k | s390*)
+              gt_cv_int_divbyzero_sigfpe="guessing yes";;
+            *)
+              gt_cv_int_divbyzero_sigfpe="guessing no";;
+          esac
+        ])
+    ])
+  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.])
+])
+
+# uintmax_t.m4 serial 9
+dnl Copyright (C) 1997-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.
+
+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([gl_AC_TYPE_UNSIGNED_LONG_LONG])
+    test $ac_cv_type_unsigned_long_long = 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
+])
+
+# ulonglong.m4 serial 4
+dnl Copyright (C) 1999-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.
+
+dnl From Paul Eggert.
+
+# Define HAVE_UNSIGNED_LONG_LONG if 'unsigned long long' works.
+
+AC_DEFUN([gl_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 = 1ULL; 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
+])
+
+# 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
+])
+
+# inttypes-pri.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 Bruno Haible.
+
+# 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_REQUIRE([gt_HEADER_INTTYPES_H])
+  if test $gt_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.])
+  fi
+])
+
+# 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)
+])
+
+# size_max.m4 serial 2
+dnl Copyright (C) 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.
+
+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])
+  result=
+  AC_EGREP_CPP([Found it], [
+#include <limits.h>
+#if HAVE_STDINT_H
+#include <stdint.h>
+#endif
+#ifdef SIZE_MAX
+Found it
+#endif
+], result=yes)
+  if test -z "$result"; then
+    dnl Define it ourselves. Here we assume that the type 'size_t' is not wider
+    dnl than the type 'unsigned long'.
+    dnl The _AC_COMPUTE_INT macro works up to LONG_MAX, since it uses 'expr',
+    dnl which is guaranteed to work from LONG_MIN to LONG_MAX.
+    _AC_COMPUTE_INT([~(size_t)0 / 10], res_hi,
+      [#include <stddef.h>], result=?)
+    _AC_COMPUTE_INT([~(size_t)0 % 10], res_lo,
+      [#include <stddef.h>], result=?)
+    _AC_COMPUTE_INT([sizeof (size_t) <= sizeof (unsigned int)], fits_in_uint,
+      [#include <stddef.h>], result=?)
+    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
+    if test -z "$result"; then
+      if test "$fits_in_uint" = 1; then
+        result="$res_hi$res_lo"U
+      else
+        result="$res_hi$res_lo"UL
+      fi
+    else
+      dnl Shouldn't happen, but who knows...
+      result='~(size_t)0'
+    fi
+  fi
+  AC_MSG_RESULT([$result])
+  if test "$result" != yes; then
+    AC_DEFINE_UNQUOTED([SIZE_MAX], [$result],
+      [Define as the maximum value of type 'size_t', if the system doesn't define it.])
+  fi
+])
+
+# 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
+])
+
+# 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_ifval([$1], [$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
+        PKG_CHECK_EXISTS([$3],
+                         [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`],
+			 [pkg_failed=yes])
+else
+	pkg_failed=untried
+fi[]dnl
+])# _PKG_CONFIG
+
+# 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])
+
+if test $pkg_failed = yes; then
+	$1[]_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"`
+	# Put the nasty error message in config.log where it belongs
+	echo "$$1[]_PKG_ERRORS" 1>&AS_MESSAGE_LOG_FD
+
+	ifelse([$4], , [AC_MSG_ERROR(dnl
+[Package requirements ($2) were not met.
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively you may set the $1_CFLAGS and $1_LIBS environment variables
+to avoid the need to call pkg-config.  See the pkg-config man page for
+more details.])],
+		[$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.
+
+Alternatively you may set the $1_CFLAGS and $1_LIBS environment variables
+to avoid the need to call pkg-config.  See the pkg-config man page for
+more details.
+
+To get pkg-config, see <http://www.freedesktop.org/software/pkgconfig>.])],
+		[$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
+
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..4605f93
--- /dev/null
+++ b/config.h.in
@@ -0,0 +1,392 @@
+/* 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.h> header file. */
+#undef HAVE_ARGZ_H
+
+/* Define to 1 if you have the `asprintf' function. */
+#undef HAVE_ASPRINTF
+
+/* glibc backtrace function */
+#undef HAVE_BACKTRACE
+
+/* 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. */
+#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 you have the <locale.h> header file. */
+#undef HAVE_LOCALE_H
+
+/* Define if you have the 'long double' type. */
+#undef HAVE_LONG_DOUBLE
+
+/* Define if you have the 'long long' type. */
+#undef HAVE_LONG_LONG
+
+/* Define to 1 if you have the <malloc.h> header file. */
+#undef HAVE_MALLOC_H
+
+/* 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 to 1 if you have the <nl_types.h> header file. */
+#undef HAVE_NL_TYPES_H
+
+/* Define if your printf() function supports format strings with positions. */
+#undef HAVE_POSIX_PRINTF
+
+/* 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 if you have the 'unsigned long long' type. */
+#undef HAVE_UNSIGNED_LONG_LONG
+
+/* Define to 1 if you have the <utime.h> header file. */
+#undef HAVE_UTIME_H
+
+/* 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 `__argz_count' function. */
+#undef HAVE___ARGZ_COUNT
+
+/* 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 `__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 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 run-time.
+	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
+
+/* 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 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 `long' if <sys/types.h> does not define. */
+#undef off_t
+
+/* 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 empty if the C compiler doesn't support this keyword. */
+#undef signed
+
+/* Define to `unsigned' 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
diff --git a/config.rpath b/config.rpath
new file mode 100755
index 0000000..5ead758
--- /dev/null
+++ b/config.rpath
@@ -0,0 +1,513 @@
+#! /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-2002 Free Software Foundation, Inc.
+#   Taken from GNU libtool, 2001
+#   Originally by Gordon Matzigkeit <gord at gnu.ai.mit.edu>, 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 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.
+#
+# 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.
+
+# All known linkers require a `.a' archive for static linking (except M$VC,
+# which needs '.lib').
+libext=a
+shlibext=
+
+host="$1"
+host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+wl=
+if test "$GCC" = yes; then
+  wl='-Wl,'
+else
+  case "$host_os" in
+    aix3* | aix4* | aix5*)
+      wl='-Wl,'
+      ;;
+    hpux9* | hpux10* | hpux11*)
+      wl='-Wl,'
+      ;;
+    irix5* | irix6*)
+      wl='-Wl,'
+      ;;
+    linux*)
+      echo '__INTEL_COMPILER' > conftest.$ac_ext
+      if $CC -E conftest.$ac_ext >/dev/null | grep __INTEL_COMPILER >/dev/null
+      then
+        :
+      else
+        # Intel icc
+        wl='-Qoption,ld,'
+      fi
+      ;;
+    osf3* | osf4* | osf5*)
+      wl='-Wl,'
+      ;;
+    solaris*)
+      wl='-Wl,'
+      ;;
+    sunos4*)
+      wl='-Qoption ld '
+      ;;
+    sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+      if test "x$host_vendor" = xsni; then
+        wl='-LD'
+      else
+        wl='-Wl,'
+      fi
+      ;;
+  esac
+fi
+
+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
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+esac
+
+ld_shlibs=yes
+if test "$with_gnu_ld" = yes; then
+  case "$host_os" in
+    aix3* | aix4* | aix5*)
+      # On AIX, the GNU linker is very broken
+      ld_shlibs=no
+      ;;
+    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 can use
+      # them.
+      ld_shlibs=no
+      ;;
+    beos*)
+      if $LD --help 2>&1 | egrep ': 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'
+      ;;
+    solaris* | sysv5*)
+      if $LD -v 2>&1 | egrep 'BFD 2\.8' > /dev/null; then
+        ld_shlibs=no
+      elif $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
+        :
+      else
+        ld_shlibs=no
+      fi
+      ;;
+    sunos4*)
+      hardcode_direct=yes
+      ;;
+    *)
+      if $LD --help 2>&1 | egrep ': supported targets:.* elf' > /dev/null; then
+        :
+      else
+        ld_shlibs=no
+      fi
+      ;;
+  esac
+  if test "$ld_shlibs" = yes; then
+    hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+  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
+            hardcode_direct=yes
+          else
+            # We have old collect2
+            hardcode_direct=unsupported
+            hardcode_minus_L=yes
+            hardcode_libdir_flag_spec='-L$libdir'
+            hardcode_libdir_separator=
+          fi
+        esac
+      fi
+      if test "$aix_use_runtimelinking" = yes; then
+        hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:/usr/lib:/lib'
+      else
+        if test "$host_cpu" = ia64; then
+          hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+        else
+          hardcode_libdir_flag_spec='${wl}-bnolibpath ${wl}-blibpath:$libdir:/usr/lib:/lib'
+        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
+      ;;
+    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=yes
+      ;;
+    freebsd1*)
+      ld_shlibs=no
+      ;;
+    freebsd2.2*)
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      ;;
+    freebsd2*)
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      ;;
+    freebsd*)
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      ;;
+    hpux9* | hpux10* | hpux11*)
+      hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+      hardcode_libdir_separator=:
+      hardcode_direct=yes
+      hardcode_minus_L=yes # Not in the search PATH, but as the default
+                           # location of the library.
+      ;;
+    irix5* | irix6*)
+      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*)
+      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
+      ;;
+    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=:
+      ;;
+    sco3.2v5*)
+      ;;
+    solaris*)
+      hardcode_libdir_flag_spec='-R$libdir'
+      ;;
+    sunos4*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      ;;
+    sysv4)
+      if test "x$host_vendor" = xsno; then
+        hardcode_direct=yes # is this really true???
+      else
+        hardcode_direct=no # Motorola manual says yes, but my tests say they lie
+      fi
+      ;;
+    sysv4.3*)
+      ;;
+    sysv5*)
+      hardcode_libdir_flag_spec=
+      ;;
+    uts4*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      ;;
+    dgux*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+        ld_shlibs=yes
+      fi
+      ;;
+    sysv4.2uw2*)
+      hardcode_direct=yes
+      hardcode_minus_L=no
+      ;;
+    sysv5uw7* | unixware7*)
+      ;;
+    *)
+      ld_shlibs=no
+      ;;
+  esac
+fi
+
+# Check dynamic linker characteristics
+libname_spec='lib$name'
+sys_lib_dlsearch_path_spec="/lib /usr/lib"
+sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
+case "$host_os" in
+  aix3*)
+    shlibext=so
+    ;;
+  aix4* | aix5*)
+    shlibext=so
+    ;;
+  amigaos*)
+    shlibext=ixlibrary
+    ;;
+  beos*)
+    shlibext=so
+    ;;
+  bsdi4*)
+    shlibext=so
+    sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
+    sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
+    ;;
+  cygwin* | mingw* | pw32*)
+    case $GCC,$host_os in
+      yes,cygwin*)
+        shlibext=dll.a
+        ;;
+      yes,mingw*)
+        shlibext=dll
+        sys_lib_search_path_spec=`$CC -print-search-dirs | grep "^libraries:" | sed -e "s/^libraries://" -e "s/;/ /g"`
+        ;;
+      yes,pw32*)
+        shlibext=dll
+        ;;
+      *)
+        shlibext=dll
+        ;;
+    esac
+    ;;
+  darwin* | rhapsody*)
+    shlibext=dylib
+    ;;
+  freebsd1*)
+    ;;
+  freebsd*)
+    shlibext=so
+    ;;
+  gnu*)
+    shlibext=so
+    ;;
+  hpux9* | hpux10* | hpux11*)
+    shlibext=sl
+    ;;
+  irix5* | irix6*)
+    shlibext=so
+    case "$host_os" in
+      irix5*)
+        libsuff= shlibsuff=
+        ;;
+      *)
+        case $LD in
+          *-32|*"-32 ") libsuff= shlibsuff= ;;
+          *-n32|*"-n32 ") libsuff=32 shlibsuff=N32 ;;
+          *-64|*"-64 ") libsuff=64 shlibsuff=64 ;;
+          *) libsuff= shlibsuff= ;;
+        esac
+        ;;
+    esac
+    sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
+    sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
+    ;;
+  linux-gnuoldld* | linux-gnuaout* | linux-gnucoff*)
+    ;;
+  linux-gnu*)
+    shlibext=so
+    ;;
+  netbsd*)
+    shlibext=so
+    ;;
+  newsos6)
+    shlibext=so
+    ;;
+  openbsd*)
+    shlibext=so
+    ;;
+  os2*)
+    libname_spec='$name'
+    shlibext=dll
+    ;;
+  osf3* | osf4* | osf5*)
+    shlibext=so
+    sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
+    sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
+    ;;
+  sco3.2v5*)
+    shlibext=so
+    ;;
+  solaris*)
+    shlibext=so
+    ;;
+  sunos4*)
+    shlibext=so
+    ;;
+  sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
+    shlibext=so
+    case "$host_vendor" in
+      motorola)
+        sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
+        ;;
+    esac
+    ;;
+  uts4*)
+    shlibext=so
+    ;;
+  dgux*)
+    shlibext=so
+    ;;
+  sysv4*MP*)
+    if test -d /usr/nec; then
+      shlibext=so
+    fi
+    ;;
+esac
+
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+escaped_wl=`echo "X$wl" | 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"`
+escaped_sys_lib_search_path_spec=`echo "X$sys_lib_search_path_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+escaped_sys_lib_dlsearch_path_spec=`echo "X$sys_lib_dlsearch_path_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+
+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"
+
+# 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"
+
+# Compile-time system search path for libraries
+sys_lib_search_path_spec="$escaped_sys_lib_search_path_spec"
+
+# Run-time system search path for libraries
+sys_lib_dlsearch_path_spec="$escaped_sys_lib_dlsearch_path_spec"
+
+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..1ffcd87
--- /dev/null
+++ b/configure
@@ -0,0 +1,16445 @@
+#! /bin/sh
+# Guess values for system-dependent variables and create Makefiles.
+# Generated by GNU Autoconf 2.59 for wmcoincoin 2.5.1e.
+#
+# Report bugs to <c0in at altern.org>.
+#
+# Copyright (C) 2003 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 Bourne compatible
+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+"$@"}'='"$@"'
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+  set -o posix
+fi
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+fi
+
+
+# Work around bugs in pre-3.0 UWIN ksh.
+$as_unset ENV MAIL MAILPATH
+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
+  fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1; 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'`
+
+
+# PATH needs CR, and LINENO needs CR and PATH.
+# 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
+
+
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
+  # Find who we are.  Look in the path if we contain no path at all
+  # relative or not.
+  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
+
+       ;;
+  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_me: error: cannot find myself; rerun with an absolute path" >&2
+   { (exit 1); exit 1; }; }
+  fi
+  case $CONFIG_SHELL in
+  '')
+    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=.
+  for as_base in sh bash ksh sh5; do
+	 case $as_dir in
+	 /*)
+	   if ("$as_dir/$as_base" -c '
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
+	     $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+	     $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+	     CONFIG_SHELL=$as_dir/$as_base
+	     export CONFIG_SHELL
+	     exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+	   fi;;
+	 esac
+       done
+done
+;;
+  esac
+
+  # 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 before each line; the second 'sed' does the real
+  # work.  The second script uses 'N' to pair each line-number line
+  # with the numbered line, 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
+  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
+  sed '=' <$as_myself |
+    sed '
+      N
+      s,$,-,
+      : loop
+      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+      t loop
+      s,-$,,
+      s,^['$as_cr_digits']*\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 sensible to this).
+  . ./$as_me.lineno
+  # Exit status is that of the last command.
+  exit
+}
+
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+  *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T='	' ;;
+  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+  # We could just check for DJGPP; but this test a) works b) is more generic
+  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+  if test -f conf$$.exe; then
+    # Don't use ln at all; we don't have any links
+    as_ln_s='cp -p'
+  else
+    as_ln_s='ln -s'
+  fi
+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$$.file
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p=:
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+as_executable_p="test -f"
+
+# 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'"
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" 	$as_nl"
+
+# CDPATH.
+$as_unset CDPATH
+
+
+# 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`
+
+exec 6>&1
+
+#
+# Initializations.
+#
+ac_default_prefix=/usr/local
+ac_config_libobj_dir=.
+cross_compiling=no
+subdirs=
+MFLAGS=
+MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+
+# Maximum number of lines to put in a shell here document.
+# This variable seems obsolete.  It should probably be removed, and
+# only ac_max_sed_lines should be used.
+: ${ac_max_here_lines=38}
+
+# Identity of this package.
+PACKAGE_NAME='wmcoincoin'
+PACKAGE_TARNAME='wmcoincoin'
+PACKAGE_VERSION='2.5.1e'
+PACKAGE_STRING='wmcoincoin 2.5.1e'
+PACKAGE_BUGREPORT='c0in at altern.org'
+
+ac_unique_file="src/wmcoincoin.c"
+# Factoring default headers for most tests.
+ac_includes_default="\
+#include <stdio.h>
+#if HAVE_SYS_TYPES_H
+# include <sys/types.h>
+#endif
+#if HAVE_SYS_STAT_H
+# include <sys/stat.h>
+#endif
+#if STDC_HEADERS
+# include <stdlib.h>
+# include <stddef.h>
+#else
+# if HAVE_STDLIB_H
+#  include <stdlib.h>
+# endif
+#endif
+#if HAVE_STRING_H
+# if !STDC_HEADERS && HAVE_MEMORY_H
+#  include <memory.h>
+# endif
+# include <string.h>
+#endif
+#if HAVE_STRINGS_H
+# include <strings.h>
+#endif
+#if HAVE_INTTYPES_H
+# include <inttypes.h>
+#else
+# if HAVE_STDINT_H
+#  include <stdint.h>
+# endif
+#endif
+#if 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 datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA CYGPATH_W PACKAGE VERSION ACLOCAL AUTOCONF AUTOMAKE AUTOHEADER MAKEINFO AMTAR install_sh STRIP ac_ct_STR [...]
+ac_subst_files=''
+
+# 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.
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datadir='${prefix}/share'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+libdir='${exec_prefix}/lib'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+infodir='${prefix}/info'
+mandir='${prefix}/man'
+
+ac_prev=
+for ac_option
+do
+  # If the previous option needs an argument, assign it.
+  if test -n "$ac_prev"; then
+    eval "$ac_prev=\$ac_option"
+    ac_prev=
+    continue
+  fi
+
+  ac_optarg=`expr "x$ac_option" : 'x[^=]*=\(.*\)'`
+
+  # Accept the important Cygnus configure options, so we can diagnose typos.
+
+  case $ac_option in
+
+  -bindir | --bindir | --bindi | --bind | --bin | --bi)
+    ac_prev=bindir ;;
+  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+    bindir=$ac_optarg ;;
+
+  -build | --build | --buil | --bui | --bu)
+    ac_prev=build_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 | --data | --dat | --da)
+    ac_prev=datadir ;;
+  -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+  | --da=*)
+    datadir=$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" ;;
+
+  -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'`
+    case $ac_option in
+      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+      *) ac_optarg=yes ;;
+    esac
+    eval "enable_$ac_feature='$ac_optarg'" ;;
+
+  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+  | --exec | --exe | --ex)
+    ac_prev=exec_prefix ;;
+  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+  | --exec=* | --exe=* | --ex=*)
+    exec_prefix=$ac_optarg ;;
+
+  -gas | --gas | --ga | --g)
+    # Obsolete; use --with-gas.
+    with_gas=yes ;;
+
+  -help | --help | --hel | --he | -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 ;;
+
+  -includedir | --includedir | --includedi | --included | --include \
+  | --includ | --inclu | --incl | --inc)
+    ac_prev=includedir ;;
+  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+  | --includ=* | --inclu=* | --incl=* | --inc=*)
+    includedir=$ac_optarg ;;
+
+  -infodir | --infodir | --infodi | --infod | --info | --inf)
+    ac_prev=infodir ;;
+  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+    infodir=$ac_optarg ;;
+
+  -libdir | --libdir | --libdi | --libd)
+    ac_prev=libdir ;;
+  -libdir=* | --libdir=* | --libdi=* | --libd=*)
+    libdir=$ac_optarg ;;
+
+  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+  | --libexe | --libex | --libe)
+    ac_prev=libexecdir ;;
+  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+  | --libexe=* | --libex=* | --libe=*)
+    libexecdir=$ac_optarg ;;
+
+  -localstatedir | --localstatedir | --localstatedi | --localstated \
+  | --localstate | --localstat | --localsta | --localst \
+  | --locals | --local | --loca | --loc | --lo)
+    ac_prev=localstatedir ;;
+  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+  | --localstate=* | --localstat=* | --localsta=* | --localst=* \
+  | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+    localstatedir=$ac_optarg ;;
+
+  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+    ac_prev=mandir ;;
+  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+    mandir=$ac_optarg ;;
+
+  -nfp | --nfp | --nf)
+    # Obsolete; use --without-fp.
+    with_fp=no ;;
+
+  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+  | --no-cr | --no-c | -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 ;;
+
+  -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'`
+    case $ac_option in
+      *=*) ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`;;
+      *) ac_optarg=yes ;;
+    esac
+    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; }; }
+    ac_optarg=`echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"`
+    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 paths.
+for ac_var in exec_prefix prefix
+do
+  eval ac_val=$`echo $ac_var`
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* | NONE | '' ) ;;
+    *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+   { (exit 1); exit 1; }; };;
+  esac
+done
+
+# Be sure to have absolute paths.
+for ac_var in bindir sbindir libexecdir datadir sysconfdir sharedstatedir \
+	      localstatedir libdir includedir oldincludedir infodir mandir
+do
+  eval ac_val=$`echo $ac_var`
+  case $ac_val in
+    [\\/$]* | ?:[\\/]* ) ;;
+    *)  { echo "$as_me: error: expected an absolute directory name for --$ac_var: $ac_val" >&2
+   { (exit 1); exit 1; }; };;
+  esac
+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
+
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+  ac_srcdir_defaulted=yes
+  # Try the directory containing this script, then its parent.
+  ac_confdir=`(dirname "$0") 2>/dev/null ||
+$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
+  if test "$ac_srcdir_defaulted" = yes; then
+    { echo "$as_me: error: cannot find sources ($ac_unique_file) in $ac_confdir or .." >&2
+   { (exit 1); exit 1; }; }
+  else
+    { echo "$as_me: error: cannot find sources ($ac_unique_file) in $srcdir" >&2
+   { (exit 1); exit 1; }; }
+  fi
+fi
+(cd $srcdir && test -r ./$ac_unique_file) 2>/dev/null ||
+  { echo "$as_me: error: sources are in $srcdir, but \`cd $srcdir' does not work" >&2
+   { (exit 1); exit 1; }; }
+srcdir=`echo "$srcdir" | sed 's%\([^\\/]\)[\\/]*$%\1%'`
+ac_env_build_alias_set=${build_alias+set}
+ac_env_build_alias_value=$build_alias
+ac_cv_env_build_alias_set=${build_alias+set}
+ac_cv_env_build_alias_value=$build_alias
+ac_env_host_alias_set=${host_alias+set}
+ac_env_host_alias_value=$host_alias
+ac_cv_env_host_alias_set=${host_alias+set}
+ac_cv_env_host_alias_value=$host_alias
+ac_env_target_alias_set=${target_alias+set}
+ac_env_target_alias_value=$target_alias
+ac_cv_env_target_alias_set=${target_alias+set}
+ac_cv_env_target_alias_value=$target_alias
+ac_env_CC_set=${CC+set}
+ac_env_CC_value=$CC
+ac_cv_env_CC_set=${CC+set}
+ac_cv_env_CC_value=$CC
+ac_env_CFLAGS_set=${CFLAGS+set}
+ac_env_CFLAGS_value=$CFLAGS
+ac_cv_env_CFLAGS_set=${CFLAGS+set}
+ac_cv_env_CFLAGS_value=$CFLAGS
+ac_env_LDFLAGS_set=${LDFLAGS+set}
+ac_env_LDFLAGS_value=$LDFLAGS
+ac_cv_env_LDFLAGS_set=${LDFLAGS+set}
+ac_cv_env_LDFLAGS_value=$LDFLAGS
+ac_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_env_CPPFLAGS_value=$CPPFLAGS
+ac_cv_env_CPPFLAGS_set=${CPPFLAGS+set}
+ac_cv_env_CPPFLAGS_value=$CPPFLAGS
+ac_env_CPP_set=${CPP+set}
+ac_env_CPP_value=$CPP
+ac_cv_env_CPP_set=${CPP+set}
+ac_cv_env_CPP_value=$CPP
+ac_env_PKG_CONFIG_set=${PKG_CONFIG+set}
+ac_env_PKG_CONFIG_value=$PKG_CONFIG
+ac_cv_env_PKG_CONFIG_set=${PKG_CONFIG+set}
+ac_cv_env_PKG_CONFIG_value=$PKG_CONFIG
+ac_env_XFT_CFLAGS_set=${XFT_CFLAGS+set}
+ac_env_XFT_CFLAGS_value=$XFT_CFLAGS
+ac_cv_env_XFT_CFLAGS_set=${XFT_CFLAGS+set}
+ac_cv_env_XFT_CFLAGS_value=$XFT_CFLAGS
+ac_env_XFT_LIBS_set=${XFT_LIBS+set}
+ac_env_XFT_LIBS_value=$XFT_LIBS
+ac_cv_env_XFT_LIBS_set=${XFT_LIBS+set}
+ac_cv_env_XFT_LIBS_value=$XFT_LIBS
+ac_env_PACKAGE_CFLAGS_set=${PACKAGE_CFLAGS+set}
+ac_env_PACKAGE_CFLAGS_value=$PACKAGE_CFLAGS
+ac_cv_env_PACKAGE_CFLAGS_set=${PACKAGE_CFLAGS+set}
+ac_cv_env_PACKAGE_CFLAGS_value=$PACKAGE_CFLAGS
+ac_env_PACKAGE_LIBS_set=${PACKAGE_LIBS+set}
+ac_env_PACKAGE_LIBS_value=$PACKAGE_LIBS
+ac_cv_env_PACKAGE_LIBS_set=${PACKAGE_LIBS+set}
+ac_cv_env_PACKAGE_LIBS_value=$PACKAGE_LIBS
+
+#
+# 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.5.1e 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 \`..']
+
+_ACEOF
+
+  cat <<_ACEOF
+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]
+  --datadir=DIR          read-only architecture-independent data [PREFIX/share]
+  --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]
+  --infodir=DIR          info documentation [PREFIX/info]
+  --mandir=DIR           man documentation [PREFIX/man]
+_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.5.1e:";;
+   esac
+  cat <<\_ACEOF
+
+Optional Features:
+  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
+  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --disable-dependency-tracking Speeds up one-time builds
+  --enable-dependency-tracking  Do not reject slow dependency extractors
+  --disable-nls           do not use Native Language Support
+  --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 hfr 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-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>
+  CPPFLAGS    C/C++ preprocessor flags, e.g. -I<include dir> if you have
+              headers in a nonstandard directory <include dir>
+  CPP         C preprocessor
+  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 <c0in at altern.org>.
+_ACEOF
+fi
+
+if test "$ac_init_help" = "recursive"; then
+  # If there are subdirs, report their specific --help.
+  ac_popdir=`pwd`
+  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
+    test -d $ac_dir || continue
+    ac_builddir=.
+
+if test "$ac_dir" != .; then
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A "../" for each directory in $ac_dir_suffix.
+  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+  ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+  .)  # No --srcdir option.  We are building in place.
+    ac_srcdir=.
+    if test -z "$ac_top_builddir"; then
+       ac_top_srcdir=.
+    else
+       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+    fi ;;
+  [\\/]* | ?:[\\/]* )  # Absolute path.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir ;;
+  *) # Relative path.
+    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+  case "$ac_dir" in
+  .) ac_abs_builddir=`pwd`;;
+  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+  *) ac_abs_builddir=`pwd`/"$ac_dir";;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+  case ${ac_top_builddir}. in
+  .) ac_abs_top_builddir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+  case $ac_srcdir in
+  .) ac_abs_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+  case $ac_top_srcdir in
+  .) ac_abs_top_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+  esac;;
+esac
+
+    cd $ac_dir
+    # Check for guested configure; otherwise get Cygnus style 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
+    elif test -f $ac_srcdir/configure.ac ||
+	   test -f $ac_srcdir/configure.in; then
+      echo
+      $ac_configure --help
+    else
+      echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
+    fi
+    cd "$ac_popdir"
+  done
+fi
+
+test -n "$ac_init_help" && exit 0
+if $ac_init_version; then
+  cat <<\_ACEOF
+wmcoincoin configure 2.5.1e
+generated by GNU Autoconf 2.59
+
+Copyright (C) 2003 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 0
+fi
+exec 5>config.log
+cat >&5 <<_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.5.1e, which was
+generated by GNU Autoconf 2.59.  Invocation command line was
+
+  $ $0 $@
+
+_ACEOF
+{
+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`
+hostinfo               = `(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
+
+} >&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_sep=
+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_sep'$ac_arg'"
+      # Get rid of the leading space.
+      ac_sep=" "
+      ;;
+    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: Be sure not to use single quotes in there, as some shells,
+# such as our DU 5.0 friend, will then `close' the trap.
+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,
+{
+  (set) 2>&1 |
+    case `(ac_space='"'"' '"'"'; set | grep ac_space) 2>&1` in
+    *ac_space=\ *)
+      sed -n \
+	"s/'"'"'/'"'"'\\\\'"'"''"'"'/g;
+	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='"'"'\\2'"'"'/p"
+      ;;
+    *)
+      sed -n \
+	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+      ;;
+    esac;
+}
+    echo
+
+    cat <<\_ASBOX
+## ----------------- ##
+## Output variables. ##
+## ----------------- ##
+_ASBOX
+    echo
+    for ac_var in $ac_subst_vars
+    do
+      eval ac_val=$`echo $ac_var`
+      echo "$ac_var='"'"'$ac_val'"'"'"
+    done | sort
+    echo
+
+    if test -n "$ac_subst_files"; then
+      cat <<\_ASBOX
+## ------------- ##
+## Output files. ##
+## ------------- ##
+_ASBOX
+      echo
+      for ac_var in $ac_subst_files
+      do
+	eval ac_val=$`echo $ac_var`
+	echo "$ac_var='"'"'$ac_val'"'"'"
+      done | sort
+      echo
+    fi
+
+    if test -s confdefs.h; then
+      cat <<\_ASBOX
+## ----------- ##
+## confdefs.h. ##
+## ----------- ##
+_ASBOX
+      echo
+      sed "/^$/d" confdefs.h | sort
+      echo
+    fi
+    test "$ac_signal" != 0 &&
+      echo "$as_me: caught signal $ac_signal"
+    echo "$as_me: exit $exit_status"
+  } >&5
+  rm -f core *.core &&
+  rm -rf 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 -rf conftest* confdefs.h
+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
+echo >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 -z "$CONFIG_SITE"; then
+  if test "x$prefix" != xNONE; then
+    CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+  else
+    CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+  fi
+fi
+for ac_site_file in $CONFIG_SITE; do
+  if test -r "$ac_site_file"; then
+    { echo "$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
+
+# Check that the precious variables saved in the cache have kept the same
+# value.
+ac_cache_corrupted=false
+for ac_var in `(set) 2>&1 |
+	       sed -n 's/^ac_env_\([a-zA-Z_0-9]*\)_set=.*/\1/p'`; 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.7"
+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
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"
+ac_configure="$SHELL $ac_aux_dir/configure" # This should be Cygnus configure.
+
+# Find a good install program.  We prefer a C program (faster),
+# so one script is as good as another.  But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# 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 $as_executable_p "$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
+
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  We don't cache a
+    # path for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the path is relative.
+    INSTALL=$ac_install_sh
+  fi
+fi
+echo "$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 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
+
+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 $as_executable_p "$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
+
+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 dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y,:./+-,___p_,'`
+if eval "test \"\${ac_cv_prog_make_${ac_make}_set+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  cat >conftest.make <<\_ACEOF
+all:
+	@echo 'ac_maketemp="$(MAKE)"'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+eval `${MAKE-make} -f conftest.make 2>/dev/null | grep temp=`
+if test -n "$ac_maketemp"; then
+  eval ac_cv_prog_make_${ac_make}_set=yes
+else
+  eval ac_cv_prog_make_${ac_make}_set=no
+fi
+rm -f conftest.make
+fi
+if eval "test \"`echo '$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
+
+ # test to see if srcdir already configured
+if test "`cd $srcdir && pwd`" != "`pwd`" &&
+   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
+
+# 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.5.1e'
+
+
+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"}
+
+
+AMTAR=${AMTAR-"${am_missing_run}tar"}
+
+install_sh=${install_sh-"$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 $as_executable_p "$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
+
+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 $as_executable_p "$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
+
+  test -z "$ac_cv_prog_ac_ct_STRIP" && ac_cv_prog_ac_ct_STRIP=":"
+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
+
+  STRIP=$ac_ct_STRIP
+else
+  STRIP="$ac_cv_prog_STRIP"
+fi
+
+fi
+INSTALL_STRIP_PROGRAM="\${SHELL} \$(install_sh) -c -s"
+
+# We need awk for the "check" target.  The system "awk" is bad on
+# some platforms.
+
+
+
+          ac_config_headers="$ac_config_headers config.h"
+
+
+# Make sure we can run config.sub.
+$ac_config_sub sun4 >/dev/null 2>&1 ||
+  { { echo "$as_me:$LINENO: error: cannot run $ac_config_sub" >&5
+echo "$as_me: error: cannot run $ac_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_cv_build_alias=$build_alias
+test -z "$ac_cv_build_alias" &&
+  ac_cv_build_alias=`$ac_config_guess`
+test -z "$ac_cv_build_alias" &&
+  { { 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=`$ac_config_sub $ac_cv_build_alias` ||
+  { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_build_alias failed" >&5
+echo "$as_me: error: $ac_config_sub $ac_cv_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
+build=$ac_cv_build
+build_cpu=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+build_vendor=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+build_os=`echo $ac_cv_build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+
+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
+  ac_cv_host_alias=$host_alias
+test -z "$ac_cv_host_alias" &&
+  ac_cv_host_alias=$ac_cv_build_alias
+ac_cv_host=`$ac_config_sub $ac_cv_host_alias` ||
+  { { echo "$as_me:$LINENO: error: $ac_config_sub $ac_cv_host_alias failed" >&5
+echo "$as_me: error: $ac_config_sub $ac_cv_host_alias failed" >&2;}
+   { (exit 1); exit 1; }; }
+
+fi
+echo "$as_me:$LINENO: result: $ac_cv_host" >&5
+echo "${ECHO_T}$ac_cv_host" >&6
+host=$ac_cv_host
+host_cpu=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo $ac_cv_host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+
+COIN_ARCH="${host_cpu}-${host_vendor}-${host_os}"
+
+case $host_os in
+  *cygwin* ) CYGWIN=yes; EXEEXT=".exe";;
+         * ) CYGWIN=no; EXEEXT="";;
+esac
+
+ALL_LINGUAS="fr"
+
+
+        MKINSTALLDIRS=
+  if test -n "$ac_aux_dir"; then
+    case "$ac_aux_dir" in
+      /*) MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs" ;;
+      *) MKINSTALLDIRS="\$(top_builddir)/$ac_aux_dir/mkinstalldirs" ;;
+    esac
+  fi
+  if test -z "$MKINSTALLDIRS"; then
+    MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
+  fi
+
+
+
+
+
+        # 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.
+  ;;
+  *)
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      if $ac_dir/$ac_word --statistics /dev/null >/dev/null 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"
+	break
+      fi
+    fi
+  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 $as_executable_p "$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
+
+  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
+
+
+        # 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.
+  ;;
+  *)
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      if $ac_dir/$ac_word --omit-header --copyright-holder= /dev/null >/dev/null 2>&1 &&
+     (if $ac_dir/$ac_word --omit-header --copyright-holder= /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"
+	break
+      fi
+    fi
+  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
+
+    # 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.
+  ;;
+  *)
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in $PATH; do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      if $ac_dir/$ac_word --update -q /dev/null /dev/null >/dev/null 2>&1; then
+	ac_cv_path_MSGMERGE="$ac_dir/$ac_word"
+	break
+      fi
+    fi
+  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
+
+
+      if test "$GMSGFMT" != ":"; then
+            if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 &&
+       (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+      : ;
+    else
+      GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'`
+      echo "$as_me:$LINENO: result: found $GMSGFMT program is not GNU msgfmt; ignore it" >&5
+echo "${ECHO_T}found $GMSGFMT program is not GNU msgfmt; ignore it" >&6
+      GMSGFMT=":"
+    fi
+  fi
+
+      if test "$XGETTEXT" != ":"; then
+            if $XGETTEXT --omit-header --copyright-holder= /dev/null >/dev/null 2>&1 &&
+       (if $XGETTEXT --omit-header --copyright-holder= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+      : ;
+    else
+      echo "$as_me:$LINENO: result: found xgettext program is not GNU xgettext; ignore it" >&5
+echo "${ECHO_T}found xgettext program is not GNU xgettext; ignore it" >&6
+      XGETTEXT=":"
+    fi
+        rm -f messages.po
+  fi
+
+            ac_config_commands="$ac_config_commands default-1"
+
+
+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 or --disable-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 $as_executable_p "$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
+
+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 $as_executable_p "$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
+
+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
+
+  CC=$ac_ct_CC
+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 $as_executable_p "$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
+
+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 "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_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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+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
+
+  CC=$ac_ct_CC
+else
+  CC="$ac_cv_prog_CC"
+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 $as_executable_p "$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
+
+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
+  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 $as_executable_p "$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
+
+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
+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 $as_executable_p "$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
+
+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
+
+  CC=$ac_ct_CC
+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`
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+  (eval $ac_compiler --version </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+  (eval $ac_compiler -v </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+  (eval $ac_compiler -V </dev/null >&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[^ ]*//'`
+if { (eval echo "$as_me:$LINENO: \"$ac_link_default\"") >&5
+  (eval $ac_link_default) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  # Find the output, starting from the most likely.  This scheme is
+# not robust to junk in `.', hence go to wildcards (a.*) only as a last
+# resort.
+
+# Be careful to initialize this variable, since it used to be cached.
+# Otherwise an old cache value of `no' led to `EXEEXT = no' in a Makefile.
+ac_cv_exeext=
+# b.out is created by i960 compilers.
+for ac_file in a_out.exe a.exe conftest.exe a.out conftest a.* conftest.* b.out
+do
+  test -f "$ac_file" || continue
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.o | *.obj )
+	;;
+    conftest.$ac_ext )
+	# This is the source file.
+	;;
+    [ab].out )
+	# We found the default executable, but exeext='' is most
+	# certainly right.
+	break;;
+    *.* )
+	ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	# FIXME: I believe we export ac_cv_exeext for Libtool,
+	# but it would be cool to find out if it's true.  Does anybody
+	# maintain Libtool? --akim.
+	export ac_cv_exeext
+	break;;
+    * )
+	break;;
+  esac
+done
+else
+  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
+echo "$as_me:$LINENO: result: $ac_file" >&5
+echo "${ECHO_T}$ac_file" >&6
+
+# Check 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'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&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 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 { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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 | *.o | *.obj ) ;;
+    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
+	  export ac_cv_exeext
+	  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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; then
+  for ac_file in `(ls conftest.o conftest.obj; ls conftest.*) 2>/dev/null`; do
+  case $ac_file in
+    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg ) ;;
+    *) 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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 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
+CFLAGS="-g"
+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
+  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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_prog_cc_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_prog_cc_g=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+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 ANSI C" >&5
+echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_stdc+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_prog_cc_stdc=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 -std1 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 -std1.  */
+int osf4_cc_array ['\x00' == 0 ? 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
+# Don't try gcc -ansi; that turns off useful extensions and
+# breaks some systems' header files.
+# AIX			-qlanglvl=ansi
+# Ultrix and OSF/1	-std1
+# HP-UX 10.20 and later	-Ae
+# HP-UX older versions	-Aa -D_HPUX_SOURCE
+# SVR4			-Xc -D__EXTENSIONS__
+for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_prog_cc_stdc=$ac_arg
+break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext
+done
+rm -f conftest.$ac_ext conftest.$ac_objext
+CC=$ac_save_CC
+
+fi
+
+case "x$ac_cv_prog_cc_stdc" in
+  x|xno)
+    echo "$as_me:$LINENO: result: none needed" >&5
+echo "${ECHO_T}none needed" >&6 ;;
+  *)
+    echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
+    CC="$CC $ac_cv_prog_cc_stdc" ;;
+esac
+
+# Some people use a C++ compiler to compile C.  Since we use `exit',
+# in C++ we need to declare it.  In case someone uses the same compiler
+# for both compiling C and C++ we need to have the C++ compiler decide
+# the declaration of exit, since it's the most demanding environment.
+cat >conftest.$ac_ext <<_ACEOF
+#ifndef __cplusplus
+  choke me
+#endif
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  for ac_declaration in \
+   '' \
+   'extern "C" void std::exit (int) throw (); using std::exit;' \
+   'extern "C" void std::exit (int); using std::exit;' \
+   'extern "C" void exit (int) throw ();' \
+   'extern "C" void exit (int);' \
+   'void exit (int);'
+do
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_declaration
+#include <stdlib.h>
+int
+main ()
+{
+exit (42);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+continue
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_declaration
+int
+main ()
+{
+exit (42);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest*
+if test -n "$ac_declaration"; then
+  echo '#ifdef __cplusplus' >>confdefs.h
+  echo $ac_declaration      >>confdefs.h
+  echo '#endif'             >>confdefs.h
+fi
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+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
+      : > 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/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
+      # (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored.
+      if grep 'ignoring option' 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 { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&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; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_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 non-existent 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 { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&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; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_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 { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&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; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_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 non-existent 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 { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&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; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_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 egrep" >&5
+echo $ECHO_N "checking for egrep... $ECHO_C" >&6
+if test "${ac_cv_prog_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_prog_egrep='grep -E'
+    else ac_cv_prog_egrep='egrep'
+    fi
+fi
+echo "$as_me:$LINENO: result: $ac_cv_prog_egrep" >&5
+echo "${ECHO_T}$ac_cv_prog_egrep" >&6
+ EGREP=$ac_cv_prog_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 $as_executable_p "$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
+
+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 $as_executable_p "$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
+
+  test -z "$ac_cv_prog_ac_ct_RANLIB" && ac_cv_prog_ac_ct_RANLIB=":"
+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
+
+  RANLIB=$ac_ct_RANLIB
+else
+  RANLIB="$ac_cv_prog_RANLIB"
+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 gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char strerror ();
+int
+main ()
+{
+strerror ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 conftest.err conftest.$ac_objext \
+      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
+
+
+
+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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 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>
+#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))
+      exit(2);
+  exit (0);
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&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 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
+
+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 x;
+  /* SunOS 4.1.1 cc rejects this.  */
+  char const *const *ccp;
+  char **p;
+  /* 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";
+  ccp = &g + (g ? g-g : 0);
+  /* HPUX 7.0 cc rejects these. */
+  ++ccp;
+  p = (char**) ccp;
+  ccp = (char const *const *) p;
+  { /* SCO 3.2v4 cc rejects this.  */
+    char *t;
+    char const *s = 0 ? (char *) 0 : (char const *) 0;
+
+    *t++ = 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;
+  }
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 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 signed" >&5
+echo $ECHO_N "checking for signed... $ECHO_C" >&6
+if test "${bh_cv_c_signed+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 ()
+{
+signed char x;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  bh_cv_c_signed=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+bh_cv_c_signed=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $bh_cv_c_signed" >&5
+echo "${ECHO_T}$bh_cv_c_signed" >&6
+  if test $bh_cv_c_signed = no; then
+
+cat >>confdefs.h <<\_ACEOF
+#define signed
+_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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_c_inline=$ac_kw; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+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
+
+# 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 eval "test \"\${$as_ac_Header+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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&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 off_t" >&5
+echo $ECHO_N "checking for off_t... $ECHO_C" >&6
+if test "${ac_cv_type_off_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
+int
+main ()
+{
+if ((off_t *) 0)
+  return 0;
+if (sizeof (off_t))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_type_off_t=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_off_t=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_off_t" >&5
+echo "${ECHO_T}$ac_cv_type_off_t" >&6
+if test $ac_cv_type_off_t = yes; then
+  :
+else
+
+cat >>confdefs.h <<_ACEOF
+#define off_t long
+_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
+int
+main ()
+{
+if ((size_t *) 0)
+  return 0;
+if (sizeof (size_t))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 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
+_ACEOF
+
+fi
+
+
+  echo "$as_me:$LINENO: checking for long long" >&5
+echo $ECHO_N "checking for long long... $ECHO_C" >&6
+if test "${ac_cv_type_long_long+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.  */
+long long ll = 1LL; int i = 63;
+int
+main ()
+{
+long long llmax = (long long) -1;
+     return ll << i | ll >> i | llmax / ll | llmax % ll;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_type_long_long=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_long_long=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_long_long" >&5
+echo "${ECHO_T}$ac_cv_type_long_long" >&6
+  if test $ac_cv_type_long_long = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_LONG_LONG 1
+_ACEOF
+
+  fi
+
+
+  echo "$as_me:$LINENO: checking for long double" >&5
+echo $ECHO_N "checking for long double... $ECHO_C" >&6
+if test "${gt_cv_c_long_double+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  if test "$GCC" = yes; then
+       gt_cv_c_long_double=yes
+     else
+       cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+
+         /* The Stardent Vistra knows sizeof(long double), but does not support it.  */
+         long double foo = 0.0;
+         /* On Ultrix 4.3 cc, long double is 4 and double is 8.  */
+         int array [2*(sizeof(long double) >= sizeof(double)) - 1];
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  gt_cv_c_long_double=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+gt_cv_c_long_double=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+     fi
+fi
+echo "$as_me:$LINENO: result: $gt_cv_c_long_double" >&5
+echo "${ECHO_T}$gt_cv_c_long_double" >&6
+  if test $gt_cv_c_long_double = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_LONG_DOUBLE 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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 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.  */
+#include <wchar.h>
+       wint_t foo = (wchar_t)'\0';
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 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 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 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 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 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 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 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
+
+
+
+
+  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 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 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 _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 { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&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 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
+
+# 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));
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 conftest.err conftest.$ac_objext \
+      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
+#  if 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);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 conftest.err conftest.$ac_objext \
+      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=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 eval "test \"\${$as_ac_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 gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+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
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&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.  */
+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 ()
+{
+  exit (find_stack_direction () < 0);
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&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 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 eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 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 { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&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; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_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 c0in at altern.org ##
+## ------------------------------ ##
+_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 eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&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 eval "test \"\${$as_ac_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 gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+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
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&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 !STDC_HEADERS && !HAVE_STDLIB_H
+char *malloc ();
+#endif
+
+/* This mess was copied from the GNU getpagesize.h.  */
+#if !HAVE_GETPAGESIZE
+/* Assume that all systems that can run configure have sys/param.h.  */
+# if !HAVE_SYS_PARAM_H
+#  define HAVE_SYS_PARAM_H 1
+# endif
+
+# ifdef _SC_PAGESIZE
+#  define getpagesize() sysconf(_SC_PAGESIZE)
+# else /* no _SC_PAGESIZE */
+#  if 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)
+    exit (1);
+  for (i = 0; i < pagesize; ++i)
+    *(data + i) = rand ();
+  umask (0);
+  fd = creat ("conftest.mmap", 0600);
+  if (fd < 0)
+    exit (1);
+  if (write (fd, data, pagesize) != pagesize)
+    exit (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)
+    exit (1);
+  data2 = (char *) malloc (2 * pagesize);
+  if (!data2)
+    exit (1);
+  data2 += (pagesize - ((long) data2 & (pagesize - 1))) & (pagesize - 1);
+  if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE,
+		     MAP_PRIVATE | MAP_FIXED, fd, 0L))
+    exit (1);
+  for (i = 0; i < pagesize; ++i)
+    if (*(data + i) != *(data2 + i))
+      exit (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)
+    exit (1);
+  if (read (fd, data3, pagesize) != pagesize)
+    exit (1);
+  for (i = 0; i < pagesize; ++i)
+    if (*(data + i) != *(data3 + i))
+      exit (1);
+  close (fd);
+  exit (0);
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&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 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 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"
+
+
+
+
+  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
+
+      if test "$cross_compiling" = yes; then
+
+          # Guess based on the CPU.
+          case "$host_cpu" in
+            alpha* | i3456786 | 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
+#ifdef __cplusplus
+sigfpe_handler (int sig)
+#else
+sigfpe_handler (sig) int sig;
+#endif
+{
+  /* 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 { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&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 gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+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 unsigned long long" >&5
+echo $ECHO_N "checking for unsigned long long... $ECHO_C" >&6
+if test "${ac_cv_type_unsigned_long_long+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.  */
+unsigned long long ull = 1ULL; int i = 63;
+int
+main ()
+{
+unsigned long long ullmax = (unsigned long long) -1;
+     return ull << i | ull >> i | ullmax / ull | ullmax % ull;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_type_unsigned_long_long=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_type_unsigned_long_long=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $ac_cv_type_unsigned_long_long" >&5
+echo "${ECHO_T}$ac_cv_type_unsigned_long_long" >&6
+  if test $ac_cv_type_unsigned_long_long = yes; then
+
+cat >>confdefs.h <<\_ACEOF
+#define HAVE_UNSIGNED_LONG_LONG 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 = 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
+
+
+  echo "$as_me:$LINENO: checking for inttypes.h" >&5
+echo $ECHO_N "checking for inttypes.h... $ECHO_C" >&6
+if test "${gt_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 ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  gt_cv_header_inttypes_h=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+gt_cv_header_inttypes_h=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+echo "$as_me:$LINENO: result: $gt_cv_header_inttypes_h" >&5
+echo "${ECHO_T}$gt_cv_header_inttypes_h" >&6
+  if test $gt_cv_header_inttypes_h = yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_INTTYPES_H 1
+_ACEOF
+
+  fi
+
+
+
+  if test $gt_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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 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
+
+  fi
+
+
+
+for ac_header in stdint.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 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 { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&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; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_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 c0in at altern.org ##
+## ------------------------------ ##
+_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 eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&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
+  result=
+  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
+  result=yes
+fi
+rm -f conftest*
+
+  if test -z "$result"; 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>
+int
+main ()
+{
+static int test_array [1 - 2 * !((~(size_t)0 / 10) >= 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 * !((~(size_t)0 / 10) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 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 * !((~(size_t)0 / 10) < 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 * !((~(size_t)0 / 10) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 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 conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f 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 * !((~(size_t)0 / 10) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) res_hi=$ac_lo;;
+'') result=? ;;
+esac
+else
+  if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: internal error: not reached in cross-compile" >&5
+echo "$as_me: error: internal error: not reached in cross-compile" >&2;}
+   { (exit 1); exit 1; }; }
+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>
+long longval () { return ~(size_t)0 / 10; }
+unsigned long ulongval () { return ~(size_t)0 / 10; }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    exit (1);
+  if ((~(size_t)0 / 10) < 0)
+    {
+      long i = longval ();
+      if (i != (~(size_t)0 / 10))
+	exit (1);
+      fprintf (f, "%ld\n", i);
+    }
+  else
+    {
+      unsigned long i = ulongval ();
+      if (i != (~(size_t)0 / 10))
+	exit (1);
+      fprintf (f, "%lu\n", i);
+    }
+  exit (ferror (f) || fclose (f) != 0);
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  res_hi=`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 )
+result=?
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+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 * !((~(size_t)0 % 10) >= 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 * !((~(size_t)0 % 10) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 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 * !((~(size_t)0 % 10) < 0)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 * !((~(size_t)0 % 10) >= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 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 conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f 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 * !((~(size_t)0 % 10) <= $ac_mid)];
+test_array [0] = 0
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) res_lo=$ac_lo;;
+'') result=? ;;
+esac
+else
+  if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: internal error: not reached in cross-compile" >&5
+echo "$as_me: error: internal error: not reached in cross-compile" >&2;}
+   { (exit 1); exit 1; }; }
+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>
+long longval () { return ~(size_t)0 % 10; }
+unsigned long ulongval () { return ~(size_t)0 % 10; }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    exit (1);
+  if ((~(size_t)0 % 10) < 0)
+    {
+      long i = longval ();
+      if (i != (~(size_t)0 % 10))
+	exit (1);
+      fprintf (f, "%ld\n", i);
+    }
+  else
+    {
+      unsigned long i = ulongval ();
+      if (i != (~(size_t)0 % 10))
+	exit (1);
+      fprintf (f, "%lu\n", i);
+    }
+  exit (ferror (f) || fclose (f) != 0);
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  res_lo=`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 )
+result=?
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 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 conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f 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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in
+?*) fits_in_uint=$ac_lo;;
+'') result=? ;;
+esac
+else
+  if test "$cross_compiling" = yes; then
+  { { echo "$as_me:$LINENO: error: internal error: not reached in cross-compile" >&5
+echo "$as_me: error: internal error: not reached in cross-compile" >&2;}
+   { (exit 1); exit 1; }; }
+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>
+long longval () { return sizeof (size_t) <= sizeof (unsigned int); }
+unsigned long ulongval () { return sizeof (size_t) <= sizeof (unsigned int); }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    exit (1);
+  if ((sizeof (size_t) <= sizeof (unsigned int)) < 0)
+    {
+      long i = longval ();
+      if (i != (sizeof (size_t) <= sizeof (unsigned int)))
+	exit (1);
+      fprintf (f, "%ld\n", i);
+    }
+  else
+    {
+      unsigned long i = ulongval ();
+      if (i != (sizeof (size_t) <= sizeof (unsigned int)))
+	exit (1);
+      fprintf (f, "%lu\n", i);
+    }
+  exit (ferror (f) || fclose (f) != 0);
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&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 )
+result=?
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+fi
+rm -f conftest.val
+    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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  fits_in_uint=0
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+    fi
+    if test -z "$result"; then
+      if test "$fits_in_uint" = 1; then
+        result="$res_hi$res_lo"U
+      else
+        result="$res_hi$res_lo"UL
+      fi
+    else
+            result='~(size_t)0'
+    fi
+  fi
+  echo "$as_me:$LINENO: result: $result" >&5
+echo "${ECHO_T}$result" >&6
+  if test "$result" != yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define SIZE_MAX $result
+_ACEOF
+
+  fi
+
+
+
+
+
+for ac_header in stdint.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 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 { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&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; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_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 c0in at altern.org ##
+## ------------------------------ ##
+_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 eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&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_CPPFLAGS="$CPPFLAGS"
+     CPPFLAGS="$CPPFLAGS -I/System/Library/Frameworks/CoreFoundation.framework/Headers"
+     gt_save_LIBS="$LIBS"
+     LIBS="$LIBS -framework CoreFoundation"
+     cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <CFPreferences.h>
+int
+main ()
+{
+CFPreferencesCopyAppValue(NULL, NULL)
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+     CPPFLAGS="$gt_save_CPPFLAGS"
+     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_CPPFLAGS="$CPPFLAGS"
+     CPPFLAGS="$CPPFLAGS -I/System/Library/Frameworks/CoreFoundation.framework/Headers"
+     gt_save_LIBS="$LIBS"
+     LIBS="$LIBS -framework CoreFoundation"
+     cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <CFLocale.h>
+int
+main ()
+{
+CFLocaleCopyCurrent();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+     CPPFLAGS="$gt_save_CPPFLAGS"
+     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
+
+
+
+      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 or --without-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;
+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.
+      if "$acl_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
+	test "$with_gnu_ld" != no && break
+      else
+	test "$with_gnu_ld" != yes && break
+      fi
+    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.
+if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
+  acl_cv_prog_gnu_ld=yes
+else
+  acl_cv_prog_gnu_ld=no
+fi
+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"
+  libext="$acl_cv_libext"
+  shlibext="$acl_cv_shlibext"
+  hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
+  hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
+  hardcode_direct="$acl_cv_hardcode_direct"
+  hardcode_minus_L="$acl_cv_hardcode_minus_L"
+  sys_lib_search_path_spec="$acl_cv_sys_lib_search_path_spec"
+  sys_lib_dlsearch_path_spec="$acl_cv_sys_lib_dlsearch_path_spec"
+
+
+
+
+
+
+
+    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 or --without-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/lib"
+      fi
+    fi
+
+fi;
+      LIBICONV=
+  LTLIBICONV=
+  INCICONV=
+  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=
+          if test $use_additional = yes; then
+            if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then
+              found_dir="$additional_libdir"
+              found_so="$additional_libdir/lib$name.$shlibext"
+              if test -f "$additional_libdir/lib$name.la"; then
+                found_la="$additional_libdir/lib$name.la"
+              fi
+            else
+              if test -f "$additional_libdir/lib$name.$libext"; then
+                found_dir="$additional_libdir"
+                found_a="$additional_libdir/lib$name.$libext"
+                if test -f "$additional_libdir/lib$name.la"; then
+                  found_la="$additional_libdir/lib$name.la"
+                fi
+              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 "$shlibext" && test -f "$dir/lib$name.$shlibext"; then
+                    found_dir="$dir"
+                    found_so="$dir/lib$name.$shlibext"
+                    if test -f "$dir/lib$name.la"; then
+                      found_la="$dir/lib$name.la"
+                    fi
+                  else
+                    if test -f "$dir/lib$name.$libext"; then
+                      found_dir="$dir"
+                      found_a="$dir/lib$name.$libext"
+                      if test -f "$dir/lib$name.la"; then
+                        found_la="$dir/lib$name.la"
+                      fi
+                    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 "X$found_dir" = "X/usr/lib"; 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 "$hardcode_direct" = yes; then
+                                                      LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so"
+                else
+                  if test -n "$hardcode_libdir_flag_spec" && test "$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 "$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
+              */lib | */lib/)
+                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'`
+                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*) 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/lib"; then
+                      haveit=
+                      if test "X$additional_libdir" = "X/usr/local/lib"; then
+                        if test -n "$GCC"; then
+                          case $host_os in
+                            linux*) 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//'`
+                                                            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
+                    ;;
+                  -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 "$hardcode_libdir_separator"; then
+                        alldirs=
+      for found_dir in $rpathdirs; do
+        alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir"
+      done
+            acl_save_libdir="$libdir"
+      libdir="$alldirs"
+      eval flag=\"$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=\"$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
+
+
+
+
+
+
+
+
+  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
+int
+main ()
+{
+if ((ptrdiff_t *) 0)
+  return 0;
+if (sizeof (ptrdiff_t))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 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 argz.h limits.h locale.h nl_types.h malloc.h stddef.h \
+stdlib.h string.h unistd.h sys/param.h
+do
+as_ac_Header=`echo "ac_cv_header_$ac_header" | $as_tr_sh`
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 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 { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&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; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_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 c0in at altern.org ##
+## ------------------------------ ##
+_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 eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&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 getcwd getegid geteuid getgid getuid \
+mempcpy munmap putenv setenv setlocale snprintf stpcpy strcasecmp strdup \
+strtoul tsearch wcslen __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 eval "test \"\${$as_ac_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 gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+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
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 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 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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 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
+
+
+
+  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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 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
+
+
+
+
+
+
+
+          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 { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  am_cv_func_iconv=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+      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 { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 conftest.err conftest.$ac_objext \
+      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
+
+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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 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_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 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 conftest.err conftest.$ac_objext \
+      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
+
+  if test $ac_cv_header_locale_h = yes; then
+
+  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 { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 conftest.err conftest.$ac_objext \
+      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
+
+  fi
+
+  if test -n "$INTL_MACOSX_LIBS"; then
+    CPPFLAGS="$CPPFLAGS -I/System/Library/Frameworks/CoreFoundation.framework/Headers"
+  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 $as_executable_p "$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
+
+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 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_CPPFLAGS="$CPPFLAGS"
+     CPPFLAGS="$CPPFLAGS -I/System/Library/Frameworks/CoreFoundation.framework/Headers"
+     gt_save_LIBS="$LIBS"
+     LIBS="$LIBS -framework CoreFoundation"
+     cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <CFPreferences.h>
+int
+main ()
+{
+CFPreferencesCopyAppValue(NULL, NULL)
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+     CPPFLAGS="$gt_save_CPPFLAGS"
+     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_CPPFLAGS="$CPPFLAGS"
+     CPPFLAGS="$CPPFLAGS -I/System/Library/Frameworks/CoreFoundation.framework/Headers"
+     gt_save_LIBS="$LIBS"
+     LIBS="$LIBS -framework CoreFoundation"
+     cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+#include <CFLocale.h>
+int
+main ()
+{
+CFLocaleCopyCurrent();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+     CPPFLAGS="$gt_save_CPPFLAGS"
+     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 whether NLS is requested" >&5
+echo $ECHO_N "checking whether NLS is requested... $ECHO_C" >&6
+    # Check whether --enable-nls or --disable-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
+
+
+
+
+    BUILD_INCLUDED_LIBINTL=no
+    USE_INCLUDED_LIBINTL=no
+
+  LIBINTL=
+  LTLIBINTL=
+  POSUB=
+
+    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 or --without-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
+
+
+
+
+
+
+        echo "$as_me:$LINENO: checking for GNU gettext in libc" >&5
+echo $ECHO_N "checking for GNU gettext in libc... $ECHO_C" >&6
+if test "${gt_cv_func_gnugettext1_libc+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>
+extern int _nl_msg_cat_cntr;
+extern int *_nl_domain_bindings;
+int
+main ()
+{
+bindtextdomain ("", "");
+return * gettext ("") + _nl_msg_cat_cntr + *_nl_domain_bindings
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  gt_cv_func_gnugettext1_libc=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+gt_cv_func_gnugettext1_libc=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: $gt_cv_func_gnugettext1_libc" >&5
+echo "${ECHO_T}$gt_cv_func_gnugettext1_libc" >&6
+
+        if test "$gt_cv_func_gnugettext1_libc" != "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 or --without-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/lib"
+      fi
+    fi
+
+fi;
+      LIBINTL=
+  LTLIBINTL=
+  INCINTL=
+  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=
+          if test $use_additional = yes; then
+            if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then
+              found_dir="$additional_libdir"
+              found_so="$additional_libdir/lib$name.$shlibext"
+              if test -f "$additional_libdir/lib$name.la"; then
+                found_la="$additional_libdir/lib$name.la"
+              fi
+            else
+              if test -f "$additional_libdir/lib$name.$libext"; then
+                found_dir="$additional_libdir"
+                found_a="$additional_libdir/lib$name.$libext"
+                if test -f "$additional_libdir/lib$name.la"; then
+                  found_la="$additional_libdir/lib$name.la"
+                fi
+              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 "$shlibext" && test -f "$dir/lib$name.$shlibext"; then
+                    found_dir="$dir"
+                    found_so="$dir/lib$name.$shlibext"
+                    if test -f "$dir/lib$name.la"; then
+                      found_la="$dir/lib$name.la"
+                    fi
+                  else
+                    if test -f "$dir/lib$name.$libext"; then
+                      found_dir="$dir"
+                      found_a="$dir/lib$name.$libext"
+                      if test -f "$dir/lib$name.la"; then
+                        found_la="$dir/lib$name.la"
+                      fi
+                    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 "X$found_dir" = "X/usr/lib"; 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 "$hardcode_direct" = yes; then
+                                                      LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so"
+                else
+                  if test -n "$hardcode_libdir_flag_spec" && test "$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 "$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
+              */lib | */lib/)
+                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'`
+                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*) 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/lib"; then
+                      haveit=
+                      if test "X$additional_libdir" = "X/usr/local/lib"; then
+                        if test -n "$GCC"; then
+                          case $host_os in
+                            linux*) 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//'`
+                                                            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
+                    ;;
+                  -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 "$hardcode_libdir_separator"; then
+                        alldirs=
+      for found_dir in $rpathdirs; do
+        alldirs="${alldirs}${alldirs:+$hardcode_libdir_separator}$found_dir"
+      done
+            acl_save_libdir="$libdir"
+      libdir="$alldirs"
+      eval flag=\"$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=\"$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 test "${gt_cv_func_gnugettext1_libintl+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>
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);
+int
+main ()
+{
+bindtextdomain ("", "");
+return * gettext ("") + _nl_msg_cat_cntr + *_nl_expand_alias ("")
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  gt_cv_func_gnugettext1_libintl=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+gt_cv_func_gnugettext1_libintl=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+                        if test "$gt_cv_func_gnugettext1_libintl" != 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>
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias (const char *);
+int
+main ()
+{
+bindtextdomain ("", "");
+return * gettext ("") + _nl_msg_cat_cntr + *_nl_expand_alias ("")
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  LIBINTL="$LIBINTL $LIBICONV"
+                LTLIBINTL="$LTLIBINTL $LTLIBICONV"
+                gt_cv_func_gnugettext1_libintl=yes
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+            fi
+            CPPFLAGS="$gt_save_CPPFLAGS"
+            LIBS="$gt_save_LIBS"
+fi
+echo "$as_me:$LINENO: result: $gt_cv_func_gnugettext1_libintl" >&5
+echo "${ECHO_T}$gt_cv_func_gnugettext1_libintl" >&6
+        fi
+
+                                        if test "$gt_cv_func_gnugettext1_libc" = "yes" \
+           || { test "$gt_cv_func_gnugettext1_libintl" = "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"
+        LTLIBINTL="\${top_builddir}/intl/libintl.a $LTLIBICONV"
+        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 test "$gt_cv_func_gnugettext1_libintl" = "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 test "$gt_cv_func_gnugettext1_libintl" = "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 $as_executable_p "$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
+
+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 $as_executable_p "$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
+
+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
+
+  CC=$ac_ct_CC
+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 $as_executable_p "$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
+
+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 "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_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 $as_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="cc"
+    echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+done
+
+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
+
+  CC=$ac_ct_CC
+else
+  CC="$ac_cv_prog_CC"
+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 $as_executable_p "$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
+
+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
+  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 $as_executable_p "$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
+
+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
+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 $as_executable_p "$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
+
+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
+
+  CC=$ac_ct_CC
+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`
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler --version </dev/null >&5\"") >&5
+  (eval $ac_compiler --version </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -v </dev/null >&5\"") >&5
+  (eval $ac_compiler -v </dev/null >&5) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }
+{ (eval echo "$as_me:$LINENO: \"$ac_compiler -V </dev/null >&5\"") >&5
+  (eval $ac_compiler -V </dev/null >&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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 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
+CFLAGS="-g"
+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
+  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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_prog_cc_g=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_cv_prog_cc_g=no
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+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 ANSI C" >&5
+echo $ECHO_N "checking for $CC option to accept ANSI C... $ECHO_C" >&6
+if test "${ac_cv_prog_cc_stdc+set}" = set; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  ac_cv_prog_cc_stdc=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 -std1 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 -std1.  */
+int osf4_cc_array ['\x00' == 0 ? 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
+# Don't try gcc -ansi; that turns off useful extensions and
+# breaks some systems' header files.
+# AIX			-qlanglvl=ansi
+# Ultrix and OSF/1	-std1
+# HP-UX 10.20 and later	-Ae
+# HP-UX older versions	-Aa -D_HPUX_SOURCE
+# SVR4			-Xc -D__EXTENSIONS__
+for ac_arg in "" -qlanglvl=ansi -std1 -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
+do
+  CC="$ac_save_CC $ac_arg"
+  rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_prog_cc_stdc=$ac_arg
+break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext
+done
+rm -f conftest.$ac_ext conftest.$ac_objext
+CC=$ac_save_CC
+
+fi
+
+case "x$ac_cv_prog_cc_stdc" in
+  x|xno)
+    echo "$as_me:$LINENO: result: none needed" >&5
+echo "${ECHO_T}none needed" >&6 ;;
+  *)
+    echo "$as_me:$LINENO: result: $ac_cv_prog_cc_stdc" >&5
+echo "${ECHO_T}$ac_cv_prog_cc_stdc" >&6
+    CC="$CC $ac_cv_prog_cc_stdc" ;;
+esac
+
+# Some people use a C++ compiler to compile C.  Since we use `exit',
+# in C++ we need to declare it.  In case someone uses the same compiler
+# for both compiling C and C++ we need to have the C++ compiler decide
+# the declaration of exit, since it's the most demanding environment.
+cat >conftest.$ac_ext <<_ACEOF
+#ifndef __cplusplus
+  choke me
+#endif
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  for ac_declaration in \
+   '' \
+   'extern "C" void std::exit (int) throw (); using std::exit;' \
+   'extern "C" void std::exit (int); using std::exit;' \
+   'extern "C" void exit (int) throw ();' \
+   'extern "C" void exit (int);' \
+   'void exit (int);'
+do
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_declaration
+#include <stdlib.h>
+int
+main ()
+{
+exit (42);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  :
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+continue
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+  cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h.  */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h.  */
+$ac_declaration
+int
+main ()
+{
+exit (42);
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+rm -f conftest*
+if test -n "$ac_declaration"; then
+  echo '#ifdef __cplusplus' >>confdefs.h
+  echo $ac_declaration      >>confdefs.h
+  echo '#endif'             >>confdefs.h
+fi
+
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+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
+      : > 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/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
+      # (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored.
+      if grep 'ignoring option' 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 gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char strerror ();
+int
+main ()
+{
+strerror ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 conftest.err conftest.$ac_objext \
+      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
+
+ac_path_x_has_been_run=yes
+
+# Check whether --with-x or --without-x was given.
+if test "${with_x+set}" = set; then
+  withval="$with_x"
+
+fi;
+# $have_x is `yes', `no', `disabled', or empty when we do not yet know.
+if test "x$with_x" = xno; then
+  # The user explicitly disabled X.
+  have_x=disabled
+else
+  if test "x$x_includes" != xNONE && test "x$x_libraries" != xNONE; then
+    # Both variables are already set.
+    have_x=yes
+  else
+    if 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 -fr conftest.dir
+if mkdir conftest.dir; then
+  cd conftest.dir
+  # Make sure to not put "make" in the Imakefile rules, since we grep it out.
+  cat >Imakefile <<'_ACEOF'
+acfindx:
+	@echo 'ac_im_incroot="${INCROOT}"; ac_im_usrlibdir="${USRLIBDIR}"; ac_im_libdir="${LIBDIR}"'
+_ACEOF
+  if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then
+    # GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+    eval `${MAKE-make} acfindx 2>/dev/null | grep -v make`
+    # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR.
+    for ac_extension in a so sl; do
+      if test ! -f $ac_im_usrlibdir/libX11.$ac_extension &&
+	 test -f $ac_im_libdir/libX11.$ac_extension; then
+	ac_im_usrlibdir=$ac_im_libdir; break
+      fi
+    done
+    # Screen out bogus values from the imake configuration.  They are
+    # bogus both because they are the default anyway, and because
+    # using them would break gcc on systems where it needs fixed includes.
+    case $ac_im_incroot in
+	/usr/include) ;;
+	*) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;;
+    esac
+    case $ac_im_usrlibdir in
+	/usr/lib | /lib) ;;
+	*) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;;
+    esac
+  fi
+  cd ..
+  rm -fr 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 a specified header file.
+  # 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 { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&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; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_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 { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi # $ac_x_libraries = no
+
+if test "$ac_x_includes" = no || test "$ac_x_libraries" = no; then
+  # Didn't find X anywhere.  Cache the known absence of X.
+  ac_cv_have_x="have_x=no"
+else
+  # Record where we found X for the cache.
+  ac_cv_have_x="have_x=yes \
+		ac_x_includes=$ac_x_includes ac_x_libraries=$ac_x_libraries"
+fi
+fi
+
+  fi
+  eval "$ac_cv_have_x"
+fi # $with_x != no
+
+if test "$have_x" != yes; then
+  echo "$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"
+  # It might be that x_includes is empty (headers are found in the
+  # standard search path. Then output the corresponding message
+  ac_out_x_includes=$x_includes
+  test "x$x_includes" = x && ac_out_x_includes="in standard search path"
+  echo "$as_me:$LINENO: result: libraries $x_libraries, headers $ac_out_x_includes" >&5
+echo "${ECHO_T}libraries $x_libraries, headers $ac_out_x_includes" >&6
+fi
+
+
+if test "x$ac_path_x_has_been_run" != xyes; then
+  echo "$as_me:$LINENO: checking for X" >&5
+echo $ECHO_N "checking for X... $ECHO_C" >&6
+
+ac_path_x_has_been_run=yes
+
+# Check whether --with-x or --without-x was given.
+if test "${with_x+set}" = set; then
+  withval="$with_x"
+
+fi;
+# $have_x is `yes', `no', `disabled', or empty when we do not yet know.
+if test "x$with_x" = xno; then
+  # The user explicitly disabled X.
+  have_x=disabled
+else
+  if test "x$x_includes" != xNONE && test "x$x_libraries" != xNONE; then
+    # Both variables are already set.
+    have_x=yes
+  else
+    if 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 -fr conftest.dir
+if mkdir conftest.dir; then
+  cd conftest.dir
+  # Make sure to not put "make" in the Imakefile rules, since we grep it out.
+  cat >Imakefile <<'_ACEOF'
+acfindx:
+	@echo 'ac_im_incroot="${INCROOT}"; ac_im_usrlibdir="${USRLIBDIR}"; ac_im_libdir="${LIBDIR}"'
+_ACEOF
+  if (xmkmf) >/dev/null 2>/dev/null && test -f Makefile; then
+    # GNU make sometimes prints "make[1]: Entering...", which would confuse us.
+    eval `${MAKE-make} acfindx 2>/dev/null | grep -v make`
+    # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR.
+    for ac_extension in a so sl; do
+      if test ! -f $ac_im_usrlibdir/libX11.$ac_extension &&
+	 test -f $ac_im_libdir/libX11.$ac_extension; then
+	ac_im_usrlibdir=$ac_im_libdir; break
+      fi
+    done
+    # Screen out bogus values from the imake configuration.  They are
+    # bogus both because they are the default anyway, and because
+    # using them would break gcc on systems where it needs fixed includes.
+    case $ac_im_incroot in
+	/usr/include) ;;
+	*) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;;
+    esac
+    case $ac_im_usrlibdir in
+	/usr/lib | /lib) ;;
+	*) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;;
+    esac
+  fi
+  cd ..
+  rm -fr 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 a specified header file.
+  # 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 { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&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; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_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 { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi # $ac_x_libraries = no
+
+if test "$ac_x_includes" = no || test "$ac_x_libraries" = no; then
+  # Didn't find X anywhere.  Cache the known absence of X.
+  ac_cv_have_x="have_x=no"
+else
+  # Record where we found X for the cache.
+  ac_cv_have_x="have_x=yes \
+		ac_x_includes=$ac_x_includes ac_x_libraries=$ac_x_libraries"
+fi
+fi
+
+  fi
+  eval "$ac_cv_have_x"
+fi # $with_x != no
+
+if test "$have_x" != yes; then
+  echo "$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"
+  # It might be that x_includes is empty (headers are found in the
+  # standard search path. Then output the corresponding message
+  ac_out_x_includes=$x_includes
+  test "x$x_includes" = x && ac_out_x_includes="in standard search path"
+  echo "$as_me:$LINENO: result: libraries $x_libraries, headers $ac_out_x_includes" >&5
+echo "${ECHO_T}libraries $x_libraries, headers $ac_out_x_includes" >&6
+fi
+
+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 . . . .
+    case `(uname -sr) 2>/dev/null` in
+    "SunOS 5"*)
+      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"
+      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 { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_R_nospace=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_R_nospace=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+      if test $ac_R_nospace = yes; then
+	echo "$as_me:$LINENO: result: no" >&5
+echo "${ECHO_T}no" >&6
+	X_LIBS="$X_LIBS -R$x_libraries"
+      else
+	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 { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_R_space=yes
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+ac_R_space=no
+fi
+rm -f conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+	if test $ac_R_space = yes; then
+	  echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+	  X_LIBS="$X_LIBS -R $x_libraries"
+	else
+	  echo "$as_me:$LINENO: result: neither works" >&5
+echo "${ECHO_T}neither works" >&6
+	fi
+      fi
+      LIBS=$ac_xsave_LIBS
+    esac
+  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 gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char XOpenDisplay ();
+int
+main ()
+{
+XOpenDisplay ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dnet_ntoa ();
+int
+main ()
+{
+dnet_ntoa ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 conftest.err conftest.$ac_objext \
+      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 gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char dnet_ntoa ();
+int
+main ()
+{
+dnet_ntoa ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 conftest.err conftest.$ac_objext \
+      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 conftest.err conftest.$ac_objext \
+      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 gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+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
+#else
+char (*f) () = gethostbyname;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != gethostbyname;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 conftest.err conftest.$ac_objext \
+      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 gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char gethostbyname ();
+int
+main ()
+{
+gethostbyname ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 conftest.err conftest.$ac_objext \
+      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 gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char gethostbyname ();
+int
+main ()
+{
+gethostbyname ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 conftest.err conftest.$ac_objext \
+      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 gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+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
+#else
+char (*f) () = connect;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != connect;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 conftest.err conftest.$ac_objext \
+      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 gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char connect ();
+int
+main ()
+{
+connect ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 conftest.err conftest.$ac_objext \
+      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 gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+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
+#else
+char (*f) () = remove;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != remove;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 conftest.err conftest.$ac_objext \
+      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 gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char remove ();
+int
+main ()
+{
+remove ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 conftest.err conftest.$ac_objext \
+      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 gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+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
+#else
+char (*f) () = shmat;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != shmat;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 conftest.err conftest.$ac_objext \
+      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 gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char shmat ();
+int
+main ()
+{
+shmat ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 conftest.err conftest.$ac_objext \
+      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 gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char IceConnectionNumber ();
+int
+main ()
+{
+IceConnectionNumber ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 conftest.err conftest.$ac_objext \
+      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 ${LIBS} ${X_EXTRA_LIBS}"
+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 $as_executable_p "$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
+
+  ;;
+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 $as_executable_p "$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
+
+  ;;
+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
+
+  PKG_CONFIG=$ac_pt_PKG_CONFIG
+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 "$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
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+        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
+else
+	pkg_failed=untried
+fi
+
+if test $pkg_failed = yes; then
+	XFT_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "xft"`
+	# Put the nasty error message in config.log where it belongs
+	echo "$XFT_PKG_ERRORS" 1>&5
+
+	{ { echo "$as_me:$LINENO: error: Package requirements (xft) were not met.
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively you may set the XFT_CFLAGS and XFT_LIBS environment variables
+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.
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively you may set the XFT_CFLAGS and XFT_LIBS environment variables
+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 XFT_CFLAGS and XFT_LIBS environment variables
+to avoid the need to call pkg-config.  See the pkg-config man page for
+more details.
+
+To get pkg-config, see <http://www.freedesktop.org/software/pkgconfig>.
+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 XFT_CFLAGS and XFT_LIBS environment variables
+to avoid the need to call pkg-config.  See the pkg-config man page for
+more details.
+
+To get pkg-config, see <http://www.freedesktop.org/software/pkgconfig>.
+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 or --disable-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 gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char XineramaQueryScreens ();
+int
+main ()
+{
+XineramaQueryScreens ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 conftest.err conftest.$ac_objext \
+      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 or --disable-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 or --disable-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 "$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
+else
+	pkg_failed=untried
+fi
+if test -n "$PKG_CONFIG"; then
+        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
+else
+	pkg_failed=untried
+fi
+
+if test $pkg_failed = yes; then
+	PACKAGE_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$pkg_modules"`
+	# Put the nasty error message in config.log where it belongs
+	echo "$PACKAGE_PKG_ERRORS" 1>&5
+
+	{ { echo "$as_me:$LINENO: error: Package requirements ($pkg_modules) were not met.
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively you may set the PACKAGE_CFLAGS and PACKAGE_LIBS environment variables
+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.
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+Alternatively you may set the PACKAGE_CFLAGS and PACKAGE_LIBS environment variables
+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 PACKAGE_CFLAGS and PACKAGE_LIBS environment variables
+to avoid the need to call pkg-config.  See the pkg-config man page for
+more details.
+
+To get pkg-config, see <http://www.freedesktop.org/software/pkgconfig>.
+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 PACKAGE_CFLAGS and PACKAGE_LIBS environment variables
+to avoid the need to call pkg-config.  See the pkg-config man page for
+more details.
+
+To get pkg-config, see <http://www.freedesktop.org/software/pkgconfig>.
+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 eval "test \"\${$as_ac_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 gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+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
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&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 gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+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
+#else
+char (*f) () = _doprnt;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != _doprnt;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 conftest.err conftest.$ac_objext \
+      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 eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 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 { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&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; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_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 c0in at altern.org ##
+## ------------------------------ ##
+_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 eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&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 eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 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 { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&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; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_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 c0in at altern.org ##
+## ------------------------------ ##
+_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 eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&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 eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo "$as_me:$LINENO: checking for $ac_header" >&5
+echo $ECHO_N "checking for $ac_header... $ECHO_C" >&6
+if eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 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 { (eval echo "$as_me:$LINENO: \"$ac_cpp conftest.$ac_ext\"") >&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; then
+  if test -s conftest.err; then
+    ac_cpp_err=$ac_c_preproc_warn_flag
+    ac_cpp_err=$ac_cpp_err$ac_c_werror_flag
+  else
+    ac_cpp_err=
+  fi
+else
+  ac_cpp_err=yes
+fi
+if test -z "$ac_cpp_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 c0in at altern.org ##
+## ------------------------------ ##
+_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 eval "test \"\${$as_ac_Header+set}\" = set"; then
+  echo $ECHO_N "(cached) $ECHO_C" >&6
+else
+  eval "$as_ac_Header=\$ac_header_preproc"
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_Header'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_Header'}'`" >&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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 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 eval "test \"\${$as_ac_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 gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+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
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&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 eval "test \"\${$as_ac_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 gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+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
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&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 eval "test \"\${$as_ac_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 gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+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
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&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 eval "test \"\${$as_ac_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 gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+{
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+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
+#else
+char (*f) () = $ac_func;
+#endif
+#ifdef __cplusplus
+}
+#endif
+
+int
+main ()
+{
+return f != $ac_func;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 conftest.err conftest.$ac_objext \
+      conftest$ac_exeext conftest.$ac_ext
+fi
+echo "$as_me:$LINENO: result: `eval echo '${'$as_ac_var'}'`" >&5
+echo "${ECHO_T}`eval echo '${'$as_ac_var'}'`" >&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 x;
+  /* SunOS 4.1.1 cc rejects this.  */
+  char const *const *ccp;
+  char **p;
+  /* 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";
+  ccp = &g + (g ? g-g : 0);
+  /* HPUX 7.0 cc rejects these. */
+  ++ccp;
+  p = (char**) ccp;
+  ccp = (char const *const *) p;
+  { /* SCO 3.2v4 cc rejects this.  */
+    char *t;
+    char const *s = 0 ? (char *) 0 : (char const *) 0;
+
+    *t++ = 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;
+  }
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; then
+  ac_cv_c_inline=$ac_kw; break
+else
+  echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+fi
+rm -f conftest.err conftest.$ac_objext conftest.$ac_ext
+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
+int
+main ()
+{
+if ((pid_t *) 0)
+  return 0;
+if (sizeof (pid_t))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 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
+int
+main ()
+{
+if ((size_t *) 0)
+  return 0;
+if (sizeof (size_t))
+  return 0;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 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
+_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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 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 *tp; tp->tm_sec;
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext
+if { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 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 { (eval echo "$as_me:$LINENO: \"$ac_compile\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest.$ac_objext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 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 $as_executable_p "$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
+
+  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 gcc2 internal prototype to avoid an error.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+/* We use char because int might match the return type of a gcc2
+   builtin and then its argument prototype would still apply.  */
+char select ();
+int
+main ()
+{
+select ();
+  ;
+  return 0;
+}
+_ACEOF
+rm -f conftest.$ac_objext conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&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); } &&
+	 { ac_try='test -z "$ac_c_werror_flag"			 || test ! -s conftest.err'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; } &&
+	 { ac_try='test -s conftest$ac_exeext'
+  { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  echo "$as_me:$LINENO: \$? = $ac_status" >&5
+  (exit $ac_status); }; }; 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 conftest.err conftest.$ac_objext \
+      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, don't put newlines in cache variables' values.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+{
+  (set) 2>&1 |
+    case `(ac_space=' '; set | grep ac_space) 2>&1` in
+    *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 \
+	"s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1=\\2/p"
+      ;;
+    esac;
+} |
+  sed '
+     t clear
+     : clear
+     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
+     t end
+     /^ac_cv_env/!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 "updating cache $cache_file"
+    cat confcache >$cache_file
+  else
+    echo "not updating unwritable cache $cache_file"
+  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}'
+
+# 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
+
+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_i=`echo "$ac_i" |
+	 sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
+  # 2. Add them.
+  ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
+  ac_ltlibobjs="$ac_ltlibobjs $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 Bourne compatible
+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+"$@"}'='"$@"'
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+  set -o posix
+fi
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+fi
+
+
+# Work around bugs in pre-3.0 UWIN ksh.
+$as_unset ENV MAIL MAILPATH
+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
+  fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1; 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'`
+
+
+# PATH needs CR, and LINENO needs CR and PATH.
+# 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
+
+
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
+  # Find who we are.  Look in the path if we contain no path at all
+  # relative or not.
+  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
+
+       ;;
+  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_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
+echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+  case $CONFIG_SHELL in
+  '')
+    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=.
+  for as_base in sh bash ksh sh5; do
+	 case $as_dir in
+	 /*)
+	   if ("$as_dir/$as_base" -c '
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
+	     $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+	     $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+	     CONFIG_SHELL=$as_dir/$as_base
+	     export CONFIG_SHELL
+	     exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+	   fi;;
+	 esac
+       done
+done
+;;
+  esac
+
+  # 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 before each line; the second 'sed' does the real
+  # work.  The second script uses 'N' to pair each line-number line
+  # with the numbered line, 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
+  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
+  sed '=' <$as_myself |
+    sed '
+      N
+      s,$,-,
+      : loop
+      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+      t loop
+      s,-$,,
+      s,^['$as_cr_digits']*\n,,
+    ' >$as_me.lineno &&
+  chmod +x $as_me.lineno ||
+    { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
+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 sensible to this).
+  . ./$as_me.lineno
+  # Exit status is that of the last command.
+  exit
+}
+
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+  *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T='	' ;;
+  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+  # We could just check for DJGPP; but this test a) works b) is more generic
+  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+  if test -f conf$$.exe; then
+    # Don't use ln at all; we don't have any links
+    as_ln_s='cp -p'
+  else
+    as_ln_s='ln -s'
+  fi
+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$$.file
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p=:
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+as_executable_p="test -f"
+
+# 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'"
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" 	$as_nl"
+
+# CDPATH.
+$as_unset CDPATH
+
+exec 6>&1
+
+# Open the log real soon, to keep \$[0] and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.  Logging --version etc. is OK.
+exec 5>>config.log
+{
+  echo
+  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+} >&5
+cat >&5 <<_CSEOF
+
+This file was extended by wmcoincoin $as_me 2.5.1e, which was
+generated by GNU Autoconf 2.59.  Invocation command line was
+
+  CONFIG_FILES    = $CONFIG_FILES
+  CONFIG_HEADERS  = $CONFIG_HEADERS
+  CONFIG_LINKS    = $CONFIG_LINKS
+  CONFIG_COMMANDS = $CONFIG_COMMANDS
+  $ $0 $@
+
+_CSEOF
+echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
+echo >&5
+_ACEOF
+
+# Files that config.status was made for.
+if test -n "$ac_config_files"; then
+  echo "config_files=\"$ac_config_files\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_headers"; then
+  echo "config_headers=\"$ac_config_headers\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_links"; then
+  echo "config_links=\"$ac_config_links\"" >>$CONFIG_STATUS
+fi
+
+if test -n "$ac_config_commands"; then
+  echo "config_commands=\"$ac_config_commands\"" >>$CONFIG_STATUS
+fi
+
+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, 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.5.1e
+configured by $0, generated by GNU Autoconf 2.59,
+  with options \\"`echo "$ac_configure_args" | sed 's/[\\""\`\$]/\\\\&/g'`\\"
+
+Copyright (C) 2003 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+srcdir=$srcdir
+INSTALL="$INSTALL"
+_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
+    ;;
+  *) # This is not an option, so the user has probably given explicit
+     # arguments.
+     ac_option=$1
+     ac_need_defaults=false;;
+  esac
+
+  case $ac_option in
+  # Handling of the options.
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    ac_cs_recheck=: ;;
+  --version | --vers* | -V )
+    echo "$ac_cs_version"; exit 0 ;;
+  --he | --h)
+    # Conflict between --help and --header
+    { { echo "$as_me:$LINENO: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&5
+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 0 ;;
+  --debug | --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;;
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil | --si | --s)
+    ac_cs_silent=: ;;
+
+  # This is an error.
+  -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&5
+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" ;;
+
+  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 $SHELL $0 " $ac_configure_args \$ac_configure_extra_args " --no-create --no-recursion" >&6
+  exec $SHELL $0 $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
+fi
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+#
+# INIT-COMMANDS section.
+#
+
+# Capture the value of obsolete $ALL_LINGUAS because we need it to compute
+    # POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES, CATALOGS. But hide it
+    # from automake.
+    eval '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
+for ac_config_target in $ac_config_targets
+do
+  case "$ac_config_target" in
+  # Handling of arguments.
+  "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-1" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;;
+  "depfiles" ) CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
+  "default" ) CONFIG_COMMANDS="$CONFIG_COMMANDS default" ;;
+  "config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
+  *) { { 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 to put it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Create a temporary directory, and hook for its removal unless debugging.
+$debug ||
+{
+  trap 'exit_status=$?; rm -rf $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 -q "./confstatXXXXXX") 2>/dev/null` &&
+  test -n "$tmp" && test -d "$tmp"
+}  ||
+{
+  tmp=./confstat$$-$RANDOM
+  (umask 077 && mkdir $tmp)
+} ||
+{
+   echo "$me: cannot create a temporary directory in ." >&2
+   { (exit 1); exit 1; }
+}
+
+_ACEOF
+
+cat >>$CONFIG_STATUS <<_ACEOF
+
+#
+# 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
+  # Protect against being on the right side of a sed subst in config.status.
+  sed 's/,@/@@/; s/@,/@@/; s/,;t t\$/@;t t/; /@;t t\$/s/[\\\\&,]/\\\\&/g;
+   s/@@/,@/; s/@@/@,/; s/@;t t\$/,;t t/' >\$tmp/subs.sed <<\\CEOF
+s, at SHELL@,$SHELL,;t t
+s, at PATH_SEPARATOR@,$PATH_SEPARATOR,;t t
+s, at PACKAGE_NAME@,$PACKAGE_NAME,;t t
+s, at PACKAGE_TARNAME@,$PACKAGE_TARNAME,;t t
+s, at PACKAGE_VERSION@,$PACKAGE_VERSION,;t t
+s, at PACKAGE_STRING@,$PACKAGE_STRING,;t t
+s, at PACKAGE_BUGREPORT@,$PACKAGE_BUGREPORT,;t t
+s, at exec_prefix@,$exec_prefix,;t t
+s, at prefix@,$prefix,;t t
+s, at program_transform_name@,$program_transform_name,;t t
+s, at bindir@,$bindir,;t t
+s, at sbindir@,$sbindir,;t t
+s, at libexecdir@,$libexecdir,;t t
+s, at datadir@,$datadir,;t t
+s, at sysconfdir@,$sysconfdir,;t t
+s, at sharedstatedir@,$sharedstatedir,;t t
+s, at localstatedir@,$localstatedir,;t t
+s, at libdir@,$libdir,;t t
+s, at includedir@,$includedir,;t t
+s, at oldincludedir@,$oldincludedir,;t t
+s, at infodir@,$infodir,;t t
+s, at mandir@,$mandir,;t t
+s, at build_alias@,$build_alias,;t t
+s, at host_alias@,$host_alias,;t t
+s, at target_alias@,$target_alias,;t t
+s, at DEFS@,$DEFS,;t t
+s, at ECHO_C@,$ECHO_C,;t t
+s, at ECHO_N@,$ECHO_N,;t t
+s, at ECHO_T@,$ECHO_T,;t t
+s, at LIBS@,$LIBS,;t t
+s, at INSTALL_PROGRAM@,$INSTALL_PROGRAM,;t t
+s, at INSTALL_SCRIPT@,$INSTALL_SCRIPT,;t t
+s, at INSTALL_DATA@,$INSTALL_DATA,;t t
+s, at CYGPATH_W@,$CYGPATH_W,;t t
+s, at PACKAGE@,$PACKAGE,;t t
+s, at VERSION@,$VERSION,;t t
+s, at ACLOCAL@,$ACLOCAL,;t t
+s, at AUTOCONF@,$AUTOCONF,;t t
+s, at AUTOMAKE@,$AUTOMAKE,;t t
+s, at AUTOHEADER@,$AUTOHEADER,;t t
+s, at MAKEINFO@,$MAKEINFO,;t t
+s, at AMTAR@,$AMTAR,;t t
+s, at install_sh@,$install_sh,;t t
+s, at STRIP@,$STRIP,;t t
+s, at ac_ct_STRIP@,$ac_ct_STRIP,;t t
+s, at INSTALL_STRIP_PROGRAM@,$INSTALL_STRIP_PROGRAM,;t t
+s, at AWK@,$AWK,;t t
+s, at SET_MAKE@,$SET_MAKE,;t t
+s, at am__leading_dot@,$am__leading_dot,;t t
+s, at build@,$build,;t t
+s, at build_cpu@,$build_cpu,;t t
+s, at build_vendor@,$build_vendor,;t t
+s, at build_os@,$build_os,;t t
+s, at host@,$host,;t t
+s, at host_cpu@,$host_cpu,;t t
+s, at host_vendor@,$host_vendor,;t t
+s, at host_os@,$host_os,;t t
+s, at COIN_ARCH@,$COIN_ARCH,;t t
+s, at MKINSTALLDIRS@,$MKINSTALLDIRS,;t t
+s, at MSGFMT@,$MSGFMT,;t t
+s, at GMSGFMT@,$GMSGFMT,;t t
+s, at XGETTEXT@,$XGETTEXT,;t t
+s, at MSGMERGE@,$MSGMERGE,;t t
+s, at CC@,$CC,;t t
+s, at CFLAGS@,$CFLAGS,;t t
+s, at LDFLAGS@,$LDFLAGS,;t t
+s, at CPPFLAGS@,$CPPFLAGS,;t t
+s, at ac_ct_CC@,$ac_ct_CC,;t t
+s, at EXEEXT@,$EXEEXT,;t t
+s, at OBJEXT@,$OBJEXT,;t t
+s, at DEPDIR@,$DEPDIR,;t t
+s, at am__include@,$am__include,;t t
+s, at am__quote@,$am__quote,;t t
+s, at AMDEP_TRUE@,$AMDEP_TRUE,;t t
+s, at AMDEP_FALSE@,$AMDEP_FALSE,;t t
+s, at AMDEPBACKSLASH@,$AMDEPBACKSLASH,;t t
+s, at CCDEPMODE@,$CCDEPMODE,;t t
+s, at am__fastdepCC_TRUE@,$am__fastdepCC_TRUE,;t t
+s, at am__fastdepCC_FALSE@,$am__fastdepCC_FALSE,;t t
+s, at CPP@,$CPP,;t t
+s, at EGREP@,$EGREP,;t t
+s, at GLIBC2@,$GLIBC2,;t t
+s, at RANLIB@,$RANLIB,;t t
+s, at ac_ct_RANLIB@,$ac_ct_RANLIB,;t t
+s, at ALLOCA@,$ALLOCA,;t t
+s, at GLIBC21@,$GLIBC21,;t t
+s, at INTL_MACOSX_LIBS@,$INTL_MACOSX_LIBS,;t t
+s, at HAVE_POSIX_PRINTF@,$HAVE_POSIX_PRINTF,;t t
+s, at HAVE_ASPRINTF@,$HAVE_ASPRINTF,;t t
+s, at HAVE_SNPRINTF@,$HAVE_SNPRINTF,;t t
+s, at HAVE_WPRINTF@,$HAVE_WPRINTF,;t t
+s, at LIBICONV@,$LIBICONV,;t t
+s, at LTLIBICONV@,$LTLIBICONV,;t t
+s, at INTLBISON@,$INTLBISON,;t t
+s, at USE_NLS@,$USE_NLS,;t t
+s, at BUILD_INCLUDED_LIBINTL@,$BUILD_INCLUDED_LIBINTL,;t t
+s, at USE_INCLUDED_LIBINTL@,$USE_INCLUDED_LIBINTL,;t t
+s, at CATOBJEXT@,$CATOBJEXT,;t t
+s, at DATADIRNAME@,$DATADIRNAME,;t t
+s, at INSTOBJEXT@,$INSTOBJEXT,;t t
+s, at GENCAT@,$GENCAT,;t t
+s, at INTLOBJS@,$INTLOBJS,;t t
+s, at INTL_LIBTOOL_SUFFIX_PREFIX@,$INTL_LIBTOOL_SUFFIX_PREFIX,;t t
+s, at INTLLIBS@,$INTLLIBS,;t t
+s, at LIBINTL@,$LIBINTL,;t t
+s, at LTLIBINTL@,$LTLIBINTL,;t t
+s, at POSUB@,$POSUB,;t t
+s, at X_CFLAGS@,$X_CFLAGS,;t t
+s, at X_PRE_LIBS@,$X_PRE_LIBS,;t t
+s, at X_LIBS@,$X_LIBS,;t t
+s, at X_EXTRA_LIBS@,$X_EXTRA_LIBS,;t t
+s, at PKG_CONFIG@,$PKG_CONFIG,;t t
+s, at ac_pt_PKG_CONFIG@,$ac_pt_PKG_CONFIG,;t t
+s, at XFT_CFLAGS@,$XFT_CFLAGS,;t t
+s, at XFT_LIBS@,$XFT_LIBS,;t t
+s, at PACKAGE_CFLAGS@,$PACKAGE_CFLAGS,;t t
+s, at PACKAGE_LIBS@,$PACKAGE_LIBS,;t t
+s, at GTK_CFLAGS@,$GTK_CFLAGS,;t t
+s, at GTK_LIBS@,$GTK_LIBS,;t t
+s, at WMCCC@,$WMCCC,;t t
+s, at IMLIB2_CONFIG_IN_PATH@,$IMLIB2_CONFIG_IN_PATH,;t t
+s, at WMCOINCOIN_PLAYER@,$WMCOINCOIN_PLAYER,;t t
+s, at LIBOBJS@,$LIBOBJS,;t t
+s, at LTLIBOBJS@,$LTLIBOBJS,;t t
+CEOF
+
+_ACEOF
+
+  cat >>$CONFIG_STATUS <<\_ACEOF
+  # Split the substitutions into bite-sized pieces for seds with
+  # small command number limits, like on Digital OSF/1 and HP-UX.
+  ac_max_sed_lines=48
+  ac_sed_frag=1 # Number of current file.
+  ac_beg=1 # First line for current file.
+  ac_end=$ac_max_sed_lines # Line after last line for current file.
+  ac_more_lines=:
+  ac_sed_cmds=
+  while $ac_more_lines; do
+    if test $ac_beg -gt 1; then
+      sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+    else
+      sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+    fi
+    if test ! -s $tmp/subs.frag; then
+      ac_more_lines=false
+    else
+      # The purpose of the label and of the branching condition is to
+      # speed up the sed processing (if there are no `@' at all, there
+      # is no need to browse any of the substitutions).
+      # These are the two extra sed commands mentioned above.
+      (echo ':t
+  /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
+      if test -z "$ac_sed_cmds"; then
+	ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
+      else
+	ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
+      fi
+      ac_sed_frag=`expr $ac_sed_frag + 1`
+      ac_beg=$ac_end
+      ac_end=`expr $ac_end + $ac_max_sed_lines`
+    fi
+  done
+  if test -z "$ac_sed_cmds"; then
+    ac_sed_cmds=cat
+  fi
+fi # test -n "$CONFIG_FILES"
+
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
+  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+  case $ac_file in
+  - | *:- | *:-:* ) # input from stdin
+	cat >$tmp/stdin
+	ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  * )   ac_file_in=$ac_file.in ;;
+  esac
+
+  # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
+  ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+$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'`
+  { if $as_mkdir_p; then
+    mkdir -p "$ac_dir"
+  else
+    as_dir="$ac_dir"
+    as_dirs=
+    while test ! -d "$as_dir"; do
+      as_dirs="$as_dir $as_dirs"
+      as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$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'`
+    done
+    test ! -n "$as_dirs" || mkdir $as_dirs
+  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+   { (exit 1); exit 1; }; }; }
+
+  ac_builddir=.
+
+if test "$ac_dir" != .; then
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A "../" for each directory in $ac_dir_suffix.
+  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+  ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+  .)  # No --srcdir option.  We are building in place.
+    ac_srcdir=.
+    if test -z "$ac_top_builddir"; then
+       ac_top_srcdir=.
+    else
+       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+    fi ;;
+  [\\/]* | ?:[\\/]* )  # Absolute path.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir ;;
+  *) # Relative path.
+    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+  case "$ac_dir" in
+  .) ac_abs_builddir=`pwd`;;
+  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+  *) ac_abs_builddir=`pwd`/"$ac_dir";;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+  case ${ac_top_builddir}. in
+  .) ac_abs_top_builddir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+  case $ac_srcdir in
+  .) ac_abs_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+  case $ac_top_srcdir in
+  .) ac_abs_top_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+  esac;;
+esac
+
+
+  case $INSTALL in
+  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
+  *) ac_INSTALL=$ac_top_builddir$INSTALL ;;
+  esac
+
+  # 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.  */
+  if test x"$ac_file" = x-; then
+    configure_input=
+  else
+    configure_input="$ac_file.  "
+  fi
+  configure_input=$configure_input"Generated from `echo $ac_file_in |
+				     sed 's,.*/,,'` by configure."
+
+  # First look for the input files in the build tree, otherwise in the
+  # src tree.
+  ac_file_inputs=`IFS=:
+    for f in $ac_file_in; do
+      case $f in
+      -) echo $tmp/stdin ;;
+      [\\/$]*)
+	 # Absolute (can't be DOS-style, as IFS=:)
+	 test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+	 echo "$f";;
+      *) # Relative
+	 if test -f "$f"; then
+	   # Build tree
+	   echo "$f"
+	 elif test -f "$srcdir/$f"; then
+	   # Source tree
+	   echo "$srcdir/$f"
+	 else
+	   # /dev/null tree
+	   { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+	 fi;;
+      esac
+    done` || { (exit 1); exit 1; }
+
+  if test x"$ac_file" != x-; then
+    { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+    rm -f "$ac_file"
+  fi
+_ACEOF
+cat >>$CONFIG_STATUS <<_ACEOF
+  sed "$ac_vpsub
+$extrasub
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s, at configure_input@,$configure_input,;t t
+s, at srcdir@,$ac_srcdir,;t t
+s, at abs_srcdir@,$ac_abs_srcdir,;t t
+s, at top_srcdir@,$ac_top_srcdir,;t t
+s, at abs_top_srcdir@,$ac_abs_top_srcdir,;t t
+s, at builddir@,$ac_builddir,;t t
+s, at abs_builddir@,$ac_abs_builddir,;t t
+s, at top_builddir@,$ac_top_builddir,;t t
+s, at abs_top_builddir@,$ac_abs_top_builddir,;t t
+s, at INSTALL@,$ac_INSTALL,;t t
+" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
+  rm -f $tmp/stdin
+  if test x"$ac_file" != x-; then
+    mv $tmp/out $ac_file
+  else
+    cat $tmp/out
+    rm -f $tmp/out
+  fi
+
+done
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+#
+# CONFIG_HEADER section.
+#
+
+# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
+# NAME is the cpp macro being defined and VALUE is the value it is being given.
+#
+# ac_d sets the value in "#define NAME VALUE" lines.
+ac_dA='s,^\([	 ]*\)#\([	 ]*define[	 ][	 ]*\)'
+ac_dB='[	 ].*$,\1#\2'
+ac_dC=' '
+ac_dD=',;t'
+# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
+ac_uA='s,^\([	 ]*\)#\([	 ]*\)undef\([	 ][	 ]*\)'
+ac_uB='$,\1#\2define\3'
+ac_uC=' '
+ac_uD=',;t'
+
+for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
+  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+  case $ac_file in
+  - | *:- | *:-:* ) # input from stdin
+	cat >$tmp/stdin
+	ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  * )   ac_file_in=$ac_file.in ;;
+  esac
+
+  test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+
+  # First look for the input files in the build tree, otherwise in the
+  # src tree.
+  ac_file_inputs=`IFS=:
+    for f in $ac_file_in; do
+      case $f in
+      -) echo $tmp/stdin ;;
+      [\\/$]*)
+	 # Absolute (can't be DOS-style, as IFS=:)
+	 test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+	 # Do quote $f, to prevent DOS paths from being IFS'd.
+	 echo "$f";;
+      *) # Relative
+	 if test -f "$f"; then
+	   # Build tree
+	   echo "$f"
+	 elif test -f "$srcdir/$f"; then
+	   # Source tree
+	   echo "$srcdir/$f"
+	 else
+	   # /dev/null tree
+	   { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+	 fi;;
+      esac
+    done` || { (exit 1); exit 1; }
+  # Remove the trailing spaces.
+  sed 's/[	 ]*$//' $ac_file_inputs >$tmp/in
+
+_ACEOF
+
+# Transform confdefs.h into two sed scripts, `conftest.defines' and
+# `conftest.undefs', that substitutes the proper values into
+# config.h.in to produce config.h.  The first handles `#define'
+# templates, and the second `#undef' templates.
+# And first: Protect against being on the right side of a sed subst in
+# config.status.  Protect against being in an unquoted here document
+# in config.status.
+rm -f conftest.defines conftest.undefs
+# Using a here document instead of a string reduces the quoting nightmare.
+# Putting comments in sed scripts is not portable.
+#
+# `end' is used to avoid that the second main sed command (meant for
+# 0-ary CPP macros) applies to n-ary macro definitions.
+# See the Autoconf documentation for `clear'.
+cat >confdef2sed.sed <<\_ACEOF
+s/[\\&,]/\\&/g
+s,[\\$`],\\&,g
+t clear
+: clear
+s,^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 (][^	 (]*\)\(([^)]*)\)[	 ]*\(.*\)$,${ac_dA}\1${ac_dB}\1\2${ac_dC}\3${ac_dD},gp
+t end
+s,^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 ][^	 ]*\)[	 ]*\(.*\)$,${ac_dA}\1${ac_dB}\1${ac_dC}\2${ac_dD},gp
+: end
+_ACEOF
+# If some macros were called several times there might be several times
+# the same #defines, which is useless.  Nevertheless, we may not want to
+# sort them, since we want the *last* AC-DEFINE to be honored.
+uniq confdefs.h | sed -n -f confdef2sed.sed >conftest.defines
+sed 's/ac_d/ac_u/g' conftest.defines >conftest.undefs
+rm -f confdef2sed.sed
+
+# This sed command replaces #undef with comments.  This is necessary, for
+# example, in the case of _POSIX_SOURCE, which is predefined and required
+# on some systems where configure will not decide to define it.
+cat >>conftest.undefs <<\_ACEOF
+s,^[	 ]*#[	 ]*undef[	 ][	 ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
+_ACEOF
+
+# Break up conftest.defines because some shells have a limit on the size
+# of here documents, and old seds have small limits too (100 cmds).
+echo '  # Handle all the #define templates only if necessary.' >>$CONFIG_STATUS
+echo '  if grep "^[	 ]*#[	 ]*define" $tmp/in >/dev/null; then' >>$CONFIG_STATUS
+echo '  # If there are no defines, we may have an empty if/fi' >>$CONFIG_STATUS
+echo '  :' >>$CONFIG_STATUS
+rm -f conftest.tail
+while grep . conftest.defines >/dev/null
+do
+  # Write a limited-size here document to $tmp/defines.sed.
+  echo '  cat >$tmp/defines.sed <<CEOF' >>$CONFIG_STATUS
+  # Speed up: don't consider the non `#define' lines.
+  echo '/^[	 ]*#[	 ]*define/!b' >>$CONFIG_STATUS
+  # Work around the forget-to-reset-the-flag bug.
+  echo 't clr' >>$CONFIG_STATUS
+  echo ': clr' >>$CONFIG_STATUS
+  sed ${ac_max_here_lines}q conftest.defines >>$CONFIG_STATUS
+  echo 'CEOF
+  sed -f $tmp/defines.sed $tmp/in >$tmp/out
+  rm -f $tmp/in
+  mv $tmp/out $tmp/in
+' >>$CONFIG_STATUS
+  sed 1,${ac_max_here_lines}d conftest.defines >conftest.tail
+  rm -f conftest.defines
+  mv conftest.tail conftest.defines
+done
+rm -f conftest.defines
+echo '  fi # grep' >>$CONFIG_STATUS
+echo >>$CONFIG_STATUS
+
+# Break up conftest.undefs because some shells have a limit on the size
+# of here documents, and old seds have small limits too (100 cmds).
+echo '  # Handle all the #undef templates' >>$CONFIG_STATUS
+rm -f conftest.tail
+while grep . conftest.undefs >/dev/null
+do
+  # Write a limited-size here document to $tmp/undefs.sed.
+  echo '  cat >$tmp/undefs.sed <<CEOF' >>$CONFIG_STATUS
+  # Speed up: don't consider the non `#undef'
+  echo '/^[	 ]*#[	 ]*undef/!b' >>$CONFIG_STATUS
+  # Work around the forget-to-reset-the-flag bug.
+  echo 't clr' >>$CONFIG_STATUS
+  echo ': clr' >>$CONFIG_STATUS
+  sed ${ac_max_here_lines}q conftest.undefs >>$CONFIG_STATUS
+  echo 'CEOF
+  sed -f $tmp/undefs.sed $tmp/in >$tmp/out
+  rm -f $tmp/in
+  mv $tmp/out $tmp/in
+' >>$CONFIG_STATUS
+  sed 1,${ac_max_here_lines}d conftest.undefs >conftest.tail
+  rm -f conftest.undefs
+  mv conftest.tail conftest.undefs
+done
+rm -f conftest.undefs
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+  # 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.  */
+  if test x"$ac_file" = x-; then
+    echo "/* Generated by configure.  */" >$tmp/config.h
+  else
+    echo "/* $ac_file.  Generated by configure.  */" >$tmp/config.h
+  fi
+  cat $tmp/in >>$tmp/config.h
+  rm -f $tmp/in
+  if test x"$ac_file" != x-; then
+    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
+      ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+$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'`
+      { if $as_mkdir_p; then
+    mkdir -p "$ac_dir"
+  else
+    as_dir="$ac_dir"
+    as_dirs=
+    while test ! -d "$as_dir"; do
+      as_dirs="$as_dir $as_dirs"
+      as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$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'`
+    done
+    test ! -n "$as_dirs" || mkdir $as_dirs
+  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+   { (exit 1); exit 1; }; }; }
+
+      rm -f $ac_file
+      mv $tmp/config.h $ac_file
+    fi
+  else
+    cat $tmp/config.h
+    rm -f $tmp/config.h
+  fi
+# Compute $ac_file's index in $config_headers.
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $ac_file | $ac_file:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $ac_file" >`(dirname $ac_file) 2>/dev/null ||
+$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'`/stamp-h$_am_stamp_count
+done
+_ACEOF
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+#
+# CONFIG_COMMANDS section.
+#
+for ac_file in : $CONFIG_COMMANDS; do test "x$ac_file" = x: && continue
+  ac_dest=`echo "$ac_file" | sed 's,:.*,,'`
+  ac_source=`echo "$ac_file" | sed 's,[^:]*:,,'`
+  ac_dir=`(dirname "$ac_dest") 2>/dev/null ||
+$as_expr X"$ac_dest" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$ac_dest" : 'X\(//\)[^/]' \| \
+	 X"$ac_dest" : 'X\(//\)$' \| \
+	 X"$ac_dest" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$ac_dest" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+  { if $as_mkdir_p; then
+    mkdir -p "$ac_dir"
+  else
+    as_dir="$ac_dir"
+    as_dirs=
+    while test ! -d "$as_dir"; do
+      as_dirs="$as_dir $as_dirs"
+      as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$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'`
+    done
+    test ! -n "$as_dirs" || mkdir $as_dirs
+  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+   { (exit 1); exit 1; }; }; }
+
+  ac_builddir=.
+
+if test "$ac_dir" != .; then
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A "../" for each directory in $ac_dir_suffix.
+  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+  ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+  .)  # No --srcdir option.  We are building in place.
+    ac_srcdir=.
+    if test -z "$ac_top_builddir"; then
+       ac_top_srcdir=.
+    else
+       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+    fi ;;
+  [\\/]* | ?:[\\/]* )  # Absolute path.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir ;;
+  *) # Relative path.
+    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+  case "$ac_dir" in
+  .) ac_abs_builddir=`pwd`;;
+  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+  *) ac_abs_builddir=`pwd`/"$ac_dir";;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+  case ${ac_top_builddir}. in
+  .) ac_abs_top_builddir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+  case $ac_srcdir in
+  .) ac_abs_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+  case $ac_top_srcdir in
+  .) ac_abs_top_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+  esac;;
+esac
+
+
+  { echo "$as_me:$LINENO: executing $ac_dest commands" >&5
+echo "$as_me: executing $ac_dest commands" >&6;}
+  case $ac_dest in
+    default-1 )
+    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
+        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"
+          # ALL_LINGUAS, POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES 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 "$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" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+            # Hide the ALL_LINGUAS assigment from automake.
+            eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+          fi
+          case "$ac_given_srcdir" in
+            .) srcdirpre= ;;
+            *) srcdirpre='$(srcdir)/' ;;
+          esac
+          POFILES=
+          GMOFILES=
+          UPDATEPOFILES=
+          DUMMYPOFILES=
+          for lang in $ALL_LINGUAS; do
+            POFILES="$POFILES $srcdirpre$lang.po"
+            GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+            UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+            DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+          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|@GMOFILES@|$GMOFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@CATALOGS@|$CATALOGS|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 ) 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.
+  # So let's grep whole file.
+  if grep '^#.*generated by automake' $mf > /dev/null 2>&1; then
+    dirpart=`(dirname "$mf") 2>/dev/null ||
+$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
+  grep '^DEP_FILES *= *[^ #]' < "$mf" > /dev/null || continue
+  # Extract the definition of DEP_FILES from the Makefile without
+  # running `make'.
+  DEPDIR=`sed -n -e '/^DEPDIR = / s///p' < "$mf"`
+  test -z "$DEPDIR" && continue
+  # When using ansi2knr, U may be empty or an underscore; expand it
+  U=`sed -n -e '/^U = / s///p' < "$mf"`
+  test -d "$dirpart/$DEPDIR" || mkdir "$dirpart/$DEPDIR"
+  # 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 -e '
+    /^DEP_FILES = .*\\\\$/ {
+      s/^DEP_FILES = //
+      :loop
+	s/\\\\$//
+	p
+	n
+	/\\\\$/ b loop
+      p
+    }
+    /^DEP_FILES = / s/^DEP_FILES = //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=`(dirname "$file") 2>/dev/null ||
+$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'`
+    { if $as_mkdir_p; then
+    mkdir -p $dirpart/$fdir
+  else
+    as_dir=$dirpart/$fdir
+    as_dirs=
+    while test ! -d "$as_dir"; do
+      as_dirs="$as_dir $as_dirs"
+      as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$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'`
+    done
+    test ! -n "$as_dirs" || mkdir $as_dirs
+  fi || { { echo "$as_me:$LINENO: error: cannot create directory $dirpart/$fdir" >&5
+echo "$as_me: error: cannot create directory $dirpart/$fdir" >&2;}
+   { (exit 1); exit 1; }; }; }
+
+    # echo "creating $dirpart/$file"
+    echo '# dummy' > "$dirpart/$file"
+  done
+done
+ ;;
+    default )  echo timestamp > stamp-h  ;;
+  esac
+done
+_ACEOF
+
+cat >>$CONFIG_STATUS <<\_ACEOF
+
+{ (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..2063e90
--- /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.5.1e, c0in at altern.org)
+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.11.2)
+
+
+
+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 ${LIBS} ${X_EXTRA_LIBS}"
+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 hfr 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..94a540f
--- /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..c75d30c
--- /dev/null
+++ b/intl/ChangeLog
@@ -0,0 +1,4 @@
+2002-04-24  GNU  <bug-gnu-gettext at gnu.org>
+
+	* Version 0.11.2 released.
+
diff --git a/intl/Makefile.in b/intl/Makefile.in
new file mode 100644
index 0000000..5b1cf2f
--- /dev/null
+++ b/intl/Makefile.in
@@ -0,0 +1,337 @@
+# Makefile for directory with message catalog handling in GNU NLS Utilities.
+# Copyright (C) 1995-1998, 2000-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., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+# USA.
+
+PACKAGE = @PACKAGE@
+VERSION = @VERSION@
+
+SHELL = /bin/sh
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+top_builddir = ..
+VPATH = @srcdir@
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+transform = @program_transform_name@
+libdir = @libdir@
+includedir = @includedir@
+datadir = @datadir@
+localedir = $(datadir)/locale
+gettextsrcdir = $(datadir)/gettext/intl
+aliaspath = $(localedir)
+subdir = intl
+
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+mkinstalldirs = $(SHELL) `case "$(MKINSTALLDIRS)" in /*) echo "$(MKINSTALLDIRS)" ;; *) echo "$(top_builddir)/$(MKINSTALLDIRS)" ;; esac`
+
+l = @INTL_LIBTOOL_SUFFIX_PREFIX@
+
+AR = ar
+CC = @CC@
+LIBTOOL = @LIBTOOL@
+RANLIB = @RANLIB@
+YACC = @INTLBISON@ -y -d
+YFLAGS = --name-prefix=__gettext
+
+DEFS = -DLOCALEDIR=\"$(localedir)\" -DLOCALE_ALIAS_PATH=\"$(aliaspath)\" \
+-DLIBDIR=\"$(libdir)\" -DIN_LIBINTL @DEFS@
+CPPFLAGS = @CPPFLAGS@
+CFLAGS = @CFLAGS@
+LDFLAGS = @LDFLAGS@
+
+COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS)
+
+HEADERS = $(COMHDRS) libgnuintl.h loadinfo.h
+COMHDRS = gmo.h gettextP.h hash-string.h plural-exp.h eval-plural.h os2compat.h
+SOURCES = $(COMSRCS) intl-compat.c
+COMSRCS = bindtextdom.c dcgettext.c dgettext.c gettext.c \
+finddomain.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 localename.c osdep.c os2compat.c
+OBJECTS = @INTLOBJS@ bindtextdom.$lo dcgettext.$lo dgettext.$lo gettext.$lo \
+finddomain.$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 localename.$lo osdep.$lo
+GETTOBJS = intl-compat.$lo
+DISTFILES.common = Makefile.in \
+config.charset locale.alias ref-add.sin ref-del.sin $(HEADERS) $(SOURCES)
+DISTFILES.generated = plural.c
+DISTFILES.normal = VERSION
+DISTFILES.gettext = COPYING.LIB-2.0 COPYING.LIB-2.1 libintl.glibc
+DISTFILES.obsolete = xopen-msg.sed linux-msg.sed po2tbl.sed.in cat-compat.c \
+COPYING.LIB-2 gettext.h libgettext.h plural-eval.c
+
+# 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=2
+LTV_REVISION=1
+LTV_AGE=0
+
+.SUFFIXES:
+.SUFFIXES: .c .y .o .lo .sin .sed
+.c.o:
+	$(COMPILE) $<
+.c.lo:
+	$(LIBTOOL) --mode=compile $(COMPILE) $<
+
+.y.c:
+	$(YACC) $(YFLAGS) --output $@ $<
+	rm -f $*.h
+
+.sin.sed:
+	sed -e '/^#/d' -e 's/@''PACKAGE''@/@PACKAGE@/g' $< > t-$@
+	mv t-$@ $@
+
+INCLUDES = -I.. -I. -I$(top_srcdir)/intl
+
+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)
+	$(LIBTOOL) --mode=link \
+	  $(CC) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) $(LDFLAGS) -o $@ \
+	  $(OBJECTS) @LTLIBICONV@ -lc \
+	  -version-info $(LTV_CURRENT):$(LTV_REVISION):$(LTV_AGE) \
+	  -rpath $(libdir) \
+	  -no-undefined
+
+libintl.h: libgnuintl.h
+	cp $(srcdir)/libgnuintl.h libintl.h
+
+charset.alias: config.charset
+	$(SHELL) $(srcdir)/config.charset '@host@' > t-$@
+	mv t-$@ $@
+
+check: all
+
+# This installation goal is only used in GNU gettext.  Packages which
+# only use the library should use install instead.
+
+# 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" \
+	   && test '@INTLOBJS@' = '$(GETTOBJS)'; then \
+	  $(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(includedir); \
+	  $(INSTALL_DATA) libintl.h $(DESTDIR)$(includedir)/libintl.h; \
+	  $(LIBTOOL) --mode=install \
+	    $(INSTALL_DATA) libintl.$la $(DESTDIR)$(libdir)/libintl.$la; \
+	else \
+	  : ; \
+	fi
+	if test '@USE_INCLUDED_LIBINTL@' = yes; then \
+	  test @GLIBC21@ != no || $(mkinstalldirs) $(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; \
+	  $(mkinstalldirs) $(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"; then \
+	  $(mkinstalldirs) $(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
+
+installdirs:
+	if test "$(PACKAGE)" = "gettext" \
+	   && test '@INTLOBJS@' = '$(GETTOBJS)'; then \
+	  $(mkinstalldirs) $(DESTDIR)$(libdir) $(DESTDIR)$(includedir); \
+	else \
+	  : ; \
+	fi
+	if test '@USE_INCLUDED_LIBINTL@' = yes; then \
+	  test @GLIBC21@ != no || $(mkinstalldirs) $(DESTDIR)$(libdir); \
+	  $(mkinstalldirs) $(DESTDIR)$(localedir); \
+	else \
+	  : ; \
+	fi
+	if test "$(PACKAGE)" = "gettext"; then \
+	  $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \
+	else \
+	  : ; \
+	fi
+
+# Define this as empty until I found a useful application.
+installcheck:
+
+uninstall:
+	if test "$(PACKAGE)" = "gettext" \
+	   && test '@INTLOBJS@' = '$(GETTOBJS)'; then \
+	  rm -f $(DESTDIR)$(includedir)/libintl.h; \
+	  $(LIBTOOL) --mode=uninstall \
+	    rm -f $(DESTDIR)$(libdir)/libintl.$la; \
+	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"; 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:
+
+$(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: gettextP.h gmo.h loadinfo.h
+dcigettext.$lo: hash-string.h
+explodename.$lo l10nflist.$lo: loadinfo.h
+dcigettext.$lo loadmsgcat.$lo plural.$lo plural-exp.$lo: plural-exp.h
+dcigettext.$lo: eval-plural.h
+
+tags: TAGS
+
+TAGS: $(HEADERS) $(SOURCES)
+	here=`pwd`; cd $(srcdir) && etags -o $$here/TAGS $(HEADERS) $(SOURCES)
+
+id: ID
+
+ID: $(HEADERS) $(SOURCES)
+	here=`pwd`; cd $(srcdir) && mkid -f$$here/ID $(HEADERS) $(SOURCES)
+
+
+mostlyclean:
+	rm -f *.a *.la *.o *.lo core core.*
+	rm -f 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; 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; 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); \
+	done
+
+Makefile: Makefile.in ../config.status
+	cd .. \
+	  && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
+
+# 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..657e73b
--- /dev/null
+++ b/intl/VERSION
@@ -0,0 +1 @@
+GNU gettext library from gettext-0.11.2
diff --git a/intl/bindtextdom.c b/intl/bindtextdom.c
new file mode 100644
index 0000000..a3c233d
--- /dev/null
+++ b/intl/bindtextdom.c
@@ -0,0 +1,369 @@
+/* Implementation of the bindtextdomain(3) function
+   Copyright (C) 1995-1998, 2000, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stddef.h>
+#include <stdlib.h>
+#include <string.h>
+
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+#include "gettextP.h"
+
+#ifdef _LIBC
+/* We have to handle multi-threaded applications.  */
+# include <bits/libc-lock.h>
+#else
+/* Provide dummy implementation if this is outside glibc.  */
+# define __libc_rwlock_define(CLASS, NAME)
+# define __libc_rwlock_wrlock(NAME)
+# define __libc_rwlock_unlock(NAME)
+#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 _nl_default_dirname__
+# define _nl_domain_bindings _nl_domain_bindings__
+#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 @@ */
+
+/* Contains the default location of the message catalogs.  */
+extern const char _nl_default_dirname[];
+
+/* List with bindings of specific domains.  */
+extern struct binding *_nl_domain_bindings;
+
+/* Lock variable to protect the global data in the gettext implementation.  */
+__libc_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 bindtextdomain__
+# define BIND_TEXTDOMAIN_CODESET bind_textdomain_codeset__
+#endif
+
+/* Prototypes for local functions.  */
+static void set_binding_values PARAMS ((const char *domainname,
+					const char **dirnamep,
+					const char **codesetp));
+
+/* 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 (domainname, dirnamep, codesetp)
+     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;
+    }
+
+  __libc_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;
+		      binding->codeset_cntr++;
+		      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;
+
+      new_binding->codeset_cntr = 0;
+
+      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;
+	      new_binding->codeset_cntr++;
+	    }
+	  *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;
+
+  __libc_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 (domainname, dirname)
+     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 (domainname, 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..0a1a68d
--- /dev/null
+++ b/intl/config.charset
@@ -0,0 +1,454 @@
+#! /bin/sh
+# Output a system dependent table of character encoding aliases.
+#
+#   Copyright (C) 2000-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., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+#   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                         used by which systems         a MIME name?
+#   ASCII, ANSI_X3.4-1968     glibc solaris freebsd
+#   ISO-8859-1                glibc aix hpux irix osf solaris freebsd   yes
+#   ISO-8859-2                glibc aix hpux irix osf solaris freebsd   yes
+#   ISO-8859-3                glibc                                     yes
+#   ISO-8859-4                osf solaris freebsd                       yes
+#   ISO-8859-5                glibc aix hpux irix osf solaris freebsd   yes
+#   ISO-8859-6                glibc aix hpux solaris                    yes
+#   ISO-8859-7                glibc aix hpux irix osf solaris           yes
+#   ISO-8859-8                glibc aix hpux osf solaris                yes
+#   ISO-8859-9                glibc aix hpux irix osf solaris           yes
+#   ISO-8859-13               glibc
+#   ISO-8859-15               glibc aix osf solaris freebsd
+#   KOI8-R                    glibc solaris freebsd                     yes
+#   KOI8-U                    glibc freebsd                             yes
+#   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 dos
+#   CP869                     dos
+#   CP874                     win32 dos
+#   CP922                     aix
+#   CP932                     aix win32 dos
+#   CP943                     aix
+#   CP949                     osf win32 dos
+#   CP950                     win32 dos
+#   CP1046                    aix
+#   CP1124                    aix
+#   CP1129                    aix
+#   CP1250                    win32
+#   CP1251                    glibc win32
+#   CP1252                    aix win32
+#   CP1253                    win32
+#   CP1254                    win32
+#   CP1255                    win32
+#   CP1256                    win32
+#   CP1257                    win32
+#   GB2312                    glibc aix hpux irix solaris freebsd       yes
+#   EUC-JP                    glibc aix hpux irix osf solaris freebsd   yes
+#   EUC-KR                    glibc aix hpux irix osf solaris freebsd   yes
+#   EUC-TW                    glibc aix hpux irix osf solaris
+#   BIG5                      glibc aix hpux osf solaris freebsd        yes
+#   BIG5-HKSCS                glibc
+#   GBK                       aix osf win32 dos
+#   GB18030                   glibc
+#   SHIFT_JIS                 hpux osf solaris freebsd                  yes
+#   JOHAB                     glibc win32
+#   TIS-620                   glibc aix hpux osf solaris
+#   VISCII                    glibc                                     yes
+#   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                     glibc aix hpux osf solaris                yes
+#
+# 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* | *-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-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 "BIG5 BIG5"
+	echo "gb2312 GB2312"
+	echo "cns11643 EUC-TW"
+	echo "5601 EUC-KR"
+	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-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"
+	;;
+    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 <st001906 at hrz1.hrz.tu-darmstadt.de>"
+	echo "# and Bruno Haible <haible at clisp.cons.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_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"
+	# 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..70ee3ba
--- /dev/null
+++ b/intl/dcgettext.c
@@ -0,0 +1,59 @@
+/* Implementation of the dcgettext(3) function.
+   Copyright (C) 1995-1999, 2000, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   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 dcgettext__
+# define DCIGETTEXT dcigettext__
+#endif
+
+/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
+   locale.  */
+char *
+DCGETTEXT (domainname, msgid, category)
+     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..afbb181
--- /dev/null
+++ b/intl/dcigettext.c
@@ -0,0 +1,1168 @@
+/* Implementation of the internal dcigettext function.
+   Copyright (C) 1995-1999, 2000-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., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   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 <sys/types.h>
+
+#ifdef __GNUC__
+# define alloca __builtin_alloca
+# define HAVE_ALLOCA 1
+#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
+
+#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>
+
+#if defined HAVE_SYS_PARAM_H || defined _LIBC
+# include <sys/param.h>
+#endif
+
+#include "gettextP.h"
+#include "plural-exp.h"
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+#include "hash-string.h"
+
+/* Thread safetyness.  */
+#ifdef _LIBC
+# include <bits/libc-lock.h>
+#else
+/* Provide dummy implementation if this is outside glibc.  */
+# define __libc_lock_define_initialized(CLASS, NAME)
+# define __libc_lock_lock(NAME)
+# define __libc_lock_unlock(NAME)
+# define __libc_rwlock_define_initialized(CLASS, NAME)
+# define __libc_rwlock_rdlock(NAME)
+# define __libc_rwlock_unlock(NAME)
+#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
+
+/* 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 _nl_default_default_domain__
+# define _nl_current_default_domain _nl_current_default_domain__
+# define _nl_default_dirname _nl_default_dirname__
+# define _nl_domain_bindings _nl_domain_bindings__
+#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
+char *getcwd ();
+# endif
+# ifndef HAVE_STPCPY
+static char *stpcpy PARAMS ((char *dest, const char *src));
+# endif
+# ifndef HAVE_MEMPCPY
+static void *mempcpy PARAMS ((void *dest, const void *src, size_t n));
+# endif
+#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 __EMX__ || defined __DJGPP__
+  /* Win32, 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
+
+/* This is the type used for the search tree where known translations
+   are stored.  */
+struct known_translation_t
+{
+  /* Domain in which to search.  */
+  char *domainname;
+
+  /* The category.  */
+  int category;
+
+  /* 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];
+};
+
+/* Root of the search tree with known translations.  We can use this
+   only if the system provides the `tsearch' function family.  */
+#if defined HAVE_TSEARCH || defined _LIBC
+# include <search.h>
+
+static void *root;
+
+# ifdef _LIBC
+#  define tsearch __tsearch
+# endif
+
+/* Function to compare two entries in the table of known translations.  */
+static int transcmp PARAMS ((const void *p1, const void *p2));
+static int
+transcmp (p1, p2)
+     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)
+	/* 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;
+}
+#endif
+
+/* 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";
+
+/* Value used as the default domain for gettext(3).  */
+const char *_nl_current_default_domain attribute_hidden
+     = _nl_default_default_domain;
+
+/* Contains the default location of the message catalogs.  */
+#if defined __EMX__
+extern const char _nl_default_dirname[];
+#else
+const char _nl_default_dirname[] = LOCALEDIR;
+#endif
+
+/* List with bindings of specific domains created by bindtextdomain()
+   calls.  */
+struct binding *_nl_domain_bindings;
+
+/* Prototypes for local functions.  */
+static char *plural_lookup PARAMS ((struct loaded_l10nfile *domain,
+				    unsigned long int n,
+				    const char *translation,
+				    size_t translation_len))
+     internal_function;
+static const char *category_to_name PARAMS ((int category)) internal_function;
+static const char *guess_category_value PARAMS ((int category,
+						 const char *categoryname))
+     internal_function;
+
+
+/* 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 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);							      \
+    }									      \
+  } while (0)
+# undef alloca
+# define alloca(size) (malloc (size))
+#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 dcigettext__
+#endif
+
+/* Lock variable to protect the global data in the gettext implementation.  */
+#ifdef _LIBC
+__libc_rwlock_define_initialized (, _nl_state_lock attribute_hidden)
+#endif
+
+/* 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.  */
+char *
+DCIGETTEXT (domainname, msgid1, msgid2, plural, n, category)
+     const char *domainname;
+     const char *msgid1;
+     const char *msgid2;
+     int plural;
+     unsigned long int n;
+     int category;
+{
+#ifndef HAVE_ALLOCA
+  struct block_list *block_list = NULL;
+#endif
+  struct loaded_l10nfile *domain;
+  struct binding *binding;
+  const char *categoryname;
+  const char *categoryvalue;
+  char *dirname, *xdomainname;
+  char *single_locale;
+  char *retval;
+  size_t retlen;
+  int saved_errno;
+#if defined HAVE_TSEARCH || defined _LIBC
+  struct known_translation_t *search;
+  struct known_translation_t **foundp = NULL;
+  size_t msgid_len;
+#endif
+  size_t domainname_len;
+
+  /* If no real MSGID is given return NULL.  */
+  if (msgid1 == NULL)
+    return NULL;
+
+  __libc_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
+
+#if defined HAVE_TSEARCH || defined _LIBC
+  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 = (char *) domainname;
+  search->category = category;
+
+  foundp = (struct known_translation_t **) tfind (search, &root, transcmp);
+  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;
+
+      __libc_rwlock_unlock (_nl_state_lock);
+      return retval;
+    }
+#endif
+
+  /* Preserve the `errno' value.  */
+  saved_errno = errno;
+
+  /* See whether this is a SUID binary or not.  */
+  DETERMINE_SECURE;
+
+  /* First find matching binding.  */
+  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 = (char *) _nl_default_dirname;
+  else if (IS_ABSOLUTE_PATH (binding->dirname))
+    dirname = binding->dirname;
+  else
+    {
+      /* We have a relative path.  Make it absolute now.  */
+      size_t dirname_len = strlen (binding->dirname) + 1;
+      size_t path_max;
+      char *ret;
+
+      path_max = (unsigned int) PATH_MAX;
+      path_max += 2;		/* The getcwd docs say to do this.  */
+
+      for (;;)
+	{
+	  dirname = (char *) alloca (path_max + dirname_len);
+	  ADD_BLOCK (block_list, dirname);
+
+	  __set_errno (0);
+	  ret = getcwd (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.  */
+	  FREE_BLOCKS (block_list);
+	  __libc_rwlock_unlock (_nl_state_lock);
+	  __set_errno (saved_errno);
+	  return (plural == 0
+		  ? (char *) msgid1
+		  /* Use the Germanic plural rule.  */
+		  : n == 1 ? (char *) msgid1 : (char *) msgid2);
+	}
+
+      stpcpy (stpcpy (strchr (dirname, '\0'), "/"), binding->dirname);
+    }
+
+  /* Now determine the symbolic name of CATEGORY and its value.  */
+  categoryname = category_to_name (category);
+  categoryvalue = guess_category_value (category, categoryname);
+
+  domainname_len = strlen (domainname);
+  xdomainname = (char *) alloca (strlen (categoryname)
+				 + domainname_len + 5);
+  ADD_BLOCK (block_list, xdomainname);
+
+  stpcpy (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)
+	{
+	  FREE_BLOCKS (block_list);
+	  __libc_rwlock_unlock (_nl_state_lock);
+	  __set_errno (saved_errno);
+	  return (plural == 0
+		  ? (char *) msgid1
+		  /* Use the Germanic plural rule.  */
+		  : n == 1 ? (char *) msgid1 : (char *) msgid2);
+	}
+
+
+      /* Find structure describing the message catalog matching the
+	 DOMAINNAME and CATEGORY.  */
+      domain = _nl_find_domain (dirname, single_locale, xdomainname, binding);
+
+      if (domain != NULL)
+	{
+	  retval = _nl_find_msg (domain, binding, msgid1, &retlen);
+
+	  if (retval == NULL)
+	    {
+	      int cnt;
+
+	      for (cnt = 0; domain->successor[cnt] != NULL; ++cnt)
+		{
+		  retval = _nl_find_msg (domain->successor[cnt], binding,
+					 msgid1, &retlen);
+
+		  if (retval != NULL)
+		    {
+		      domain = domain->successor[cnt];
+		      break;
+		    }
+		}
+	    }
+
+	  if (retval != NULL)
+	    {
+	      /* Found the translation of MSGID1 in domain DOMAIN:
+		 starting at RETVAL, RETLEN bytes.  */
+	      FREE_BLOCKS (block_list);
+	      __set_errno (saved_errno);
+#if defined HAVE_TSEARCH || defined _LIBC
+	      if (foundp == NULL)
+		{
+		  /* Create a new entry and add it to the search tree.  */
+		  struct known_translation_t *newp;
+
+		  newp = (struct known_translation_t *)
+		    malloc (offsetof (struct known_translation_t, msgid)
+			    + msgid_len + domainname_len + 1);
+		  if (newp != NULL)
+		    {
+		      newp->domainname =
+			mempcpy (newp->msgid, msgid1, msgid_len);
+		      memcpy (newp->domainname, domainname, domainname_len + 1);
+		      newp->category = category;
+		      newp->counter = _nl_msg_cat_cntr;
+		      newp->domain = domain;
+		      newp->translation = retval;
+		      newp->translation_length = retlen;
+
+		      /* Insert the entry in the search tree.  */
+		      foundp = (struct known_translation_t **)
+			tsearch (newp, &root, transcmp);
+		      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;
+		}
+#endif
+	      /* Now deal with plural.  */
+	      if (plural)
+		retval = plural_lookup (domain, n, retval, retlen);
+
+	      __libc_rwlock_unlock (_nl_state_lock);
+	      return retval;
+	    }
+	}
+    }
+  /* NOTREACHED */
+}
+
+
+char *
+internal_function
+_nl_find_msg (domain_file, domainbinding, msgid, lengthp)
+     struct loaded_l10nfile *domain_file;
+     struct binding *domainbinding;
+     const char *msgid;
+     size_t *lengthp;
+{
+  struct loaded_domain *domain;
+  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;
+
+  /* Locate the MSGID and its translation.  */
+  if (domain->hash_size > 2 && 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, domain->hash_tab[idx]);
+
+	  if (nstr == 0)
+	    /* Hash table entry is empty.  */
+	    return NULL;
+
+	  /* Compare msgid with the original string at index nstr-1.
+	     We compare the lengths with >=, not ==, because plural entries
+	     are represented by strings with an embedded NUL.  */
+	  if (W (domain->must_swap, domain->orig_tab[nstr - 1].length) >= len
+	      && (strcmp (msgid,
+			  domain->data + W (domain->must_swap,
+					    domain->orig_tab[nstr - 1].offset))
+		  == 0))
+	    {
+	      act = nstr - 1;
+	      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 = domain->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.  */
+  result = ((char *) domain->data
+	    + W (domain->must_swap, domain->trans_tab[act].offset));
+  resultlen = W (domain->must_swap, domain->trans_tab[act].length) + 1;
+
+#if defined _LIBC || HAVE_ICONV
+  if (domain->codeset_cntr
+      != (domainbinding != NULL ? domainbinding->codeset_cntr : 0))
+    {
+      /* The domain's codeset has changed through bind_textdomain_codeset()
+	 since the message catalog was initialized or last accessed.  We
+	 have to reinitialize the converter.  */
+      _nl_free_domain_conv (domain);
+      _nl_init_domain_conv (domain_file, domain, domainbinding);
+    }
+
+  if (
+# ifdef _LIBC
+      domain->conv != (__gconv_t) -1
+# else
+#  if HAVE_ICONV
+      domain->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 (domain->conv_tab == NULL
+	  && ((domain->conv_tab = (char **) calloc (domain->nstrings,
+						    sizeof (char *)))
+	      == NULL))
+	/* Mark that we didn't succeed allocating a table.  */
+	domain->conv_tab = (char **) -1;
+
+      if (__builtin_expect (domain->conv_tab == (char **) -1, 0))
+	/* Nothing we can do, no more memory.  */
+	goto converted;
+
+      if (domain->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 (domain->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)
+		{
+		  __libc_lock_unlock (lock);
+		  goto converted;
+		}
+
+	      inbuf = 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 (domain->conv,
+			 (ICONV_CONST char **) &inptr, &inleft,
+			 &outptr, &outleft)
+		  != (size_t) (-1))
+		{
+		  outbuf = (unsigned char *) outptr;
+		  break;
+		}
+	      if (errno != E2BIG)
+		{
+		  __libc_lock_unlock (lock);
+		  goto converted;
+		}
+#  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);
+		  goto converted;
+		}
+
+# 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 = 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);
+	  domain->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 domain->conv_tab[act] contains the translation of all
+	 the plural variants.  */
+      result = domain->conv_tab[act] + sizeof (size_t);
+      resultlen = *(size_t *) domain->conv_tab[act];
+    }
+
+ converted:
+  /* The result string is converted.  */
+
+#endif /* _LIBC || HAVE_ICONV */
+
+  *lengthp = resultlen;
+  return result;
+}
+
+
+/* Look up a plural variant.  */
+static char *
+internal_function
+plural_lookup (domain, n, translation, translation_len)
+     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;
+}
+
+
+/* Return string representation of locale CATEGORY.  */
+static const char *
+internal_function
+category_to_name (category)
+     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;
+}
+
+/* Guess value of current locale from value of the environment variables.  */
+static const char *
+internal_function
+guess_category_value (category, categoryname)
+     int category;
+     const char *categoryname;
+{
+  const char *language;
+  const char *retval;
+
+  /* The highest priority value is the `LANGUAGE' environment
+     variable.  But we don't use the value if the currently selected
+     locale is the C locale.  This is a GNU extension.  */
+  language = getenv ("LANGUAGE");
+  if (language != NULL && language[0] == '\0')
+    language = NULL;
+
+  /* We have to proceed with the POSIX methods of looking to `LC_ALL',
+     `LC_xxx', and `LANG'.  On some systems this can be done by the
+     `setlocale' function itself.  */
+#ifdef _LIBC
+  retval = setlocale (category, NULL);
+#else
+  retval = _nl_locale_name (category, categoryname);
+#endif
+
+  /* Ignore LANGUAGE 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".  We allow such programs to use gettext().  */
+  return language != NULL && strcmp (retval, "C") != 0 ? language : 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 (dest, src)
+     char *dest;
+     const char *src;
+{
+  while ((*dest++ = *src++) != '\0')
+    /* Do nothing. */ ;
+  return dest - 1;
+}
+#endif
+
+#if !_LIBC && !HAVE_MEMPCPY
+static void *
+mempcpy (dest, src, n)
+     void *dest;
+     const void *src;
+     size_t n;
+{
+  return (void *) ((char *) memcpy (dest, src, n) + n);
+}
+#endif
+
+
+#ifdef _LIBC
+/* If we want to free all resources we have to do some work at
+   program's end.  */
+static void __attribute__ ((unused))
+free_mem (void)
+{
+  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);
+    }
+}
+
+text_set_element (__libc_subfreeres, free_mem);
+#endif
diff --git a/intl/dcngettext.c b/intl/dcngettext.c
new file mode 100644
index 0000000..d31ff9b
--- /dev/null
+++ b/intl/dcngettext.c
@@ -0,0 +1,61 @@
+/* Implementation of the dcngettext(3) function.
+   Copyright (C) 1995-1999, 2000, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   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 dcngettext__
+# define DCIGETTEXT dcigettext__
+#endif
+
+/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
+   locale.  */
+char *
+DCNGETTEXT (domainname, msgid1, msgid2, n, category)
+     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.  */
+INTDEF(__dcngettext)
+weak_alias (__dcngettext, dcngettext);
+#endif
diff --git a/intl/dgettext.c b/intl/dgettext.c
new file mode 100644
index 0000000..17b0442
--- /dev/null
+++ b/intl/dgettext.c
@@ -0,0 +1,59 @@
+/* Implementation of the dgettext(3) function.
+   Copyright (C) 1995-1997, 2000, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <locale.h>
+
+#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 DGETTEXT __dgettext
+# define DCGETTEXT INTUSE(__dcgettext)
+#else
+# define DGETTEXT dgettext__
+# define DCGETTEXT dcgettext__
+#endif
+
+/* Look up MSGID in the DOMAINNAME message catalog of the current
+   LC_MESSAGES locale.  */
+char *
+DGETTEXT (domainname, msgid)
+     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..2b9ff88
--- /dev/null
+++ b/intl/dngettext.c
@@ -0,0 +1,61 @@
+/* Implementation of the dngettext(3) function.
+   Copyright (C) 1995-1997, 2000, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <locale.h>
+
+#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 DNGETTEXT __dngettext
+# define DCNGETTEXT INTUSE(__dcngettext)
+#else
+# define DNGETTEXT dngettext__
+# define DCNGETTEXT 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 (domainname, msgid1, msgid2, n)
+     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..44f4934
--- /dev/null
+++ b/intl/eval-plural.h
@@ -0,0 +1,106 @@
+/* Plural expression evaluation.
+   Copyright (C) 2000-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., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
+
+#ifndef STATIC
+#define STATIC static
+#endif
+
+/* Evaluate the plural expression and return an index value.  */
+STATIC unsigned long int plural_eval PARAMS ((struct expression *pexp,
+					      unsigned long int n))
+     internal_function;
+
+STATIC
+unsigned long int
+internal_function
+plural_eval (pexp, n)
+     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:
+		return leftarg / rightarg;
+	      case module:
+		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..2985064
--- /dev/null
+++ b/intl/explodename.c
@@ -0,0 +1,192 @@
+/* Copyright (C) 1995-1998, 2000, 2001 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   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 @@ */
+
+char *
+_nl_find_language (name)
+     const char *name;
+{
+  while (name[0] != '\0' && name[0] != '_' && name[0] != '@'
+	 && name[0] != '+' && name[0] != ',')
+    ++name;
+
+  return (char *) name;
+}
+
+
+int
+_nl_explode_name (name, language, modifier, territory, codeset,
+		  normalized_codeset, special, sponsor, revision)
+     char *name;
+     const char **language;
+     const char **modifier;
+     const char **territory;
+     const char **codeset;
+     const char **normalized_codeset;
+     const char **special;
+     const char **sponsor;
+     const char **revision;
+{
+  enum { undecided, xpg, cen } syntax;
+  char *cp;
+  int mask;
+
+  *modifier = NULL;
+  *territory = NULL;
+  *codeset = NULL;
+  *normalized_codeset = NULL;
+  *special = NULL;
+  *sponsor = NULL;
+  *revision = NULL;
+
+  /* Now we determine the single parts of the locale name.  First
+     look for the language.  Termination symbols are `_' and `@' if
+     we use XPG4 style, and `_', `+', and `,' if we use CEN syntax.  */
+  mask = 0;
+  syntax = undecided;
+  *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[0] != '+' && cp[0] != ',' && cp[0] != '_')
+	++cp;
+
+      mask |= TERRITORY;
+
+      if (cp[0] == '.')
+	{
+	  /* Next is the codeset.  */
+	  syntax = xpg;
+	  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 (strcmp (*codeset, *normalized_codeset) == 0)
+		free ((char *) *normalized_codeset);
+	      else
+		mask |= XPG_NORM_CODESET;
+	    }
+	}
+    }
+
+  if (cp[0] == '@' || (syntax != xpg && cp[0] == '+'))
+    {
+      /* Next is the modifier.  */
+      syntax = cp[0] == '@' ? xpg : cen;
+      cp[0] = '\0';
+      *modifier = ++cp;
+
+      while (syntax == cen && cp[0] != '\0' && cp[0] != '+'
+	     && cp[0] != ',' && cp[0] != '_')
+	++cp;
+
+      mask |= XPG_MODIFIER | CEN_AUDIENCE;
+    }
+
+  if (syntax != xpg && (cp[0] == '+' || cp[0] == ',' || cp[0] == '_'))
+    {
+      syntax = cen;
+
+      if (cp[0] == '+')
+	{
+ 	  /* Next is special application (CEN syntax).  */
+	  cp[0] = '\0';
+	  *special = ++cp;
+
+	  while (cp[0] != '\0' && cp[0] != ',' && cp[0] != '_')
+	    ++cp;
+
+	  mask |= CEN_SPECIAL;
+	}
+
+      if (cp[0] == ',')
+	{
+ 	  /* Next is sponsor (CEN syntax).  */
+	  cp[0] = '\0';
+	  *sponsor = ++cp;
+
+	  while (cp[0] != '\0' && cp[0] != '_')
+	    ++cp;
+
+	  mask |= CEN_SPONSOR;
+	}
+
+      if (cp[0] == '_')
+	{
+ 	  /* Next is revision (CEN syntax).  */
+	  cp[0] = '\0';
+	  *revision = ++cp;
+
+	  mask |= CEN_REVISION;
+	}
+    }
+
+  /* For CEN syntax values it might be important to have the
+     separator character in the file name, not for XPG syntax.  */
+  if (syntax == xpg)
+    {
+      if (*territory != NULL && (*territory)[0] == '\0')
+	mask &= ~TERRITORY;
+
+      if (*codeset != NULL && (*codeset)[0] == '\0')
+	mask &= ~XPG_CODESET;
+
+      if (*modifier != NULL && (*modifier)[0] == '\0')
+	mask &= ~XPG_MODIFIER;
+    }
+
+  return mask;
+}
diff --git a/intl/finddomain.c b/intl/finddomain.c
new file mode 100644
index 0000000..2f103d5
--- /dev/null
+++ b/intl/finddomain.c
@@ -0,0 +1,198 @@
+/* Handle list of needed message catalogs
+   Copyright (C) 1995-1999, 2000, 2001 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   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
+
+/* @@ 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 (dirname, locale, domainname, domainbinding)
+     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 *special;
+  const char *sponsor;
+  const char *revision;
+  const char *alias_value;
+  int mask;
+
+  /* LOCALE can consist of up to four recognized parts for the XPG syntax:
+
+		language[_territory[.codeset]][@modifier]
+
+     and six parts for the CEN syntax:
+
+	language[_territory][+audience][+special][,[sponsor][_revision]]
+
+     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) revision
+		(2) sponsor
+		(3) special
+		(4) codeset
+		(5) normalized codeset
+		(6) territory
+		(7) audience/modifier
+   */
+
+  /* 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, NULL, NULL, NULL, domainname, 0);
+  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 cnt >= 0 ? retval : NULL;
+      /* 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 `@' if
+     we use XPG4 style, and `_', `+', and `,' if we use CEN syntax.  */
+  mask = _nl_explode_name (locale, &language, &modifier, &territory,
+			   &codeset, &normalized_codeset, &special,
+			   &sponsor, &revision);
+
+  /* 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, special,
+			       sponsor, revision, domainname, 1);
+  if (retval == NULL)
+    /* This means we are out of core.  */
+    return NULL;
+
+  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);
+
+  /* The space for normalized_codeset is dynamically allocated.  Free it.  */
+  if (mask & XPG_NORM_CODESET)
+    free ((void *) normalized_codeset);
+
+  return retval;
+}
+
+
+#ifdef _LIBC
+static void __attribute__ ((unused))
+free_mem (void)
+{
+  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);
+    }
+}
+
+text_set_element (__libc_subfreeres, free_mem);
+#endif
diff --git a/intl/gettext.c b/intl/gettext.c
new file mode 100644
index 0000000..e52d8ae
--- /dev/null
+++ b/intl/gettext.c
@@ -0,0 +1,64 @@
+/* Implementation of gettext(3) function.
+   Copyright (C) 1995, 1997, 2000, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   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 gettext__
+# define DCGETTEXT 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 (msgid)
+     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..4e3a5b2
--- /dev/null
+++ b/intl/gettextP.h
@@ -0,0 +1,205 @@
+/* Header describing internals of libintl library.
+   Copyright (C) 1995-1999, 2000-2002 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   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
+
+#include "loadinfo.h"
+
+#include "gmo.h"		/* Get nls_uint32.  */
+
+/* @@ end of prolog @@ */
+
+#ifndef PARAMS
+# if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES
+#  define PARAMS(args) args
+# else
+#  define PARAMS(args) ()
+# endif
+#endif
+
+#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
+SWAP (i)
+     nls_uint32 i;
+{
+  return (i << 24) | ((i & 0xff00) << 8) | ((i >> 8) & 0xff00) | (i >> 24);
+}
+#endif
+
+
+/* The representation of an opened message catalog.  */
+struct loaded_domain
+{
+  const char *data;
+  int use_mmap;
+  size_t mmap_size;
+  int must_swap;
+  nls_uint32 nstrings;
+  struct string_desc *orig_tab;
+  struct string_desc *trans_tab;
+  nls_uint32 hash_size;
+  nls_uint32 *hash_tab;
+  int codeset_cntr;
+#ifdef _LIBC
+  __gconv_t conv;
+#else
+# if HAVE_ICONV
+  iconv_t conv;
+# endif
+#endif
+  char **conv_tab;
+
+  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;
+  int codeset_cntr;	/* Incremented each time codeset changes.  */
+  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.  */
+extern int _nl_msg_cat_cntr;
+
+#ifndef _LIBC
+const char *_nl_locale_name PARAMS ((int category, const char *categoryname));
+#endif
+
+struct loaded_l10nfile *_nl_find_domain PARAMS ((const char *__dirname,
+						 char *__locale,
+						 const char *__domainname,
+					      struct binding *__domainbinding))
+     internal_function;
+void _nl_load_domain PARAMS ((struct loaded_l10nfile *__domain,
+			      struct binding *__domainbinding))
+     internal_function;
+void _nl_unload_domain PARAMS ((struct loaded_domain *__domain))
+     internal_function;
+const char *_nl_init_domain_conv PARAMS ((struct loaded_l10nfile *__domain_file,
+					  struct loaded_domain *__domain,
+					  struct binding *__domainbinding))
+     internal_function;
+void _nl_free_domain_conv PARAMS ((struct loaded_domain *__domain))
+     internal_function;
+
+char *_nl_find_msg PARAMS ((struct loaded_l10nfile *domain_file,
+			    struct binding *domainbinding,
+			    const char *msgid, size_t *lengthp))
+     internal_function;
+
+#ifdef _LIBC
+extern char *__gettext PARAMS ((const char *__msgid));
+extern char *__dgettext PARAMS ((const char *__domainname,
+				 const char *__msgid));
+extern char *__dcgettext PARAMS ((const char *__domainname,
+				  const char *__msgid, int __category));
+extern char *__ngettext PARAMS ((const char *__msgid1, const char *__msgid2,
+				 unsigned long int __n));
+extern char *__dngettext PARAMS ((const char *__domainname,
+				  const char *__msgid1, const char *__msgid2,
+				  unsigned long int n));
+extern char *__dcngettext PARAMS ((const char *__domainname,
+				   const char *__msgid1, const char *__msgid2,
+				   unsigned long int __n, int __category));
+extern char *__dcigettext PARAMS ((const char *__domainname,
+				   const char *__msgid1, const char *__msgid2,
+				   int __plural, unsigned long int __n,
+				   int __category));
+extern char *__textdomain PARAMS ((const char *__domainname));
+extern char *__bindtextdomain PARAMS ((const char *__domainname,
+				       const char *__dirname));
+extern char *__bind_textdomain_codeset PARAMS ((const char *__domainname,
+						const char *__codeset));
+#else
+extern char *gettext__ PARAMS ((const char *__msgid));
+extern char *dgettext__ PARAMS ((const char *__domainname,
+				 const char *__msgid));
+extern char *dcgettext__ PARAMS ((const char *__domainname,
+				  const char *__msgid, int __category));
+extern char *ngettext__ PARAMS ((const char *__msgid1, const char *__msgid2,
+				 unsigned long int __n));
+extern char *dngettext__ PARAMS ((const char *__domainname,
+				  const char *__msgid1, const char *__msgid2,
+				  unsigned long int __n));
+extern char *dcngettext__ PARAMS ((const char *__domainname,
+				   const char *__msgid1, const char *__msgid2,
+				   unsigned long int __n, int __category));
+extern char *dcigettext__ PARAMS ((const char *__domainname,
+				   const char *__msgid1, const char *__msgid2,
+				   int __plural, unsigned long int __n,
+				   int __category));
+extern char *textdomain__ PARAMS ((const char *__domainname));
+extern char *bindtextdomain__ PARAMS ((const char *__domainname,
+				       const char *__dirname));
+extern char *bind_textdomain_codeset__ PARAMS ((const char *__domainname,
+						const char *__codeset));
+#endif
+
+/* @@ begin of epilog @@ */
+
+#endif /* gettextP.h  */
diff --git a/intl/gmo.h b/intl/gmo.h
new file mode 100644
index 0000000..f05ae47
--- /dev/null
+++ b/intl/gmo.h
@@ -0,0 +1,100 @@
+/* Description of GNU message catalog format: general file layout.
+   Copyright (C) 1995, 1997, 2000, 2001 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   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
+
+/* 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 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 translation strings.  */
+  nls_uint32 trans_tab_offset;
+  /* Size of hashing table.  */
+  nls_uint32 hash_tab_size;
+  /* Offset of first hashing entry.  */
+  nls_uint32 hash_tab_offset;
+};
+
+struct string_desc
+{
+  /* Length of addressed string.  */
+  nls_uint32 length;
+  /* Offset of string in file.  */
+  nls_uint32 offset;
+};
+
+/* @@ begin of epilog @@ */
+
+#endif	/* gettext.h  */
diff --git a/intl/hash-string.h b/intl/hash-string.h
new file mode 100644
index 0000000..b267a87
--- /dev/null
+++ b/intl/hash-string.h
@@ -0,0 +1,59 @@
+/* Description of GNU message catalog format: string hashing function.
+   Copyright (C) 1995, 1997, 1998, 2000, 2001 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
+
+/* @@ end of prolog @@ */
+
+#ifndef PARAMS
+# if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES
+#  define PARAMS(Args) Args
+# else
+#  define PARAMS(Args) ()
+# endif
+#endif
+
+/* We assume to have `unsigned long int' value with at least 32 bits.  */
+#define HASHWORDBITS 32
+
+
+/* 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.]  */
+static unsigned long int hash_string PARAMS ((const char *__str_param));
+
+static inline unsigned long int
+hash_string (str_param)
+     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 long int) *str++;
+      g = hval & ((unsigned long int) 0xf << (HASHWORDBITS - 4));
+      if (g != 0)
+	{
+	  hval ^= g >> (HASHWORDBITS - 8);
+	  hval ^= g;
+	}
+    }
+  return hval;
+}
diff --git a/intl/intl-compat.c b/intl/intl-compat.c
new file mode 100644
index 0000000..0a06ce9
--- /dev/null
+++ b/intl/intl-compat.c
@@ -0,0 +1,166 @@
+/* intl-compat.c - Stub functions to call gettext functions from GNU gettext
+   Library.
+   Copyright (C) 1995, 2000, 2001 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include "libgnuintl.h"
+#include "gettextP.h"
+
+/* @@ end of prolog @@ */
+
+/* This file redirects the gettext functions (without prefix or suffix) to
+   those defined in the included GNU gettext library (with "__" suffix).
+   It is compiled into libintl when the included GNU gettext library is
+   configured --with-included-gettext.
+
+   This redirection works also in the case that the system C library or
+   the system libintl library contain gettext/textdomain/... functions.
+   If it didn't, we would need to add preprocessor level redirections to
+   libgnuintl.h of the following form:
+
+#    define gettext gettext__
+#    define dgettext dgettext__
+#    define dcgettext dcgettext__
+#    define ngettext ngettext__
+#    define dngettext dngettext__
+#    define dcngettext dcngettext__
+#    define textdomain textdomain__
+#    define bindtextdomain bindtextdomain__
+#    define bind_textdomain_codeset bind_textdomain_codeset__
+
+   How does this redirection work? There are two cases.
+   A. When libintl.a is linked into an executable, it works because
+      functions defined in the executable always override functions in
+      the shared libraries.
+   B. When libintl.so is used, it works because
+      1. those systems defining gettext/textdomain/... in the C library
+         (namely, Solaris 2.4 and newer, and GNU libc 2.0 and newer) are
+         ELF systems and define these symbols as weak, thus explicitly
+         letting other shared libraries override it.
+      2. those systems defining gettext/textdomain/... in a standalone
+         libintl.so library (namely, Solaris 2.3 and newer) have this
+         shared library in /usr/lib, and the linker will search /usr/lib
+         *after* the directory where the GNU gettext library is installed.
+
+   A third case, namely when libintl.a is linked into a shared library
+   whose name is not libintl.so, is not supported. In this case, on
+   Solaris, when -lintl precedes the linker option for the shared library
+   containing GNU gettext, the system's gettext would indeed override
+   the GNU gettext. Anyone doing this kind of stuff must be clever enough
+   to 1. compile libintl.a with -fPIC, 2. remove -lintl from his linker
+   command line.  */
+
+
+#undef gettext
+#undef dgettext
+#undef dcgettext
+#undef ngettext
+#undef dngettext
+#undef dcngettext
+#undef textdomain
+#undef bindtextdomain
+#undef bind_textdomain_codeset
+
+
+char *
+gettext (msgid)
+     const char *msgid;
+{
+  return gettext__ (msgid);
+}
+
+
+char *
+dgettext (domainname, msgid)
+     const char *domainname;
+     const char *msgid;
+{
+  return dgettext__ (domainname, msgid);
+}
+
+
+char *
+dcgettext (domainname, msgid, category)
+     const char *domainname;
+     const char *msgid;
+     int category;
+{
+  return dcgettext__ (domainname, msgid, category);
+}
+
+
+char *
+ngettext (msgid1, msgid2, n)
+     const char *msgid1;
+     const char *msgid2;
+     unsigned long int n;
+{
+  return ngettext__ (msgid1, msgid2, n);
+}
+
+
+char *
+dngettext (domainname, msgid1, msgid2, n)
+     const char *domainname;
+     const char *msgid1;
+     const char *msgid2;
+     unsigned long int n;
+{
+  return dngettext__ (domainname, msgid1, msgid2, n);
+}
+
+
+char *
+dcngettext (domainname, msgid1, msgid2, n, category)
+     const char *domainname;
+     const char *msgid1;
+     const char *msgid2;
+     unsigned long int n;
+     int category;
+{
+  return dcngettext__ (domainname, msgid1, msgid2, n, category);
+}
+
+
+char *
+textdomain (domainname)
+     const char *domainname;
+{
+  return textdomain__ (domainname);
+}
+
+
+char *
+bindtextdomain (domainname, dirname)
+     const char *domainname;
+     const char *dirname;
+{
+  return bindtextdomain__ (domainname, dirname);
+}
+
+
+char *
+bind_textdomain_codeset (domainname, codeset)
+     const char *domainname;
+     const char *codeset;
+{
+  return bind_textdomain_codeset__ (domainname, codeset);
+}
diff --git a/intl/l10nflist.c b/intl/l10nflist.c
new file mode 100644
index 0000000..d861912
--- /dev/null
+++ b/intl/l10nflist.c
@@ -0,0 +1,409 @@
+/* Copyright (C) 1995-1999, 2000, 2001, 2002 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   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 PARAMS ((char *dest, const char *src));
+# endif
+#endif
+
+/* Define function which are usually not available.  */
+
+#if !defined _LIBC && !defined HAVE___ARGZ_COUNT
+/* Returns the number of strings in ARGZ.  */
+static size_t argz_count__ PARAMS ((const char *argz, size_t len));
+
+static size_t
+argz_count__ (argz, len)
+     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)
+#else
+# ifdef _LIBC
+#  define __argz_count(argz, len) INTUSE(__argz_count) (argz, len)
+# endif
+#endif	/* !_LIBC && !HAVE___ARGZ_COUNT */
+
+#if !defined _LIBC && !defined HAVE___ARGZ_STRINGIFY
+/* Make '\0' separated arg vector ARGZ printable by converting all the '\0's
+   except the last into the character SEP.  */
+static void argz_stringify__ PARAMS ((char *argz, size_t len, int sep));
+
+static void
+argz_stringify__ (argz, len, sep)
+     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)
+#else
+# ifdef _LIBC
+#  define __argz_stringify(argz, len, sep) \
+  INTUSE(__argz_stringify) (argz, len, sep)
+# endif
+#endif	/* !_LIBC && !HAVE___ARGZ_STRINGIFY */
+
+#if !defined _LIBC && !defined HAVE___ARGZ_NEXT
+static char *argz_next__ PARAMS ((char *argz, size_t argz_len,
+				  const char *entry));
+
+static char *
+argz_next__ (argz, argz_len, entry)
+     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 int pop PARAMS ((int x));
+
+static inline int
+pop (x)
+     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 (l10nfile_list, dirlist, dirlist_len, mask, language,
+		    territory, codeset, normalized_codeset, modifier, special,
+		    sponsor, revision, filename, do_allocate)
+     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 *special;
+     const char *sponsor;
+     const char *revision;
+     const char *filename;
+     int do_allocate;
+{
+  char *abs_filename;
+  struct loaded_l10nfile *last = NULL;
+  struct loaded_l10nfile *retval;
+  char *cp;
+  size_t entries;
+  int cnt;
+
+  /* Allocate room for the full file name.  */
+  abs_filename = (char *) malloc (dirlist_len
+				  + strlen (language)
+				  + ((mask & 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
+				      || (mask & CEN_AUDIENCE) != 0)
+				     ? strlen (modifier) + 1 : 0)
+				  + ((mask & CEN_SPECIAL) != 0
+				     ? strlen (special) + 1 : 0)
+				  + (((mask & CEN_SPONSOR) != 0
+				      || (mask & CEN_REVISION) != 0)
+				     ? (1 + ((mask & CEN_SPONSOR) != 0
+					     ? strlen (sponsor) + 1 : 0)
+					+ ((mask & CEN_REVISION) != 0
+					   ? strlen (revision) + 1 : 0)) : 0)
+				  + 1 + strlen (filename) + 1);
+
+  if (abs_filename == NULL)
+    return NULL;
+
+  retval = NULL;
+  last = NULL;
+
+  /* Construct file name.  */
+  memcpy (abs_filename, dirlist, dirlist_len);
+  __argz_stringify (abs_filename, dirlist_len, PATH_SEPARATOR);
+  cp = abs_filename + (dirlist_len - 1);
+  *cp++ = '/';
+  cp = stpcpy (cp, language);
+
+  if ((mask & 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 | CEN_AUDIENCE)) != 0)
+    {
+      /* This component can be part of both syntaces but has different
+	 leading characters.  For CEN we use `+', else `@'.  */
+      *cp++ = (mask & CEN_AUDIENCE) != 0 ? '+' : '@';
+      cp = stpcpy (cp, modifier);
+    }
+  if ((mask & CEN_SPECIAL) != 0)
+    {
+      *cp++ = '+';
+      cp = stpcpy (cp, special);
+    }
+  if ((mask & (CEN_SPONSOR | CEN_REVISION)) != 0)
+    {
+      *cp++ = ',';
+      if ((mask & CEN_SPONSOR) != 0)
+	cp = stpcpy (cp, sponsor);
+      if ((mask & CEN_REVISION) != 0)
+	{
+	  *cp++ = '_';
+	  cp = stpcpy (cp, revision);
+	}
+    }
+
+  *cp++ = '/';
+  stpcpy (cp, filename);
+
+  /* Look in list of already loaded domains whether it is already
+     available.  */
+  last = NULL;
+  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;
+	  }
+
+	last = retval;
+      }
+
+  if (retval != NULL || do_allocate == 0)
+    {
+      free (abs_filename);
+      return retval;
+    }
+
+  retval = (struct loaded_l10nfile *)
+    malloc (sizeof (*retval) + (__argz_count (dirlist, dirlist_len)
+				* (1 << pop (mask))
+				* sizeof (struct loaded_l10nfile *)));
+  if (retval == NULL)
+    return NULL;
+
+  retval->filename = abs_filename;
+  retval->decided = (__argz_count (dirlist, dirlist_len) != 1
+		     || ((mask & XPG_CODESET) != 0
+			 && (mask & XPG_NORM_CODESET) != 0));
+  retval->data = NULL;
+
+  if (last == NULL)
+    {
+      retval->next = *l10nfile_list;
+      *l10nfile_list = retval;
+    }
+  else
+    {
+      retval->next = last->next;
+      last->next = retval;
+    }
+
+  entries = 0;
+  /* If the DIRLIST is a real list the RETVAL entry corresponds not to
+     a real file.  So we have to use the DIRLIST separation mechanism
+     of the inner loop.  */
+  cnt = __argz_count (dirlist, dirlist_len) == 1 ? mask - 1 : mask;
+  for (; cnt >= 0; --cnt)
+    if ((cnt & ~mask) == 0
+	&& ((cnt & CEN_SPECIFIC) == 0 || (cnt & XPG_SPECIFIC) == 0)
+	&& ((cnt & XPG_CODESET) == 0 || (cnt & XPG_NORM_CODESET) == 0))
+      {
+	/* 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, special,
+				  sponsor, revision, 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 (codeset, name_len)
+     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 (dest, src)
+     char *dest;
+     const char *src;
+{
+  while ((*dest++ = *src++) != '\0')
+    /* Do nothing. */ ;
+  return dest - 1;
+}
+#endif
diff --git a/intl/libgnuintl.h b/intl/libgnuintl.h
new file mode 100644
index 0000000..1387e70
--- /dev/null
+++ b/intl/libgnuintl.h
@@ -0,0 +1,138 @@
+/* Message catalogs for internationalization.
+   Copyright (C) 1995-1997, 2000-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., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   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
+
+/* Resolve a platform specific conflict on DJGPP.  GNU gettext takes
+   precedence over _conio_gettext.  */
+#ifdef __DJGPP__
+# undef gettext
+# define gettext gettext
+#endif
+
+/* Use _INTL_PARAMS, not PARAMS, in order to avoid clashes with identifiers
+   used by programs.  Similarly, test __PROTOTYPES, not PROTOTYPES.  */
+#ifndef _INTL_PARAMS
+# if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES
+#  define _INTL_PARAMS(args) args
+# else
+#  define _INTL_PARAMS(args) ()
+# endif
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#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).  */
+extern char *gettext _INTL_PARAMS ((const char *__msgid));
+
+/* Look up MSGID in the DOMAINNAME message catalog for the current
+   LC_MESSAGES locale.  */
+extern char *dgettext _INTL_PARAMS ((const char *__domainname,
+				     const char *__msgid));
+
+/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
+   locale.  */
+extern char *dcgettext _INTL_PARAMS ((const char *__domainname,
+				      const char *__msgid,
+				      int __category));
+
+
+/* Similar to `gettext' but select the plural form corresponding to the
+   number N.  */
+extern char *ngettext _INTL_PARAMS ((const char *__msgid1,
+				     const char *__msgid2,
+				     unsigned long int __n));
+
+/* Similar to `dgettext' but select the plural form corresponding to the
+   number N.  */
+extern char *dngettext _INTL_PARAMS ((const char *__domainname,
+				      const char *__msgid1,
+				      const char *__msgid2,
+				      unsigned long int __n));
+
+/* Similar to `dcgettext' but select the plural form corresponding to the
+   number N.  */
+extern char *dcngettext _INTL_PARAMS ((const char *__domainname,
+				       const char *__msgid1,
+				       const char *__msgid2,
+				       unsigned long int __n,
+				       int __category));
+
+
+/* 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".  */
+extern char *textdomain _INTL_PARAMS ((const char *__domainname));
+
+/* Specify that the DOMAINNAME message catalog will be found
+   in DIRNAME rather than in the system locale data base.  */
+extern char *bindtextdomain _INTL_PARAMS ((const char *__domainname,
+					   const char *__dirname));
+
+/* Specify the character encoding in which the messages from the
+   DOMAINNAME message catalog will be returned.  */
+extern char *bind_textdomain_codeset _INTL_PARAMS ((const char *__domainname,
+						    const char *__codeset));
+
+
+/* Optimized version of the functions above.  */
+#if defined __OPTIMIZED
+/* These are macros, but could also be inline functions.  */
+
+# define gettext(msgid)							      \
+  dgettext (NULL, msgid)
+
+# define dgettext(domainname, msgid)					      \
+  dcgettext (domainname, msgid, LC_MESSAGES)
+
+# define ngettext(msgid1, msgid2, n)					      \
+  dngettext (NULL, msgid1, msgid2, n)
+
+# define dngettext(domainname, msgid1, msgid2, n)			      \
+  dcngettext (domainname, msgid1, msgid2, n, LC_MESSAGES)
+
+#endif /* Optimizing. */
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* libintl.h */
diff --git a/intl/loadinfo.h b/intl/loadinfo.h
new file mode 100644
index 0000000..d180962
--- /dev/null
+++ b/intl/loadinfo.h
@@ -0,0 +1,121 @@
+/* Copyright (C) 1996-1999, 2000, 2001 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   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 PARAMS
+# if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES
+#  define PARAMS(args) args
+# else
+#  define PARAMS(args) ()
+# endif
+#endif
+
+#ifndef internal_function
+# define internal_function
+#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 __EMX__ || defined __DJGPP__
+  /* Win32, OS/2, DOS */
+# define PATH_SEPARATOR ';'
+#else
+  /* Unix */
+# define PATH_SEPARATOR ':'
+#endif
+
+/* Encoding of locale name parts.  */
+#define CEN_REVISION		1
+#define CEN_SPONSOR		2
+#define CEN_SPECIAL		4
+#define XPG_NORM_CODESET	8
+#define XPG_CODESET		16
+#define TERRITORY		32
+#define CEN_AUDIENCE		64
+#define XPG_MODIFIER		128
+
+#define CEN_SPECIFIC	(CEN_REVISION|CEN_SPONSOR|CEN_SPECIAL|CEN_AUDIENCE)
+#define XPG_SPECIFIC	(XPG_CODESET|XPG_NORM_CODESET|XPG_MODIFIER)
+
+
+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 PARAMS ((const char *codeset,
+						  size_t name_len));
+
+extern struct loaded_l10nfile *
+_nl_make_l10nflist PARAMS ((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 *special,
+			    const char *sponsor, const char *revision,
+			    const char *filename, int do_allocate));
+
+
+extern const char *_nl_expand_alias PARAMS ((const char *name));
+
+/* normalized_codeset is dynamically allocated and has to be freed by
+   the caller.  */
+extern int _nl_explode_name PARAMS ((char *name, const char **language,
+				     const char **modifier,
+				     const char **territory,
+				     const char **codeset,
+				     const char **normalized_codeset,
+				     const char **special,
+				     const char **sponsor,
+				     const char **revision));
+
+extern char *_nl_find_language PARAMS ((const char *name));
+
+#endif	/* loadinfo.h */
diff --git a/intl/loadmsgcat.c b/intl/loadmsgcat.c
new file mode 100644
index 0000000..76130ed
--- /dev/null
+++ b/intl/loadmsgcat.c
@@ -0,0 +1,445 @@
+/* Load needed message catalogs.
+   Copyright (C) 1995-1999, 2000, 2001 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   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__
+# define alloca __builtin_alloca
+# define HAVE_ALLOCA 1
+#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
+
+#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
+
+#include "gmo.h"
+#include "gettextP.h"
+#include "plural-exp.h"
+
+#ifdef _LIBC
+# include "../locale/localeinfo.h"
+#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   __open
+# define close  __close
+# define read   __read
+# define mmap   __mmap
+# define munmap __munmap
+#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;
+
+
+/* Initialize the codeset dependent parts of an opened message catalog.
+   Return the header entry.  */
+const char *
+internal_function
+_nl_init_domain_conv (domain_file, domain, domainbinding)
+     struct loaded_l10nfile *domain_file;
+     struct loaded_domain *domain;
+     struct binding *domainbinding;
+{
+  /* 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.  */
+  char *nullentry;
+  size_t nullentrylen;
+
+  /* Preinitialize fields, to avoid recursion during _nl_find_msg.  */
+  domain->codeset_cntr =
+    (domainbinding != NULL ? domainbinding->codeset_cntr : 0);
+#ifdef _LIBC
+  domain->conv = (__gconv_t) -1;
+#else
+# if HAVE_ICONV
+  domain->conv = (iconv_t) -1;
+# endif
+#endif
+  domain->conv_tab = NULL;
+
+  /* Get the header entry.  */
+  nullentry = _nl_find_msg (domain_file, domainbinding, "", &nullentrylen);
+
+  if (nullentry != NULL)
+    {
+#if defined _LIBC || HAVE_ICONV
+      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
+
+	  /* 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.  Moreover, the value specified through
+	     bind_textdomain_codeset overrides both.  */
+	  if (domainbinding != NULL && domainbinding->codeset != NULL)
+	    outcharset = domainbinding->codeset;
+	  else
+	    {
+	      outcharset = getenv ("OUTPUT_CHARSET");
+	      if (outcharset == NULL || outcharset[0] == '\0')
+		{
+# ifdef _LIBC
+		  outcharset = (*_nl_current[LC_CTYPE])->values[_NL_ITEM_INDEX (CODESET)].string;
+# else
+#  if HAVE_ICONV
+		  extern const char *locale_charset PARAMS ((void));
+		  outcharset = locale_charset ();
+#  endif
+# endif
+		}
+	    }
+
+# ifdef _LIBC
+	  /* We always want to use transliteration.  */
+	  outcharset = norm_add_slashes (outcharset, "TRANSLIT");
+	  charset = norm_add_slashes (charset, NULL);
+	  if (__gconv_open (outcharset, charset, &domain->conv,
+			    GCONV_AVOID_NOCONV)
+	      != __GCONV_OK)
+	    domain->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
+	  len = strlen (outcharset);
+	  {
+	    char *tmp = (char *) alloca (len + 10 + 1);
+	    memcpy (tmp, outcharset, len);
+	    memcpy (tmp + len, "//TRANSLIT", 10 + 1);
+	    outcharset = tmp;
+	  }
+#   endif
+	  domain->conv = iconv_open (outcharset, charset);
+#   if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) || __GLIBC__ > 2 \
+       || _LIBICONV_VERSION >= 0x0105
+	  freea (outcharset);
+#   endif
+#  endif
+# endif
+
+	  freea (charset);
+	}
+#endif /* _LIBC || HAVE_ICONV */
+    }
+
+  return nullentry;
+}
+
+/* Frees the codeset dependent parts of an opened message catalog.  */
+void
+internal_function
+_nl_free_domain_conv (domain)
+     struct loaded_domain *domain;
+{
+  if (domain->conv_tab != NULL && domain->conv_tab != (char **) -1)
+    free (domain->conv_tab);
+
+#ifdef _LIBC
+  if (domain->conv != (__gconv_t) -1)
+    __gconv_close (domain->conv);
+#else
+# if HAVE_ICONV
+  if (domain->conv != (iconv_t) -1)
+    iconv_close (domain->conv);
+# endif
+#endif
+}
+
+/* Load the message catalogs specified by FILENAME.  If it is no valid
+   message catalog do nothing.  */
+void
+internal_function
+_nl_load_domain (domain_file, domainbinding)
+     struct loaded_l10nfile *domain_file;
+     struct binding *domainbinding;
+{
+  int fd;
+  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;
+  const char *nullentry;
+
+  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)
+    return;
+
+  /* Try to open the addressed file.  */
+  fd = open (domain_file->filename, O_RDONLY | O_BINARY);
+  if (fd == -1)
+    return;
+
+  /* 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.  */
+      close (fd);
+      return;
+    }
+
+#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);
+      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)
+	return;
+
+      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
+	      close (fd);
+	      return;
+	    }
+	  read_ptr += nb;
+	  to_read -= nb;
+	}
+      while (to_read > 0);
+
+      close (fd);
+    }
+
+  /* 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);
+      return;
+    }
+
+  domain = (struct loaded_domain *) malloc (sizeof (struct loaded_domain));
+  if (domain == NULL)
+    return;
+  domain_file->data = domain;
+
+  domain->data = (char *) data;
+  domain->use_mmap = use_mmap;
+  domain->mmap_size = size;
+  domain->must_swap = data->magic != _MAGIC;
+
+  /* Fill in the information about the available tables.  */
+  switch (W (domain->must_swap, data->revision))
+    {
+    case 0:
+      domain->nstrings = W (domain->must_swap, data->nstrings);
+      domain->orig_tab = (struct string_desc *)
+	((char *) data + W (domain->must_swap, data->orig_tab_offset));
+      domain->trans_tab = (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 = (nls_uint32 *)
+	((char *) data + W (domain->must_swap, data->hash_tab_offset));
+      break;
+    default:
+      /* This is an invalid revision.  */
+#ifdef HAVE_MMAP
+      if (use_mmap)
+	munmap ((caddr_t) data, size);
+      else
+#endif
+	free (data);
+      free (domain);
+      domain_file->data = NULL;
+      return;
+    }
+
+  /* Now initialize the character set converter from the character set
+     the file is encoded with (found in the header entry) to the domain's
+     specified character set or the locale's character set.  */
+  nullentry = _nl_init_domain_conv (domain_file, domain, domainbinding);
+
+  /* Also look for a plural specification.  */
+  EXTRACT_PLURAL_EXPRESSION (nullentry, &domain->plural, &domain->nplurals);
+}
+
+
+#ifdef _LIBC
+void
+internal_function
+_nl_unload_domain (domain)
+     struct loaded_domain *domain;
+{
+  if (domain->plural != &__gettext_germanic_plural)
+    __gettext_free_exp (domain->plural);
+
+  _nl_free_domain_conv (domain);
+
+# 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..bc5587b
--- /dev/null
+++ b/intl/localcharset.c
@@ -0,0 +1,345 @@
+/* Determine a canonical name for the current locale's character encoding.
+
+   Copyright (C) 2000-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., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
+
+/* Written by Bruno Haible <haible at clisp.cons.org>.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#if HAVE_STDDEF_H
+# include <stddef.h>
+#endif
+
+#include <stdio.h>
+#if HAVE_STRING_H
+# include <string.h>
+#else
+# include <strings.h>
+#endif
+#if HAVE_STDLIB_H
+# include <stdlib.h>
+#endif
+
+#if defined _WIN32 || defined __WIN32__
+# undef WIN32   /* avoid warning on mingw32 */
+# define WIN32
+#endif
+
+#if defined __EMX__
+/* Assume EMX program runs on OS/2, even if compiled under DOS.  */
+# define OS2
+#endif
+
+#if !defined WIN32
+# if HAVE_LANGINFO_CODESET
+#  include <langinfo.h>
+# else
+#  if HAVE_SETLOCALE
+#   include <locale.h>
+#  endif
+# endif
+#elif defined WIN32
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+#endif
+#if defined OS2
+# define INCL_DOS
+# include <os2.h>
+#endif
+
+#if defined _WIN32 || defined __WIN32__ || defined __EMX__ || defined __DJGPP__
+  /* Win32, 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
+
+#ifdef HAVE_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 ()
+{
+  const char *cp;
+
+  cp = charset_aliases;
+  if (cp == NULL)
+    {
+#if !defined WIN32
+      FILE *fp;
+      const char *dir = LIBDIR;
+      const char *base = "charset.alias";
+      char *file_name;
+
+      /* 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.  */
+	  int c;
+	  char buf1[50+1];
+	  char buf2[50+1];
+	  char *res_ptr = NULL;
+	  size_t res_size = 0;
+	  size_t l1, l2;
+
+	  for (;;)
+	    {
+	      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);
+	      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;
+		  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
+
+      /* 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.  */
+
+# if defined WIN32
+      cp = "CP936" "\0" "GBK" "\0"
+	   "CP1361" "\0" "JOHAB" "\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 ()
+{
+  const char *codeset;
+  const char *aliases;
+
+#if !(defined WIN32 || defined OS2)
+
+# if HAVE_LANGINFO_CODESET
+
+  /* Most systems support nl_langinfo (CODESET) nowadays.  */
+  codeset = nl_langinfo (CODESET);
+
+# 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 HAVE_SETLOCALE && 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
+
+  static char buf[2 + 10 + 1];
+
+  /* Win32 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;
+      }
+
+  return codeset;
+}
diff --git a/intl/locale.alias b/intl/locale.alias
new file mode 100644
index 0000000..bd7b9b3
--- /dev/null
+++ b/intl/locale.alias
@@ -0,0 +1,78 @@
+# Locale name alias data base.
+# Copyright (C) 1996,1997,1998,1999,2000,2001 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+# 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 far from being complete.  If you have a value for
+# your own site which you think might be useful for others too, share
+# it with the rest of us.  Send it using the `glibcbug' script to
+# bugs at gnu.org.
+
+# Packages using this file: 
+
+bokmal		no_NO.ISO-8859-1
+bokm�l		no_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
+nb_NO		no_NO.ISO-8859-1
+nb_NO.ISO-8859-1 no_NO.ISO-8859-1
+norwegian       no_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..456e41e
--- /dev/null
+++ b/intl/localealias.c
@@ -0,0 +1,419 @@
+/* Handle aliases for locale names.
+   Copyright (C) 1995-1999, 2000, 2001 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   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__
+# define alloca __builtin_alloca
+# define HAVE_ALLOCA 1
+#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
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "gettextP.h"
+
+/* @@ 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
+
+/* We need locking here since we can be called from different places.  */
+# include <bits/libc-lock.h>
+
+__libc_lock_define_initialized (static, lock);
+#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 || defined HAVE_FGETS_UNLOCKED
+# undef fgets
+# define fgets(buf, len, s) fgets_unlocked (buf, len, s)
+#endif
+#if defined _LIBC_REENTRANT || defined HAVE_FEOF_UNLOCKED
+# undef feof
+# define feof(s) feof_unlocked (s)
+#endif
+
+
+struct alias_map
+{
+  const char *alias;
+  const char *value;
+};
+
+
+static char *string_space;
+static size_t string_space_act;
+static size_t string_space_max;
+static struct alias_map *map;
+static size_t nmap;
+static size_t maxmap;
+
+
+/* Prototypes for local functions.  */
+static size_t read_alias_file PARAMS ((const char *fname, int fname_len))
+     internal_function;
+static int extend_alias_table PARAMS ((void));
+static int alias_compare PARAMS ((const struct alias_map *map1,
+				  const struct alias_map *map2));
+
+
+const char *
+_nl_expand_alias (name)
+    const char *name;
+{
+  static const char *locale_alias_path;
+  struct alias_map *retval;
+  const char *result = NULL;
+  size_t added;
+
+#ifdef _LIBC
+  __libc_lock_lock (lock);
+#endif
+
+  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 (*) PARAMS ((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);
+
+#ifdef _LIBC
+  __libc_lock_unlock (lock);
+#endif
+
+  return result;
+}
+
+
+static size_t
+internal_function
+read_alias_file (fname, fname_len)
+     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
+
+  fp = fopen (full_fname, "r");
+  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
+       */
+      char buf[BUFSIZ];
+      char *alias;
+      char *value;
+      char *cp;
+
+      if (FGETS (buf, sizeof buf, fp) == NULL)
+	/* EOF reached.  */
+	break;
+
+      /* Possibly not the whole line fits into the buffer.  Ignore
+	 the rest of the line.  */
+      if (strchr (buf, '\n') == NULL)
+	{
+	  char altbuf[BUFSIZ];
+	  do
+	    if (FGETS (altbuf, sizeof altbuf, fp) == NULL)
+	      /* Make sure the inner loop will be left.  The outer loop
+		 will exit at the `feof' test.  */
+	      break;
+	  while (strchr (altbuf, '\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')
+	    {
+	      size_t alias_len;
+	      size_t value_len;
+
+	      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';
+
+	      if (nmap >= maxmap)
+		if (__builtin_expect (extend_alias_table (), 0))
+		  return added;
+
+	      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)
+		    return added;
+
+		  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 = memcpy (&string_space[string_space_act],
+					alias, alias_len);
+	      string_space_act += alias_len;
+
+	      map[nmap].value = memcpy (&string_space[string_space_act],
+					value, value_len);
+	      string_space_act += value_len;
+
+	      ++nmap;
+	      ++added;
+	    }
+	}
+    }
+
+  /* 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 (*) PARAMS ((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;
+}
+
+
+#ifdef _LIBC
+static void __attribute__ ((unused))
+free_mem (void)
+{
+  if (string_space != NULL)
+    free (string_space);
+  if (map != NULL)
+    free (map);
+}
+text_set_element (__libc_subfreeres, free_mem);
+#endif
+
+
+static int
+alias_compare (map1, map2)
+     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..a724198
--- /dev/null
+++ b/intl/localename.c
@@ -0,0 +1,694 @@
+/* Determine the current selected locale.
+   Copyright (C) 1995-1999, 2000-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., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
+
+/* Written by Ulrich Drepper <drepper at gnu.org>, 1995.  */
+/* Win32 code written by Tor Lillqvist <tml at iki.fi>.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <locale.h>
+
+#if defined _WIN32 || defined __WIN32__
+# undef WIN32   /* avoid warning on mingw32 */
+# define WIN32
+#endif
+
+#ifdef WIN32
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+/* 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_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_CATALAN
+# define LANG_CATALAN 0x03
+# 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_GEORGIAN
+# define LANG_GEORGIAN 0x37
+# endif
+# ifndef LANG_GUJARATI
+# define LANG_GUJARATI 0x47
+# endif
+# ifndef LANG_HEBREW
+# define LANG_HEBREW 0x0d
+# endif
+# ifndef LANG_HINDI
+# define LANG_HINDI 0x39
+# endif
+# ifndef LANG_INDONESIAN
+# define LANG_INDONESIAN 0x21
+# endif
+# ifndef LANG_KANNADA
+# define LANG_KANNADA 0x4b
+# 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_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_MANIPURI
+# define LANG_MANIPURI 0x58
+# endif
+# ifndef LANG_MARATHI
+# define LANG_MARATHI 0x4e
+# endif
+# ifndef LANG_NEPALI
+# define LANG_NEPALI 0x61
+# endif
+# ifndef LANG_ORIYA
+# define LANG_ORIYA 0x48
+# endif
+# ifndef LANG_PUNJABI
+# define LANG_PUNJABI 0x46
+# 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_SLOVAK
+# define LANG_SLOVAK 0x1b
+# endif
+# ifndef LANG_SWAHILI
+# define LANG_SWAHILI 0x41
+# 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_UKRAINIAN
+# define LANG_UKRAINIAN 0x22
+# endif
+# ifndef LANG_URDU
+# define LANG_URDU 0x20
+# endif
+# ifndef LANG_UZBEK
+# define LANG_UZBEK 0x43
+# endif
+# ifndef LANG_VIETNAMESE
+# define LANG_VIETNAMESE 0x2a
+# 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_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_FRENCH_LUXEMBOURG
+# define SUBLANG_FRENCH_LUXEMBOURG 0x05
+# endif
+# ifndef SUBLANG_FRENCH_MONACO
+# define SUBLANG_FRENCH_MONACO 0x06
+# 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_SERBIAN_LATIN
+# define SUBLANG_SERBIAN_LATIN 0x02
+# endif
+# ifndef SUBLANG_SERBIAN_CYRILLIC
+# define SUBLANG_SERBIAN_CYRILLIC 0x03
+# 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_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
+
+/* 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 __GNU_LIBRARY__ && __GNU_LIBRARY__ >= 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 *
+_nl_locale_name (category, categoryname)
+     int category;
+     const char *categoryname;
+{
+  const char *retval;
+
+#ifndef WIN32
+
+  /* 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
+  retval = setlocale (category, NULL);
+# else
+  /* Setting of LC_ALL overwrites all other.  */
+  retval = getenv ("LC_ALL");
+  if (retval == NULL || retval[0] == '\0')
+    {
+      /* Next comes the name of the desired category.  */
+      retval = getenv (categoryname);
+      if (retval == NULL || retval[0] == '\0')
+	{
+	  /* Last possibility is the LANG environment variable.  */
+	  retval = getenv ("LANG");
+	  if (retval == NULL || retval[0] == '\0')
+	    /* We use C as the default domain.  POSIX says this is
+	       implementation defined.  */
+	    retval = "C";
+	}
+    }
+# endif
+
+  return retval;
+
+#else /* WIN32 */
+
+  /* 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.  */
+
+  LCID lcid;
+  LANGID langid;
+  int primary, sub;
+
+  /* Let the user override the system settings through environment
+     variables, as on POSIX systems.  */
+  retval = getenv ("LC_ALL");
+  if (retval != NULL && retval[0] != '\0')
+    return retval;
+  retval = getenv (categoryname);
+  if (retval != NULL && retval[0] != '\0')
+    return retval;
+  retval = getenv ("LANG");
+  if (retval != NULL && retval[0] != '\0')
+    return retval;
+
+  /* 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);
+  switch (primary)
+    {
+    case LANG_AFRIKAANS: return "af_ZA";
+    case LANG_ALBANIAN: return "sq_AL";
+    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:
+      return "eu"; /* Ambiguous: could be "eu_ES" or "eu_FR".  */
+    case LANG_BELARUSIAN: return "be_BY";
+    case LANG_BENGALI: return "bn_IN";
+    case LANG_BULGARIAN: return "bg_BG";
+    case LANG_CATALAN: return "ca_ES";
+    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)
+	{
+	/* FIXME: How to distinguish Croatian and Latin Serbian locales?  */
+	case SUBLANG_SERBIAN_LATIN: return "sr_YU";
+	case SUBLANG_SERBIAN_CYRILLIC: return "sr_YU at cyrillic";
+	default: return "hr_HR";
+	}
+    case LANG_CZECH: return "cs_CZ";
+    case LANG_DANISH: return "da_DK";
+    case LANG_DUTCH:
+      switch (sub)
+	{
+	case SUBLANG_DUTCH: return "nl_NL";
+	case SUBLANG_DUTCH_BELGIAN: return "nl_BE";
+	}
+      return "nl";
+    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";
+	}
+      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: 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";
+	}
+      return "fr";
+    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_GUJARATI: return "gu_IN";
+    case LANG_HEBREW: return "he_IL";
+    case LANG_HINDI: return "hi_IN";
+    case LANG_HUNGARIAN: return "hu_HU";
+    case LANG_ICELANDIC: return "is_IS";
+    case LANG_INDONESIAN: return "id_ID";
+    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_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_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_MANIPURI:
+      /* FIXME: Adjust this when such locales appear on Unix.  */
+      return "mni_IN";
+    case LANG_MARATHI: return "mr_IN";
+    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 "no_NO";
+	case SUBLANG_NORWEGIAN_NYNORSK: return "nn_NO";
+	}
+      return "no";
+    case LANG_ORIYA: return "or_IN";
+    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: return "pa_IN";
+    case LANG_ROMANIAN: return "ro_RO";
+    case LANG_RUSSIAN:
+      return "ru"; /* Ambiguous: could be "ru_RU" or "ru_UA".  */
+    case LANG_SANSKRIT: return "sa_IN";
+    case LANG_SINDHI: return "sd";
+    case LANG_SLOVAK: return "sk_SK";
+    case LANG_SLOVENIAN: return "sl_SI";
+    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_SWAHILI: return "sw";
+    case LANG_SWEDISH:
+      switch (sub)
+	{
+	case SUBLANG_DEFAULT: return "sv_SE";
+	case SUBLANG_SWEDISH_FINLAND: return "sv_FI";
+	}
+      return "sv";
+    case LANG_TAMIL:
+      return "ta"; /* Ambiguous: could be "ta_IN" or "ta_LK" or "ta_SG".  */
+    case LANG_TATAR: return "tt";
+    case LANG_TELUGU: return "te_IN";
+    case LANG_THAI: return "th_TH";
+    case LANG_TURKISH: return "tr_TR";
+    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)
+	{
+	/* FIXME: Adjust this when Uzbek locales appear on Unix.  */
+	case SUBLANG_UZBEK_LATIN: return "uz_UZ at latin";
+	case SUBLANG_UZBEK_CYRILLIC: return "uz_UZ at cyrillic";
+	}
+      return "uz";
+    case LANG_VIETNAMESE: return "vi_VN";
+    default: return "C";
+    }
+
+#endif
+}
diff --git a/intl/ngettext.c b/intl/ngettext.c
new file mode 100644
index 0000000..b42ff6a
--- /dev/null
+++ b/intl/ngettext.c
@@ -0,0 +1,68 @@
+/* Implementation of ngettext(3) function.
+   Copyright (C) 1995, 1997, 2000, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   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 INTUSE(__dcngettext)
+#else
+# define NGETTEXT ngettext__
+# define DCNGETTEXT 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 (msgid1, msgid2, n)
+     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..3ca8266
--- /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., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   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 _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 (_nl_default_dirname__, _nlos2_localedir);
+}
diff --git a/intl/os2compat.h b/intl/os2compat.h
new file mode 100644
index 0000000..4f74e8c
--- /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., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   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..b372598
--- /dev/null
+++ b/intl/osdep.c
@@ -0,0 +1,24 @@
+/* OS dependent parts of libintl.
+   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., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
+
+#if 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..c937c01
--- /dev/null
+++ b/intl/plural-exp.c
@@ -0,0 +1,156 @@
+/* Expression parsing for plural form selection.
+   Copyright (C) 2000, 2001 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   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__ && !defined __APPLE_CC__) \
+    || (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 (nullentry, pluralp, npluralsp)
+     const char *nullentry;
+     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..93cdaef
--- /dev/null
+++ b/intl/plural-exp.h
@@ -0,0 +1,126 @@
+/* Expression parsing and evaluation for plural form selection.
+   Copyright (C) 2000, 2001, 2002 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
+
+#ifndef _PLURAL_EXP_H
+#define _PLURAL_EXP_H
+
+#ifndef PARAMS
+# if __STDC__ || defined __GNUC__ || defined __SUNPRO_C || defined __cplusplus || __PROTOTYPES
+#  define PARAMS(args) args
+# else
+#  define PARAMS(args) ()
+# endif
+#endif
+
+#ifndef internal_function
+# define internal_function
+#endif
+
+#ifndef attribute_hidden
+# define attribute_hidden
+#endif
+
+
+/* This is the representation of the expressions to determine the
+   plural form.  */
+struct expression
+{
+  int nargs;			/* Number of arguments.  */
+  enum 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.  */
+  } 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 gettext_free_exp__
+# define PLURAL_PARSE gettextparse__
+# define GERMANIC_PLURAL gettext_germanic_plural__
+# define EXTRACT_PLURAL_EXPRESSION 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 PARAMS ((struct expression *exp))
+     internal_function;
+extern int PLURAL_PARSE PARAMS ((void *arg));
+extern struct expression GERMANIC_PLURAL attribute_hidden;
+extern void EXTRACT_PLURAL_EXPRESSION PARAMS ((const char *nullentry,
+					       struct expression **pluralp,
+					       unsigned long int *npluralsp))
+     internal_function;
+
+#if !defined (_LIBC) && !defined (IN_LIBINTL)
+extern unsigned long int plural_eval PARAMS ((struct expression *pexp,
+					      unsigned long int n));
+#endif
+
+#endif /* _PLURAL_EXP_H */
diff --git a/intl/plural.c b/intl/plural.c
new file mode 100644
index 0000000..c9ff63f
--- /dev/null
+++ b/intl/plural.c
@@ -0,0 +1,1322 @@
+
+/*  A Bison parser, made from plural.y
+    by GNU Bison version 1.28  */
+
+#define YYBISON 1  /* Identify Bison output.  */
+
+#define yyparse __gettextparse
+#define yylex __gettextlex
+#define yyerror __gettexterror
+#define yylval __gettextlval
+#define yychar __gettextchar
+#define yydebug __gettextdebug
+#define yynerrs __gettextnerrs
+#define	EQUOP2	257
+#define	CMPOP2	258
+#define	ADDOP2	259
+#define	MULOP2	260
+#define	NUMBER	261
+
+#line 1 "plural.y"
+
+/* Expression parsing for plural form selection.
+   Copyright (C) 2000, 2001 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
+
+/* 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.  */
+#if defined _AIX && !defined __GNUC__
+ #pragma alloca
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stddef.h>
+#include <stdlib.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
+
+#line 49 "plural.y"
+typedef union {
+  unsigned long int num;
+  enum operator op;
+  struct expression *exp;
+} YYSTYPE;
+#line 55 "plural.y"
+
+/* Prototypes for local functions.  */
+static struct expression *new_exp PARAMS ((int nargs, enum operator op,
+					   struct expression * const *args));
+static inline struct expression *new_exp_0 PARAMS ((enum operator op));
+static inline struct expression *new_exp_1 PARAMS ((enum operator op,
+						   struct expression *right));
+static struct expression *new_exp_2 PARAMS ((enum operator op,
+					     struct expression *left,
+					     struct expression *right));
+static inline struct expression *new_exp_3 PARAMS ((enum operator op,
+						   struct expression *bexp,
+						   struct expression *tbranch,
+						   struct expression *fbranch));
+static int yylex PARAMS ((YYSTYPE *lval, const char **pexp));
+static void yyerror PARAMS ((const char *str));
+
+/* Allocation of expressions.  */
+
+static struct expression *
+new_exp (nargs, op, args)
+     int nargs;
+     enum 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 (op)
+     enum operator op;
+{
+  return new_exp (0, op, NULL);
+}
+
+static inline struct expression *
+new_exp_1 (op, right)
+     enum operator op;
+     struct expression *right;
+{
+  struct expression *args[1];
+
+  args[0] = right;
+  return new_exp (1, op, args);
+}
+
+static struct expression *
+new_exp_2 (op, left, right)
+     enum 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 (op, bexp, tbranch, fbranch)
+     enum 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);
+}
+
+#include <stdio.h>
+
+#ifndef __cplusplus
+#ifndef __STDC__
+#define const
+#endif
+#endif
+
+
+
+#define	YYFINAL		27
+#define	YYFLAG		-32768
+#define	YYNTBASE	16
+
+#define YYTRANSLATE(x) ((unsigned)(x) <= 261 ? yytranslate[x] : 18)
+
+static const char 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,     6,     7,     8,     9,
+    11
+};
+
+#if YYDEBUG != 0
+static const short yyprhs[] = {     0,
+     0,     2,     8,    12,    16,    20,    24,    28,    32,    35,
+    37,    39
+};
+
+static const short yyrhs[] = {    17,
+     0,    17,     3,    17,    12,    17,     0,    17,     4,    17,
+     0,    17,     5,    17,     0,    17,     6,    17,     0,    17,
+     7,    17,     0,    17,     8,    17,     0,    17,     9,    17,
+     0,    10,    17,     0,    13,     0,    11,     0,    14,    17,
+    15,     0
+};
+
+#endif
+
+#if YYDEBUG != 0
+static const short yyrline[] = { 0,
+   174,   182,   186,   190,   194,   198,   202,   206,   210,   214,
+   218,   223
+};
+#endif
+
+
+#if YYDEBUG != 0 || defined (YYERROR_VERBOSE)
+
+static const char * const yytname[] = {   "$","error","$undefined.","'?'","'|'",
+"'&'","EQUOP2","CMPOP2","ADDOP2","MULOP2","'!'","NUMBER","':'","'n'","'('","')'",
+"start","exp", NULL
+};
+#endif
+
+static const short yyr1[] = {     0,
+    16,    17,    17,    17,    17,    17,    17,    17,    17,    17,
+    17,    17
+};
+
+static const short yyr2[] = {     0,
+     1,     5,     3,     3,     3,     3,     3,     3,     2,     1,
+     1,     3
+};
+
+static const short yydefact[] = {     0,
+     0,    11,    10,     0,     1,     9,     0,     0,     0,     0,
+     0,     0,     0,     0,    12,     0,     3,     4,     5,     6,
+     7,     8,     0,     2,     0,     0,     0
+};
+
+static const short yydefgoto[] = {    25,
+     5
+};
+
+static const short yypact[] = {    -9,
+    -9,-32768,-32768,    -9,    34,-32768,    11,    -9,    -9,    -9,
+    -9,    -9,    -9,    -9,-32768,    24,    39,    43,    16,    26,
+    -3,-32768,    -9,    34,    21,    53,-32768
+};
+
+static const short yypgoto[] = {-32768,
+    -1
+};
+
+
+#define	YYLAST		53
+
+
+static const short yytable[] = {     6,
+     1,     2,     7,     3,     4,    14,    16,    17,    18,    19,
+    20,    21,    22,     8,     9,    10,    11,    12,    13,    14,
+    26,    24,    12,    13,    14,    15,     8,     9,    10,    11,
+    12,    13,    14,    13,    14,    23,     8,     9,    10,    11,
+    12,    13,    14,    10,    11,    12,    13,    14,    11,    12,
+    13,    14,    27
+};
+
+static const short yycheck[] = {     1,
+    10,    11,     4,    13,    14,     9,     8,     9,    10,    11,
+    12,    13,    14,     3,     4,     5,     6,     7,     8,     9,
+     0,    23,     7,     8,     9,    15,     3,     4,     5,     6,
+     7,     8,     9,     8,     9,    12,     3,     4,     5,     6,
+     7,     8,     9,     5,     6,     7,     8,     9,     6,     7,
+     8,     9,     0
+};
+#define YYPURE 1
+
+/* -*-C-*-  Note some compilers choke on comments on `#line' lines.  */
+#line 3 "/usr/local/share/bison.simple"
+/* This file comes from bison-1.28.  */
+
+/* Skeleton output parser for bison,
+   Copyright (C) 1984, 1989, 1990 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, when this file is copied by Bison into a
+   Bison output file, you may use that output file without restriction.
+   This special exception was added by the Free Software Foundation
+   in version 1.24 of Bison.  */
+
+/* This is the parser code that is written into each bison parser
+  when the %semantic_parser declaration is not specified in the grammar.
+  It was written by Richard Stallman by simplifying the hairy parser
+  used when %semantic_parser is specified.  */
+
+#ifndef YYSTACK_USE_ALLOCA
+#ifdef alloca
+#define YYSTACK_USE_ALLOCA
+#else /* alloca not defined */
+#ifdef __GNUC__
+#define YYSTACK_USE_ALLOCA
+#define alloca __builtin_alloca
+#else /* not GNU C.  */
+#if (!defined (__STDC__) && defined (sparc)) || defined (__sparc__) || defined (__sparc) || defined (__sgi) || (defined (__sun) && defined (__i386))
+#define YYSTACK_USE_ALLOCA
+#include <alloca.h>
+#else /* not sparc */
+/* We think this test detects Watcom and Microsoft C.  */
+/* This used to test MSDOS, but that is a bad idea
+   since that symbol is in the user namespace.  */
+#if (defined (_MSDOS) || defined (_MSDOS_)) && !defined (__TURBOC__)
+#if 0 /* No need for malloc.h, which pollutes the namespace;
+	 instead, just don't use alloca.  */
+#include <malloc.h>
+#endif
+#else /* not MSDOS, or __TURBOC__ */
+#if defined(_AIX)
+/* I don't know what this was needed for, but it pollutes the namespace.
+   So I turned it off.   rms, 2 May 1997.  */
+/* #include <malloc.h>  */
+ #pragma alloca
+#define YYSTACK_USE_ALLOCA
+#else /* not MSDOS, or __TURBOC__, or _AIX */
+#if 0
+#ifdef __hpux /* haible at ilog.fr says this works for HPUX 9.05 and up,
+		 and on HPUX 10.  Eventually we can turn this on.  */
+#define YYSTACK_USE_ALLOCA
+#define alloca __builtin_alloca
+#endif /* __hpux */
+#endif
+#endif /* not _AIX */
+#endif /* not MSDOS, or __TURBOC__ */
+#endif /* not sparc */
+#endif /* not GNU C */
+#endif /* alloca not defined */
+#endif /* YYSTACK_USE_ALLOCA not defined */
+
+#ifdef YYSTACK_USE_ALLOCA
+#define YYSTACK_ALLOC alloca
+#else
+#define YYSTACK_ALLOC malloc
+#endif
+
+/* Note: there must be only one dollar sign in this file.
+   It is replaced by the list of actions, each action
+   as one case of the switch.  */
+
+#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 yyerrlab1
+/* 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);			\
+      yychar1 = YYTRANSLATE (yychar);				\
+      YYPOPSTACK;						\
+      goto yybackup;						\
+    }								\
+  else								\
+    { yyerror ("syntax error: cannot back up"); YYERROR; }	\
+while (0)
+
+#define YYTERROR	1
+#define YYERRCODE	256
+
+#ifndef YYPURE
+#define YYLEX		yylex()
+#endif
+
+#ifdef YYPURE
+#ifdef YYLSP_NEEDED
+#ifdef YYLEX_PARAM
+#define YYLEX		yylex(&yylval, &yylloc, YYLEX_PARAM)
+#else
+#define YYLEX		yylex(&yylval, &yylloc)
+#endif
+#else /* not YYLSP_NEEDED */
+#ifdef YYLEX_PARAM
+#define YYLEX		yylex(&yylval, YYLEX_PARAM)
+#else
+#define YYLEX		yylex(&yylval)
+#endif
+#endif /* not YYLSP_NEEDED */
+#endif
+
+/* If nonreentrant, generate the variables here */
+
+#ifndef YYPURE
+
+int	yychar;			/*  the lookahead symbol		*/
+YYSTYPE	yylval;			/*  the semantic value of the		*/
+				/*  lookahead symbol			*/
+
+#ifdef YYLSP_NEEDED
+YYLTYPE yylloc;			/*  location data for the lookahead	*/
+				/*  symbol				*/
+#endif
+
+int yynerrs;			/*  number of parse errors so far       */
+#endif  /* not YYPURE */
+
+#if YYDEBUG != 0
+int yydebug;			/*  nonzero means print parse trace	*/
+/* Since this is uninitialized, it does not stop multiple parsers
+   from coexisting.  */
+#endif
+
+/*  YYINITDEPTH indicates the initial size of the parser's stacks	*/
+
+#ifndef	YYINITDEPTH
+#define YYINITDEPTH 200
+#endif
+
+/*  YYMAXDEPTH is the maximum size the stacks can grow to
+    (effective only if the built-in stack extension method is used).  */
+
+#if YYMAXDEPTH == 0
+#undef YYMAXDEPTH
+#endif
+
+#ifndef YYMAXDEPTH
+#define YYMAXDEPTH 10000
+#endif
+

+/* Define __yy_memcpy.  Note that the size argument
+   should be passed with type unsigned int, because that is what the non-GCC
+   definitions require.  With GCC, __builtin_memcpy takes an arg
+   of type size_t, but it can handle unsigned int.  */
+
+#if __GNUC__ > 1		/* GNU C and GNU C++ define this.  */
+#define __yy_memcpy(TO,FROM,COUNT)	__builtin_memcpy(TO,FROM,COUNT)
+#else				/* not GNU C or C++ */
+#ifndef __cplusplus
+
+/* This is the most reliable way to avoid incompatibilities
+   in available built-in functions on various systems.  */
+static void
+__yy_memcpy (to, from, count)
+     char *to;
+     char *from;
+     unsigned int count;
+{
+  register char *f = from;
+  register char *t = to;
+  register int i = count;
+
+  while (i-- > 0)
+    *t++ = *f++;
+}
+
+#else /* __cplusplus */
+
+/* This is the most reliable way to avoid incompatibilities
+   in available built-in functions on various systems.  */
+static void
+__yy_memcpy (char *to, char *from, unsigned int count)
+{
+  register char *t = to;
+  register char *f = from;
+  register int i = count;
+
+  while (i-- > 0)
+    *t++ = *f++;
+}
+
+#endif
+#endif
+

+#line 217 "/usr/local/share/bison.simple"
+
+/* The user can define YYPARSE_PARAM as the name of an argument to be passed
+   into yyparse.  The argument should have type void *.
+   It should actually point to an object.
+   Grammar actions can access the variable by casting it
+   to the proper pointer type.  */
+
+#ifdef YYPARSE_PARAM
+#ifdef __cplusplus
+#define YYPARSE_PARAM_ARG void *YYPARSE_PARAM
+#define YYPARSE_PARAM_DECL
+#else /* not __cplusplus */
+#define YYPARSE_PARAM_ARG YYPARSE_PARAM
+#define YYPARSE_PARAM_DECL void *YYPARSE_PARAM;
+#endif /* not __cplusplus */
+#else /* not YYPARSE_PARAM */
+#define YYPARSE_PARAM_ARG
+#define YYPARSE_PARAM_DECL
+#endif /* not YYPARSE_PARAM */
+
+/* Prevent warning if -Wstrict-prototypes.  */
+#ifdef __GNUC__
+#ifdef YYPARSE_PARAM
+int yyparse (void *);
+#else
+int yyparse (void);
+#endif
+#endif
+
+int
+yyparse(YYPARSE_PARAM_ARG)
+     YYPARSE_PARAM_DECL
+{
+  register int yystate;
+  register int yyn;
+  register short *yyssp;
+  register YYSTYPE *yyvsp;
+  int yyerrstatus;	/*  number of tokens to shift before error messages enabled */
+  int yychar1 = 0;		/*  lookahead token as an internal (translated) token number */
+
+  short	yyssa[YYINITDEPTH];	/*  the state stack			*/
+  YYSTYPE yyvsa[YYINITDEPTH];	/*  the semantic value stack		*/
+
+  short *yyss = yyssa;		/*  refer to the stacks thru separate pointers */
+  YYSTYPE *yyvs = yyvsa;	/*  to allow yyoverflow to reallocate them elsewhere */
+
+#ifdef YYLSP_NEEDED
+  YYLTYPE yylsa[YYINITDEPTH];	/*  the location stack			*/
+  YYLTYPE *yyls = yylsa;
+  YYLTYPE *yylsp;
+
+#define YYPOPSTACK   (yyvsp--, yyssp--, yylsp--)
+#else
+#define YYPOPSTACK   (yyvsp--, yyssp--)
+#endif
+
+  int yystacksize = YYINITDEPTH;
+  int yyfree_stacks = 0;
+
+#ifdef YYPURE
+  int yychar;
+  YYSTYPE yylval;
+  int yynerrs;
+#ifdef YYLSP_NEEDED
+  YYLTYPE yylloc;
+#endif
+#endif
+
+  YYSTYPE yyval;		/*  the variable used to return		*/
+				/*  semantic values from the action	*/
+				/*  routines				*/
+
+  int yylen;
+
+#if YYDEBUG != 0
+  if (yydebug)
+    fprintf(stderr, "Starting parse\n");
+#endif
+
+  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 - 1;
+  yyvsp = yyvs;
+#ifdef YYLSP_NEEDED
+  yylsp = yyls;
+#endif
+
+/* Push a new state, which is found in  yystate  .  */
+/* In all cases, when you get here, the value and location stacks
+   have just been pushed. so pushing a state here evens the stacks.  */
+yynewstate:
+
+  *++yyssp = yystate;
+
+  if (yyssp >= yyss + yystacksize - 1)
+    {
+      /* 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;
+      short *yyss1 = yyss;
+#ifdef YYLSP_NEEDED
+      YYLTYPE *yyls1 = yyls;
+#endif
+
+      /* Get the current used size of the three stacks, in elements.  */
+      int size = yyssp - yyss + 1;
+
+#ifdef yyoverflow
+      /* Each stack pointer address is followed by the size of
+	 the data in use in that stack, in bytes.  */
+#ifdef YYLSP_NEEDED
+      /* This used to be a conditional around just the two extra args,
+	 but that might be undefined if yyoverflow is a macro.  */
+      yyoverflow("parser stack overflow",
+		 &yyss1, size * sizeof (*yyssp),
+		 &yyvs1, size * sizeof (*yyvsp),
+		 &yyls1, size * sizeof (*yylsp),
+		 &yystacksize);
+#else
+      yyoverflow("parser stack overflow",
+		 &yyss1, size * sizeof (*yyssp),
+		 &yyvs1, size * sizeof (*yyvsp),
+		 &yystacksize);
+#endif
+
+      yyss = yyss1; yyvs = yyvs1;
+#ifdef YYLSP_NEEDED
+      yyls = yyls1;
+#endif
+#else /* no yyoverflow */
+      /* Extend the stack our own way.  */
+      if (yystacksize >= YYMAXDEPTH)
+	{
+	  yyerror("parser stack overflow");
+	  if (yyfree_stacks)
+	    {
+	      free (yyss);
+	      free (yyvs);
+#ifdef YYLSP_NEEDED
+	      free (yyls);
+#endif
+	    }
+	  return 2;
+	}
+      yystacksize *= 2;
+      if (yystacksize > YYMAXDEPTH)
+	yystacksize = YYMAXDEPTH;
+#ifndef YYSTACK_USE_ALLOCA
+      yyfree_stacks = 1;
+#endif
+      yyss = (short *) YYSTACK_ALLOC (yystacksize * sizeof (*yyssp));
+      __yy_memcpy ((char *)yyss, (char *)yyss1,
+		   size * (unsigned int) sizeof (*yyssp));
+      yyvs = (YYSTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yyvsp));
+      __yy_memcpy ((char *)yyvs, (char *)yyvs1,
+		   size * (unsigned int) sizeof (*yyvsp));
+#ifdef YYLSP_NEEDED
+      yyls = (YYLTYPE *) YYSTACK_ALLOC (yystacksize * sizeof (*yylsp));
+      __yy_memcpy ((char *)yyls, (char *)yyls1,
+		   size * (unsigned int) sizeof (*yylsp));
+#endif
+#endif /* no yyoverflow */
+
+      yyssp = yyss + size - 1;
+      yyvsp = yyvs + size - 1;
+#ifdef YYLSP_NEEDED
+      yylsp = yyls + size - 1;
+#endif
+
+#if YYDEBUG != 0
+      if (yydebug)
+	fprintf(stderr, "Stack size increased to %d\n", yystacksize);
+#endif
+
+      if (yyssp >= yyss + yystacksize - 1)
+	YYABORT;
+    }
+
+#if YYDEBUG != 0
+  if (yydebug)
+    fprintf(stderr, "Entering state %d\n", yystate);
+#endif
+
+  goto yybackup;
+ yybackup:
+
+/* Do appropriate processing given the current state.  */
+/* Read a lookahead token if we need one and don't already have one.  */
+/* yyresume: */
+
+  /* First try to decide what to do without reference to lookahead token.  */
+
+  yyn = yypact[yystate];
+  if (yyn == YYFLAG)
+    goto yydefault;
+
+  /* Not known => get a lookahead token if don't already have one.  */
+
+  /* yychar is either YYEMPTY or YYEOF
+     or a valid token in external form.  */
+
+  if (yychar == YYEMPTY)
+    {
+#if YYDEBUG != 0
+      if (yydebug)
+	fprintf(stderr, "Reading a token: ");
+#endif
+      yychar = YYLEX;
+    }
+
+  /* Convert token to internal form (in yychar1) for indexing tables with */
+
+  if (yychar <= 0)		/* This means end of input. */
+    {
+      yychar1 = 0;
+      yychar = YYEOF;		/* Don't call YYLEX any more */
+
+#if YYDEBUG != 0
+      if (yydebug)
+	fprintf(stderr, "Now at end of input.\n");
+#endif
+    }
+  else
+    {
+      yychar1 = YYTRANSLATE(yychar);
+
+#if YYDEBUG != 0
+      if (yydebug)
+	{
+	  fprintf (stderr, "Next token is %d (%s", yychar, yytname[yychar1]);
+	  /* Give the individual parser a way to print the precise meaning
+	     of a token, for further debugging info.  */
+#ifdef YYPRINT
+	  YYPRINT (stderr, yychar, yylval);
+#endif
+	  fprintf (stderr, ")\n");
+	}
+#endif
+    }
+
+  yyn += yychar1;
+  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != yychar1)
+    goto yydefault;
+
+  yyn = yytable[yyn];
+
+  /* yyn is what to do for this token type in this state.
+     Negative => reduce, -yyn is rule number.
+     Positive => shift, yyn is new state.
+       New state is final state => don't bother to shift,
+       just return success.
+     0, or most negative number => error.  */
+
+  if (yyn < 0)
+    {
+      if (yyn == YYFLAG)
+	goto yyerrlab;
+      yyn = -yyn;
+      goto yyreduce;
+    }
+  else if (yyn == 0)
+    goto yyerrlab;
+
+  if (yyn == YYFINAL)
+    YYACCEPT;
+
+  /* Shift the lookahead token.  */
+
+#if YYDEBUG != 0
+  if (yydebug)
+    fprintf(stderr, "Shifting token %d (%s), ", yychar, yytname[yychar1]);
+#endif
+
+  /* Discard the token being shifted unless it is eof.  */
+  if (yychar != YYEOF)
+    yychar = YYEMPTY;
+
+  *++yyvsp = yylval;
+#ifdef YYLSP_NEEDED
+  *++yylsp = yylloc;
+#endif
+
+  /* count tokens shifted since error; after three, turn off error status.  */
+  if (yyerrstatus) yyerrstatus--;
+
+  yystate = yyn;
+  goto yynewstate;
+
+/* Do the default action for the current state.  */
+yydefault:
+
+  yyn = yydefact[yystate];
+  if (yyn == 0)
+    goto yyerrlab;
+
+/* Do a reduction.  yyn is the number of a rule to reduce with.  */
+yyreduce:
+  yylen = yyr2[yyn];
+  if (yylen > 0)
+    yyval = yyvsp[1-yylen]; /* implement default value of the action */
+
+#if YYDEBUG != 0
+  if (yydebug)
+    {
+      int i;
+
+      fprintf (stderr, "Reducing via rule %d (line %d), ",
+	       yyn, yyrline[yyn]);
+
+      /* Print the symbols being reduced, and their result.  */
+      for (i = yyprhs[yyn]; yyrhs[i] > 0; i++)
+	fprintf (stderr, "%s ", yytname[yyrhs[i]]);
+      fprintf (stderr, " -> %s\n", yytname[yyr1[yyn]]);
+    }
+#endif
+
+
+  switch (yyn) {
+
+case 1:
+#line 175 "plural.y"
+{
+	    if (yyvsp[0].exp == NULL)
+	      YYABORT;
+	    ((struct parse_args *) arg)->res = yyvsp[0].exp;
+	  ;
+    break;}
+case 2:
+#line 183 "plural.y"
+{
+	    yyval.exp = new_exp_3 (qmop, yyvsp[-4].exp, yyvsp[-2].exp, yyvsp[0].exp);
+	  ;
+    break;}
+case 3:
+#line 187 "plural.y"
+{
+	    yyval.exp = new_exp_2 (lor, yyvsp[-2].exp, yyvsp[0].exp);
+	  ;
+    break;}
+case 4:
+#line 191 "plural.y"
+{
+	    yyval.exp = new_exp_2 (land, yyvsp[-2].exp, yyvsp[0].exp);
+	  ;
+    break;}
+case 5:
+#line 195 "plural.y"
+{
+	    yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
+	  ;
+    break;}
+case 6:
+#line 199 "plural.y"
+{
+	    yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
+	  ;
+    break;}
+case 7:
+#line 203 "plural.y"
+{
+	    yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
+	  ;
+    break;}
+case 8:
+#line 207 "plural.y"
+{
+	    yyval.exp = new_exp_2 (yyvsp[-1].op, yyvsp[-2].exp, yyvsp[0].exp);
+	  ;
+    break;}
+case 9:
+#line 211 "plural.y"
+{
+	    yyval.exp = new_exp_1 (lnot, yyvsp[0].exp);
+	  ;
+    break;}
+case 10:
+#line 215 "plural.y"
+{
+	    yyval.exp = new_exp_0 (var);
+	  ;
+    break;}
+case 11:
+#line 219 "plural.y"
+{
+	    if ((yyval.exp = new_exp_0 (num)) != NULL)
+	      yyval.exp->val.num = yyvsp[0].num;
+	  ;
+    break;}
+case 12:
+#line 224 "plural.y"
+{
+	    yyval.exp = yyvsp[-1].exp;
+	  ;
+    break;}
+}
+   /* the action file gets copied in in place of this dollarsign */
+#line 543 "/usr/local/share/bison.simple"
+

+  yyvsp -= yylen;
+  yyssp -= yylen;
+#ifdef YYLSP_NEEDED
+  yylsp -= yylen;
+#endif
+
+#if YYDEBUG != 0
+  if (yydebug)
+    {
+      short *ssp1 = yyss - 1;
+      fprintf (stderr, "state stack now");
+      while (ssp1 != yyssp)
+	fprintf (stderr, " %d", *++ssp1);
+      fprintf (stderr, "\n");
+    }
+#endif
+
+  *++yyvsp = yyval;
+
+#ifdef YYLSP_NEEDED
+  yylsp++;
+  if (yylen == 0)
+    {
+      yylsp->first_line = yylloc.first_line;
+      yylsp->first_column = yylloc.first_column;
+      yylsp->last_line = (yylsp-1)->last_line;
+      yylsp->last_column = (yylsp-1)->last_column;
+      yylsp->text = 0;
+    }
+  else
+    {
+      yylsp->last_line = (yylsp+yylen-1)->last_line;
+      yylsp->last_column = (yylsp+yylen-1)->last_column;
+    }
+#endif
+
+  /* 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 - YYNTBASE] + *yyssp;
+  if (yystate >= 0 && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+    yystate = yytable[yystate];
+  else
+    yystate = yydefgoto[yyn - YYNTBASE];
+
+  goto yynewstate;
+
+yyerrlab:   /* here on detecting error */
+
+  if (! yyerrstatus)
+    /* If not already recovering from an error, report this error.  */
+    {
+      ++yynerrs;
+
+#ifdef YYERROR_VERBOSE
+      yyn = yypact[yystate];
+
+      if (yyn > YYFLAG && yyn < YYLAST)
+	{
+	  int size = 0;
+	  char *msg;
+	  int x, count;
+
+	  count = 0;
+	  /* Start X at -yyn if nec to avoid negative indexes in yycheck.  */
+	  for (x = (yyn < 0 ? -yyn : 0);
+	       x < (sizeof(yytname) / sizeof(char *)); x++)
+	    if (yycheck[x + yyn] == x)
+	      size += strlen(yytname[x]) + 15, count++;
+	  msg = (char *) malloc(size + 15);
+	  if (msg != 0)
+	    {
+	      strcpy(msg, "parse error");
+
+	      if (count < 5)
+		{
+		  count = 0;
+		  for (x = (yyn < 0 ? -yyn : 0);
+		       x < (sizeof(yytname) / sizeof(char *)); x++)
+		    if (yycheck[x + yyn] == x)
+		      {
+			strcat(msg, count == 0 ? ", expecting `" : " or `");
+			strcat(msg, yytname[x]);
+			strcat(msg, "'");
+			count++;
+		      }
+		}
+	      yyerror(msg);
+	      free(msg);
+	    }
+	  else
+	    yyerror ("parse error; also virtual memory exceeded");
+	}
+      else
+#endif /* YYERROR_VERBOSE */
+	yyerror("parse error");
+    }
+
+  goto yyerrlab1;
+yyerrlab1:   /* here on error raised explicitly by an action */
+
+  if (yyerrstatus == 3)
+    {
+      /* if just tried and failed to reuse lookahead token after an error, discard it.  */
+
+      /* return failure if at end of input */
+      if (yychar == YYEOF)
+	YYABORT;
+
+#if YYDEBUG != 0
+      if (yydebug)
+	fprintf(stderr, "Discarding token %d (%s).\n", yychar, yytname[yychar1]);
+#endif
+
+      yychar = YYEMPTY;
+    }
+
+  /* Else will try to reuse lookahead token
+     after shifting the error token.  */
+
+  yyerrstatus = 3;		/* Each real token shifted decrements this */
+
+  goto yyerrhandle;
+
+yyerrdefault:  /* current state does not do anything special for the error token. */
+
+#if 0
+  /* This is wrong; only states that explicitly want error tokens
+     should shift them.  */
+  yyn = yydefact[yystate];  /* If its default is to accept any token, ok.  Otherwise pop it.*/
+  if (yyn) goto yydefault;
+#endif
+
+yyerrpop:   /* pop the current state because it cannot handle the error token */
+
+  if (yyssp == yyss) YYABORT;
+  yyvsp--;
+  yystate = *--yyssp;
+#ifdef YYLSP_NEEDED
+  yylsp--;
+#endif
+
+#if YYDEBUG != 0
+  if (yydebug)
+    {
+      short *ssp1 = yyss - 1;
+      fprintf (stderr, "Error: state stack now");
+      while (ssp1 != yyssp)
+	fprintf (stderr, " %d", *++ssp1);
+      fprintf (stderr, "\n");
+    }
+#endif
+
+yyerrhandle:
+
+  yyn = yypact[yystate];
+  if (yyn == YYFLAG)
+    goto yyerrdefault;
+
+  yyn += YYTERROR;
+  if (yyn < 0 || yyn > YYLAST || yycheck[yyn] != YYTERROR)
+    goto yyerrdefault;
+
+  yyn = yytable[yyn];
+  if (yyn < 0)
+    {
+      if (yyn == YYFLAG)
+	goto yyerrpop;
+      yyn = -yyn;
+      goto yyreduce;
+    }
+  else if (yyn == 0)
+    goto yyerrpop;
+
+  if (yyn == YYFINAL)
+    YYACCEPT;
+
+#if YYDEBUG != 0
+  if (yydebug)
+    fprintf(stderr, "Shifting error token, ");
+#endif
+
+  *++yyvsp = yylval;
+#ifdef YYLSP_NEEDED
+  *++yylsp = yylloc;
+#endif
+
+  yystate = yyn;
+  goto yynewstate;
+
+ yyacceptlab:
+  /* YYACCEPT comes here.  */
+  if (yyfree_stacks)
+    {
+      free (yyss);
+      free (yyvs);
+#ifdef YYLSP_NEEDED
+      free (yyls);
+#endif
+    }
+  return 0;
+
+ yyabortlab:
+  /* YYABORT comes here.  */
+  if (yyfree_stacks)
+    {
+      free (yyss);
+      free (yyvs);
+#ifdef YYLSP_NEEDED
+      free (yyls);
+#endif
+    }
+  return 1;
+}
+#line 229 "plural.y"
+
+
+void
+internal_function
+FREE_EXPRESSION (exp)
+     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 (lval, pexp)
+     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 (str)
+     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..616b7c1
--- /dev/null
+++ b/intl/plural.y
@@ -0,0 +1,409 @@
+%{
+/* Expression parsing for plural form selection.
+   Copyright (C) 2000, 2001 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
+
+/* 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.  */
+#if defined _AIX && !defined __GNUC__
+ #pragma alloca
+#endif
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stddef.h>
+#include <stdlib.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 operator op;
+  struct expression *exp;
+}
+
+%{
+/* Prototypes for local functions.  */
+static struct expression *new_exp PARAMS ((int nargs, enum operator op,
+					   struct expression * const *args));
+static inline struct expression *new_exp_0 PARAMS ((enum operator op));
+static inline struct expression *new_exp_1 PARAMS ((enum operator op,
+						   struct expression *right));
+static struct expression *new_exp_2 PARAMS ((enum operator op,
+					     struct expression *left,
+					     struct expression *right));
+static inline struct expression *new_exp_3 PARAMS ((enum operator op,
+						   struct expression *bexp,
+						   struct expression *tbranch,
+						   struct expression *fbranch));
+static int yylex PARAMS ((YYSTYPE *lval, const char **pexp));
+static void yyerror PARAMS ((const char *str));
+
+/* Allocation of expressions.  */
+
+static struct expression *
+new_exp (nargs, op, args)
+     int nargs;
+     enum 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 (op)
+     enum operator op;
+{
+  return new_exp (0, op, NULL);
+}
+
+static inline struct expression *
+new_exp_1 (op, right)
+     enum operator op;
+     struct expression *right;
+{
+  struct expression *args[1];
+
+  args[0] = right;
+  return new_exp (1, op, args);
+}
+
+static struct expression *
+new_exp_2 (op, left, right)
+     enum 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 (op, bexp, tbranch, fbranch)
+     enum 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 (exp)
+     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 (lval, pexp)
+     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 (str)
+     const char *str;
+{
+  /* Do nothing.  We don't print error messages here.  */
+}
diff --git a/intl/ref-add.sin b/intl/ref-add.sin
new file mode 100644
index 0000000..167374e
--- /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., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+#   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..613cf37
--- /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., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+#   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/textdomain.c b/intl/textdomain.c
new file mode 100644
index 0000000..8fb4ea0
--- /dev/null
+++ b/intl/textdomain.c
@@ -0,0 +1,142 @@
+/* Implementation of the textdomain(3) function.
+   Copyright (C) 1995-1998, 2000, 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307,
+   USA.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <string.h>
+
+#ifdef _LIBC
+# include <libintl.h>
+#else
+# include "libgnuintl.h"
+#endif
+#include "gettextP.h"
+
+#ifdef _LIBC
+/* We have to handle multi-threaded applications.  */
+# include <bits/libc-lock.h>
+#else
+/* Provide dummy implementation if this is outside glibc.  */
+# define __libc_rwlock_define(CLASS, NAME)
+# define __libc_rwlock_wrlock(NAME)
+# define __libc_rwlock_unlock(NAME)
+#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_default_domain _nl_default_default_domain__
+# define _nl_current_default_domain _nl_current_default_domain__
+#endif
+
+/* @@ end of prolog @@ */
+
+/* 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;
+
+
+/* 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 textdomain__
+#endif
+
+/* Lock variable to protect the global data in the gettext implementation.  */
+__libc_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 (domainname)
+     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;
+
+  __libc_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);
+    }
+
+  __libc_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/m4/ChangeLog b/m4/ChangeLog
new file mode 100644
index 0000000..c323fa7
--- /dev/null
+++ b/m4/ChangeLog
@@ -0,0 +1,29 @@
+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..063f93f
--- /dev/null
+++ b/m4/Makefile.am
@@ -0,0 +1,2 @@
+#made by autogen.sh ...
+EXTRA_DIST = 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..e6ff95b
--- /dev/null
+++ b/m4/Makefile.in
@@ -0,0 +1,303 @@
+# Makefile.in generated by automake 1.7.9 from Makefile.am.
+# @configure_input@
+
+# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
+# 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@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+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 = :
+host_triplet = @host@
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+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@
+GLIBC2 = @GLIBC2@
+GLIBC21 = @GLIBC21@
+GMSGFMT = @GMSGFMT@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+HAVE_ASPRINTF = @HAVE_ASPRINTF@
+HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@
+HAVE_SNPRINTF = @HAVE_SNPRINTF@
+HAVE_WPRINTF = @HAVE_WPRINTF@
+IMLIB2_CONFIG_IN_PATH = @IMLIB2_CONFIG_IN_PATH@
+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@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+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@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+WMCCC = @WMCCC@
+WMCOINCOIN_PLAYER = @WMCOINCOIN_PLAYER@
+XFT_CFLAGS = @XFT_CFLAGS@
+XFT_LIBS = @XFT_LIBS@
+XGETTEXT = @XGETTEXT@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+ac_pt_PKG_CONFIG = @ac_pt_PKG_CONFIG@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+
+#made by autogen.sh ...
+EXTRA_DIST = 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
+subdir = m4
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+DIST_SOURCES =
+DIST_COMMON = $(srcdir)/Makefile.in ChangeLog Makefile.am
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  Makefile.am  $(top_srcdir)/configure.ac $(ACLOCAL_M4)
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  m4/Makefile
+Makefile:  $(srcdir)/Makefile.in  $(top_builddir)/config.status
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
+uninstall-info-am:
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+
+top_distdir = ..
+distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+	list='$(DISTFILES)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkinstalldirs) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    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:
+	-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:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-exec-am:
+
+install-info: install-info-am
+
+install-man:
+
+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-info-am
+
+.PHONY: all all-am check check-am clean clean-generic distclean \
+	distclean-generic distdir dvi dvi-am info info-am install \
+	install-am install-data install-data-am install-exec \
+	install-exec-am install-info install-info-am install-man \
+	install-strip installcheck installcheck-am installdirs \
+	maintainer-clean maintainer-clean-generic mostlyclean \
+	mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \
+	uninstall-info-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..59535eb
--- /dev/null
+++ b/m4/codeset.m4
@@ -0,0 +1,23 @@
+# codeset.m4 serial AM1 (gettext-0.10.40)
+dnl Copyright (C) 2000-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 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);],
+      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..94bc26c
--- /dev/null
+++ b/m4/gettext.m4
@@ -0,0 +1,539 @@
+# gettext.m4 serial 14 (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.
+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-2002.
+
+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.
+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], ,
+    [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT
+])])])
+  define(gt_included_intl, ifelse([$1], [external], [no], [yes]))
+  define(gt_libtool_suffix_prefix, ifelse([$1], [use-libtool], [l], []))
+
+  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])
+
+  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)
+
+  ifelse(gt_included_intl, yes, [
+    BUILD_INCLUDED_LIBINTL=no
+    USE_INCLUDED_LIBINTL=no
+  ])
+  LIBINTL=
+  LTLIBINTL=
+  POSUB=
+
+  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.
+
+        dnl Add a version number to the cache macros.
+        define([gt_api_version], ifelse([$2], [need-ngettext], 2, 1))
+        define([gt_cv_func_gnugettext_libc], [gt_cv_func_gnugettext]gt_api_version[_libc])
+        define([gt_cv_func_gnugettext_libintl], [gt_cv_func_gnugettext]gt_api_version[_libintl])
+
+        AC_CACHE_CHECK([for GNU gettext in libc], gt_cv_func_gnugettext_libc,
+         [AC_TRY_LINK([#include <libintl.h>
+extern int _nl_msg_cat_cntr;
+extern int *_nl_domain_bindings;],
+            [bindtextdomain ("", "");
+return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_domain_bindings],
+            gt_cv_func_gnugettext_libc=yes,
+            gt_cv_func_gnugettext_libc=no)])
+
+        if test "$gt_cv_func_gnugettext_libc" != "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_cv_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>
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias ();],
+              [bindtextdomain ("", "");
+return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias (0)],
+              gt_cv_func_gnugettext_libintl=yes,
+              gt_cv_func_gnugettext_libintl=no)
+            dnl Now see whether libintl exists and depends on libiconv.
+            if test "$gt_cv_func_gnugettext_libintl" != yes && test -n "$LIBICONV"; then
+              LIBS="$LIBS $LIBICONV"
+              AC_TRY_LINK([#include <libintl.h>
+extern int _nl_msg_cat_cntr;
+extern
+#ifdef __cplusplus
+"C"
+#endif
+const char *_nl_expand_alias ();],
+                [bindtextdomain ("", "");
+return (int) gettext ("")]ifelse([$2], [need-ngettext], [ + (int) ngettext ("", "", 0)], [])[ + _nl_msg_cat_cntr + *_nl_expand_alias (0)],
+               [LIBINTL="$LIBINTL $LIBICONV"
+                LTLIBINTL="$LTLIBINTL $LTLIBICONV"
+                gt_cv_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 test "$gt_cv_func_gnugettext_libc" = "yes" \
+           || { test "$gt_cv_func_gnugettext_libintl" = "yes" \
+                && test "$PACKAGE" != gettext; }; 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.
+        INTLOBJS="\$(GETTOBJS)"
+        BUILD_INCLUDED_LIBINTL=yes
+        USE_INCLUDED_LIBINTL=yes
+        LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV"
+        LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV"
+        LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'`
+      fi
+
+      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 "$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
+
+  if test "$USE_NLS" = "yes"; then
+
+    if test "$gt_use_preinstalled_gnugettext" = "yes"; then
+      if test "$gt_cv_func_gnugettext_libintl" = "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; 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)
+    AC_SUBST(INTLOBJS)
+
+    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 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 Checks for all prerequisites of the po subdirectory,
+dnl except for USE_NLS.
+AC_DEFUN([AM_PO_SUBDIRS],
+[
+  AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+  AC_REQUIRE([AC_PROG_INSTALL])dnl
+  AC_REQUIRE([AM_MKINSTALLDIRS])dnl
+
+  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 >/dev/null 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 Search for GNU xgettext 0.11 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= /dev/null >/dev/null 2>&1 &&
+     (if $ac_dir/$ac_word --omit-header --copyright-holder= /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 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 >/dev/null 2>&1], :)
+
+  dnl This could go away some day; the PATH_PROG_WITH_TEST already does it.
+  dnl Test whether we really found GNU msgfmt.
+  if test "$GMSGFMT" != ":"; then
+    dnl If it is no GNU msgfmt we define it as : so that the
+    dnl Makefiles still can work.
+    if $GMSGFMT --statistics /dev/null >/dev/null 2>&1 &&
+       (if $GMSGFMT --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+      : ;
+    else
+      GMSGFMT=`echo "$GMSGFMT" | sed -e 's,^.*/,,'`
+      AC_MSG_RESULT(
+        [found $GMSGFMT program is not GNU msgfmt; ignore it])
+      GMSGFMT=":"
+    fi
+  fi
+
+  dnl This could go away some day; the PATH_PROG_WITH_TEST already does it.
+  dnl Test whether we really found GNU xgettext.
+  if test "$XGETTEXT" != ":"; then
+    dnl If it is no GNU xgettext we define it as : so that the
+    dnl Makefiles still can work.
+    if $XGETTEXT --omit-header --copyright-holder= /dev/null >/dev/null 2>&1 &&
+       (if $XGETTEXT --omit-header --copyright-holder= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then
+      : ;
+    else
+      AC_MSG_RESULT(
+        [found xgettext program is not GNU xgettext; ignore it])
+      XGETTEXT=":"
+    fi
+    dnl Remove leftover from FreeBSD xgettext call.
+    rm -f messages.po
+  fi
+
+  AC_OUTPUT_COMMANDS([
+    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
+        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"
+          # ALL_LINGUAS, POFILES, GMOFILES, UPDATEPOFILES, DUMMYPOFILES 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 "$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" "$ac_given_srcdir/$ac_dir/LINGUAS"`
+            # Hide the ALL_LINGUAS assigment from automake.
+            eval 'ALL_LINGUAS''=$ALL_LINGUAS_'
+          fi
+          case "$ac_given_srcdir" in
+            .) srcdirpre= ;;
+            *) srcdirpre='$(srcdir)/' ;;
+          esac
+          POFILES=
+          GMOFILES=
+          UPDATEPOFILES=
+          DUMMYPOFILES=
+          for lang in $ALL_LINGUAS; do
+            POFILES="$POFILES $srcdirpre$lang.po"
+            GMOFILES="$GMOFILES $srcdirpre$lang.gmo"
+            UPDATEPOFILES="$UPDATEPOFILES $lang.po-update"
+            DUMMYPOFILES="$DUMMYPOFILES $lang.nop"
+          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|@GMOFILES@|$GMOFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@CATALOGS@|$CATALOGS|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, GMOFILES, UPDATEPOFILES, DUMMYPOFILES, CATALOGS. But hide it
+    # from automake.
+    eval 'ALL_LINGUAS''="$ALL_LINGUAS"'
+    # Capture the value of LINGUAS because we need it to compute CATALOGS.
+    LINGUAS="${LINGUAS-%UNSET%}"
+   ])
+])
+
+
+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_MKINSTALLDIRS])dnl
+  AC_REQUIRE([AC_PROG_CC])dnl
+  AC_REQUIRE([AC_CANONICAL_HOST])dnl
+  AC_REQUIRE([AC_PROG_RANLIB])dnl
+  AC_REQUIRE([AC_ISC_POSIX])dnl
+  AC_REQUIRE([AC_HEADER_STDC])dnl
+  AC_REQUIRE([AC_C_CONST])dnl
+  AC_REQUIRE([AC_C_INLINE])dnl
+  AC_REQUIRE([AC_TYPE_OFF_T])dnl
+  AC_REQUIRE([AC_TYPE_SIZE_T])dnl
+  AC_REQUIRE([AC_FUNC_ALLOCA])dnl
+  AC_REQUIRE([AC_FUNC_MMAP])dnl
+  AC_REQUIRE([jm_GLIBC21])dnl
+
+  AC_CHECK_HEADERS([argz.h limits.h locale.h nl_types.h malloc.h stddef.h \
+stdlib.h string.h unistd.h sys/param.h])
+  AC_CHECK_FUNCS([feof_unlocked fgets_unlocked getc_unlocked getcwd getegid \
+geteuid getgid getuid mempcpy munmap putenv setenv setlocale stpcpy \
+strcasecmp strdup strtoul tsearch __argz_count __argz_stringify __argz_next])
+
+  AM_ICONV
+  AM_LANGINFO_CODESET
+  AM_LC_MESSAGES
+
+  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
+])
+
+
+AC_DEFUN([AM_MKINSTALLDIRS],
+[
+  dnl If the AC_CONFIG_AUX_DIR macro for autoconf is used we possibly
+  dnl find the mkinstalldirs script in another subdir but $(top_srcdir).
+  dnl Try to locate is.
+  MKINSTALLDIRS=
+  if test -n "$ac_aux_dir"; then
+    MKINSTALLDIRS="$ac_aux_dir/mkinstalldirs"
+  fi
+  if test -z "$MKINSTALLDIRS"; then
+    MKINSTALLDIRS="\$(top_srcdir)/mkinstalldirs"
+  fi
+  AC_SUBST(MKINSTALLDIRS)
+])
diff --git a/m4/glibc21.m4 b/m4/glibc21.m4
new file mode 100644
index 0000000..9c9f3db
--- /dev/null
+++ b/m4/glibc21.m4
@@ -0,0 +1,32 @@
+# glibc21.m4 serial 2 (fileutils-4.1.3, gettext-0.10.40)
+dnl Copyright (C) 2000-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.
+
+# Test for the GNU C Library, version 2.1 or newer.
+# From Bruno Haible.
+
+AC_DEFUN([jm_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..f81e8b9
--- /dev/null
+++ b/m4/iconv.m4
@@ -0,0 +1,96 @@
+# iconv.m4 serial AM3 (gettext-0.11)
+dnl Copyright (C) 2000-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 Bruno Haible.
+
+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).
+
+  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])
+
+  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_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function.])
+  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],
+[
+  AC_REQUIRE([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..55dddcf
--- /dev/null
+++ b/m4/intdiv0.m4
@@ -0,0 +1,72 @@
+# intdiv0.m4 serial 1 (gettext-0.11.3)
+dnl Copyright (C) 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 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,
+    [
+      AC_TRY_RUN([
+#include <stdlib.h>
+#include <signal.h>
+
+static void
+#ifdef __cplusplus
+sigfpe_handler (int sig)
+#else
+sigfpe_handler (sig) int sig;
+#endif
+{
+  /* 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.
+          case "$host_cpu" in
+            alpha* | i[34567]86 | m68k | s390*)
+              gt_cv_int_divbyzero_sigfpe="guessing yes";;
+            *)
+              gt_cv_int_divbyzero_sigfpe="guessing no";;
+          esac
+        ])
+    ])
+  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/inttypes-pri.m4 b/m4/inttypes-pri.m4
new file mode 100644
index 0000000..fd007c3
--- /dev/null
+++ b/m4/inttypes-pri.m4
@@ -0,0 +1,32 @@
+# inttypes-pri.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 Bruno Haible.
+
+# 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_REQUIRE([gt_HEADER_INTTYPES_H])
+  if test $gt_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.])
+  fi
+])
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..400a111
--- /dev/null
+++ b/m4/inttypes_h.m4
@@ -0,0 +1,28 @@
+# inttypes_h.m4 serial 4 (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_WITH_UINTMAX if <inttypes.h> exists,
+# doesn't clash with <sys/types.h>, and declares uintmax_t.
+
+AC_DEFUN([jm_AC_HEADER_INTTYPES_H],
+[
+  AC_CACHE_CHECK([for inttypes.h], jm_ac_cv_header_inttypes_h,
+  [AC_TRY_COMPILE(
+    [#include <sys/types.h>
+#include <inttypes.h>],
+    [uintmax_t i = (uintmax_t) -1;],
+    jm_ac_cv_header_inttypes_h=yes,
+    jm_ac_cv_header_inttypes_h=no)])
+  if test $jm_ac_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..ffbf915
--- /dev/null
+++ b/m4/lcmessage.m4
@@ -0,0 +1,32 @@
+# lcmessage.m4 serial 2 (gettext-0.10.40)
+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.
+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([AM_LC_MESSAGES],
+  [if test $ac_cv_header_locale_h = yes; then
+    AC_CACHE_CHECK([for LC_MESSAGES], am_cv_val_LC_MESSAGES,
+      [AC_TRY_LINK([#include <locale.h>], [return LC_MESSAGES],
+       am_cv_val_LC_MESSAGES=yes, am_cv_val_LC_MESSAGES=no)])
+    if test $am_cv_val_LC_MESSAGES = yes; then
+      AC_DEFINE(HAVE_LC_MESSAGES, 1,
+        [Define if your <locale.h> file defines LC_MESSAGES.])
+    fi
+  fi])
diff --git a/m4/lib-ld.m4 b/m4/lib-ld.m4
new file mode 100644
index 0000000..ddb5732
--- /dev/null
+++ b/m4/lib-ld.m4
@@ -0,0 +1,97 @@
+# lib-ld.m4 serial 1 (gettext-0.11)
+dnl Copyright (C) 1996-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 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.
+if $LD -v 2>&1 </dev/null | egrep '(GNU|with BFD)' 1>&5; then
+  acl_cv_prog_gnu_ld=yes
+else
+  acl_cv_prog_gnu_ld=no
+fi])
+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
+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.
+      if "$acl_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then
+	test "$with_gnu_ld" != no && break
+      else
+	test "$with_gnu_ld" != yes && break
+      fi
+    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..09f7f17
--- /dev/null
+++ b/m4/lib-link.m4
@@ -0,0 +1,548 @@
+# lib-link.m4 serial 2 (gettext-0.11.2)
+dnl Copyright (C) 2001-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 Bruno Haible.
+
+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.
+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"
+  ])
+  LIB[]NAME="$ac_cv_lib[]Name[]_libs"
+  LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs"
+  INC[]NAME="$ac_cv_lib[]Name[]_cppflags"
+  AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME)
+  AC_SUBST([LIB]NAME)
+  AC_SUBST([LTLIB]NAME)
+  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.
+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=
+  fi
+  AC_SUBST([HAVE_LIB]NAME)
+  AC_SUBST([LIB]NAME)
+  AC_SUBST([LTLIB]NAME)
+  undefine([Name])
+  undefine([NAME])
+])
+
+dnl Determine the platform dependent parameters needed to use rpath:
+dnl libext, shlibext, hardcode_libdir_flag_spec, hardcode_libdir_separator,
+dnl hardcode_direct, hardcode_minus_L,
+dnl sys_lib_search_path_spec, sys_lib_dlsearch_path_spec.
+AC_DEFUN([AC_LIB_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"
+  libext="$acl_cv_libext"
+  shlibext="$acl_cv_shlibext"
+  hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec"
+  hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator"
+  hardcode_direct="$acl_cv_hardcode_direct"
+  hardcode_minus_L="$acl_cv_hardcode_minus_L"
+  sys_lib_search_path_spec="$acl_cv_sys_lib_search_path_spec"
+  sys_lib_dlsearch_path_spec="$acl_cv_sys_lib_dlsearch_path_spec"
+])
+
+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.
+AC_DEFUN([AC_LIB_LINKFLAGS_BODY],
+[
+  define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-],
+                               [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])])
+  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_ARG_WITH([lib$1-prefix],
+[  --with-lib$1-prefix[=DIR]  search for lib$1 in DIR/include and DIR/lib
+  --without-lib$1-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/lib"
+      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=
+  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=
+          if test $use_additional = yes; then
+            if test -n "$shlibext" && test -f "$additional_libdir/lib$name.$shlibext"; then
+              found_dir="$additional_libdir"
+              found_so="$additional_libdir/lib$name.$shlibext"
+              if test -f "$additional_libdir/lib$name.la"; then
+                found_la="$additional_libdir/lib$name.la"
+              fi
+            else
+              if test -f "$additional_libdir/lib$name.$libext"; then
+                found_dir="$additional_libdir"
+                found_a="$additional_libdir/lib$name.$libext"
+                if test -f "$additional_libdir/lib$name.la"; then
+                  found_la="$additional_libdir/lib$name.la"
+                fi
+              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//'`
+                  if test -n "$shlibext" && test -f "$dir/lib$name.$shlibext"; then
+                    found_dir="$dir"
+                    found_so="$dir/lib$name.$shlibext"
+                    if test -f "$dir/lib$name.la"; then
+                      found_la="$dir/lib$name.la"
+                    fi
+                  else
+                    if test -f "$dir/lib$name.$libext"; then
+                      found_dir="$dir"
+                      found_a="$dir/lib$name.$libext"
+                      if test -f "$dir/lib$name.la"; then
+                        found_la="$dir/lib$name.la"
+                      fi
+                    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 "X$found_dir" = "X/usr/lib"; 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 "$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 "$hardcode_libdir_flag_spec" && test "$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 "$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 $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
+              */lib | */lib/)
+                basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e 's,/lib/*$,,'`
+                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*) 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/lib"; then
+                      haveit=
+                      if test "X$additional_libdir" = "X/usr/local/lib"; then
+                        if test -n "$GCC"; then
+                          case $host_os in
+                            linux*) 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//'`
+                    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
+                    ;;
+                  -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 "$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:+$hardcode_libdir_separator}$found_dir"
+      done
+      dnl Note: hardcode_libdir_flag_spec uses $libdir and $wl.
+      acl_save_libdir="$libdir"
+      libdir="$alldirs"
+      eval flag=\"$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=\"$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
+])
diff --git a/m4/lib-prefix.m4 b/m4/lib-prefix.m4
new file mode 100644
index 0000000..b8b79ab
--- /dev/null
+++ b/m4/lib-prefix.m4
@@ -0,0 +1,148 @@
+# lib-prefix.m4 serial 1 (gettext-0.11)
+dnl Copyright (C) 2001-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 Bruno Haible.
+
+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_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_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/lib"
+      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*) 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/lib"; 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/lib"; 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"
+])
diff --git a/m4/progtest.m4 b/m4/progtest.m4
new file mode 100644
index 0000000..443c8e3
--- /dev/null
+++ b/m4/progtest.m4
@@ -0,0 +1,59 @@
+# progtest.m4 serial 2 (gettext-0.10.40)
+dnl Copyright (C) 1996-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
+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.
+
+# 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],
+[# 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.
+  ;;
+  *)
+  IFS="${IFS= 	}"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+  for ac_dir in ifelse([$5], , $PATH, [$5]); do
+    test -z "$ac_dir" && ac_dir=.
+    if test -f $ac_dir/$ac_word; then
+      if [$3]; then
+	ac_cv_path_$1="$ac_dir/$ac_word"
+	break
+      fi
+    fi
+  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/stdint_h.m4 b/m4/stdint_h.m4
new file mode 100644
index 0000000..4b5a4ac
--- /dev/null
+++ b/m4/stdint_h.m4
@@ -0,0 +1,28 @@
+# stdint_h.m4 serial 2 (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_STDINT_H_WITH_UINTMAX if <stdint.h> exists,
+# doesn't clash with <sys/types.h>, and declares uintmax_t.
+
+AC_DEFUN([jm_AC_HEADER_STDINT_H],
+[
+  AC_CACHE_CHECK([for stdint.h], jm_ac_cv_header_stdint_h,
+  [AC_TRY_COMPILE(
+    [#include <sys/types.h>
+#include <stdint.h>],
+    [uintmax_t i = (uintmax_t) -1;],
+    jm_ac_cv_header_stdint_h=yes,
+    jm_ac_cv_header_stdint_h=no)])
+  if test $jm_ac_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..ec3a8b9
--- /dev/null
+++ b/m4/uintmax_t.m4
@@ -0,0 +1,29 @@
+# uintmax_t.m4 serial 6 (gettext-0.11)
+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.
+
+AC_PREREQ(2.13)
+
+# Define uintmax_t to `unsigned long' or `unsigned long long'
+# if <inttypes.h> does not exist.
+
+AC_DEFUN([jm_AC_TYPE_UINTMAX_T],
+[
+  AC_REQUIRE([jm_AC_HEADER_INTTYPES_H])
+  AC_REQUIRE([jm_AC_HEADER_STDINT_H])
+  if test $jm_ac_cv_header_inttypes_h = no && test $jm_ac_cv_header_stdint_h = no; then
+    AC_REQUIRE([jm_AC_TYPE_UNSIGNED_LONG_LONG])
+    test $ac_cv_type_unsigned_long_long = 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 <inttypes.h> and <stdint.h> don't define.])
+  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/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/mkinstalldirs b/mkinstalldirs
new file mode 100755
index 0000000..d2d5f21
--- /dev/null
+++ b/mkinstalldirs
@@ -0,0 +1,111 @@
+#! /bin/sh
+# mkinstalldirs --- make directory hierarchy
+# Author: Noah Friedman <friedman at prep.ai.mit.edu>
+# Created: 1993-05-16
+# Public domain
+
+errstatus=0
+dirmode=""
+
+usage="\
+Usage: mkinstalldirs [-h] [--help] [-m mode] dir ..."
+
+# process command line arguments
+while test $# -gt 0 ; do
+  case $1 in
+    -h | --help | --h*)         # -h for help
+      echo "$usage" 1>&2
+      exit 0
+      ;;
+    -m)                         # -m PERM arg
+      shift
+      test $# -eq 0 && { echo "$usage" 1>&2; exit 1; }
+      dirmode=$1
+      shift
+      ;;
+    --)                         # stop option processing
+      shift
+      break
+      ;;
+    -*)                         # unknown option
+      echo "$usage" 1>&2
+      exit 1
+      ;;
+    *)                          # first non-opt arg
+      break
+      ;;
+  esac
+done
+
+for file
+do
+  if test -d "$file"; then
+    shift
+  else
+    break
+  fi
+done
+
+case $# in
+  0) exit 0 ;;
+esac
+
+case $dirmode in
+  '')
+    if mkdir -p -- . 2>/dev/null; then
+      echo "mkdir -p -- $*"
+      exec mkdir -p -- "$@"
+    fi
+    ;;
+  *)
+    if mkdir -m "$dirmode" -p -- . 2>/dev/null; then
+      echo "mkdir -m $dirmode -p -- $*"
+      exec mkdir -m "$dirmode" -p -- "$@"
+    fi
+    ;;
+esac
+
+for file
+do
+  set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'`
+  shift
+
+  pathcomp=
+  for d
+  do
+    pathcomp="$pathcomp$d"
+    case $pathcomp in
+      -*) pathcomp=./$pathcomp ;;
+    esac
+
+    if test ! -d "$pathcomp"; then
+      echo "mkdir $pathcomp"
+
+      mkdir "$pathcomp" || lasterr=$?
+
+      if test ! -d "$pathcomp"; then
+  	errstatus=$lasterr
+      else
+  	if test ! -z "$dirmode"; then
+	  echo "chmod $dirmode $pathcomp"
+    	  lasterr=""
+  	  chmod "$dirmode" "$pathcomp" || lasterr=$?
+
+  	  if test ! -z "$lasterr"; then
+  	    errstatus=$lasterr
+  	  fi
+  	fi
+      fi
+    fi
+
+    pathcomp="$pathcomp/"
+  done
+done
+
+exit $errstatus
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# End:
+# mkinstalldirs ends here
diff --git a/options b/options
new file mode 100644
index 0000000..0fc8eeb
--- /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/remote.xml
+#OBSOLETE#[.]http.path_tribune_add: board/add.php3
+#OBSOLETE#[.]http.board_post: 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
+
+### 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: verdana
+#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 hfr
+### 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..bd1cb0d
--- /dev/null
+++ b/platypus/Makefile.in
@@ -0,0 +1,445 @@
+# Makefile.in generated by automake 1.7.9 from Makefile.am.
+# @configure_input@
+
+# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
+# 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@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+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 = :
+host_triplet = @host@
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+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@
+GLIBC2 = @GLIBC2@
+GLIBC21 = @GLIBC21@
+GMSGFMT = @GMSGFMT@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+HAVE_ASPRINTF = @HAVE_ASPRINTF@
+HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@
+HAVE_SNPRINTF = @HAVE_SNPRINTF@
+HAVE_WPRINTF = @HAVE_WPRINTF@
+IMLIB2_CONFIG_IN_PATH = @IMLIB2_CONFIG_IN_PATH@
+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@
+LIBOBJS = @LIBOBJS@
+
+LIBS = `imlib2-config --libs`
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+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@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+WMCCC = @WMCCC@
+WMCOINCOIN_PLAYER = @WMCOINCOIN_PLAYER@
+XFT_CFLAGS = @XFT_CFLAGS@
+XFT_LIBS = @XFT_LIBS@
+XGETTEXT = @XGETTEXT@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+ac_pt_PKG_CONFIG = @ac_pt_PKG_CONFIG@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+bin_PROGRAMS = @WMCOINCOIN_PLAYER@
+EXTRA_PROGRAMS = wmcoincoin_player
+
+wmcoincoin_player_SOURCES = fmalloc.c giffunc.c gifread.c wmcoincoin_player.c gif.h
+
+INCLUDES = -I. `imlib2-config --cflags`
+subdir = platypus
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+EXTRA_PROGRAMS = wmcoincoin_player$(EXEEXT)
+bin_PROGRAMS = @WMCOINCOIN_PLAYER@
+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)
+wmcoincoin_player_DEPENDENCIES =
+wmcoincoin_player_LDFLAGS =
+
+DEFAULT_INCLUDES =  -I. -I$(srcdir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+ at AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/fmalloc.Po ./$(DEPDIR)/giffunc.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/gifread.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/wmcoincoin_player.Po
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+DIST_SOURCES = $(wmcoincoin_player_SOURCES)
+DIST_COMMON = $(srcdir)/Makefile.in Makefile.am
+SOURCES = $(wmcoincoin_player_SOURCES)
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .o .obj
+$(srcdir)/Makefile.in:  Makefile.am  $(top_srcdir)/configure.ac $(ACLOCAL_M4)
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  platypus/Makefile
+Makefile:  $(srcdir)/Makefile.in  $(top_builddir)/config.status
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
+binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+install-binPROGRAMS: $(bin_PROGRAMS)
+	@$(NORMAL_INSTALL)
+	$(mkinstalldirs) $(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_LDFLAGS) $(wmcoincoin_player_OBJECTS) $(wmcoincoin_player_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT) core *.core
+
+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@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`
+uninstall-info-am:
+
+ETAGS = etags
+ETAGSFLAGS =
+
+CTAGS = ctags
+CTAGSFLAGS =
+
+tags: TAGS
+
+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; } \
+	       END { for (i in files) print i; }'`; \
+	mkid -fID $$unique
+
+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; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(ETAGS_ARGS)$$tags$$unique" \
+	  || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	     $$tags $$unique
+
+ctags: CTAGS
+CTAGS:  $(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; } \
+	       END { 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
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+
+top_distdir = ..
+distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+	list='$(DISTFILES)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkinstalldirs) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    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:
+	$(mkinstalldirs) $(DESTDIR)$(bindir)
+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:
+	-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:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-exec-am: install-binPROGRAMS
+
+install-info: install-info-am
+
+install-man:
+
+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 uninstall-info-am
+
+.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 info \
+	info-am install install-am install-binPROGRAMS install-data \
+	install-data-am install-exec install-exec-am install-info \
+	install-info-am install-man 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 uninstall-info-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/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..d01d78a
--- /dev/null
+++ b/po/ChangeLog
@@ -0,0 +1,27 @@
+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..041b1b2
--- /dev/null
+++ b/po/Makefile.in.in
@@ -0,0 +1,317 @@
+# Makefile for PO directory in any package using GNU gettext.
+# Copyright (C) 1995-1997, 2000-2002 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.
+
+PACKAGE = @PACKAGE@
+VERSION = @VERSION@
+
+SHELL = /bin/sh
+ at SET_MAKE@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+datadir = @datadir@
+localedir = $(datadir)/locale
+gettextsrcdir = $(datadir)/gettext/po
+
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+mkinstalldirs = $(MKINSTALLDIRS)
+
+GMSGFMT = @GMSGFMT@
+MSGFMT = @MSGFMT@
+XGETTEXT = @XGETTEXT@
+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 Makevars remove-potcdate.sin \
+$(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3)
+DISTFILES = $(DISTFILES.common) POTFILES.in $(DOMAIN).pot \
+$(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-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: all- at USE_NLS@
+
+all-yes: $(CATALOGS)
+all-no:
+
+# 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.
+
+$(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed
+	$(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \
+	  --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) \
+	  --files-from=$(srcdir)/POTFILES.in \
+	  --copyright-holder='$(COPYRIGHT_HOLDER)'
+	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; \
+	}
+
+$(srcdir)/$(DOMAIN).pot:
+	$(MAKE) $(DOMAIN).pot-update
+
+$(POFILES): $(srcdir)/$(DOMAIN).pot
+	@lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \
+	test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \
+	echo "$${cdcmd}$(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot"; \
+	cd $(srcdir) && $(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot
+
+
+install: install-exec install-data
+install-exec:
+install-data: install-data- at USE_NLS@
+	if test "$(PACKAGE)" = "gettext"; then \
+	  $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \
+	  for file in $(DISTFILES.common); do \
+	    $(INSTALL_DATA) $(srcdir)/$$file \
+			    $(DESTDIR)$(gettextsrcdir)/$$file; \
+	  done; \
+	else \
+	  : ; \
+	fi
+install-data-no: all
+install-data-yes: all
+	$(mkinstalldirs) $(DESTDIR)$(datadir)
+	@catalogs='$(CATALOGS)'; \
+	for cat in $$catalogs; do \
+	  cat=`basename $$cat`; \
+	  lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+	  dir=$(localedir)/$$lang/LC_MESSAGES; \
+	  $(mkinstalldirs) $(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"; then \
+	  $(mkinstalldirs) $(DESTDIR)$(gettextsrcdir); \
+	else \
+	  : ; \
+	fi
+installdirs-data-no:
+installdirs-data-yes:
+	$(mkinstalldirs) $(DESTDIR)$(datadir)
+	@catalogs='$(CATALOGS)'; \
+	for cat in $$catalogs; do \
+	  cat=`basename $$cat`; \
+	  lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \
+	  dir=$(localedir)/$$lang/LC_MESSAGES; \
+	  $(mkinstalldirs) $(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"; then \
+	  for file in $(DISTFILES.common); 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
+
+dvi info tags TAGS ID:
+
+mostlyclean:
+	rm -f remove-potcdate.sed
+	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 $(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: $(DISTFILES)
+	dists="$(DISTFILES)"; \
+	if test -f $(srcdir)/ChangeLog; then dists="$$dists ChangeLog"; fi; \
+	if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \
+	for file in $$dists; do \
+	  if test -f $$file; then \
+	    cp -p $$file $(distdir); \
+	  else \
+	    cp -p $(srcdir)/$$file $(distdir); \
+	  fi; \
+	done
+
+update-po: Makefile
+	$(MAKE) $(DOMAIN).pot-update
+	$(MAKE) $(UPDATEPOFILES)
+	$(MAKE) update-gmo
+
+# General rule for updating PO files.
+
+.nop.po-update:
+	@lang=`echo $@ | sed -e 's/\.po-update$$//'`; \
+	if test "$(PACKAGE)" = "gettext"; 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 $(top_builddir)/config.status POTFILES.in
+	cd $(top_builddir) \
+	  && CONFIG_FILES=$(subdir)/$@.in CONFIG_HEADERS= \
+	       $(SHELL) ./config.status
+
+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..5f46d23
--- /dev/null
+++ b/po/Rules-quot
@@ -0,0 +1,42 @@
+# 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-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..c173ef1
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..86a9253
--- /dev/null
+++ b/po/fr.po
@@ -0,0 +1,2252 @@
+# 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: \n"
+"POT-Creation-Date: 2006-09-13 15:23+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:819
+#, 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:840
+#, c-format
+msgid "http_read: request of length %d, pos = %ld, chunk=%d (size %ld)\n"
+msgstr ""
+
+#: src/http.c:845
+#, c-format
+msgid ""
+"Damned, the chunk_encoding has gone down the tubes on the following "
+"request:\n"
+msgstr ""
+
+#: src/http.c:868
+#, c-format
+msgid "error in chunk '%s'\n"
+msgstr ""
+
+#: src/http.c:893
+#, 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:901
+#, c-format
+msgid "http_read: length finally requested: %d, received: %d, new pos=%ld\n"
+msgstr ""
+
+#: src/http.c:939
+#, c-format
+msgid ""
+"http_get_line: weird, got=0 while reading %d/%d [r->telnet.error=%d, "
+"errmsg='%s']\n"
+msgstr ""
+
+#: src/http.c:945
+#, c-format
+msgid "http_get_line messed up (got=%d): %s!"
+msgstr "http_get_line s'est vautré (got=%d): %s !"
+
+#: src/http.c:949
+msgid "http_get_line sent (cnt=%d): '%<yel %s>'\n"
+msgstr ""
+
+#: src/http.c:994
+#, c-format
+msgid "http_send_request/debug, unable to open '%s':%s\n"
+msgstr ""
+
+#: src/http.c:1111
+#, 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:1115
+#, c-format
+msgid "ok, request sent\n"
+msgstr ""
+
+#: src/http.c:1196
+msgid "Quack ! Missed"
+msgstr "Plop ! c'est raté"
+
+#: src/http.c:1209
+#, c-format
+msgid "%s: too big (bsize=%d!), let's cut\n"
+msgstr ""
+
+#: src/http.c:1217
+#, c-format
+msgid "problem while reading %s: %s\n"
+msgstr ""
+
+#: src/http.c:1223
+msgid "%s, read: %<mag %s>\n"
+msgstr ""
+
+#: src/http.c:1274
+#, 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:1288
+#, 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:690
+#, c-format
+msgid "get_tok not recognized: (len=%d)'"
+msgstr ""
+
+#: src/board_util.c:707
+#, 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:883
+#, c-format
+msgid "IPOT(tm) detected"
+msgstr ""
+
+#: src/board_util.c:885
+#, c-format
+msgid "but where is '%s' ?"
+msgstr "où qu'il est '%s' ?"
+
+#: src/board_util.c:889
+#, c-format
+msgid "[IPOT(tm)]"
+msgstr ""
+
+#: src/board_util.c:891
+#, 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:899
+#, 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:903
+#, c-format
+msgid "Hello from %.30s who was eaten by the boitakon"
+msgstr "kikoo de %.30s depuis la boitakon"
+
+#: src/board_util.c:905
+#, 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:937
+#, 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:2929
+#, 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:412
+#, 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:423
+#, 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:489
+msgid "Spawning \"%<YEL %s>\"\n"
+msgstr ""
+
+#: src/wmcoincoin.c:515
+#, c-format
+msgid "Can't get window attributes.\n"
+msgstr ""
+
+#: src/wmcoincoin.c:650
+#, c-format
+msgid ""
+"[%s] Ooops, there must have been a little problem, the server answered:<p>%"
+"s<p>%s"
+msgstr ""
+
+#: src/wmcoincoin.c:652
+msgid "Check your cookies !"
+msgstr ""
+
+#: src/wmcoincoin.c:655 src/wmcoincoin.c:670
+#, c-format
+msgid ""
+"[%s] Ooops, there must have been a little problem, the server answered:<p>%s"
+msgstr ""
+
+#: src/wmcoincoin.c:688
+msgid "message posted: '%<YEL %s>\n"
+msgstr ""
+
+#: src/wmcoincoin.c:689
+msgid "    (useragent: '%<CYA %s>\n"
+msgstr ""
+
+#: src/wmcoincoin.c:758
+#, c-format
+msgid "[%s] Damned ! There has been an error<p>%s"
+msgstr ""
+
+#: src/wmcoincoin.c:808
+#, c-format
+msgid ""
+"Fork failed...(%s)..\n"
+" you sux\n"
+msgstr ""
+
+#: src/wmcoincoin.c:821
+#, c-format
+msgid ""
+"Exec of wmccc failed...(%s)..\n"
+" you sux (wmccc not in path?)\n"
+msgstr ""
+
+#: src/wmcoincoin.c:859
+#, c-format
+msgid "Unable to open '%s' for %s the state of the beast [%s]\n"
+msgstr ""
+
+#: src/wmcoincoin.c:859
+msgid "reading"
+msgstr ""
+
+#: src/wmcoincoin.c:859
+msgid "writing"
+msgstr ""
+
+#: src/wmcoincoin.c:876
+#, c-format
+msgid "Unable to open '%s' for writing to save the state of the beast\n"
+msgstr ""
+
+#: src/wmcoincoin.c:909
+#, 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:915
+#, 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:923
+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:927
+#, 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:934
+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:938
+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:943
+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:948
+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:954
+msgid "<b><i>DON'T PANIC</i></b>"
+msgstr ""
+
+#: src/wmcoincoin.c:1101
+#, c-format
+msgid "X11 Error. The coincoin is going down for halt NOW!\n"
+msgstr ""
+
+#: src/wmcoincoin.c:1107
+#, c-format
+msgid "X11 IO Error. The coincoin is going down for halt NOW!\n"
+msgstr ""
+
+#: src/wmcoincoin.c:1140
+#, c-format
+msgid "pan ! pan ! ... arg\n"
+msgstr ""
+
+#: src/wmcoincoin.c:1554
+#, c-format
+msgid "Creating the windows icon. Just tell me if it makes your WM crash.\n"
+msgstr ""
+
+#: src/wmcoincoin.c:1722
+#, c-format
+msgid "Couldn't create window\n"
+msgstr ""
+
+#: src/wmcoincoin.c:1734
+#, c-format
+msgid "Couldn't create icon window\n"
+msgstr ""
+
+#: src/wmcoincoin.c:1747
+#, c-format
+msgid "Bad dimensions for the pixmap skin (expected 64x320, found %dx%d)\n"
+msgstr ""
+
+#: src/wmcoincoin.c:1750
+msgid "Unable to load the pixmap '%<grn %s>'\n"
+msgstr ""
+
+#: src/wmcoincoin.c:1829
+#, c-format
+msgid "Couldn't create text property\n"
+msgstr ""
+
+#: src/wmcoincoin.c:1843
+#, c-format
+msgid "Couldn't create graphics context\n"
+msgstr ""
+
+#: src/wmcoincoin.c:1935 src/wmcoincoin.c:1940 src/wmcoincoin.c:1945
+#: src/wmcoincoin.c:1951 src/wmcoincoin.c:1958 src/wmcoincoin.c:1965
+#, c-format
+msgid ""
+"sigaction: erreur %d (%s)\n"
+" essayez de recompiler en faisant un #define SIGNAUX_A_LANCIENNE...\n"
+msgstr ""
+
+#: src/wmcoincoin.c:2085
+msgid "%<GRN wmc2> v.%<WHT %s> [ built on %s ]\n"
+msgstr "%<GRN wmc2> v.%<WHT %s> [ built on %s ]\n"
+
+#: src/wmcoincoin.c:2096
+#, c-format
+msgid "locale used: %s\n"
+msgstr "locale utilisée: %s\n"
+
+#: src/wmcoincoin.c:2141
+msgid "%<YEL BOARD      >"
+msgstr ""
+
+#: src/wmcoincoin.c:2143
+msgid "%<YEL RSS        >"
+msgstr ""
+
+#: src/wmcoincoin.c:2145
+msgid "%<YEL POP3       >"
+msgstr ""
+
+#: src/wmcoincoin.c:2146 src/wmcoincoin.c:2155
+msgid "%<YEL prrrrrrt    >"
+msgstr ""
+
+#: src/wmcoincoin.c:2150
+msgid "%<YEL tags not encoded  >"
+msgstr ""
+
+#: src/wmcoincoin.c:2152
+msgid "%<YEL tags encoded      >"
+msgstr ""
+
+#: src/wmcoincoin.c:2154
+msgid "%<YEL without underpants>"
+msgstr "%<YEL sans slip>"
+
+#: src/wmcoincoin.c:2249
+#, c-format
+msgid "Unable to load font %s , trying iso8859-1\n"
+msgstr ""
+
+#: src/wmcoincoin.c:2253
+#, 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:2835
+#, c-format
+msgid ""
+"The selected element is the <font color=blue>thread</font> '<font "
+"color=#800000>id=%d</font>'"
+msgstr ""
+
+#: src/pinnipede.c:2848
+#, c-format
+msgid ""
+"The selected element is the <font color=blue>useragent</font> '<font "
+"color=#800000>%s</font>'"
+msgstr ""
+
+#: src/pinnipede.c:2858
+#, c-format
+msgid ""
+"The selected element is the <font color=blue>login</font> '<font "
+"color=#800000>%s</font>'"
+msgstr ""
+
+#: src/pinnipede.c:2864
+#, c-format
+msgid ""
+"The selected element is the <font color=blue>message</font> #id=<font "
+"color=#800000>%d</font>"
+msgstr ""
+
+#: src/pinnipede.c:2872
+#, c-format
+msgid ""
+"The selected element is the <font color=blue>word</font> '<font "
+"color=#800000>%s</font>'"
+msgstr ""
+
+#: src/pinnipede.c:2882
+msgid "<b>plop</b>ify it"
+msgstr "<b>plop</b>ifier"
+
+#: src/pinnipede.c:2883
+msgid "<b>superplop</b>ify it"
+msgstr "<b>superplop</b>ifier"
+
+#: src/pinnipede.c:2884
+msgid "put in <b>boitakon</b>"
+msgstr "ajouter dans la <b>boitakon</b>"
+
+#: src/pinnipede.c:2885
+msgid "put in <i>hungry</i> <b>boitakon</b>"
+msgstr "ajouter dans la <i>hungry</i> <b>boitakon</b>"
+
+#: src/pinnipede.c:2889
+msgid "mark it (categ 0)"
+msgstr ""
+
+#: src/pinnipede.c:2890
+msgid "mark it (categ 1)"
+msgstr ""
+
+#: src/pinnipede.c:2891
+msgid "mark it (categ 2)"
+msgstr ""
+
+#: src/pinnipede.c:2892
+msgid "mark it (categ 3)"
+msgstr ""
+
+#: src/pinnipede.c:2893
+msgid "mark it (categ 4)"
+msgstr ""
+
+#: src/pinnipede.c:2894
+msgid "filter it"
+msgstr "filtrer (bouton bleu pour désactiver le filtre)"
+
+#: src/pinnipede.c:2898
+msgid "gogole search"
+msgstr ""
+
+#: src/pinnipede.c:2903
+msgid "copy link in X clipboard"
+msgstr "copier l'url dans le presse-papier"
+
+#: src/pinnipede.c:2907
+msgid "copy useragent in X clipboard"
+msgstr "copier le useragent dans le presse-papier"
+
+#: src/pinnipede.c:2910
+msgid "Try to download the correspounding picture"
+msgstr ""
+
+#: src/pinnipede.c:2911
+msgid "Bookmark this picture"
+msgstr ""
+
+#: src/pinnipede.c:2912
+msgid "Remove this picture from bookmarks"
+msgstr ""
+
+#: src/pinnipede.c:2935
+#, c-format
+msgid "remove %s:'<font color=blue>%.15s</font> from hilight categ %d"
+msgstr ""
+
+#: src/pinnipede.c:2941
+msgid "hide the button bar / tabs bar"
+msgstr "cacher la barre de tabs/boutons"
+
+#: src/pinnipede.c:2942
+msgid "show the button bar / tabs bar"
+msgstr "afficher la barre de tabs/boutons"
+
+#: src/pinnipede.c:2945
+msgid "Change colors for this site"
+msgstr ""
+
+#: src/pinnipede.c:2950
+msgid "<b>enable</b> the bigornophone"
+msgstr "<b>activer</b> le bigornophone"
+
+#: src/pinnipede.c:2952
+msgid "<b>disable</b> the bigornophone"
+msgstr "<b>désactiver</b> le bigornophone"
+
+#: src/pinnipede.c:2957
+msgid "<b>enable</b> the secondary bigornophone"
+msgstr "<b>activer</b> le bigornophone secondaire"
+
+#: src/pinnipede.c:2959
+msgid "<b>disable</b> the secondary bigornophone"
+msgstr "<b>désactiver</b> le bigornophone secondaire"
+
+#: src/palmipede.c:343
+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:560
+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:659
+#, c-format
+msgid "wmcoincoin: Failed to set XA_PRIMARY ownership."
+msgstr ""
+
+#: src/palmipede.c:1328
+msgid ""
+"looks like you fucked your options file, no board has be defined: no noard, "
+"no palmipede"
+msgstr ""
+
+#: src/palmipede.c:2062
+msgid "====> <b>Moment "
+msgstr ""
+
+#: src/palmipede.c:2064
+msgid "_o/* <b>BLAM</b>! "
+msgstr ""
+
+#: src/palmipede.c:2066
+msgid "_o/* <b>paf</b>! "
+msgstr ""
+
+#: src/palmipede.c:2068
+msgid "sale chauve "
+msgstr ""
+
+#: src/palmipede.c:2106
+msgid "[:"
+msgstr ""
+
+#: src/palmipede.c:2635
+#, 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:2645
+msgid "Put here the user-agent"
+msgstr "Entrez le useragent."
+
+#: src/palmipede.c:2648
+msgid "Fold back the palmipede<p>shortcut: <b>escape</b>"
+msgstr "Replier le palmipède<p>raccourci: <b>escape</b>"
+
+#: src/palmipede.c:2649
+msgid "Edit the user-agent"
+msgstr "Éditer le useragent"
+
+#: src/palmipede.c:2649
+msgid "Edit the message<p>shortcut: <b>Tab</b>"
+msgstr "Éditer le message<p>raccourci: <b>Tab</b>"
+
+#: src/palmipede.c:2650
+msgid "Insert italic<p>shortcut: <b>Alt-I</b>"
+msgstr "Insérer de l'italiques<p>raccourci: <b>Alt-I</b>"
+
+#: src/palmipede.c:2651
+msgid "Insert bold<p>shortcut: <b>Alt-B</b>"
+msgstr "Insérer du gras<p>raccourci: <b>Alt-B</b>"
+
+#: src/palmipede.c:2652
+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:2653
+msgid "Overstrike text<p>shortcut: <b>Alt-S</b>"
+msgstr "Insérer du texte rayé<p>raccourci: <b>Alt-S</b>"
+
+#: src/palmipede.c:2654
+msgid "Underline text<p>shortcut: <b>Alt-U</b>"
+msgstr "Insérer du texte souligné<p>raccourci: <b>Alt-U</b>"
+
+#: src/palmipede.c:2656
+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:2657
+msgid "Clear"
+msgstr "Effacer"
+
+#: src/palmipede.c:2658
+msgid "View the [:totoz] picture bookmark in your browser"
+msgstr ""
+
+#: src/palmipede.c:2659
+msgid "Restore the default user-agent"
+msgstr "Restaurer le user-agent par défaut"
+
+#: src/palmipede.c:2703
+#, c-format
+msgid " by %s"
+msgstr ""
+
+#: src/palmipede.c:2706
+#, c-format
+msgid "at %02d:%02d:%02d%s%s"
+msgstr ""
+
+#: src/palmipede.c:2708
+#, c-format
+msgid "<b>%d</b> times (first reference at %02d:%02d:%02d%s%s)"
+msgstr ""
+
+#: src/palmipede.c:2710
+#, c-format
+msgid "<b>%d</b> times (the url has left the pinnipede)"
+msgstr ""
+
+#: src/palmipede.c:2712
+#, 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:1353
+#, c-format
+msgid "Welcome to the message from '%.20s' in the boitakon\n"
+msgstr ""
+
+#: src/board.c:1687
+msgid "Original message: '%<CYA %s>'\n"
+msgstr ""
+
+#: src/board.c:1688
+msgid "Decoded message: '%<MAG %s>'\n"
+msgstr ""
+
+#: src/board.c:1883
+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:1907
+msgid ""
+"[%<YEL %s>] There is a problem in '%s',  I can't parse it... error:%<YEL %"
+"s>\n"
+msgstr ""
+
+#: src/board.c:1914 src/board.c:2061
+msgid "[%<YEL %s>] Error while downloading '%<YEL %s>' : %<RED %s>\n"
+msgstr ""
+
+#: src/board.c:2051
+msgid ""
+"[%<YEL %s>] There is a problem in '%s', I can't parse it... error:%<YEL %s>\n"
+msgstr ""
+
+#: src/board.c:2109
+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:1084
+#, 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:1086
+#, 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:1089
+#, 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:1089
+#, 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:1093
+#, 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:1544
+#, c-format
+msgid "Watch out darling, it's gonnah cut\n"
+msgstr ""
+
+#: src/prefs.c:1545
+#, c-format
+msgid "the option '%s' is valid but not handled, WHAT A SHAME"
+msgstr ""
+
+#: src/prefs.c:1565
+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:1571
+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:1582
+#, 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:1584
+#, c-format
+msgid "Unable to open file '%s' for reading\n"
+msgstr "Impossible d'ouvrir le fichier '%s' en lecture\n"
+
+#: src/prefs.c:1606
+#, c-format
+msgid ""
+"line %d: attempt to use a site pref before any 'site:' option has been used\n"
+msgstr ""
+
+#: src/prefs.c:1626
+#, c-format
+msgid "line %d: option '%s' is a site option\n"
+msgstr ""
+
+#: src/prefs.c:1630
+#, c-format
+msgid "line %d: option '%s' can't be used as a site option\n"
+msgstr ""
+
+#: src/prefs.c:1638
+#, c-format
+msgid " [line %d] %s\n"
+msgstr " [ligne %d] %s\n"
+
+#: src/prefs.c:1643
+#, c-format
+msgid "[line %d] unknown option '%s'"
+msgstr "[ligne %d] l'option '%s' est inconnue"
+
+#: src/prefs.c:1731
+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/wmcoincoin.pot b/po/wmcoincoin.pot
new file mode 100644
index 0000000..24e5d76
--- /dev/null
+++ b/po/wmcoincoin.pot
@@ -0,0 +1,1894 @@
+# 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: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2006-09-13 15:23+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:819
+#, c-format
+msgid "http_skip_header has a socket issue ! (%s)"
+msgstr ""
+
+#: src/http.c:840
+#, c-format
+msgid "http_read: request of length %d, pos = %ld, chunk=%d (size %ld)\n"
+msgstr ""
+
+#: src/http.c:845
+#, c-format
+msgid ""
+"Damned, the chunk_encoding has gone down the tubes on the following "
+"request:\n"
+msgstr ""
+
+#: src/http.c:868
+#, c-format
+msgid "error in chunk '%s'\n"
+msgstr ""
+
+#: src/http.c:893
+#, c-format
+msgid "http_read has encountered a socket problem, pos=%d, len=%d !(%s)"
+msgstr ""
+
+#: src/http.c:901
+#, c-format
+msgid "http_read: length finally requested: %d, received: %d, new pos=%ld\n"
+msgstr ""
+
+#: src/http.c:939
+#, c-format
+msgid ""
+"http_get_line: weird, got=0 while reading %d/%d [r->telnet.error=%d, "
+"errmsg='%s']\n"
+msgstr ""
+
+#: src/http.c:945
+#, c-format
+msgid "http_get_line messed up (got=%d): %s!"
+msgstr ""
+
+#: src/http.c:949
+msgid "http_get_line sent (cnt=%d): '%<yel %s>'\n"
+msgstr ""
+
+#: src/http.c:994
+#, c-format
+msgid "http_send_request/debug, unable to open '%s':%s\n"
+msgstr ""
+
+#: src/http.c:1111
+#, c-format
+msgid "http_get couldn't send its request: %s"
+msgstr ""
+
+#: src/http.c:1115
+#, c-format
+msgid "ok, request sent\n"
+msgstr ""
+
+#: src/http.c:1196
+msgid "Quack ! Missed"
+msgstr ""
+
+#: src/http.c:1209
+#, c-format
+msgid "%s: too big (bsize=%d!), let's cut\n"
+msgstr ""
+
+#: src/http.c:1217
+#, c-format
+msgid "problem while reading %s: %s\n"
+msgstr ""
+
+#: src/http.c:1223
+msgid "%s, read: %<mag %s>\n"
+msgstr ""
+
+#: src/http.c:1274
+#, c-format
+msgid "telnet_get_line has a socket issue ! (%s)"
+msgstr ""
+
+#: src/http.c:1288
+#, 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:690
+#, c-format
+msgid "get_tok not recognized: (len=%d)'"
+msgstr ""
+
+#: src/board_util.c:707
+#, c-format
+msgid "Hmmm, looks like there's an underpants problem here: %s\n"
+msgstr ""
+
+#: src/board_util.c:883
+#, c-format
+msgid "IPOT(tm) detected"
+msgstr ""
+
+#: src/board_util.c:885
+#, c-format
+msgid "but where is '%s' ?"
+msgstr ""
+
+#: src/board_util.c:889
+#, c-format
+msgid "[IPOT(tm)]"
+msgstr ""
+
+#: src/board_util.c:891
+#, c-format
+msgid "Awww, we turn around and around and around and around..."
+msgstr ""
+
+#: src/board_util.c:899
+#, c-format
+msgid "Hello from %.30s in the boitakon ! (because %s=%.20s)"
+msgstr ""
+
+#: src/board_util.c:903
+#, c-format
+msgid "Hello from %.30s who was eaten by the boitakon"
+msgstr ""
+
+#: src/board_util.c:905
+#, c-format
+msgid ""
+"Hello from %.30s in the boitakon, BUT YOU HAVE JUST FOUND A BUG IN THE "
+"BOITAKON :-("
+msgstr ""
+
+#: src/board_util.c:937
+#, 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:2929
+#, 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:412
+#, 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:423
+#, 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:489
+msgid "Spawning \"%<YEL %s>\"\n"
+msgstr ""
+
+#: src/wmcoincoin.c:515
+#, c-format
+msgid "Can't get window attributes.\n"
+msgstr ""
+
+#: src/wmcoincoin.c:650
+#, c-format
+msgid ""
+"[%s] Ooops, there must have been a little problem, the server answered:<p>%"
+"s<p>%s"
+msgstr ""
+
+#: src/wmcoincoin.c:652
+msgid "Check your cookies !"
+msgstr ""
+
+#: src/wmcoincoin.c:655 src/wmcoincoin.c:670
+#, c-format
+msgid ""
+"[%s] Ooops, there must have been a little problem, the server answered:<p>%s"
+msgstr ""
+
+#: src/wmcoincoin.c:688
+msgid "message posted: '%<YEL %s>\n"
+msgstr ""
+
+#: src/wmcoincoin.c:689
+msgid "    (useragent: '%<CYA %s>\n"
+msgstr ""
+
+#: src/wmcoincoin.c:758
+#, c-format
+msgid "[%s] Damned ! There has been an error<p>%s"
+msgstr ""
+
+#: src/wmcoincoin.c:808
+#, c-format
+msgid ""
+"Fork failed...(%s)..\n"
+" you sux\n"
+msgstr ""
+
+#: src/wmcoincoin.c:821
+#, c-format
+msgid ""
+"Exec of wmccc failed...(%s)..\n"
+" you sux (wmccc not in path?)\n"
+msgstr ""
+
+#: src/wmcoincoin.c:859
+#, c-format
+msgid "Unable to open '%s' for %s the state of the beast [%s]\n"
+msgstr ""
+
+#: src/wmcoincoin.c:859
+msgid "reading"
+msgstr ""
+
+#: src/wmcoincoin.c:859
+msgid "writing"
+msgstr ""
+
+#: src/wmcoincoin.c:876
+#, c-format
+msgid "Unable to open '%s' for writing to save the state of the beast\n"
+msgstr ""
+
+#: src/wmcoincoin.c:909
+#, 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:915
+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:923
+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:927
+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:934
+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:938
+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:943
+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:948
+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:954
+msgid "<b><i>DON'T PANIC</i></b>"
+msgstr ""
+
+#: src/wmcoincoin.c:1101
+#, c-format
+msgid "X11 Error. The coincoin is going down for halt NOW!\n"
+msgstr ""
+
+#: src/wmcoincoin.c:1107
+#, c-format
+msgid "X11 IO Error. The coincoin is going down for halt NOW!\n"
+msgstr ""
+
+#: src/wmcoincoin.c:1140
+#, c-format
+msgid "pan ! pan ! ... arg\n"
+msgstr ""
+
+#: src/wmcoincoin.c:1554
+#, c-format
+msgid "Creating the windows icon. Just tell me if it makes your WM crash.\n"
+msgstr ""
+
+#: src/wmcoincoin.c:1722
+#, c-format
+msgid "Couldn't create window\n"
+msgstr ""
+
+#: src/wmcoincoin.c:1734
+#, c-format
+msgid "Couldn't create icon window\n"
+msgstr ""
+
+#: src/wmcoincoin.c:1747
+#, c-format
+msgid "Bad dimensions for the pixmap skin (expected 64x320, found %dx%d)\n"
+msgstr ""
+
+#: src/wmcoincoin.c:1750
+msgid "Unable to load the pixmap '%<grn %s>'\n"
+msgstr ""
+
+#: src/wmcoincoin.c:1829
+#, c-format
+msgid "Couldn't create text property\n"
+msgstr ""
+
+#: src/wmcoincoin.c:1843
+#, c-format
+msgid "Couldn't create graphics context\n"
+msgstr ""
+
+#: src/wmcoincoin.c:1935 src/wmcoincoin.c:1940 src/wmcoincoin.c:1945
+#: src/wmcoincoin.c:1951 src/wmcoincoin.c:1958 src/wmcoincoin.c:1965
+#, c-format
+msgid ""
+"sigaction: erreur %d (%s)\n"
+" essayez de recompiler en faisant un #define SIGNAUX_A_LANCIENNE...\n"
+msgstr ""
+
+#: src/wmcoincoin.c:2085
+msgid "%<GRN wmc2> v.%<WHT %s> [ built on %s ]\n"
+msgstr ""
+
+#: src/wmcoincoin.c:2096
+#, c-format
+msgid "locale used: %s\n"
+msgstr ""
+
+#: src/wmcoincoin.c:2141
+msgid "%<YEL BOARD      >"
+msgstr ""
+
+#: src/wmcoincoin.c:2143
+msgid "%<YEL RSS        >"
+msgstr ""
+
+#: src/wmcoincoin.c:2145
+msgid "%<YEL POP3       >"
+msgstr ""
+
+#: src/wmcoincoin.c:2146 src/wmcoincoin.c:2155
+msgid "%<YEL prrrrrrt    >"
+msgstr ""
+
+#: src/wmcoincoin.c:2150
+msgid "%<YEL tags not encoded  >"
+msgstr ""
+
+#: src/wmcoincoin.c:2152
+msgid "%<YEL tags encoded      >"
+msgstr ""
+
+#: src/wmcoincoin.c:2154
+msgid "%<YEL without underpants>"
+msgstr ""
+
+#: src/wmcoincoin.c:2249
+#, c-format
+msgid "Unable to load font %s , trying iso8859-1\n"
+msgstr ""
+
+#: src/wmcoincoin.c:2253
+#, 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:2835
+#, c-format
+msgid ""
+"The selected element is the <font color=blue>thread</font> '<font "
+"color=#800000>id=%d</font>'"
+msgstr ""
+
+#: src/pinnipede.c:2848
+#, c-format
+msgid ""
+"The selected element is the <font color=blue>useragent</font> '<font "
+"color=#800000>%s</font>'"
+msgstr ""
+
+#: src/pinnipede.c:2858
+#, c-format
+msgid ""
+"The selected element is the <font color=blue>login</font> '<font "
+"color=#800000>%s</font>'"
+msgstr ""
+
+#: src/pinnipede.c:2864
+#, c-format
+msgid ""
+"The selected element is the <font color=blue>message</font> #id=<font "
+"color=#800000>%d</font>"
+msgstr ""
+
+#: src/pinnipede.c:2872
+#, c-format
+msgid ""
+"The selected element is the <font color=blue>word</font> '<font "
+"color=#800000>%s</font>'"
+msgstr ""
+
+#: src/pinnipede.c:2882
+msgid "<b>plop</b>ify it"
+msgstr ""
+
+#: src/pinnipede.c:2883
+msgid "<b>superplop</b>ify it"
+msgstr ""
+
+#: src/pinnipede.c:2884
+msgid "put in <b>boitakon</b>"
+msgstr ""
+
+#: src/pinnipede.c:2885
+msgid "put in <i>hungry</i> <b>boitakon</b>"
+msgstr ""
+
+#: src/pinnipede.c:2889
+msgid "mark it (categ 0)"
+msgstr ""
+
+#: src/pinnipede.c:2890
+msgid "mark it (categ 1)"
+msgstr ""
+
+#: src/pinnipede.c:2891
+msgid "mark it (categ 2)"
+msgstr ""
+
+#: src/pinnipede.c:2892
+msgid "mark it (categ 3)"
+msgstr ""
+
+#: src/pinnipede.c:2893
+msgid "mark it (categ 4)"
+msgstr ""
+
+#: src/pinnipede.c:2894
+msgid "filter it"
+msgstr ""
+
+#: src/pinnipede.c:2898
+msgid "gogole search"
+msgstr ""
+
+#: src/pinnipede.c:2903
+msgid "copy link in X clipboard"
+msgstr ""
+
+#: src/pinnipede.c:2907
+msgid "copy useragent in X clipboard"
+msgstr ""
+
+#: src/pinnipede.c:2910
+msgid "Try to download the correspounding picture"
+msgstr ""
+
+#: src/pinnipede.c:2911
+msgid "Bookmark this picture"
+msgstr ""
+
+#: src/pinnipede.c:2912
+msgid "Remove this picture from bookmarks"
+msgstr ""
+
+#: src/pinnipede.c:2935
+#, c-format
+msgid "remove %s:'<font color=blue>%.15s</font> from hilight categ %d"
+msgstr ""
+
+#: src/pinnipede.c:2941
+msgid "hide the button bar / tabs bar"
+msgstr ""
+
+#: src/pinnipede.c:2942
+msgid "show the button bar / tabs bar"
+msgstr ""
+
+#: src/pinnipede.c:2945
+msgid "Change colors for this site"
+msgstr ""
+
+#: src/pinnipede.c:2950
+msgid "<b>enable</b> the bigornophone"
+msgstr ""
+
+#: src/pinnipede.c:2952
+msgid "<b>disable</b> the bigornophone"
+msgstr ""
+
+#: src/pinnipede.c:2957
+msgid "<b>enable</b> the secondary bigornophone"
+msgstr ""
+
+#: src/pinnipede.c:2959
+msgid "<b>disable</b> the secondary bigornophone"
+msgstr ""
+
+#: src/palmipede.c:343
+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:560
+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:659
+#, c-format
+msgid "wmcoincoin: Failed to set XA_PRIMARY ownership."
+msgstr ""
+
+#: src/palmipede.c:1328
+msgid ""
+"looks like you fucked your options file, no board has be defined: no noard, "
+"no palmipede"
+msgstr ""
+
+#: src/palmipede.c:2062
+msgid "====> <b>Moment "
+msgstr ""
+
+#: src/palmipede.c:2064
+msgid "_o/* <b>BLAM</b>! "
+msgstr ""
+
+#: src/palmipede.c:2066
+msgid "_o/* <b>paf</b>! "
+msgstr ""
+
+#: src/palmipede.c:2068
+msgid "sale chauve "
+msgstr ""
+
+#: src/palmipede.c:2106
+msgid "[:"
+msgstr ""
+
+#: src/palmipede.c:2635
+#, 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:2645
+msgid "Put here the user-agent"
+msgstr ""
+
+#: src/palmipede.c:2648
+msgid "Fold back the palmipede<p>shortcut: <b>escape</b>"
+msgstr ""
+
+#: src/palmipede.c:2649
+msgid "Edit the user-agent"
+msgstr ""
+
+#: src/palmipede.c:2649
+msgid "Edit the message<p>shortcut: <b>Tab</b>"
+msgstr ""
+
+#: src/palmipede.c:2650
+msgid "Insert italic<p>shortcut: <b>Alt-I</b>"
+msgstr ""
+
+#: src/palmipede.c:2651
+msgid "Insert bold<p>shortcut: <b>Alt-B</b>"
+msgstr ""
+
+#: src/palmipede.c:2652
+msgid "Insert teletype tag<p>shortcut: <b>Alt-T</b>"
+msgstr ""
+
+#: src/palmipede.c:2653
+msgid "Overstrike text<p>shortcut: <b>Alt-S</b>"
+msgstr ""
+
+#: src/palmipede.c:2654
+msgid "Underline text<p>shortcut: <b>Alt-U</b>"
+msgstr ""
+
+#: src/palmipede.c:2656
+msgid "Undo<p>shortcut: <b>Ctrl-Z</b> or <b>Ctrl-_</b>"
+msgstr ""
+
+#: src/palmipede.c:2657
+msgid "Clear"
+msgstr ""
+
+#: src/palmipede.c:2658
+msgid "View the [:totoz] picture bookmark in your browser"
+msgstr ""
+
+#: src/palmipede.c:2659
+msgid "Restore the default user-agent"
+msgstr ""
+
+#: src/palmipede.c:2703
+#, c-format
+msgid " by %s"
+msgstr ""
+
+#: src/palmipede.c:2706
+#, c-format
+msgid "at %02d:%02d:%02d%s%s"
+msgstr ""
+
+#: src/palmipede.c:2708
+#, c-format
+msgid "<b>%d</b> times (first reference at %02d:%02d:%02d%s%s)"
+msgstr ""
+
+#: src/palmipede.c:2710
+#, c-format
+msgid "<b>%d</b> times (the url has left the pinnipede)"
+msgstr ""
+
+#: src/palmipede.c:2712
+#, 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:1353
+#, c-format
+msgid "Welcome to the message from '%.20s' in the boitakon\n"
+msgstr ""
+
+#: src/board.c:1687
+msgid "Original message: '%<CYA %s>'\n"
+msgstr ""
+
+#: src/board.c:1688
+msgid "Decoded message: '%<MAG %s>'\n"
+msgstr ""
+
+#: src/board.c:1883
+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:1907
+msgid ""
+"[%<YEL %s>] There is a problem in '%s',  I can't parse it... error:%<YEL %"
+"s>\n"
+msgstr ""
+
+#: src/board.c:1914 src/board.c:2061
+msgid "[%<YEL %s>] Error while downloading '%<YEL %s>' : %<RED %s>\n"
+msgstr ""
+
+#: src/board.c:2051
+msgid ""
+"[%<YEL %s>] There is a problem in '%s', I can't parse it... error:%<YEL %s>\n"
+msgstr ""
+
+#: src/board.c:2109
+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:1084
+#, c-format
+msgid "Invalid value for option '%s' (must be between %d and %d)"
+msgstr ""
+
+#: src/prefs.c:1086
+#, 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:1089
+#, c-format
+msgid ""
+"Invalid value for option '%s': must be a hexadecimal RGB color, with the "
+"RRGGBB format"
+msgstr ""
+
+#: src/prefs.c:1089
+#, c-format
+msgid "Error, the '%s' option only accepts one colour value"
+msgstr ""
+
+#: src/prefs.c:1093
+#, 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:1544
+#, c-format
+msgid "Watch out darling, it's gonnah cut\n"
+msgstr ""
+
+#: src/prefs.c:1545
+#, c-format
+msgid "the option '%s' is valid but not handled, WHAT A SHAME"
+msgstr ""
+
+#: src/prefs.c:1565
+msgid ""
+"I think you're totally dumb with the includes of option files (infinite "
+"recursion ?)\n"
+msgstr ""
+
+#: src/prefs.c:1571
+msgid "You didn't tell me of any filename\n"
+msgstr ""
+
+#: src/prefs.c:1582
+#, c-format
+msgid "Unable to open file '%s' for reading [%s]\n"
+msgstr ""
+
+#: src/prefs.c:1584
+#, c-format
+msgid "Unable to open file '%s' for reading\n"
+msgstr ""
+
+#: src/prefs.c:1606
+#, c-format
+msgid ""
+"line %d: attempt to use a site pref before any 'site:' option has been used\n"
+msgstr ""
+
+#: src/prefs.c:1626
+#, c-format
+msgid "line %d: option '%s' is a site option\n"
+msgstr ""
+
+#: src/prefs.c:1630
+#, c-format
+msgid "line %d: option '%s' can't be used as a site option\n"
+msgstr ""
+
+#: src/prefs.c:1638
+#, c-format
+msgid " [line %d] %s\n"
+msgstr ""
+
+#: src/prefs.c:1643
+#, c-format
+msgid "[line %d] unknown option '%s'"
+msgstr ""
+
+#: src/prefs.c:1731
+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..b419b1c
--- /dev/null
+++ b/scripts/Makefile.in
@@ -0,0 +1,325 @@
+# Makefile.in generated by automake 1.7.9 from Makefile.am.
+# @configure_input@
+
+# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
+# 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@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+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 = :
+host_triplet = @host@
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+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@
+GLIBC2 = @GLIBC2@
+GLIBC21 = @GLIBC21@
+GMSGFMT = @GMSGFMT@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+HAVE_ASPRINTF = @HAVE_ASPRINTF@
+HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@
+HAVE_SNPRINTF = @HAVE_SNPRINTF@
+HAVE_WPRINTF = @HAVE_WPRINTF@
+IMLIB2_CONFIG_IN_PATH = @IMLIB2_CONFIG_IN_PATH@
+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@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+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@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+WMCCC = @WMCCC@
+WMCOINCOIN_PLAYER = @WMCOINCOIN_PLAYER@
+XFT_CFLAGS = @XFT_CFLAGS@
+XFT_LIBS = @XFT_LIBS@
+XGETTEXT = @XGETTEXT@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+ac_pt_PKG_CONFIG = @ac_pt_PKG_CONFIG@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+bin_SCRIPTS = wmcoincoin-totoz-get wmcoincoin-search-cookies wmpanpan
+EXTRA_DIST = wmcoincoin-totoz-get wmcoincoin-search-cookies wmpanpan
+subdir = scripts
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+SCRIPTS = $(bin_SCRIPTS)
+
+DIST_SOURCES =
+DIST_COMMON = $(srcdir)/Makefile.in Makefile.am
+all: all-am
+
+.SUFFIXES:
+$(srcdir)/Makefile.in:  Makefile.am  $(top_srcdir)/configure.ac $(ACLOCAL_M4)
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  scripts/Makefile
+Makefile:  $(srcdir)/Makefile.in  $(top_builddir)/config.status
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
+binSCRIPT_INSTALL = $(INSTALL_SCRIPT)
+install-binSCRIPTS: $(bin_SCRIPTS)
+	@$(NORMAL_INSTALL)
+	$(mkinstalldirs) $(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
+uninstall-info-am:
+tags: TAGS
+TAGS:
+
+ctags: CTAGS
+CTAGS:
+
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+
+top_distdir = ..
+distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+	list='$(DISTFILES)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkinstalldirs) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    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:
+	$(mkinstalldirs) $(DESTDIR)$(bindir)
+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:
+	-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:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-exec-am: install-binSCRIPTS
+
+install-info: install-info-am
+
+install-man:
+
+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 uninstall-info-am
+
+.PHONY: all all-am check check-am clean clean-generic distclean \
+	distclean-generic distdir dvi dvi-am info info-am install \
+	install-am install-binSCRIPTS install-data install-data-am \
+	install-exec install-exec-am install-info install-info-am \
+	install-man 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 uninstall-info-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/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..234dc4d
--- /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://forum.hardware.fr/images/perso/"
+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..e67996f
--- /dev/null
+++ b/src/Makefile.in
@@ -0,0 +1,1824 @@
+# Makefile.in generated by automake 1.7.9 from Makefile.am.
+# @configure_input@
+
+# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
+# 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@
+
+srcdir = @srcdir@
+top_srcdir = @top_srcdir@
+VPATH = @srcdir@
+pkgdatadir = $(datadir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+top_builddir = ..
+
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+INSTALL = @INSTALL@
+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 = :
+host_triplet = @host@
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMDEP_FALSE = @AMDEP_FALSE@
+AMDEP_TRUE = @AMDEP_TRUE@
+AMTAR = @AMTAR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@
+CATOBJEXT = @CATOBJEXT@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+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@
+GLIBC2 = @GLIBC2@
+GLIBC21 = @GLIBC21@
+GMSGFMT = @GMSGFMT@
+GTK_CFLAGS = @GTK_CFLAGS@
+GTK_LIBS = @GTK_LIBS@
+HAVE_ASPRINTF = @HAVE_ASPRINTF@
+HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@
+HAVE_SNPRINTF = @HAVE_SNPRINTF@
+HAVE_WPRINTF = @HAVE_WPRINTF@
+IMLIB2_CONFIG_IN_PATH = @IMLIB2_CONFIG_IN_PATH@
+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@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBINTL@ @LIBS@
+LTLIBICONV = @LTLIBICONV@
+LTLIBINTL = @LTLIBINTL@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKINSTALLDIRS = @MKINSTALLDIRS@
+MSGFMT = @MSGFMT@
+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@
+RANLIB = @RANLIB@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+STRIP = @STRIP@
+USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@
+USE_NLS = @USE_NLS@
+VERSION = @VERSION@
+WMCCC = @WMCCC@
+WMCOINCOIN_PLAYER = @WMCOINCOIN_PLAYER@
+XFT_CFLAGS = @XFT_CFLAGS@
+XFT_LIBS = @XFT_LIBS@
+XGETTEXT = @XGETTEXT@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_RANLIB = @ac_ct_RANLIB@
+ac_ct_STRIP = @ac_ct_STRIP@
+ac_pt_PKG_CONFIG = @ac_pt_PKG_CONFIG@
+am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
+am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+datadir = @datadir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+oldincludedir = @oldincludedir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+
+localedir = $(datadir)/locale
+
+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
+
+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@
+subdir = src
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+EXTRA_PROGRAMS = wmccc$(EXEEXT)
+bin_PROGRAMS = wmcoincoin$(EXEEXT) @WMCCC@
+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_LDFLAGS =
+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_LDFLAGS =
+
+DEFAULT_INCLUDES =  -I. -I$(srcdir) -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/depcomp
+am__depfiles_maybe = depfiles
+ at AMDEP_TRUE@DEP_FILES = ./$(DEPDIR)/wmccc-coin_util.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/wmccc-keylist.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/wmccc-md5.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/wmccc-myprintf.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/wmccc-prefs.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/wmccc-wmccc.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/wmccc-wmccc_callbacks.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/wmccc-wmccc_dialogs.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/wmccc-wmccc_interface.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/wmccc-wmccc_save_prefs.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/wmccc-wmccc_support.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/wmcoincoin-balloon.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/wmcoincoin-balltrap.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/wmcoincoin-base64.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/wmcoincoin-board.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/wmcoincoin-board_pop3.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/wmcoincoin-board_rss.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/wmcoincoin-board_util.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/wmcoincoin-cc_queue.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/wmcoincoin-coin_util.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/wmcoincoin-coin_xutil.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/wmcoincoin-dock.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/wmcoincoin-fake-getaddrinfo.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/wmcoincoin-fake-getnameinfo.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/wmcoincoin-fontcoincoin.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/wmcoincoin-http.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/wmcoincoin-http_unix.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/wmcoincoin-http_win.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/wmcoincoin-inet_aton.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/wmcoincoin-kbcoincoin.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/wmcoincoin-keylist.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/wmcoincoin-md5.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/wmcoincoin-msgbox.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/wmcoincoin-myprintf.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/wmcoincoin-palmipede.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/wmcoincoin-picohtml.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/wmcoincoin-pinnipede.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/wmcoincoin-pinnipede_pdfm.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/wmcoincoin-pinnipede_totoz.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/wmcoincoin-pinnipede_widgets.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/wmcoincoin-plopup.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/wmcoincoin-prefs.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/wmcoincoin-prefs_gestion.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/wmcoincoin-raster.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/wmcoincoin-regexp.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/wmcoincoin-scrollcoin.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/wmcoincoin-site.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/wmcoincoin-spell_coin.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/wmcoincoin-swallowcoincoin.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/wmcoincoin-totoz_bookmark.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/wmcoincoin-troll_detector.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/wmcoincoin-wmcoincoin.Po \
+ at AMDEP_TRUE@	./$(DEPDIR)/wmcoincoin-xmlcoincoin.Po
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+DIST_SOURCES = $(wmccc_SOURCES) $(wmcoincoin_SOURCES) \
+	$(EXTRA_wmcoincoin_SOURCES)
+DIST_COMMON = $(srcdir)/Makefile.in Makefile.am
+SOURCES = $(wmccc_SOURCES) $(wmcoincoin_SOURCES) $(EXTRA_wmcoincoin_SOURCES)
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .o .obj
+$(srcdir)/Makefile.in:  Makefile.am  $(top_srcdir)/configure.ac $(ACLOCAL_M4)
+	cd $(top_srcdir) && \
+	  $(AUTOMAKE) --gnu  src/Makefile
+Makefile:  $(srcdir)/Makefile.in  $(top_builddir)/config.status
+	cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)
+binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
+install-binPROGRAMS: $(bin_PROGRAMS)
+	@$(NORMAL_INSTALL)
+	$(mkinstalldirs) $(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)
+	$(LINK) $(wmccc_LDFLAGS) $(wmccc_OBJECTS) $(wmccc_LDADD) $(LIBS)
+wmcoincoin$(EXEEXT): $(wmcoincoin_OBJECTS) $(wmcoincoin_DEPENDENCIES) 
+	@rm -f wmcoincoin$(EXEEXT)
+	$(LINK) $(wmcoincoin_LDFLAGS) $(wmcoincoin_OBJECTS) $(wmcoincoin_LDADD) $(LIBS)
+
+mostlyclean-compile:
+	-rm -f *.$(OBJEXT) core *.core
+
+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@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o $@ `test -f '$<' || echo '$(srcdir)/'`$<; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `test -f '$<' || echo '$(srcdir)/'`$<
+
+.c.obj:
+ at am__fastdepCC_TRUE@	if $(COMPILE) -MT $@ -MD -MP -MF "$(DEPDIR)/$*.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o $@ `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/$*.Tpo" "$(DEPDIR)/$*.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/$*.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/$*.Po' tmpdepfile='$(DEPDIR)/$*.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+ at am__fastdepCC_FALSE@	$(COMPILE) -c `if test -f '$<'; then $(CYGPATH_W) '$<'; else $(CYGPATH_W) '$(srcdir)/$<'; fi`
+
+wmccc-wmccc.o: wmccc.c
+ at am__fastdepCC_TRUE@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -MT wmccc-wmccc.o -MD -MP -MF "$(DEPDIR)/wmccc-wmccc.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o wmccc-wmccc.o `test -f 'wmccc.c' || echo '$(srcdir)/'`wmccc.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/wmccc-wmccc.Tpo" "$(DEPDIR)/wmccc-wmccc.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmccc-wmccc.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='wmccc.c' object='wmccc-wmccc.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmccc-wmccc.Po' tmpdepfile='$(DEPDIR)/wmccc-wmccc.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -MT wmccc-wmccc.obj -MD -MP -MF "$(DEPDIR)/wmccc-wmccc.Tpo" \
+ at am__fastdepCC_TRUE@	  -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@	then mv -f "$(DEPDIR)/wmccc-wmccc.Tpo" "$(DEPDIR)/wmccc-wmccc.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmccc-wmccc.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='wmccc.c' object='wmccc-wmccc.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmccc-wmccc.Po' tmpdepfile='$(DEPDIR)/wmccc-wmccc.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -MT wmccc-wmccc_dialogs.o -MD -MP -MF "$(DEPDIR)/wmccc-wmccc_dialogs.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o wmccc-wmccc_dialogs.o `test -f 'wmccc_dialogs.c' || echo '$(srcdir)/'`wmccc_dialogs.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/wmccc-wmccc_dialogs.Tpo" "$(DEPDIR)/wmccc-wmccc_dialogs.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmccc-wmccc_dialogs.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='wmccc_dialogs.c' object='wmccc-wmccc_dialogs.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmccc-wmccc_dialogs.Po' tmpdepfile='$(DEPDIR)/wmccc-wmccc_dialogs.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -MT wmccc-wmccc_dialogs.obj -MD -MP -MF "$(DEPDIR)/wmccc-wmccc_dialogs.Tpo" \
+ at am__fastdepCC_TRUE@	  -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@	then mv -f "$(DEPDIR)/wmccc-wmccc_dialogs.Tpo" "$(DEPDIR)/wmccc-wmccc_dialogs.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmccc-wmccc_dialogs.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='wmccc_dialogs.c' object='wmccc-wmccc_dialogs.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmccc-wmccc_dialogs.Po' tmpdepfile='$(DEPDIR)/wmccc-wmccc_dialogs.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -MT wmccc-wmccc_support.o -MD -MP -MF "$(DEPDIR)/wmccc-wmccc_support.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o wmccc-wmccc_support.o `test -f 'wmccc_support.c' || echo '$(srcdir)/'`wmccc_support.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/wmccc-wmccc_support.Tpo" "$(DEPDIR)/wmccc-wmccc_support.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmccc-wmccc_support.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='wmccc_support.c' object='wmccc-wmccc_support.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmccc-wmccc_support.Po' tmpdepfile='$(DEPDIR)/wmccc-wmccc_support.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -MT wmccc-wmccc_support.obj -MD -MP -MF "$(DEPDIR)/wmccc-wmccc_support.Tpo" \
+ at am__fastdepCC_TRUE@	  -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@	then mv -f "$(DEPDIR)/wmccc-wmccc_support.Tpo" "$(DEPDIR)/wmccc-wmccc_support.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmccc-wmccc_support.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='wmccc_support.c' object='wmccc-wmccc_support.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmccc-wmccc_support.Po' tmpdepfile='$(DEPDIR)/wmccc-wmccc_support.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -MT wmccc-wmccc_interface.o -MD -MP -MF "$(DEPDIR)/wmccc-wmccc_interface.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o wmccc-wmccc_interface.o `test -f 'wmccc_interface.c' || echo '$(srcdir)/'`wmccc_interface.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/wmccc-wmccc_interface.Tpo" "$(DEPDIR)/wmccc-wmccc_interface.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmccc-wmccc_interface.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='wmccc_interface.c' object='wmccc-wmccc_interface.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmccc-wmccc_interface.Po' tmpdepfile='$(DEPDIR)/wmccc-wmccc_interface.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -MT wmccc-wmccc_interface.obj -MD -MP -MF "$(DEPDIR)/wmccc-wmccc_interface.Tpo" \
+ at am__fastdepCC_TRUE@	  -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@	then mv -f "$(DEPDIR)/wmccc-wmccc_interface.Tpo" "$(DEPDIR)/wmccc-wmccc_interface.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmccc-wmccc_interface.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='wmccc_interface.c' object='wmccc-wmccc_interface.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmccc-wmccc_interface.Po' tmpdepfile='$(DEPDIR)/wmccc-wmccc_interface.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -MT wmccc-wmccc_callbacks.o -MD -MP -MF "$(DEPDIR)/wmccc-wmccc_callbacks.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o wmccc-wmccc_callbacks.o `test -f 'wmccc_callbacks.c' || echo '$(srcdir)/'`wmccc_callbacks.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/wmccc-wmccc_callbacks.Tpo" "$(DEPDIR)/wmccc-wmccc_callbacks.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmccc-wmccc_callbacks.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='wmccc_callbacks.c' object='wmccc-wmccc_callbacks.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmccc-wmccc_callbacks.Po' tmpdepfile='$(DEPDIR)/wmccc-wmccc_callbacks.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -MT wmccc-wmccc_callbacks.obj -MD -MP -MF "$(DEPDIR)/wmccc-wmccc_callbacks.Tpo" \
+ at am__fastdepCC_TRUE@	  -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@	then mv -f "$(DEPDIR)/wmccc-wmccc_callbacks.Tpo" "$(DEPDIR)/wmccc-wmccc_callbacks.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmccc-wmccc_callbacks.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='wmccc_callbacks.c' object='wmccc-wmccc_callbacks.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmccc-wmccc_callbacks.Po' tmpdepfile='$(DEPDIR)/wmccc-wmccc_callbacks.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(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" \
+ at am__fastdepCC_TRUE@	  -c -o wmccc-wmccc_save_prefs.o `test -f 'wmccc_save_prefs.c' || echo '$(srcdir)/'`wmccc_save_prefs.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/wmccc-wmccc_save_prefs.Tpo" "$(DEPDIR)/wmccc-wmccc_save_prefs.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmccc-wmccc_save_prefs.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ 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@	depfile='$(DEPDIR)/wmccc-wmccc_save_prefs.Po' tmpdepfile='$(DEPDIR)/wmccc-wmccc_save_prefs.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(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" \
+ at am__fastdepCC_TRUE@	  -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@	then mv -f "$(DEPDIR)/wmccc-wmccc_save_prefs.Tpo" "$(DEPDIR)/wmccc-wmccc_save_prefs.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmccc-wmccc_save_prefs.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ 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@	depfile='$(DEPDIR)/wmccc-wmccc_save_prefs.Po' tmpdepfile='$(DEPDIR)/wmccc-wmccc_save_prefs.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -MT wmccc-myprintf.o -MD -MP -MF "$(DEPDIR)/wmccc-myprintf.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o wmccc-myprintf.o `test -f 'myprintf.c' || echo '$(srcdir)/'`myprintf.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/wmccc-myprintf.Tpo" "$(DEPDIR)/wmccc-myprintf.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmccc-myprintf.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='myprintf.c' object='wmccc-myprintf.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmccc-myprintf.Po' tmpdepfile='$(DEPDIR)/wmccc-myprintf.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -MT wmccc-myprintf.obj -MD -MP -MF "$(DEPDIR)/wmccc-myprintf.Tpo" \
+ at am__fastdepCC_TRUE@	  -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@	then mv -f "$(DEPDIR)/wmccc-myprintf.Tpo" "$(DEPDIR)/wmccc-myprintf.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmccc-myprintf.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='myprintf.c' object='wmccc-myprintf.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmccc-myprintf.Po' tmpdepfile='$(DEPDIR)/wmccc-myprintf.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -MT wmccc-prefs.o -MD -MP -MF "$(DEPDIR)/wmccc-prefs.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o wmccc-prefs.o `test -f 'prefs.c' || echo '$(srcdir)/'`prefs.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/wmccc-prefs.Tpo" "$(DEPDIR)/wmccc-prefs.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmccc-prefs.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='prefs.c' object='wmccc-prefs.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmccc-prefs.Po' tmpdepfile='$(DEPDIR)/wmccc-prefs.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -MT wmccc-prefs.obj -MD -MP -MF "$(DEPDIR)/wmccc-prefs.Tpo" \
+ at am__fastdepCC_TRUE@	  -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@	then mv -f "$(DEPDIR)/wmccc-prefs.Tpo" "$(DEPDIR)/wmccc-prefs.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmccc-prefs.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='prefs.c' object='wmccc-prefs.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmccc-prefs.Po' tmpdepfile='$(DEPDIR)/wmccc-prefs.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -MT wmccc-md5.o -MD -MP -MF "$(DEPDIR)/wmccc-md5.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o wmccc-md5.o `test -f 'md5.c' || echo '$(srcdir)/'`md5.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/wmccc-md5.Tpo" "$(DEPDIR)/wmccc-md5.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmccc-md5.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='md5.c' object='wmccc-md5.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmccc-md5.Po' tmpdepfile='$(DEPDIR)/wmccc-md5.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -MT wmccc-md5.obj -MD -MP -MF "$(DEPDIR)/wmccc-md5.Tpo" \
+ at am__fastdepCC_TRUE@	  -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@	then mv -f "$(DEPDIR)/wmccc-md5.Tpo" "$(DEPDIR)/wmccc-md5.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmccc-md5.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='md5.c' object='wmccc-md5.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmccc-md5.Po' tmpdepfile='$(DEPDIR)/wmccc-md5.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -MT wmccc-coin_util.o -MD -MP -MF "$(DEPDIR)/wmccc-coin_util.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o wmccc-coin_util.o `test -f 'coin_util.c' || echo '$(srcdir)/'`coin_util.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/wmccc-coin_util.Tpo" "$(DEPDIR)/wmccc-coin_util.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmccc-coin_util.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='coin_util.c' object='wmccc-coin_util.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmccc-coin_util.Po' tmpdepfile='$(DEPDIR)/wmccc-coin_util.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -MT wmccc-coin_util.obj -MD -MP -MF "$(DEPDIR)/wmccc-coin_util.Tpo" \
+ at am__fastdepCC_TRUE@	  -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@	then mv -f "$(DEPDIR)/wmccc-coin_util.Tpo" "$(DEPDIR)/wmccc-coin_util.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmccc-coin_util.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='coin_util.c' object='wmccc-coin_util.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmccc-coin_util.Po' tmpdepfile='$(DEPDIR)/wmccc-coin_util.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -MT wmccc-keylist.o -MD -MP -MF "$(DEPDIR)/wmccc-keylist.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o wmccc-keylist.o `test -f 'keylist.c' || echo '$(srcdir)/'`keylist.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/wmccc-keylist.Tpo" "$(DEPDIR)/wmccc-keylist.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmccc-keylist.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='keylist.c' object='wmccc-keylist.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmccc-keylist.Po' tmpdepfile='$(DEPDIR)/wmccc-keylist.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmccc_CFLAGS) $(CFLAGS) -MT wmccc-keylist.obj -MD -MP -MF "$(DEPDIR)/wmccc-keylist.Tpo" \
+ at am__fastdepCC_TRUE@	  -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@	then mv -f "$(DEPDIR)/wmccc-keylist.Tpo" "$(DEPDIR)/wmccc-keylist.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmccc-keylist.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='keylist.c' object='wmccc-keylist.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmccc-keylist.Po' tmpdepfile='$(DEPDIR)/wmccc-keylist.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-cc_queue.o -MD -MP -MF "$(DEPDIR)/wmcoincoin-cc_queue.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o wmcoincoin-cc_queue.o `test -f 'cc_queue.c' || echo '$(srcdir)/'`cc_queue.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/wmcoincoin-cc_queue.Tpo" "$(DEPDIR)/wmcoincoin-cc_queue.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-cc_queue.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='cc_queue.c' object='wmcoincoin-cc_queue.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-cc_queue.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-cc_queue.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-cc_queue.obj -MD -MP -MF "$(DEPDIR)/wmcoincoin-cc_queue.Tpo" \
+ at am__fastdepCC_TRUE@	  -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@	then mv -f "$(DEPDIR)/wmcoincoin-cc_queue.Tpo" "$(DEPDIR)/wmcoincoin-cc_queue.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-cc_queue.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='cc_queue.c' object='wmcoincoin-cc_queue.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-cc_queue.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-cc_queue.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-plopup.o -MD -MP -MF "$(DEPDIR)/wmcoincoin-plopup.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o wmcoincoin-plopup.o `test -f 'plopup.c' || echo '$(srcdir)/'`plopup.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/wmcoincoin-plopup.Tpo" "$(DEPDIR)/wmcoincoin-plopup.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-plopup.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='plopup.c' object='wmcoincoin-plopup.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-plopup.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-plopup.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-plopup.obj -MD -MP -MF "$(DEPDIR)/wmcoincoin-plopup.Tpo" \
+ at am__fastdepCC_TRUE@	  -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@	then mv -f "$(DEPDIR)/wmcoincoin-plopup.Tpo" "$(DEPDIR)/wmcoincoin-plopup.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-plopup.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='plopup.c' object='wmcoincoin-plopup.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-plopup.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-plopup.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-md5.o -MD -MP -MF "$(DEPDIR)/wmcoincoin-md5.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o wmcoincoin-md5.o `test -f 'md5.c' || echo '$(srcdir)/'`md5.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/wmcoincoin-md5.Tpo" "$(DEPDIR)/wmcoincoin-md5.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-md5.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='md5.c' object='wmcoincoin-md5.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-md5.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-md5.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-md5.obj -MD -MP -MF "$(DEPDIR)/wmcoincoin-md5.Tpo" \
+ at am__fastdepCC_TRUE@	  -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@	then mv -f "$(DEPDIR)/wmcoincoin-md5.Tpo" "$(DEPDIR)/wmcoincoin-md5.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-md5.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='md5.c' object='wmcoincoin-md5.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-md5.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-md5.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-base64.o -MD -MP -MF "$(DEPDIR)/wmcoincoin-base64.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o wmcoincoin-base64.o `test -f 'base64.c' || echo '$(srcdir)/'`base64.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/wmcoincoin-base64.Tpo" "$(DEPDIR)/wmcoincoin-base64.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-base64.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='base64.c' object='wmcoincoin-base64.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-base64.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-base64.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-base64.obj -MD -MP -MF "$(DEPDIR)/wmcoincoin-base64.Tpo" \
+ at am__fastdepCC_TRUE@	  -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@	then mv -f "$(DEPDIR)/wmcoincoin-base64.Tpo" "$(DEPDIR)/wmcoincoin-base64.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-base64.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='base64.c' object='wmcoincoin-base64.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-base64.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-base64.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-board_util.o -MD -MP -MF "$(DEPDIR)/wmcoincoin-board_util.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o wmcoincoin-board_util.o `test -f 'board_util.c' || echo '$(srcdir)/'`board_util.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/wmcoincoin-board_util.Tpo" "$(DEPDIR)/wmcoincoin-board_util.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-board_util.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='board_util.c' object='wmcoincoin-board_util.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-board_util.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-board_util.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-board_util.obj -MD -MP -MF "$(DEPDIR)/wmcoincoin-board_util.Tpo" \
+ at am__fastdepCC_TRUE@	  -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@	then mv -f "$(DEPDIR)/wmcoincoin-board_util.Tpo" "$(DEPDIR)/wmcoincoin-board_util.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-board_util.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='board_util.c' object='wmcoincoin-board_util.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-board_util.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-board_util.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-xmlcoincoin.o -MD -MP -MF "$(DEPDIR)/wmcoincoin-xmlcoincoin.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o wmcoincoin-xmlcoincoin.o `test -f 'xmlcoincoin.c' || echo '$(srcdir)/'`xmlcoincoin.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/wmcoincoin-xmlcoincoin.Tpo" "$(DEPDIR)/wmcoincoin-xmlcoincoin.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-xmlcoincoin.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='xmlcoincoin.c' object='wmcoincoin-xmlcoincoin.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-xmlcoincoin.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-xmlcoincoin.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-xmlcoincoin.obj -MD -MP -MF "$(DEPDIR)/wmcoincoin-xmlcoincoin.Tpo" \
+ at am__fastdepCC_TRUE@	  -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@	then mv -f "$(DEPDIR)/wmcoincoin-xmlcoincoin.Tpo" "$(DEPDIR)/wmcoincoin-xmlcoincoin.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-xmlcoincoin.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='xmlcoincoin.c' object='wmcoincoin-xmlcoincoin.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-xmlcoincoin.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-xmlcoincoin.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-regexp.o -MD -MP -MF "$(DEPDIR)/wmcoincoin-regexp.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o wmcoincoin-regexp.o `test -f 'regexp.c' || echo '$(srcdir)/'`regexp.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/wmcoincoin-regexp.Tpo" "$(DEPDIR)/wmcoincoin-regexp.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-regexp.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='regexp.c' object='wmcoincoin-regexp.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-regexp.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-regexp.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-regexp.obj -MD -MP -MF "$(DEPDIR)/wmcoincoin-regexp.Tpo" \
+ at am__fastdepCC_TRUE@	  -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@	then mv -f "$(DEPDIR)/wmcoincoin-regexp.Tpo" "$(DEPDIR)/wmcoincoin-regexp.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-regexp.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='regexp.c' object='wmcoincoin-regexp.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-regexp.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-regexp.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-myprintf.o -MD -MP -MF "$(DEPDIR)/wmcoincoin-myprintf.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o wmcoincoin-myprintf.o `test -f 'myprintf.c' || echo '$(srcdir)/'`myprintf.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/wmcoincoin-myprintf.Tpo" "$(DEPDIR)/wmcoincoin-myprintf.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-myprintf.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='myprintf.c' object='wmcoincoin-myprintf.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-myprintf.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-myprintf.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-myprintf.obj -MD -MP -MF "$(DEPDIR)/wmcoincoin-myprintf.Tpo" \
+ at am__fastdepCC_TRUE@	  -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@	then mv -f "$(DEPDIR)/wmcoincoin-myprintf.Tpo" "$(DEPDIR)/wmcoincoin-myprintf.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-myprintf.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='myprintf.c' object='wmcoincoin-myprintf.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-myprintf.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-myprintf.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-raster.o -MD -MP -MF "$(DEPDIR)/wmcoincoin-raster.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o wmcoincoin-raster.o `test -f 'raster.c' || echo '$(srcdir)/'`raster.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/wmcoincoin-raster.Tpo" "$(DEPDIR)/wmcoincoin-raster.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-raster.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='raster.c' object='wmcoincoin-raster.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-raster.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-raster.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-raster.obj -MD -MP -MF "$(DEPDIR)/wmcoincoin-raster.Tpo" \
+ at am__fastdepCC_TRUE@	  -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@	then mv -f "$(DEPDIR)/wmcoincoin-raster.Tpo" "$(DEPDIR)/wmcoincoin-raster.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-raster.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='raster.c' object='wmcoincoin-raster.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-raster.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-raster.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-fontcoincoin.o -MD -MP -MF "$(DEPDIR)/wmcoincoin-fontcoincoin.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o wmcoincoin-fontcoincoin.o `test -f 'fontcoincoin.c' || echo '$(srcdir)/'`fontcoincoin.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/wmcoincoin-fontcoincoin.Tpo" "$(DEPDIR)/wmcoincoin-fontcoincoin.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-fontcoincoin.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fontcoincoin.c' object='wmcoincoin-fontcoincoin.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-fontcoincoin.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-fontcoincoin.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-fontcoincoin.obj -MD -MP -MF "$(DEPDIR)/wmcoincoin-fontcoincoin.Tpo" \
+ at am__fastdepCC_TRUE@	  -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@	then mv -f "$(DEPDIR)/wmcoincoin-fontcoincoin.Tpo" "$(DEPDIR)/wmcoincoin-fontcoincoin.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-fontcoincoin.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fontcoincoin.c' object='wmcoincoin-fontcoincoin.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-fontcoincoin.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-fontcoincoin.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-kbcoincoin.o -MD -MP -MF "$(DEPDIR)/wmcoincoin-kbcoincoin.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o wmcoincoin-kbcoincoin.o `test -f 'kbcoincoin.c' || echo '$(srcdir)/'`kbcoincoin.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/wmcoincoin-kbcoincoin.Tpo" "$(DEPDIR)/wmcoincoin-kbcoincoin.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-kbcoincoin.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='kbcoincoin.c' object='wmcoincoin-kbcoincoin.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-kbcoincoin.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-kbcoincoin.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-kbcoincoin.obj -MD -MP -MF "$(DEPDIR)/wmcoincoin-kbcoincoin.Tpo" \
+ at am__fastdepCC_TRUE@	  -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@	then mv -f "$(DEPDIR)/wmcoincoin-kbcoincoin.Tpo" "$(DEPDIR)/wmcoincoin-kbcoincoin.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-kbcoincoin.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='kbcoincoin.c' object='wmcoincoin-kbcoincoin.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-kbcoincoin.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-kbcoincoin.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-swallowcoincoin.o -MD -MP -MF "$(DEPDIR)/wmcoincoin-swallowcoincoin.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o wmcoincoin-swallowcoincoin.o `test -f 'swallowcoincoin.c' || echo '$(srcdir)/'`swallowcoincoin.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/wmcoincoin-swallowcoincoin.Tpo" "$(DEPDIR)/wmcoincoin-swallowcoincoin.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-swallowcoincoin.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='swallowcoincoin.c' object='wmcoincoin-swallowcoincoin.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-swallowcoincoin.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-swallowcoincoin.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-swallowcoincoin.obj -MD -MP -MF "$(DEPDIR)/wmcoincoin-swallowcoincoin.Tpo" \
+ at am__fastdepCC_TRUE@	  -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@	then mv -f "$(DEPDIR)/wmcoincoin-swallowcoincoin.Tpo" "$(DEPDIR)/wmcoincoin-swallowcoincoin.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-swallowcoincoin.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='swallowcoincoin.c' object='wmcoincoin-swallowcoincoin.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-swallowcoincoin.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-swallowcoincoin.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-troll_detector.o -MD -MP -MF "$(DEPDIR)/wmcoincoin-troll_detector.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o wmcoincoin-troll_detector.o `test -f 'troll_detector.c' || echo '$(srcdir)/'`troll_detector.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/wmcoincoin-troll_detector.Tpo" "$(DEPDIR)/wmcoincoin-troll_detector.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-troll_detector.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='troll_detector.c' object='wmcoincoin-troll_detector.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-troll_detector.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-troll_detector.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-troll_detector.obj -MD -MP -MF "$(DEPDIR)/wmcoincoin-troll_detector.Tpo" \
+ at am__fastdepCC_TRUE@	  -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@	then mv -f "$(DEPDIR)/wmcoincoin-troll_detector.Tpo" "$(DEPDIR)/wmcoincoin-troll_detector.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-troll_detector.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='troll_detector.c' object='wmcoincoin-troll_detector.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-troll_detector.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-troll_detector.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-pinnipede.o -MD -MP -MF "$(DEPDIR)/wmcoincoin-pinnipede.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o wmcoincoin-pinnipede.o `test -f 'pinnipede.c' || echo '$(srcdir)/'`pinnipede.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/wmcoincoin-pinnipede.Tpo" "$(DEPDIR)/wmcoincoin-pinnipede.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-pinnipede.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='pinnipede.c' object='wmcoincoin-pinnipede.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-pinnipede.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-pinnipede.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-pinnipede.obj -MD -MP -MF "$(DEPDIR)/wmcoincoin-pinnipede.Tpo" \
+ at am__fastdepCC_TRUE@	  -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@	then mv -f "$(DEPDIR)/wmcoincoin-pinnipede.Tpo" "$(DEPDIR)/wmcoincoin-pinnipede.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-pinnipede.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='pinnipede.c' object='wmcoincoin-pinnipede.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-pinnipede.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-pinnipede.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-pinnipede_widgets.o -MD -MP -MF "$(DEPDIR)/wmcoincoin-pinnipede_widgets.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o wmcoincoin-pinnipede_widgets.o `test -f 'pinnipede_widgets.c' || echo '$(srcdir)/'`pinnipede_widgets.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/wmcoincoin-pinnipede_widgets.Tpo" "$(DEPDIR)/wmcoincoin-pinnipede_widgets.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-pinnipede_widgets.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='pinnipede_widgets.c' object='wmcoincoin-pinnipede_widgets.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-pinnipede_widgets.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-pinnipede_widgets.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-pinnipede_widgets.obj -MD -MP -MF "$(DEPDIR)/wmcoincoin-pinnipede_widgets.Tpo" \
+ at am__fastdepCC_TRUE@	  -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@	then mv -f "$(DEPDIR)/wmcoincoin-pinnipede_widgets.Tpo" "$(DEPDIR)/wmcoincoin-pinnipede_widgets.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-pinnipede_widgets.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='pinnipede_widgets.c' object='wmcoincoin-pinnipede_widgets.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-pinnipede_widgets.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-pinnipede_widgets.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-pinnipede_pdfm.o -MD -MP -MF "$(DEPDIR)/wmcoincoin-pinnipede_pdfm.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o wmcoincoin-pinnipede_pdfm.o `test -f 'pinnipede_pdfm.c' || echo '$(srcdir)/'`pinnipede_pdfm.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/wmcoincoin-pinnipede_pdfm.Tpo" "$(DEPDIR)/wmcoincoin-pinnipede_pdfm.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-pinnipede_pdfm.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='pinnipede_pdfm.c' object='wmcoincoin-pinnipede_pdfm.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-pinnipede_pdfm.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-pinnipede_pdfm.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-pinnipede_pdfm.obj -MD -MP -MF "$(DEPDIR)/wmcoincoin-pinnipede_pdfm.Tpo" \
+ at am__fastdepCC_TRUE@	  -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@	then mv -f "$(DEPDIR)/wmcoincoin-pinnipede_pdfm.Tpo" "$(DEPDIR)/wmcoincoin-pinnipede_pdfm.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-pinnipede_pdfm.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='pinnipede_pdfm.c' object='wmcoincoin-pinnipede_pdfm.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-pinnipede_pdfm.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-pinnipede_pdfm.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-pinnipede_totoz.o -MD -MP -MF "$(DEPDIR)/wmcoincoin-pinnipede_totoz.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o wmcoincoin-pinnipede_totoz.o `test -f 'pinnipede_totoz.c' || echo '$(srcdir)/'`pinnipede_totoz.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/wmcoincoin-pinnipede_totoz.Tpo" "$(DEPDIR)/wmcoincoin-pinnipede_totoz.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-pinnipede_totoz.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='pinnipede_totoz.c' object='wmcoincoin-pinnipede_totoz.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-pinnipede_totoz.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-pinnipede_totoz.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-pinnipede_totoz.obj -MD -MP -MF "$(DEPDIR)/wmcoincoin-pinnipede_totoz.Tpo" \
+ at am__fastdepCC_TRUE@	  -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@	then mv -f "$(DEPDIR)/wmcoincoin-pinnipede_totoz.Tpo" "$(DEPDIR)/wmcoincoin-pinnipede_totoz.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-pinnipede_totoz.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='pinnipede_totoz.c' object='wmcoincoin-pinnipede_totoz.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-pinnipede_totoz.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-pinnipede_totoz.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-totoz_bookmark.o -MD -MP -MF "$(DEPDIR)/wmcoincoin-totoz_bookmark.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o wmcoincoin-totoz_bookmark.o `test -f 'totoz_bookmark.c' || echo '$(srcdir)/'`totoz_bookmark.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/wmcoincoin-totoz_bookmark.Tpo" "$(DEPDIR)/wmcoincoin-totoz_bookmark.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-totoz_bookmark.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='totoz_bookmark.c' object='wmcoincoin-totoz_bookmark.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-totoz_bookmark.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-totoz_bookmark.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-totoz_bookmark.obj -MD -MP -MF "$(DEPDIR)/wmcoincoin-totoz_bookmark.Tpo" \
+ at am__fastdepCC_TRUE@	  -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@	then mv -f "$(DEPDIR)/wmcoincoin-totoz_bookmark.Tpo" "$(DEPDIR)/wmcoincoin-totoz_bookmark.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-totoz_bookmark.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='totoz_bookmark.c' object='wmcoincoin-totoz_bookmark.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-totoz_bookmark.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-totoz_bookmark.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-palmipede.o -MD -MP -MF "$(DEPDIR)/wmcoincoin-palmipede.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o wmcoincoin-palmipede.o `test -f 'palmipede.c' || echo '$(srcdir)/'`palmipede.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/wmcoincoin-palmipede.Tpo" "$(DEPDIR)/wmcoincoin-palmipede.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-palmipede.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='palmipede.c' object='wmcoincoin-palmipede.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-palmipede.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-palmipede.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-palmipede.obj -MD -MP -MF "$(DEPDIR)/wmcoincoin-palmipede.Tpo" \
+ at am__fastdepCC_TRUE@	  -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@	then mv -f "$(DEPDIR)/wmcoincoin-palmipede.Tpo" "$(DEPDIR)/wmcoincoin-palmipede.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-palmipede.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='palmipede.c' object='wmcoincoin-palmipede.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-palmipede.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-palmipede.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-dock.o -MD -MP -MF "$(DEPDIR)/wmcoincoin-dock.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o wmcoincoin-dock.o `test -f 'dock.c' || echo '$(srcdir)/'`dock.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/wmcoincoin-dock.Tpo" "$(DEPDIR)/wmcoincoin-dock.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-dock.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='dock.c' object='wmcoincoin-dock.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-dock.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-dock.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-dock.obj -MD -MP -MF "$(DEPDIR)/wmcoincoin-dock.Tpo" \
+ at am__fastdepCC_TRUE@	  -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@	then mv -f "$(DEPDIR)/wmcoincoin-dock.Tpo" "$(DEPDIR)/wmcoincoin-dock.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-dock.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='dock.c' object='wmcoincoin-dock.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-dock.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-dock.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-board.o -MD -MP -MF "$(DEPDIR)/wmcoincoin-board.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o wmcoincoin-board.o `test -f 'board.c' || echo '$(srcdir)/'`board.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/wmcoincoin-board.Tpo" "$(DEPDIR)/wmcoincoin-board.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-board.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='board.c' object='wmcoincoin-board.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-board.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-board.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-board.obj -MD -MP -MF "$(DEPDIR)/wmcoincoin-board.Tpo" \
+ at am__fastdepCC_TRUE@	  -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@	then mv -f "$(DEPDIR)/wmcoincoin-board.Tpo" "$(DEPDIR)/wmcoincoin-board.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-board.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='board.c' object='wmcoincoin-board.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-board.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-board.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-board_rss.o -MD -MP -MF "$(DEPDIR)/wmcoincoin-board_rss.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o wmcoincoin-board_rss.o `test -f 'board_rss.c' || echo '$(srcdir)/'`board_rss.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/wmcoincoin-board_rss.Tpo" "$(DEPDIR)/wmcoincoin-board_rss.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-board_rss.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='board_rss.c' object='wmcoincoin-board_rss.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-board_rss.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-board_rss.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-board_rss.obj -MD -MP -MF "$(DEPDIR)/wmcoincoin-board_rss.Tpo" \
+ at am__fastdepCC_TRUE@	  -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@	then mv -f "$(DEPDIR)/wmcoincoin-board_rss.Tpo" "$(DEPDIR)/wmcoincoin-board_rss.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-board_rss.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='board_rss.c' object='wmcoincoin-board_rss.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-board_rss.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-board_rss.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-board_pop3.o -MD -MP -MF "$(DEPDIR)/wmcoincoin-board_pop3.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o wmcoincoin-board_pop3.o `test -f 'board_pop3.c' || echo '$(srcdir)/'`board_pop3.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/wmcoincoin-board_pop3.Tpo" "$(DEPDIR)/wmcoincoin-board_pop3.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-board_pop3.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='board_pop3.c' object='wmcoincoin-board_pop3.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-board_pop3.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-board_pop3.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-board_pop3.obj -MD -MP -MF "$(DEPDIR)/wmcoincoin-board_pop3.Tpo" \
+ at am__fastdepCC_TRUE@	  -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@	then mv -f "$(DEPDIR)/wmcoincoin-board_pop3.Tpo" "$(DEPDIR)/wmcoincoin-board_pop3.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-board_pop3.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='board_pop3.c' object='wmcoincoin-board_pop3.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-board_pop3.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-board_pop3.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-site.o -MD -MP -MF "$(DEPDIR)/wmcoincoin-site.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o wmcoincoin-site.o `test -f 'site.c' || echo '$(srcdir)/'`site.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/wmcoincoin-site.Tpo" "$(DEPDIR)/wmcoincoin-site.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-site.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='site.c' object='wmcoincoin-site.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-site.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-site.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-site.obj -MD -MP -MF "$(DEPDIR)/wmcoincoin-site.Tpo" \
+ at am__fastdepCC_TRUE@	  -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@	then mv -f "$(DEPDIR)/wmcoincoin-site.Tpo" "$(DEPDIR)/wmcoincoin-site.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-site.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='site.c' object='wmcoincoin-site.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-site.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-site.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-balltrap.o -MD -MP -MF "$(DEPDIR)/wmcoincoin-balltrap.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o wmcoincoin-balltrap.o `test -f 'balltrap.c' || echo '$(srcdir)/'`balltrap.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/wmcoincoin-balltrap.Tpo" "$(DEPDIR)/wmcoincoin-balltrap.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-balltrap.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='balltrap.c' object='wmcoincoin-balltrap.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-balltrap.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-balltrap.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-balltrap.obj -MD -MP -MF "$(DEPDIR)/wmcoincoin-balltrap.Tpo" \
+ at am__fastdepCC_TRUE@	  -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@	then mv -f "$(DEPDIR)/wmcoincoin-balltrap.Tpo" "$(DEPDIR)/wmcoincoin-balltrap.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-balltrap.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='balltrap.c' object='wmcoincoin-balltrap.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-balltrap.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-balltrap.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-keylist.o -MD -MP -MF "$(DEPDIR)/wmcoincoin-keylist.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o wmcoincoin-keylist.o `test -f 'keylist.c' || echo '$(srcdir)/'`keylist.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/wmcoincoin-keylist.Tpo" "$(DEPDIR)/wmcoincoin-keylist.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-keylist.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='keylist.c' object='wmcoincoin-keylist.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-keylist.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-keylist.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-keylist.obj -MD -MP -MF "$(DEPDIR)/wmcoincoin-keylist.Tpo" \
+ at am__fastdepCC_TRUE@	  -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@	then mv -f "$(DEPDIR)/wmcoincoin-keylist.Tpo" "$(DEPDIR)/wmcoincoin-keylist.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-keylist.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='keylist.c' object='wmcoincoin-keylist.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-keylist.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-keylist.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-scrollcoin.o -MD -MP -MF "$(DEPDIR)/wmcoincoin-scrollcoin.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o wmcoincoin-scrollcoin.o `test -f 'scrollcoin.c' || echo '$(srcdir)/'`scrollcoin.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/wmcoincoin-scrollcoin.Tpo" "$(DEPDIR)/wmcoincoin-scrollcoin.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-scrollcoin.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='scrollcoin.c' object='wmcoincoin-scrollcoin.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-scrollcoin.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-scrollcoin.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-scrollcoin.obj -MD -MP -MF "$(DEPDIR)/wmcoincoin-scrollcoin.Tpo" \
+ at am__fastdepCC_TRUE@	  -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@	then mv -f "$(DEPDIR)/wmcoincoin-scrollcoin.Tpo" "$(DEPDIR)/wmcoincoin-scrollcoin.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-scrollcoin.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='scrollcoin.c' object='wmcoincoin-scrollcoin.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-scrollcoin.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-scrollcoin.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-picohtml.o -MD -MP -MF "$(DEPDIR)/wmcoincoin-picohtml.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o wmcoincoin-picohtml.o `test -f 'picohtml.c' || echo '$(srcdir)/'`picohtml.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/wmcoincoin-picohtml.Tpo" "$(DEPDIR)/wmcoincoin-picohtml.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-picohtml.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='picohtml.c' object='wmcoincoin-picohtml.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-picohtml.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-picohtml.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-picohtml.obj -MD -MP -MF "$(DEPDIR)/wmcoincoin-picohtml.Tpo" \
+ at am__fastdepCC_TRUE@	  -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@	then mv -f "$(DEPDIR)/wmcoincoin-picohtml.Tpo" "$(DEPDIR)/wmcoincoin-picohtml.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-picohtml.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='picohtml.c' object='wmcoincoin-picohtml.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-picohtml.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-picohtml.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-msgbox.o -MD -MP -MF "$(DEPDIR)/wmcoincoin-msgbox.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o wmcoincoin-msgbox.o `test -f 'msgbox.c' || echo '$(srcdir)/'`msgbox.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/wmcoincoin-msgbox.Tpo" "$(DEPDIR)/wmcoincoin-msgbox.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-msgbox.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='msgbox.c' object='wmcoincoin-msgbox.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-msgbox.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-msgbox.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-msgbox.obj -MD -MP -MF "$(DEPDIR)/wmcoincoin-msgbox.Tpo" \
+ at am__fastdepCC_TRUE@	  -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@	then mv -f "$(DEPDIR)/wmcoincoin-msgbox.Tpo" "$(DEPDIR)/wmcoincoin-msgbox.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-msgbox.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='msgbox.c' object='wmcoincoin-msgbox.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-msgbox.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-msgbox.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-balloon.o -MD -MP -MF "$(DEPDIR)/wmcoincoin-balloon.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o wmcoincoin-balloon.o `test -f 'balloon.c' || echo '$(srcdir)/'`balloon.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/wmcoincoin-balloon.Tpo" "$(DEPDIR)/wmcoincoin-balloon.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-balloon.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='balloon.c' object='wmcoincoin-balloon.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-balloon.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-balloon.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-balloon.obj -MD -MP -MF "$(DEPDIR)/wmcoincoin-balloon.Tpo" \
+ at am__fastdepCC_TRUE@	  -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@	then mv -f "$(DEPDIR)/wmcoincoin-balloon.Tpo" "$(DEPDIR)/wmcoincoin-balloon.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-balloon.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='balloon.c' object='wmcoincoin-balloon.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-balloon.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-balloon.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-wmcoincoin.o -MD -MP -MF "$(DEPDIR)/wmcoincoin-wmcoincoin.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o wmcoincoin-wmcoincoin.o `test -f 'wmcoincoin.c' || echo '$(srcdir)/'`wmcoincoin.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/wmcoincoin-wmcoincoin.Tpo" "$(DEPDIR)/wmcoincoin-wmcoincoin.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-wmcoincoin.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='wmcoincoin.c' object='wmcoincoin-wmcoincoin.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-wmcoincoin.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-wmcoincoin.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-wmcoincoin.obj -MD -MP -MF "$(DEPDIR)/wmcoincoin-wmcoincoin.Tpo" \
+ at am__fastdepCC_TRUE@	  -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@	then mv -f "$(DEPDIR)/wmcoincoin-wmcoincoin.Tpo" "$(DEPDIR)/wmcoincoin-wmcoincoin.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-wmcoincoin.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='wmcoincoin.c' object='wmcoincoin-wmcoincoin.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-wmcoincoin.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-wmcoincoin.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-http.o -MD -MP -MF "$(DEPDIR)/wmcoincoin-http.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o wmcoincoin-http.o `test -f 'http.c' || echo '$(srcdir)/'`http.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/wmcoincoin-http.Tpo" "$(DEPDIR)/wmcoincoin-http.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-http.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='http.c' object='wmcoincoin-http.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-http.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-http.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-http.obj -MD -MP -MF "$(DEPDIR)/wmcoincoin-http.Tpo" \
+ at am__fastdepCC_TRUE@	  -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@	then mv -f "$(DEPDIR)/wmcoincoin-http.Tpo" "$(DEPDIR)/wmcoincoin-http.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-http.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='http.c' object='wmcoincoin-http.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-http.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-http.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-coin_util.o -MD -MP -MF "$(DEPDIR)/wmcoincoin-coin_util.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o wmcoincoin-coin_util.o `test -f 'coin_util.c' || echo '$(srcdir)/'`coin_util.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/wmcoincoin-coin_util.Tpo" "$(DEPDIR)/wmcoincoin-coin_util.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-coin_util.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='coin_util.c' object='wmcoincoin-coin_util.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-coin_util.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-coin_util.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-coin_util.obj -MD -MP -MF "$(DEPDIR)/wmcoincoin-coin_util.Tpo" \
+ at am__fastdepCC_TRUE@	  -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@	then mv -f "$(DEPDIR)/wmcoincoin-coin_util.Tpo" "$(DEPDIR)/wmcoincoin-coin_util.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-coin_util.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='coin_util.c' object='wmcoincoin-coin_util.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-coin_util.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-coin_util.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-coin_xutil.o -MD -MP -MF "$(DEPDIR)/wmcoincoin-coin_xutil.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o wmcoincoin-coin_xutil.o `test -f 'coin_xutil.c' || echo '$(srcdir)/'`coin_xutil.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/wmcoincoin-coin_xutil.Tpo" "$(DEPDIR)/wmcoincoin-coin_xutil.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-coin_xutil.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='coin_xutil.c' object='wmcoincoin-coin_xutil.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-coin_xutil.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-coin_xutil.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-coin_xutil.obj -MD -MP -MF "$(DEPDIR)/wmcoincoin-coin_xutil.Tpo" \
+ at am__fastdepCC_TRUE@	  -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@	then mv -f "$(DEPDIR)/wmcoincoin-coin_xutil.Tpo" "$(DEPDIR)/wmcoincoin-coin_xutil.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-coin_xutil.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='coin_xutil.c' object='wmcoincoin-coin_xutil.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-coin_xutil.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-coin_xutil.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-prefs.o -MD -MP -MF "$(DEPDIR)/wmcoincoin-prefs.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o wmcoincoin-prefs.o `test -f 'prefs.c' || echo '$(srcdir)/'`prefs.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/wmcoincoin-prefs.Tpo" "$(DEPDIR)/wmcoincoin-prefs.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-prefs.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='prefs.c' object='wmcoincoin-prefs.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-prefs.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-prefs.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-prefs.obj -MD -MP -MF "$(DEPDIR)/wmcoincoin-prefs.Tpo" \
+ at am__fastdepCC_TRUE@	  -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@	then mv -f "$(DEPDIR)/wmcoincoin-prefs.Tpo" "$(DEPDIR)/wmcoincoin-prefs.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-prefs.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='prefs.c' object='wmcoincoin-prefs.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-prefs.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-prefs.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-prefs_gestion.o -MD -MP -MF "$(DEPDIR)/wmcoincoin-prefs_gestion.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o wmcoincoin-prefs_gestion.o `test -f 'prefs_gestion.c' || echo '$(srcdir)/'`prefs_gestion.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/wmcoincoin-prefs_gestion.Tpo" "$(DEPDIR)/wmcoincoin-prefs_gestion.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-prefs_gestion.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='prefs_gestion.c' object='wmcoincoin-prefs_gestion.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-prefs_gestion.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-prefs_gestion.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-prefs_gestion.obj -MD -MP -MF "$(DEPDIR)/wmcoincoin-prefs_gestion.Tpo" \
+ at am__fastdepCC_TRUE@	  -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@	then mv -f "$(DEPDIR)/wmcoincoin-prefs_gestion.Tpo" "$(DEPDIR)/wmcoincoin-prefs_gestion.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-prefs_gestion.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='prefs_gestion.c' object='wmcoincoin-prefs_gestion.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-prefs_gestion.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-prefs_gestion.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-spell_coin.o -MD -MP -MF "$(DEPDIR)/wmcoincoin-spell_coin.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o wmcoincoin-spell_coin.o `test -f 'spell_coin.c' || echo '$(srcdir)/'`spell_coin.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/wmcoincoin-spell_coin.Tpo" "$(DEPDIR)/wmcoincoin-spell_coin.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-spell_coin.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='spell_coin.c' object='wmcoincoin-spell_coin.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-spell_coin.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-spell_coin.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-spell_coin.obj -MD -MP -MF "$(DEPDIR)/wmcoincoin-spell_coin.Tpo" \
+ at am__fastdepCC_TRUE@	  -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@	then mv -f "$(DEPDIR)/wmcoincoin-spell_coin.Tpo" "$(DEPDIR)/wmcoincoin-spell_coin.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-spell_coin.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='spell_coin.c' object='wmcoincoin-spell_coin.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-spell_coin.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-spell_coin.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-http_win.o -MD -MP -MF "$(DEPDIR)/wmcoincoin-http_win.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o wmcoincoin-http_win.o `test -f 'http_win.c' || echo '$(srcdir)/'`http_win.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/wmcoincoin-http_win.Tpo" "$(DEPDIR)/wmcoincoin-http_win.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-http_win.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='http_win.c' object='wmcoincoin-http_win.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-http_win.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-http_win.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-http_win.obj -MD -MP -MF "$(DEPDIR)/wmcoincoin-http_win.Tpo" \
+ at am__fastdepCC_TRUE@	  -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@	then mv -f "$(DEPDIR)/wmcoincoin-http_win.Tpo" "$(DEPDIR)/wmcoincoin-http_win.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-http_win.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='http_win.c' object='wmcoincoin-http_win.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-http_win.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-http_win.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-http_unix.o -MD -MP -MF "$(DEPDIR)/wmcoincoin-http_unix.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o wmcoincoin-http_unix.o `test -f 'http_unix.c' || echo '$(srcdir)/'`http_unix.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/wmcoincoin-http_unix.Tpo" "$(DEPDIR)/wmcoincoin-http_unix.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-http_unix.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='http_unix.c' object='wmcoincoin-http_unix.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-http_unix.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-http_unix.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-http_unix.obj -MD -MP -MF "$(DEPDIR)/wmcoincoin-http_unix.Tpo" \
+ at am__fastdepCC_TRUE@	  -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@	then mv -f "$(DEPDIR)/wmcoincoin-http_unix.Tpo" "$(DEPDIR)/wmcoincoin-http_unix.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-http_unix.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='http_unix.c' object='wmcoincoin-http_unix.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-http_unix.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-http_unix.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-fake-getaddrinfo.o -MD -MP -MF "$(DEPDIR)/wmcoincoin-fake-getaddrinfo.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o wmcoincoin-fake-getaddrinfo.o `test -f 'fake-getaddrinfo.c' || echo '$(srcdir)/'`fake-getaddrinfo.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/wmcoincoin-fake-getaddrinfo.Tpo" "$(DEPDIR)/wmcoincoin-fake-getaddrinfo.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-fake-getaddrinfo.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fake-getaddrinfo.c' object='wmcoincoin-fake-getaddrinfo.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-fake-getaddrinfo.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-fake-getaddrinfo.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-fake-getaddrinfo.obj -MD -MP -MF "$(DEPDIR)/wmcoincoin-fake-getaddrinfo.Tpo" \
+ at am__fastdepCC_TRUE@	  -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@	then mv -f "$(DEPDIR)/wmcoincoin-fake-getaddrinfo.Tpo" "$(DEPDIR)/wmcoincoin-fake-getaddrinfo.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-fake-getaddrinfo.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fake-getaddrinfo.c' object='wmcoincoin-fake-getaddrinfo.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-fake-getaddrinfo.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-fake-getaddrinfo.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-fake-getnameinfo.o -MD -MP -MF "$(DEPDIR)/wmcoincoin-fake-getnameinfo.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o wmcoincoin-fake-getnameinfo.o `test -f 'fake-getnameinfo.c' || echo '$(srcdir)/'`fake-getnameinfo.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/wmcoincoin-fake-getnameinfo.Tpo" "$(DEPDIR)/wmcoincoin-fake-getnameinfo.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-fake-getnameinfo.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fake-getnameinfo.c' object='wmcoincoin-fake-getnameinfo.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-fake-getnameinfo.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-fake-getnameinfo.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-fake-getnameinfo.obj -MD -MP -MF "$(DEPDIR)/wmcoincoin-fake-getnameinfo.Tpo" \
+ at am__fastdepCC_TRUE@	  -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@	then mv -f "$(DEPDIR)/wmcoincoin-fake-getnameinfo.Tpo" "$(DEPDIR)/wmcoincoin-fake-getnameinfo.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-fake-getnameinfo.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='fake-getnameinfo.c' object='wmcoincoin-fake-getnameinfo.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-fake-getnameinfo.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-fake-getnameinfo.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-inet_aton.o -MD -MP -MF "$(DEPDIR)/wmcoincoin-inet_aton.Tpo" \
+ at am__fastdepCC_TRUE@	  -c -o wmcoincoin-inet_aton.o `test -f 'inet_aton.c' || echo '$(srcdir)/'`inet_aton.c; \
+ at am__fastdepCC_TRUE@	then mv -f "$(DEPDIR)/wmcoincoin-inet_aton.Tpo" "$(DEPDIR)/wmcoincoin-inet_aton.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-inet_aton.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='inet_aton.c' object='wmcoincoin-inet_aton.o' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-inet_aton.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-inet_aton.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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@	if $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(wmcoincoin_CFLAGS) $(CFLAGS) -MT wmcoincoin-inet_aton.obj -MD -MP -MF "$(DEPDIR)/wmcoincoin-inet_aton.Tpo" \
+ at am__fastdepCC_TRUE@	  -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@	then mv -f "$(DEPDIR)/wmcoincoin-inet_aton.Tpo" "$(DEPDIR)/wmcoincoin-inet_aton.Po"; \
+ at am__fastdepCC_TRUE@	else rm -f "$(DEPDIR)/wmcoincoin-inet_aton.Tpo"; exit 1; \
+ at am__fastdepCC_TRUE@	fi
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	source='inet_aton.c' object='wmcoincoin-inet_aton.obj' libtool=no @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	depfile='$(DEPDIR)/wmcoincoin-inet_aton.Po' tmpdepfile='$(DEPDIR)/wmcoincoin-inet_aton.TPo' @AMDEPBACKSLASH@
+ at AMDEP_TRUE@@am__fastdepCC_FALSE@	$(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`
+uninstall-info-am:
+
+ETAGS = etags
+ETAGSFLAGS =
+
+CTAGS = ctags
+CTAGSFLAGS =
+
+tags: TAGS
+
+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; } \
+	       END { for (i in files) print i; }'`; \
+	mkid -fID $$unique
+
+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; } \
+	       END { for (i in files) print i; }'`; \
+	test -z "$(ETAGS_ARGS)$$tags$$unique" \
+	  || $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+	     $$tags $$unique
+
+ctags: CTAGS
+CTAGS:  $(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; } \
+	       END { 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
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+
+top_distdir = ..
+distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
+
+distdir: $(DISTFILES)
+	@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
+	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
+	list='$(DISTFILES)'; for file in $$list; do \
+	  case $$file in \
+	    $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
+	    $(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
+	  esac; \
+	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+	  dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
+	  if test "$$dir" != "$$file" && test "$$dir" != "."; then \
+	    dir="/$$dir"; \
+	    $(mkinstalldirs) "$(distdir)$$dir"; \
+	  else \
+	    dir=''; \
+	  fi; \
+	  if test -d $$d/$$file; then \
+	    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:
+	$(mkinstalldirs) $(DESTDIR)$(bindir)
+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:
+	-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:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-exec-am: install-binPROGRAMS
+
+install-info: install-info-am
+
+install-man:
+
+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 uninstall-info-am
+
+.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 info \
+	info-am install install-am install-binPROGRAMS install-data \
+	install-data-am install-exec install-exec-am install-info \
+	install-info-am install-man 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 uninstall-info-am
+
+
+#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..3211769
--- /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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  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..fdce2b3
--- /dev/null
+++ b/src/board.c
@@ -0,0 +1,2150 @@
+/*
+    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: 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));
+  }
+}
+
+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);
+
+  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 (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 href", "\t<a href"); 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, "<!--", "\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_iso8859(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..3a5e7bb
--- /dev/null
+++ b/src/board_rss.c
@@ -0,0 +1,444 @@
+#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]*/
+  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 iso8859-15 */
+  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_iso8859(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..ed795b5
--- /dev/null
+++ b/src/board_util.c
@@ -0,0 +1,1023 @@
+/*
+    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
+
+
+ */
+/*
+  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(id.sid < MAX_SITES && id.sid >= 0);
+    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;
+}
+
+
+/* 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) { 
+    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') {
+      if (*(p+1) == 0 && strchr("���",*p) == NULL)
+	break;
+    }
+
+    p++;
+  }
+  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 == 7) {
+      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 (w[6] == (unsigned char)'�') num = 0; 
+      else if (w[6] == (unsigned char)'�') num = 1; 
+      else if (w[6] == (unsigned char)'�') num = 2; else return 0;
+    } 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 != ':' && 
+	     *p != (unsigned char)'�' && *p != (unsigned char)'�' && *p != (unsigned char)'�') {
+	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;
+      if (*p == ':') {
+	p++; if (*p >= '0' && *p <= '9') num = *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))) {
+	end++;
+	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] != '-') 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 (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..27277b7
--- /dev/null
+++ b/src/coin_util.c
@@ -0,0 +1,1330 @@
+/*
+  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
+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..6b05c66
--- /dev/null
+++ b/src/coincoin.h
@@ -0,0 +1,716 @@
+#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 */
+};
+
+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..634a99e
--- /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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  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..d09509b
--- /dev/null
+++ b/src/fontcoincoin.c
@@ -0,0 +1,241 @@
+#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"
+
+typedef int CCFontId;
+typedef int CCColorId;
+
+typedef struct CCFont {
+  char *fontname;
+  XftFont *xfn;
+  int refcnt;
+} 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);
+}
+
+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);
+}
+
+/* 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_width8(CCFontId fid, char *str, int len) {
+  return ccfont_text_xbox(fid,str,len,NULL,NULL);
+}
+
+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..a2e8206
--- /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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  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..138c154
--- /dev/null
+++ b/src/global.h
@@ -0,0 +1,289 @@
+
+/*
+  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
+
+#define _XOPEN_SOURCE
+#define _XOPEN_SOURCE_EXTENDED /* pour getdate */
+#define _GNU_SOURCE
+
+
+#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..059570e
--- /dev/null
+++ b/src/http.c
@@ -0,0 +1,1301 @@
+#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));
+	  }
+	}
+	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..2decad0
--- /dev/null
+++ b/src/http.h
@@ -0,0 +1,146 @@
+/*
+  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� */
+  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..6863317
--- /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 = XmbLookupString(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 = XmbLookupString(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..87e7fcf
--- /dev/null
+++ b/src/options_list.h
@@ -0,0 +1,306 @@
+/* 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_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",
+"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..4584234
--- /dev/null
+++ b/src/palmipede.c
@@ -0,0 +1,2718 @@
+/*
+
+    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/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 *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_STRING, 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_STRING;
+    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_STRING) {
+    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_STRING, 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_char(ew, (unsigned char)kb_state()->buff[0]);
+      }
+#else
+      if (kb_state()->klen != 0)
+        editw_insert_char(ew, (unsigned char)kb_state()->buff[0]);
+#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..97cc5f9
--- /dev/null
+++ b/src/pinnipede.c
@@ -0,0 +1,4237 @@
+/*
+  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_width8(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(fn, pw->w, strlen(pw->w), &pw->xpos, &xoffset);
+    //pw->xwidth = ccfont_text_width8(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_string8(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_string8(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_width8(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_width8(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_string8(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 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_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 (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_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_width8(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..cd9b369
--- /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://forum.hardware.fr/images/perso";
+  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..c9e1452
--- /dev/null
+++ b/src/prefs.c
@@ -0,0 +1,1746 @@
+#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/remote.xml";
+  path_tribune_add = ObsoleteFeatures.path_tribune_add[0] ? ObsoleteFeatures.path_tribune_add : "board/add.php3";
+  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/remote.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");
+  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 = 0;
+  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);
+  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_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..ea3a98b
--- /dev/null
+++ b/src/prefs.h
@@ -0,0 +1,398 @@
+#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;
+
+
+  /* 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..d84eb65
--- /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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  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..e55e18e
--- /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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  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..570001f
--- /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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  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..57b22a7
--- /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 hfr smiley 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 *hfrfname = str_ndup(bi->name+2, strlen(bi->name)-3);
+    fprintf(f, "  <li><a href=\"http://forum.hardware.fr/images/perso/%s.gif\"><img src=\"%s.gif\" alt=\"%s\"></a>%s</li>\n", 
+            hfrfname, browserfname, bi->name, bi->name);
+    free(hfrfname); 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..b3491f3
--- /dev/null
+++ b/src/wmccc_interface.c
@@ -0,0 +1,3602 @@
+/*
+ * 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) _("galeon -n %s &"));
+  combo2_items = g_list_append (combo2_items, (gpointer) _("konqueror %s &"));
+  combo2_items = g_list_append (combo2_items, (gpointer) _("dcop 'DCOPRef(konqueror-'`pidof konqueror`',konqueror-mainwindow#1/action/newtab)' activate && dcop `dcop| grep konqueror` konqueror-mainwindow#1 openURL %s &"));
+  combo2_items = g_list_append (combo2_items, (gpointer) _("mozilla-firefox -remote openurl\\(%s\\,new-tab\\) || mozilla-firefox %s &"));
+  combo2_items = g_list_append (combo2_items, (gpointer) _("mozilla %s &"));
+  combo2_items = g_list_append (combo2_items, (gpointer) _("mozilla -remote openurl\\(%s,new-tab\\) &"));
+  combo2_items = g_list_append (combo2_items, (gpointer) _("opera %s &"));
+  combo2_items = g_list_append (combo2_items, (gpointer) _("xterm -fn 6x10 -bg white -fg black -geometry 120x70 -e w3m %s &"));
+  combo2_items = g_list_append (combo2_items, (gpointer) _("links -g %s &"));
+  combo2_items = g_list_append (combo2_items, (gpointer) _("dillo %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) _("galeon -n %s &"));
+  combo3_items = g_list_append (combo3_items, (gpointer) _("konqueror %s &"));
+  combo3_items = g_list_append (combo3_items, (gpointer) _("dcop 'DCOPRef(konqueror-'`pidof konqueror`',konqueror-mainwindow#1/action/newtab)' activate && dcop `dcop| grep konqueror` konqueror-mainwindow#1 openURL %s &"));
+  combo3_items = g_list_append (combo3_items, (gpointer) _("netscape -remote openurl\\(%s\\) &"));
+  combo3_items = g_list_append (combo3_items, (gpointer) _("mozilla %s &"));
+  combo3_items = g_list_append (combo3_items, (gpointer) _("mozilla -remote openurl\\(%s,new-tab\\) &"));
+  combo3_items = g_list_append (combo3_items, (gpointer) _("opera %s &"));
+  combo3_items = g_list_append (combo3_items, (gpointer) _("xterm -fn 6x10 -bg white -fg black -geometry 120x70 -e w3m %s &"));
+  combo3_items = g_list_append (combo3_items, (gpointer) _("links -g %s &"));
+  combo3_items = g_list_append (combo3_items, (gpointer) _("dillo %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://forums.hardware.fr\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..438ec26
--- /dev/null
+++ b/src/wmccc_save_prefs.c
@@ -0,0 +1,412 @@
+#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_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..1ba9082
--- /dev/null
+++ b/src/wmcoincoin.c
@@ -0,0 +1,2344 @@
+
+/*
+    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: 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);
+    }
+    http_request_close(&r);
+    site->http_success_cnt++;
+    site->http_recent_error_cnt = 0;
+  } else if (r.response != 302) {
+    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..472da12
--- /dev/null
+++ b/wmccc.glade
@@ -0,0 +1,8743 @@
+<?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">galeon -n %s &</property>
+			    </widget>
+			  </child>
+
+			  <child>
+			    <widget class="GtkListItem" id="listitem142">
+			      <property name="visible">True</property>
+			      <property name="can_focus">True</property>
+			      <property name="label" translatable="yes">konqueror %s &</property>
+			    </widget>
+			  </child>
+
+			  <child>
+			    <widget class="GtkListItem" id="listitem143">
+			      <property name="visible">True</property>
+			      <property name="can_focus">True</property>
+			      <property name="label" translatable="yes">dcop 'DCOPRef(konqueror-'`pidof konqueror`',konqueror-mainwindow#1/action/newtab)' activate && dcop `dcop| grep konqueror` konqueror-mainwindow#1 openURL %s &</property>
+			    </widget>
+			  </child>
+
+			  <child>
+			    <widget class="GtkListItem" id="listitem144">
+			      <property name="visible">True</property>
+			      <property name="can_focus">True</property>
+			      <property name="label" translatable="yes">mozilla-firefox -remote openurl\(%s\,new-tab\) || mozilla-firefox %s &</property>
+			    </widget>
+			  </child>
+
+			  <child>
+			    <widget class="GtkListItem" id="listitem145">
+			      <property name="visible">True</property>
+			      <property name="can_focus">True</property>
+			      <property name="label" translatable="yes">mozilla %s &</property>
+			    </widget>
+			  </child>
+
+			  <child>
+			    <widget class="GtkListItem" id="listitem146">
+			      <property name="visible">True</property>
+			      <property name="can_focus">True</property>
+			      <property name="label" translatable="yes">mozilla -remote openurl\(%s,new-tab\) &</property>
+			    </widget>
+			  </child>
+
+			  <child>
+			    <widget class="GtkListItem" id="listitem147">
+			      <property name="visible">True</property>
+			      <property name="can_focus">True</property>
+			      <property name="label" translatable="yes">opera %s &</property>
+			    </widget>
+			  </child>
+
+			  <child>
+			    <widget class="GtkListItem" id="listitem148">
+			      <property name="visible">True</property>
+			      <property name="can_focus">True</property>
+			      <property name="label" translatable="yes">xterm -fn 6x10 -bg white -fg black -geometry 120x70 -e w3m %s &</property>
+			    </widget>
+			  </child>
+
+			  <child>
+			    <widget class="GtkListItem" id="listitem149">
+			      <property name="visible">True</property>
+			      <property name="can_focus">True</property>
+			      <property name="label" translatable="yes">links -g %s &</property>
+			    </widget>
+			  </child>
+
+			  <child>
+			    <widget class="GtkListItem" id="listitem150">
+			      <property name="visible">True</property>
+			      <property name="can_focus">True</property>
+			      <property name="label" translatable="yes">dillo %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">galeon -n %s &</property>
+			    </widget>
+			  </child>
+
+			  <child>
+			    <widget class="GtkListItem" id="listitem152">
+			      <property name="visible">True</property>
+			      <property name="can_focus">True</property>
+			      <property name="label" translatable="yes">konqueror %s &</property>
+			    </widget>
+			  </child>
+
+			  <child>
+			    <widget class="GtkListItem" id="listitem153">
+			      <property name="visible">True</property>
+			      <property name="can_focus">True</property>
+			      <property name="label" translatable="yes">dcop 'DCOPRef(konqueror-'`pidof konqueror`',konqueror-mainwindow#1/action/newtab)' activate && dcop `dcop| grep konqueror` konqueror-mainwindow#1 openURL %s &</property>
+			    </widget>
+			  </child>
+
+			  <child>
+			    <widget class="GtkListItem" id="listitem154">
+			      <property name="visible">True</property>
+			      <property name="can_focus">True</property>
+			      <property name="label" translatable="yes">netscape -remote openurl\(%s\) &</property>
+			    </widget>
+			  </child>
+
+			  <child>
+			    <widget class="GtkListItem" id="listitem155">
+			      <property name="visible">True</property>
+			      <property name="can_focus">True</property>
+			      <property name="label" translatable="yes">mozilla %s &</property>
+			    </widget>
+			  </child>
+
+			  <child>
+			    <widget class="GtkListItem" id="listitem156">
+			      <property name="visible">True</property>
+			      <property name="can_focus">True</property>
+			      <property name="label" translatable="yes">mozilla -remote openurl\(%s,new-tab\) &</property>
+			    </widget>
+			  </child>
+
+			  <child>
+			    <widget class="GtkListItem" id="listitem157">
+			      <property name="visible">True</property>
+			      <property name="can_focus">True</property>
+			      <property name="label" translatable="yes">opera %s &</property>
+			    </widget>
+			  </child>
+
+			  <child>
+			    <widget class="GtkListItem" id="listitem158">
+			      <property name="visible">True</property>
+			      <property name="can_focus">True</property>
+			      <property name="label" translatable="yes">xterm -fn 6x10 -bg white -fg black -geometry 120x70 -e w3m %s &</property>
+			    </widget>
+			  </child>
+
+			  <child>
+			    <widget class="GtkListItem" id="listitem159">
+			      <property name="visible">True</property>
+			      <property name="can_focus">True</property>
+			      <property name="label" translatable="yes">links -g %s &</property>
+			    </widget>
+			  </child>
+
+			  <child>
+			    <widget class="GtkListItem" id="listitem160">
+			      <property name="visible">True</property>
+			      <property name="can_focus">True</property>
+			      <property name="label" translatable="yes">dillo %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://forums.hardware.fr
+
+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..6dcd8d3
--- /dev/null
+++ b/wmcoincoin.spec
@@ -0,0 +1,126 @@
+%define name wmcoincoin
+%define version 2.4.6a
+%define release 1
+
+Summary:	wmcoincoin is a stupid dock app for linuxfr-addicted people
+Name:		%{name}
+Version:	%{version}
+Release:	%{release}
+Source:		%{name}-%{version}.tar.bz2
+License:	GPL
+URL:		http://hules.free.fr/wmcoincoin/wmcoincoin.html
+Group:		Toys
+BuildRoot:	%{_tmppath}/%{name}-buildroot
+Prefix:		%{_prefix}
+BuildRequires:  gtk-devel
+BuildRequires:  imlib2-devel
+
+%description
+Funny dockapp for browsing DaCode sites news and board
+WMcoincoin allows you to browse linuxfr.org, and any other site based
+on DaCode 1.2+. It handles:
+
+* the website news scrolling, warning of new ones, and with an ability
+  to display them in a window;
+* the private messages, bringing to the appropriate webpage when you
+  receive new ones;
+* tabbed browsing of multiple DaCode or Templeet sites;
+* the board, with ability to view the contents and post messages,
+  featuring advanced functions designed to detect, enhance or kill
+  the trolls.
+
+WMcoincoin, while being full of stupid things, is a real advanced
+chatting client, working all over HTTP, with a low bandwidth
+consumption.
+
+%description -l fr
+La fonctionnalit� centrale (le gros bouton rouge), permet de poster "coin coin!"
+sur la tribune libre. Autour de ce bouton, diff�rentes fonctionnalit�s annexes gravitent:
+* Affichage de l'heure du dernier post sur la tribune
+* Affichage d�filant des titres des derni�res news de DaLinuxFrenchPage
+Visionnage du contenu des news (sans les commentaires)
+* Trollometre incorpor�, de qualit� professionnelle.
+* Un v�ritable Trolloscope d'un mod�le proche de celui qui �quipe les services secrets chinois.
+* Des ballons d'aide pour toujours plus de convivialit�.
+* Des stats sur le nombre de personnes qui fr�quentent la tribune.
+* Le Palmip�de Editor qui permet d'�diter le messages/useragent � poster avec un confort maximal.
+* Une fonction flamophone, parce que vous le valez bien.
+* Le Pinnip�de T�l�type, un v�ritable outil de d�cideur.
+
+%prep
+rm -rf $RPM_BUILD_ROOT
+%setup 
+
+%build
+%configure
+%make
+
+%install
+rm -rf $RPM_BUILD_ROOT
+%makeinstall
+%find_lang %{name}
+
+%clean
+rm -rf $RPM_BUILD_ROOT
+
+%files -f %{name}.lang
+%defattr(-,root,root,0755)
+%data README NEWS COPYING AUTHORS 
+%{_bindir}/*
+%dir %{_datadir}/%{name}
+%{_datadir}/%{name}/options
+%{_datadir}/%{name}/*.xpm
+
+%changelog
+* Tue Jul 19 2003 houpla <laurent at pschit.net> 2.4.6a-1
+- version 2.4.6a
+- 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
+- passage en v2.2.4 suites aux modifs de 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