tRequired files for proper i18n added (seems they were missed out the first time around) - vaccinewars - be a doctor and try to vaccinate the world
 (HTM) git clone git://src.adamsgaard.dk/vaccinewars
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 4cbe6cbbdce73df996f9ecff4202108bcfda340b
 (DIR) parent 82139d452a41754d464e588341c9c987066d4a6a
 (HTM) Author: Ben Webb <ben@salilab.org>
       Date:   Sun, 10 Sep 2000 21:55:17 +0000
       
       Required files for proper i18n added (seems they were missed out the first
       ttime around)
       
       
       Diffstat:
         A intl/ChangeLog                      |    1086 +++++++++++++++++++++++++++++++
         A intl/Makefile                       |     214 +++++++++++++++++++++++++++++++
         A intl/Makefile.in                    |     214 +++++++++++++++++++++++++++++++
         A intl/VERSION                        |       1 +
         A intl/bindtextdom.c                  |     203 +++++++++++++++++++++++++++++++
         A intl/cat-compat.c                   |     262 +++++++++++++++++++++++++++++++
         A intl/dcgettext.c                    |     624 +++++++++++++++++++++++++++++++
         A intl/dgettext.c                     |      59 +++++++++++++++++++++++++++++++
         A intl/explodename.c                  |     188 +++++++++++++++++++++++++++++++
         A intl/finddomain.c                   |     216 +++++++++++++++++++++++++++++++
         A intl/gettext.c                      |      70 +++++++++++++++++++++++++++++++
         A intl/gettext.h                      |     105 +++++++++++++++++++++++++++++++
         A intl/gettextP.h                     |      89 +++++++++++++++++++++++++++++++
         A intl/hash-string.h                  |      59 +++++++++++++++++++++++++++++++
         A intl/intl-compat.c                  |      76 +++++++++++++++++++++++++++++++
         A intl/l10nflist.c                    |     411 ++++++++++++++++++++++++++++++
         A intl/libgettext.h                   |     182 +++++++++++++++++++++++++++++++
         A intl/linux-msg.sed                  |     100 +++++++++++++++++++++++++++++++
         A intl/loadinfo.h                     |      76 +++++++++++++++++++++++++++++++
         A intl/loadmsgcat.c                   |     222 ++++++++++++++++++++++++++++++
         A intl/localealias.c                  |     424 ++++++++++++++++++++++++++++++
         A intl/po2tbl.sed                     |      60 +++++++++++++++++++++++++++++++
         A intl/po2tbl.sed.in                  |     102 +++++++++++++++++++++++++++++++
         A intl/textdomain.c                   |     108 +++++++++++++++++++++++++++++++
         A intl/xopen-msg.sed                  |     104 +++++++++++++++++++++++++++++++
         A po/Makefile.in.in                   |     248 +++++++++++++++++++++++++++++++
         M po/dopewars.pot                     |     200 ++++++++++++++++----------------
       
       27 files changed, 5603 insertions(+), 100 deletions(-)
       ---
 (DIR) diff --git a/intl/ChangeLog b/intl/ChangeLog
       t@@ -0,0 +1,1086 @@
       +1998-04-29  Ulrich Drepper  <drepper@cygnus.com>
       +
       +        * intl/localealias.c (read_alias_file): Use unsigned char for
       +        local variables.  Remove unused variable tp.
       +        * intl/l10nflist.c (_nl_normalize_codeset): Use unsigned char *
       +        for type of codeset.  For loosing Solaris systems.
       +        * intl/loadinfo.h: Adapt prototype of _nl_normalize_codeset.
       +        * intl/bindtextdom.c (BINDTEXTDOMAIN): Don't define local variable
       +        len if not needed.
       +        Patches by Jim Meyering.
       +
       +1998-04-28  Ulrich Drepper  <drepper@cygnus.com>
       +
       +        * loadmsgcat.c (_nl_load_domain): Don't assign the element use_mmap if
       +        mmap is not supported.
       +
       +        * hash-string.h: Don't include <values.h>.
       +
       +1998-04-27  Ulrich Drepper  <drepper@cygnus.com>
       +
       +        * textdomain.c: Use strdup is available.
       +
       +        * localealias.c: Define HAVE_MEMPCPY so that we can use this
       +        function.  Define and use semapahores to protect modfication of
       +        global objects when compiling for glibc.  Add code to allow
       +        freeing alias table.
       +
       +        * l10nflist.c: Don't assume stpcpy not being a macro.
       +
       +        * gettextP.h: Define internal_function macri if not already done.
       +        Use glibc byte-swap macros instead of defining SWAP when compiled
       +        for glibc.
       +        (struct loaded_domain): Add elements to allow unloading.
       +
       +        * Makefile.in (distclean): Don't remove libintl.h here.
       +
       +        * bindtextdomain.c: Carry over changes from glibc.  Use strdup if
       +        available.
       +
       +        * dcgettext.c: Don't assume stpcpy not being a macro.  Mark internal
       +        functions.  Add memory freeing code for glibc.
       +
       +        * dgettext.c: Update copyright.
       +
       +        * explodename.c: Include stdlib.h and string.h only if they exist.
       +        Use strings.h eventually.
       +
       +        * finddomain.c: Mark internal functions.  Use strdup if available.
       +        Add memory freeing code for glibc.
       +
       +1997-10-10 20:00  Ulrich Drepper  <drepper@cygnus.com>
       +
       +        * libgettext.h: Fix dummy textdomain and bindtextdomain macros.
       +        They should return reasonable values.
       +        Reported by Tom Tromey <tromey@cygnus.com>.
       +
       +1997-09-16 03:33  Ulrich Drepper  <drepper@cygnus.com>
       +
       +        * libgettext.h: Define PARAMS also to `args' if __cplusplus is defined.
       +        * intlh.inst.in: Likewise.
       +        Reported by Jean-Marc Lasgouttes <Jean-Marc.Lasgouttes@inria.fr>.
       +
       +        * libintl.glibc: Update from current glibc version.
       +
       +1997-09-06 02:10  Ulrich Drepper  <drepper@cygnus.com>
       +
       +        * intlh.inst.in: Reformat copyright.
       +
       +1997-08-19 15:22  Ulrich Drepper  <drepper@cygnus.com>
       +
       +        * dcgettext.c (DCGETTEXT): Remove wrong comment.
       +
       +1997-08-16 00:13  Ulrich Drepper  <drepper@cygnus.com>
       +
       +        * Makefile.in (install-data): Don't change directory to install.
       +
       +1997-08-01 14:30  Ulrich Drepper  <drepper@cygnus.com>
       +
       +        * cat-compat.c: Fix copyright.
       +
       +        * localealias.c: Don't define strchr unless !HAVE_STRCHR.
       +
       +        * loadmsgcat.c: Update copyright.  Fix typos.
       +
       +        * l10nflist.c: Don't define strchr unless !HAVE_STRCHR.
       +        (_nl_make_l10nflist): Handle sponsor and revision correctly.
       +
       +        * gettext.c: Update copyright.
       +        * gettext.h: Likewise.
       +        * hash-string.h: Likewise.
       +
       +        * finddomain.c: Remoave dead code.  Define strchr only if
       +        !HAVE_STRCHR.
       +
       +        * explodename.c: Include <sys/types.h>.
       +
       +        * explodename.c: Reformat copyright text.
       +        (_nl_explode_name): Fix typo.
       +
       +        * dcgettext.c: Define and use __set_errno.
       +        (guess_category_value): Don't use setlocale if HAVE_LC_MESSAGES is
       +        not defined.
       +
       +        * bindtextdom.c: Pretty printing.
       +
       +1997-05-01 02:25  Ulrich Drepper  <drepper@cygnus.com>
       +
       +        * dcgettext.c (guess_category_value): Don't depend on
       +        HAVE_LC_MESSAGES.  We don't need the macro here.
       +        Patch by Bruno Haible <haible@ilog.fr>.
       +
       +        * cat-compat.c (textdomain): DoN't refer to HAVE_SETLOCALE_NULL
       +        macro.  Instead use HAVE_LOCALE_NULL and define it when using
       +        glibc, as in dcgettext.c.
       +        Patch by Bruno Haible <haible@ilog.fr>.
       +
       +        * Makefile.in (CPPFLAGS): New variable.  Reported by Franc,ois
       +        Pinard.
       +
       +Mon Mar 10 06:51:17 1997  Ulrich Drepper  <drepper@cygnus.com>
       +
       +        * Makefile.in: Implement handling of libtool.
       +
       +        * gettextP.h: Change data structures for use of generic lowlevel
       +        i18n file handling.
       +
       +Wed Dec  4 20:21:18 1996  Ulrich Drepper  <drepper@cygnus.com>
       +
       +        * textdomain.c: Put parentheses around arguments of memcpy macro
       +        definition.
       +        * localealias.c: Likewise.
       +        * l10nflist.c: Likewise.
       +        * finddomain.c: Likewise.
       +        * bindtextdom.c: Likewise.
       +        Reported by Thomas Esken.
       +
       +Mon Nov 25 22:57:51 1996  Ulrich Drepper  <drepper@cygnus.com>
       +
       +        * textdomain.c: Move definition of `memcpy` macro to right
       +        position.
       +
       +Fri Nov 22 04:01:58 1996  Ulrich Drepper  <drepper@cygnus.com>
       +
       +        * finddomain.c [!HAVE_STRING_H && !_LIBC]: Define memcpy using
       +         bcopy if not already defined.  Reported by Thomas Esken.
       +        * bindtextdom.c: Likewise.
       +        * l10nflist.c: Likewise.
       +        * localealias.c: Likewise.
       +        * textdomain.c: Likewise.
       +
       +Tue Oct 29 11:10:27 1996  Ulrich Drepper  <drepper@cygnus.com>
       +
       +        * Makefile.in (libdir): Change to use exec_prefix instead of
       +         prefix.  Reported by Knut-HåvardAksnes <etokna@eto.ericsson.se>.
       +
       +Sat Aug 31 03:07:09 1996  Ulrich Drepper  <drepper@cygnus.com>
       +
       +        * l10nflist.c (_nl_normalize_codeset): We convert to lower case,
       +        so don't prepend uppercase `ISO' for only numeric arg.
       +
       +Fri Jul 19 00:15:46 1996  Ulrich Drepper  <drepper@cygnus.com>
       +
       +        * l10nflist.c: Move inclusion of argz.h, ctype.h, stdlib.h after
       +        definition of _GNU_SOURCE.  Patch by Roland McGrath.
       +
       +        * Makefile.in (uninstall): Fix another bug with `for' loop and
       +        empty arguments.  Patch by Jim Meyering.  Correct name os
       +        uninstalled files: no intl- prefix anymore.
       +
       +        * Makefile.in (install-data): Again work around shells which
       +        cannot handle mpty for list.  Reported by Jim Meyering.
       +
       +Sat Jul 13 18:11:35 1996  Ulrich Drepper  <drepper@cygnus.com>
       +
       +        * Makefile.in (install): Split goal.  Now depend on install-exec
       +        and install-data.
       +        (install-exec, install-data): New goals.  Created from former
       +        install goal.
       +        Reported by Karl Berry.
       +
       +Sat Jun 22 04:58:14 1996  Ulrich Drepper  <drepper@cygnus.com>
       +
       +        * Makefile.in (MKINSTALLDIRS): New variable.  Path to
       +        mkinstalldirs script.
       +        (install): use MKINSTALLDIRS variable or if the script is not present
       +        try to find it in the $top_scrdir).
       +
       +Wed Jun 19 02:56:56 1996  Ulrich Drepper  <drepper@cygnus.com>
       +
       +        * l10nflist.c: Linux libc *partly* includes the argz_* functions.
       +        Grr.  Work around by renaming the static version and use macros
       +        for renaming.
       +
       +Tue Jun 18 20:11:17 1996  Ulrich Drepper  <drepper@cygnus.com>
       +
       +        * l10nflist.c: Correct presence test macros of __argz_* functions.
       +
       +        * l10nflist.c: Include <argz.h> based on test of it instead when
       +        __argz_* functions are available.
       +        Reported by Andreas Schwab.
       +
       +Thu Jun 13 15:17:44 1996  Ulrich Drepper  <drepper@cygnus.com>
       +
       +        * explodename.c, l10nflist.c: Define NULL for dumb systems.
       +
       +Tue Jun 11 17:05:13 1996  Ulrich Drepper  <drepper@cygnus.com>
       +
       +        * intlh.inst.in, libgettext.h (dcgettext): Rename local variable
       +        result to __result to prevent name clash.
       +
       +        * l10nflist.c, localealias.c, dcgettext.c: Define _GNU_SOURCE to
       +        get prototype for stpcpy and strcasecmp.
       +
       +        * intlh.inst.in, libgettext.h: Move declaration of
       +        `_nl_msg_cat_cntr' outside __extension__ block to prevent warning
       +        from gcc's -Wnested-extern option.
       +
       +Fri Jun  7 01:58:00 1996  Ulrich Drepper  <drepper@cygnus.com>
       +
       +        * Makefile.in (install): Remove comment.
       +
       +Thu Jun  6 17:28:17 1996  Ulrich Drepper  <drepper@cygnus.com>
       +
       +        * Makefile.in (install): Work around for another Buglix stupidity.
       +        Always use an `else' close for `if's.  Reported by Nelson Beebe.
       +
       +        * Makefile.in (intlh.inst): Correct typo in phony rule.
       +        Reported by Nelson Beebe.
       +
       +Thu Jun  6 01:49:52 1996  Ulrich Drepper  <drepper@cygnus.com>
       +
       +        * dcgettext.c (read_alias_file): Rename variable alloca_list to
       +        block_list as the macro calls assume.
       +        Patch by Eric Backus.
       +
       +        * localealias.c [!HAVE_ALLOCA]: Define alloca as macro using
       +        malloc.
       +        (read_alias_file): Rename varriabe alloca_list to block_list as the
       +        macro calls assume.
       +        Patch by Eric Backus.
       +
       +        * l10nflist.c: Correct conditional for <argz.h> inclusion.
       +        Reported by Roland McGrath.
       +
       +        * Makefile.in (all): Depend on all-@USE_INCLUDED_LIBINTL@, not
       +        all-@USE_NLS@.
       +
       +        * Makefile.in (install): intlh.inst comes from local dir, not
       +        $(srcdir).
       +
       +        * Makefile.in (intlh.inst): Special handling of this goal.  If
       +        used in gettext, this is really a rul to construct this file.  If
       +        used in any other package it is defined as a .PHONY rule with
       +        empty body.
       +
       +        * finddomain.c: Extract locale file information handling into
       +        l10nfile.c.  Rename local stpcpy__ function to stpcpy.
       +
       +        * dcgettext.c (stpcpy): Add local definition.
       +
       +        * l10nflist.c: Solve some portability problems.  Patches partly by
       +        Thomas Esken.  Add local definition of stpcpy.
       +
       +Tue Jun  4 02:47:49 1996  Ulrich Drepper  <drepper@cygnus.com>
       +
       +        * intlh.inst.in: Don't depend including <locale.h> on
       +        HAVE_LOCALE_H.  Instead configure must rewrite this fiile
       +        depending on the result of the configure run.
       +
       +        * Makefile.in (install): libintl.inst is now called intlh.inst.
       +        Add rules for updating intlh.inst from intlh.inst.in.
       +
       +        * libintl.inst: Renamed to intlh.inst.in.
       +
       +        * localealias.c, dcgettext.c [__GNUC__]: Define HAVE_ALLOCA to 1
       +        because gcc has __buitlin_alloca.
       +        Reported by Roland McGrath.
       +
       +Mon Jun  3 00:32:16 1996  Ulrich Drepper  <drepper@cygnus.com>
       +
       +        * Makefile.in (installcheck): New goal to fulfill needs of
       +        automake's distcheck.
       +
       +        * Makefile.in (install): Reorder commands so that VERSION is
       +        found.
       +
       +        * Makefile.in (gettextsrcdir): Now use subdirectory intl/ in
       +        @datadir@/gettext.
       +        (COMSRCS): Add l10nfile.c.
       +        (OBJECTS): Add l10nfile.o.
       +        (DISTFILES): Rename to DISTFILE.normal.  Remove $(DISTFILES.common).
       +        (DISTFILE.gettext): Remove $(DISTFILES.common).
       +        (all-gettext): Remove goal.
       +        (install): If $(PACKAGE) = gettext install, otherwose do nothing.  No
       +        package but gettext itself should install libintl.h + headers.
       +        (dist): Extend goal to work for gettext, too.
       +        (dist-gettext): Remove goal.
       +
       +        * dcgettext.c [!HAVE_ALLOCA]: Define macro alloca by using malloc.
       +
       +Sun Jun  2 17:33:06 1996  Ulrich Drepper  <drepper@cygnus.com>
       +
       +        * loadmsgcat.c (_nl_load_domain): Parameter is now comes from
       +        find_l10nfile.
       +
       +Sat Jun  1 02:23:03 1996  Ulrich Drepper  <drepper@cygnus.com>
       +
       +        * l10nflist.c (__argz_next): Add definition.
       +
       +        * dcgettext.c [!HAVE_ALLOCA]: Add code for handling missing alloca
       +        code.  Use new l10nfile handling.
       +
       +        * localealias.c [!HAVE_ALLOCA]: Add code for handling missing
       +        alloca code.
       +
       +        * l10nflist.c: Initial revision.
       +
       +Tue Apr  2 18:51:18 1996  Ulrich Drepper  <drepper@myware>
       +
       +        * Makefile.in (all-gettext): New goal.  Same as all-yes.
       +
       +Thu Mar 28 23:01:22 1996  Karl Eichwalder  <ke@ke.central.de>
       +
       +        * Makefile.in (gettextsrcdir): Define using @datadir@.
       +
       +Tue Mar 26 12:39:14 1996  Ulrich Drepper  <drepper@myware>
       +
       +        * finddomain.c: Include <ctype.h>.  Reported by Roland McGrath.
       +
       +Sat Mar 23 02:00:35 1996  Ulrich Drepper  <drepper@myware>
       +
       +        * finddomain.c (stpcpy): Rename to stpcpy__ to prevent clashing
       +        with external declaration.
       +
       +Sat Mar  2 00:47:09 1996  Ulrich Drepper  <drepper@myware>
       +
       +        * Makefile.in (all-no): Rename from all_no.
       +
       +Sat Feb 17 00:25:59 1996  Ulrich Drepper  <drepper@myware>
       +
       +        * gettextP.h [loaded_domain]: Array `successor' must now contain up
       +        to 63 elements (because of codeset name normalization).
       +
       +        * finddomain.c: Implement codeset name normalization.
       +
       +Thu Feb 15 04:39:09 1996  Ulrich Drepper  <drepper@myware>
       +
       +        * Makefile.in (all): Define to `all-@USE_NLS@'.
       +        (all-yes, all_no): New goals.  `all-no' is noop, `all-yes'
       +        is former all.
       +
       +Mon Jan 15 21:46:01 1996  Howard Gayle  <howard@hal.com>
       +
       +        * localealias.c (alias_compare): Increment string pointers in loop
       +        of strcasecmp replacement.
       +
       +Fri Dec 29 21:16:34 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * Makefile.in (install-src): Who commented this goal out ? :-)
       +
       +Fri Dec 29 15:08:16 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * dcgettext.c (DCGETTEXT): Save `errno'.  Failing system calls
       +        should not effect it because a missing catalog is no error.
       +        Reported by Harald K<o:>nig <koenig@tat.physik.uni-tuebingen.de>.
       +
       +Tue Dec 19 22:09:13 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * Makefile.in (Makefile): Explicitly use $(SHELL) for running
       +        shell scripts.
       +
       +Fri Dec 15 17:34:59 1995  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>
       +
       +        * Makefile.in (install-src): Only install library and header when
       +        we use the own implementation.  Don't do it when using the
       +        system's gettext or catgets functions.
       +
       +        * dcgettext.c (find_msg): Must not swap domain->hash_size here.
       +
       +Sat Dec  9 16:24:37 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * localealias.c, libintl.inst, libgettext.h, hash-string.h,
       +        gettextP.h, finddomain.c, dcgettext.c, cat-compat.c:
       +        Use PARAMS instead of __P.  Suggested by Roland McGrath.
       +
       +Tue Dec  5 11:39:14 1995  Larry Schwimmer  <rosebud@cyclone.stanford.edu>
       +
       +        * libgettext.h: Use `#if !defined (_LIBINTL_H)' instead of `#if
       +        !_LIBINTL_H' because Solaris defines _LIBINTL_H as empty.
       +
       +Mon Dec  4 15:42:07 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * Makefile.in (install-src):
       +        Install libintl.inst instead of libintl.h.install.
       +
       +Sat Dec  2 22:51:38 1995  Marcus Daniels  <marcus@sysc.pdx.edu>
       +
       +        * cat-compat.c (textdomain):
       +        Reverse order in which files are tried you load.  First
       +        try local file, when this failed absolute path.
       +
       +Wed Nov 29 02:03:53 1995  Nelson H. F. Beebe  <beebe@math.utah.edu>
       +
       +        * cat-compat.c (bindtextdomain): Add missing { }.
       +
       +Sun Nov 26 18:21:41 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * libintl.inst: Add missing __P definition.  Reported by Nelson Beebe.
       +
       +        * Makefile.in:
       +        Add dummy `all' and `dvi' goals.  Reported by Tom Tromey.
       +
       +Sat Nov 25 16:12:01 1995  Franc,ois Pinard  <pinard@iro.umontreal.ca>
       +
       +        * hash-string.h: Capitalize arguments of macros.
       +
       +Sat Nov 25 12:01:36 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * Makefile.in (DISTFILES): Prevent files names longer than 13
       +        characters.  libintl.h.glibc->libintl.glibc,
       +        libintl.h.install->libintl.inst.  Reported by Joshua R. Poulson.
       +
       +Sat Nov 25 11:31:12 1995  Eric Backus  <ericb@lsid.hp.com>
       +
       +        * dcgettext.c: Fix bug in preprocessor conditionals.
       +
       +Sat Nov 25 02:35:27 1995  Nelson H. F. Beebe  <beebe@math.utah.edu>
       +
       +        * libgettext.h: Solaris cc does not understand
       +         #if !SYMBOL1 && !SYMBOL2.  Sad        but true.
       +
       +Thu Nov 23 16:22:14 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * hash-string.h (hash_string):
       +        Fix for machine with >32 bit `unsigned long's.
       +
       +        * dcgettext.c (DCGETTEXT):
       +        Fix horrible bug in loop for alternative translation.
       +
       +Thu Nov 23 01:45:29 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * po2tbl.sed.in, linux-msg.sed, xopen-msg.sed:
       +        Some further simplifications in message number generation.
       +
       +Mon Nov 20 21:08:43 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * libintl.h.glibc: Use __const instead of const in prototypes.
       +
       +        * Makefile.in (install-src):
       +        Install libintl.h.install instead of libintl.h.  This
       +        is a stripped-down version.  Suggested by Peter Miller.
       +
       +        * libintl.h.install, libintl.h.glibc: Initial revision.
       +
       +        * localealias.c (_nl_expand_alias, read_alias_file):
       +        Protect prototypes in type casts by __P.
       +
       +Tue Nov 14 16:43:58 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * hash-string.h: Correct prototype for hash_string.
       +
       +Sun Nov 12 12:42:30 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * hash-string.h (hash_string): Add prototype.
       +
       +        * gettextP.h: Fix copyright.
       +        (SWAP): Add prototype.
       +
       +Wed Nov  8 22:56:33 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * localealias.c (read_alias_file): Forgot sizeof.
       +        Avoid calling *printf function.  This introduces a big overhead.
       +        Patch by Roland McGrath.
       +
       +Tue Nov  7 14:21:08 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * finddomain.c, cat-compat.c: Wrong indentation in #if for stpcpy.
       +
       +        * finddomain.c (stpcpy):
       +        Define substitution function local.  The macro was to flaky.
       +
       +        * cat-compat.c: Fix typo.
       +
       +        * xopen-msg.sed, linux-msg.sed:
       +        While bringing message number to right place only accept digits.
       +
       +        * linux-msg.sed, xopen-msg.sed: Now that the counter does not have
       +        leading 0s we don't need to remove them.  Reported by Marcus
       +        Daniels.
       +
       +        * Makefile.in (../po/cat-id-tbl.o): Use $(top_srdir) in
       +        dependency.  Reported by Marcus Daniels.
       +
       +        * cat-compat.c: (stpcpy) [!_LIBC && !HAVE_STPCPY]: Define replacement.
       +        Generally cleanup using #if instead of #ifndef.
       +
       +        * Makefile.in: Correct typos in comment.  By Franc,ois Pinard.
       +
       +Mon Nov  6 00:27:02 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * Makefile.in (install-src): Don't install libintl.h and libintl.a
       +        if we use an available gettext implementation.
       +
       +Sun Nov  5 22:02:08 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * libgettext.h: Fix typo: HAVE_CATGETTS -> HAVE_CATGETS.  Reported
       +        by Franc,ois Pinard.
       +
       +        * libgettext.h: Use #if instead of #ifdef/#ifndef.
       +
       +        * finddomain.c:
       +        Comments describing what has to be done should start with FIXME.
       +
       +Sun Nov  5 19:38:01 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * Makefile.in (DISTFILES): Split.  Use DISTFILES with normal meaning.
       +        DISTFILES.common names the files common to both dist goals.
       +        DISTFILES.gettext are the files only distributed in GNU gettext.
       +
       +Sun Nov  5 17:32:54 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * dcgettext.c (DCGETTEXT): Correct searching in derived locales.
       +        This was necessary since a change in _nl_find_msg several weeks
       +        ago.  I really don't know this is still not fixed.
       +
       +Sun Nov  5 12:43:12 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * loadmsgcat.c (_nl_load_domain): Test for FILENAME == NULL.  This
       +        might mark a special condition.
       +
       +        * finddomain.c (make_entry_rec): Don't make illegal entry as decided.
       +
       +        * Makefile.in (dist): Suppress error message when ln failed.
       +        Get files from $(srcdir) explicitly.
       +
       +        * libgettext.h (gettext_const): Rename to gettext_noop.
       +
       +Fri Nov  3 07:36:50 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * finddomain.c (make_entry_rec):
       +        Protect against wrong locale names by testing mask.
       +
       +        * libgettext.h (gettext_const): Add macro definition.
       +        Capitalize macro arguments.
       +
       +Thu Nov  2 23:15:51 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * finddomain.c (_nl_find_domain):
       +        Test for pointer != NULL before accessing value.
       +        Reported by Tom Tromey.
       +
       +        * gettext.c (NULL):
       +        Define as (void*)0 instad of 0.  Reported by Franc,ois Pinard.
       +
       +Mon Oct 30 21:28:52 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * po2tbl.sed.in: Serious typo bug fixed by Jim Meyering.
       +
       +Sat Oct 28 23:20:47 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * libgettext.h: Disable dcgettext optimization for Solaris 2.3.
       +
       +        * localealias.c (alias_compare):
       +        Peter Miller reported that tolower in some systems is
       +        even dumber than I thought.  Protect call by `isupper'.
       +
       +Fri Oct 27 22:22:51 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * Makefile.in (libdir, includedir): New variables.
       +        (install-src): Install libintl.a and libintl.h in correct dirs.
       +
       +Fri Oct 27 22:07:29 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * Makefile.in (SOURCES): Fix typo: intrl.compat.c -> intl-compat.c.
       +
       +        * po2tbl.sed.in: Patch for buggy SEDs by Christian von Roques.
       +
       +        * localealias.c:
       +        Fix typo and superflous test.  Reported by Christian von Roques.
       +
       +Fri Oct  6 11:52:05 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * finddomain.c (_nl_find_domain):
       +        Correct some remainder from the pre-CEN syntax.  Now
       +        we don't have a constant number of successors anymore.
       +
       +Wed Sep 27 21:41:13 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * Makefile.in (DISTFILES): Add libintl.h.glibc.
       +
       +        * Makefile.in (dist-libc): Add goal for packing sources for glibc.
       +        (COMSRCS, COMHDRS): Splitted to separate sources shared with glibc.
       +
       +        * loadmsgcat.c: Forget to continue #if line.
       +
       +        * localealias.c:
       +        [_LIBC]: Rename strcasecmp to __strcasecmp to keep ANSI C name
       +        space clean.
       +
       +        * dcgettext.c, finddomain.c: Better comment to last change.
       +
       +        * loadmsgcat.c:
       +        [_LIBC]: Rename fstat, open, close, read, mmap, and munmap to
       +        __fstat, __open, __close, __read, __mmap, and __munmap resp
       +        to keep ANSI C name space clean.
       +
       +        * finddomain.c:
       +        [_LIBC]: Rename stpcpy to __stpcpy to keep ANSI C name space clean.
       +
       +        * dcgettext.c:
       +        [_LIBC]: Rename getced and stpcpy to __getcwd and __stpcpy resp to
       +        keep ANSI C name space clean.
       +
       +        * libgettext.h:
       +        Include sys/types.h for those old SysV systems out there.
       +        Reported by Francesco Potorti`.
       +
       +        * loadmsgcat.c (use_mmap): Define if compiled for glibc.
       +
       +        * bindtextdom.c: Include all those standard headers
       +        unconditionally if _LIBC is defined.
       +
       +        * finddomain.c: Fix 2 times defiend -> defined.
       +
       +        * textdomain.c: Include libintl.h instead of libgettext.h when
       +        compiling for glibc.  Include all those standard headers
       +        unconditionally if _LIBC is defined.
       +
       +        * localealias.c, loadmsgcat.c: Prepare to be compiled in glibc.
       +
       +        * gettext.c:
       +        Include libintl.h instead of libgettext.h when compiling for glibc.
       +        Get NULL from stddef.h if we compile for glibc.
       +
       +        * finddomain.c: Include libintl.h instead of libgettext.h when
       +        compiling for glibc.  Include all those standard headers
       +        unconditionally if _LIBC is defined.
       +
       +        * dcgettext.c: Include all those standard headers unconditionally
       +        if _LIBC is defined.
       +
       +        * dgettext.c: If compiled in glibc include libintl.h instead of
       +        libgettext.h.
       +        (locale.h): Don't rely on HAVE_LOCALE_H when compiling for glibc.
       +
       +        * dcgettext.c: If compiled in glibc include libintl.h instead of
       +        libgettext.h.
       +        (getcwd): Don't rely on HAVE_GETCWD when compiling for glibc.
       +
       +        * bindtextdom.c:
       +        If compiled in glibc include libintl.h instead of libgettext.h.
       +
       +Mon Sep 25 22:23:06 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * localealias.c (_nl_expand_alias): Don't call bsearch if NMAP <= 0.
       +        Reported by Marcus Daniels.
       +
       +        * cat-compat.c (bindtextdomain):
       +        String used in putenv must not be recycled.
       +        Reported by Marcus Daniels.
       +
       +        * libgettext.h (__USE_GNU_GETTEXT):
       +        Additional symbol to signal that we use GNU gettext
       +        library.
       +
       +        * cat-compat.c (bindtextdomain):
       +        Fix bug with the strange stpcpy replacement.
       +        Reported by Nelson Beebe.
       +
       +Sat Sep 23 08:23:51 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * cat-compat.c: Include <string.h> for stpcpy prototype.
       +
       +        * localealias.c (read_alias_file):
       +        While expand strdup code temporary variable `cp' hided
       +        higher level variable with same name.  Rename to `tp'.
       +
       +        * textdomain.c (textdomain):
       +        Avoid warning by using temporary variable in strdup code.
       +
       +        * finddomain.c (_nl_find_domain): Remove unused variable `application'.
       +
       +Thu Sep 21 15:51:44 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * localealias.c (alias_compare):
       +        Use strcasecmp() only if available.  Else use
       +        implementation in place.
       +
       +        * intl-compat.c:
       +        Wrapper functions now call *__ functions instead of __*.
       +
       +        * libgettext.h: Declare prototypes for *__ functions instead for __*.
       +
       +        * cat-compat.c, loadmsgcat.c:
       +        Don't use xmalloc, xstrdup, and stpcpy.  These functions are not part
       +        of the standard libc and so prevent libintl.a from being used
       +        standalone.
       +
       +        * bindtextdom.c:
       +        Don't use xmalloc, xstrdup, and stpcpy.  These functions are not part
       +        of the standard libc and so prevent libintl.a from being used
       +        standalone.
       +        Rename to bindtextdomain__ if not used in GNU C Library.
       +
       +        * dgettext.c:
       +        Rename function to dgettext__ if not used in GNU C Library.
       +
       +        * gettext.c:
       +        Don't use xmalloc, xstrdup, and stpcpy.  These functions are not part
       +        of the standard libc and so prevent libintl.a from being used
       +        standalone.
       +        Functions now called gettext__ if not used in GNU C Library.
       +
       +        * dcgettext.c, localealias.c, textdomain.c, finddomain.c:
       +        Don't use xmalloc, xstrdup, and stpcpy.  These functions are not part
       +        of the standard libc and so prevent libintl.a from being used
       +        standalone.
       +
       +Sun Sep 17 23:14:49 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * finddomain.c: Correct some bugs in handling of CEN standard
       +         locale definitions.
       +
       +Thu Sep  7 01:49:28 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * finddomain.c: Implement CEN syntax.
       +
       +        * gettextP.h (loaded_domain): Extend number of successors to 31.
       +
       +Sat Aug 19 19:25:29 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * Makefile.in (aliaspath): Remove path to X11 locale dir.
       +
       +        * Makefile.in: Make install-src depend on install.  This helps
       +         gettext to install the sources and other packages can use the
       +         install goal.
       +
       +Sat Aug 19 15:19:33 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * Makefile.in (uninstall): Remove stuff installed by install-src.
       +
       +Tue Aug 15 13:13:53 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * VERSION.in: Initial revision.
       +
       +        * Makefile.in (DISTFILES):
       +        Add VERSION file.  This is not necessary for gettext, but
       +        for other packages using this library.
       +
       +Tue Aug 15 06:16:44 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * gettextP.h (_nl_find_domain):
       +        New prototype after changing search strategy.
       +
       +        * finddomain.c (_nl_find_domain):
       +        We now try only to find a specified catalog.  Fall back to other
       +        catalogs listed in the locale list is now done in __dcgettext.
       +
       +        * dcgettext.c (__dcgettext):
       +        Now we provide message fall back even to different languages.
       +        I.e. if a message is not available in one language all the other
       +         in the locale list a tried.  Formerly fall back was only possible
       +         within one language.  Implemented by moving one loop from
       +         _nl_find_domain to here.
       +
       +Mon Aug 14 23:45:50 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * Makefile.in (gettextsrcdir):
       +        Directory where source of GNU gettext library are made
       +        available.
       +        (INSTALL, INSTALL_DATA): Programs used for installing sources.
       +        (gettext-src): New.  Rule to install GNU gettext sources for use in
       +        gettextize shell script.
       +
       +Sun Aug 13 14:40:48 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * loadmsgcat.c (_nl_load_domain):
       +        Use mmap for loading only when munmap function is
       +        also available.
       +
       +        * Makefile.in (install): Depend on `all' goal.
       +
       +Wed Aug  9 11:04:33 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * localealias.c (read_alias_file):
       +        Do not overwrite '\n' when terminating alias value string.
       +
       +        * localealias.c (read_alias_file):
       +        Handle long lines.  Ignore the rest not fitting in
       +        the buffer after the initial `fgets' call.
       +
       +Wed Aug  9 00:54:29 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * gettextP.h (_nl_load_domain):
       +        Add prototype, replacing prototype for _nl_load_msg_cat.
       +
       +        * finddomain.c (_nl_find_domain):
       +        Remove unneeded variable filename and filename_len.
       +        (expand_alias): Remove prototype because functions does not
       +         exist anymore.
       +
       +        * localealias.c (read_alias_file):
       +        Change type of fname_len parameter to int.
       +        (xmalloc): Add prototype.
       +
       +        * loadmsgcat.c: Better prototypes for xmalloc.
       +
       +Tue Aug  8 22:30:39 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * finddomain.c (_nl_find_domain):
       +        Allow alias name to be constructed from the four components.
       +
       +        * Makefile.in (aliaspath): New variable.  Set to preliminary value.
       +        (SOURCES): Add localealias.c.
       +        (OBJECTS): Add localealias.o.
       +
       +        * gettextP.h: Add prototype for _nl_expand_alias.
       +
       +        * finddomain.c: Aliasing handled in intl/localealias.c.
       +
       +        * localealias.c: Aliasing for locale names.
       +
       +        * bindtextdom.c: Better prototypes for xmalloc and xstrdup.
       +
       +Mon Aug  7 23:47:42 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * Makefile.in (DISTFILES): gettext.perl is now found in misc/.
       +
       +        * cat-compat.c (bindtextdomain):
       +        Correct implementation.  dirname parameter was not used.
       +        Reported by Marcus Daniels.
       +
       +        * gettextP.h (loaded_domain):
       +        New fields `successor' and `decided' for oo, lazy
       +        message handling implementation.
       +
       +        * dcgettext.c:
       +        Adopt for oo, lazy message handliing.
       +          Now we can inherit translations from less specific locales.
       +        (find_msg): New function.
       +
       +        * loadmsgcat.c, finddomain.c:
       +        Complete rewrite.  Implement oo, lazy message handling :-).
       +          We now have an additional environment variable `LANGUAGE' with
       +         a higher priority than LC_ALL for the LC_MESSAGE locale.
       +          Here we can set a colon separated list of specifications each
       +         of the form `language[_territory[.codeset]][@modifier]'.
       +
       +Sat Aug  5 09:55:42 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * finddomain.c (unistd.h):
       +        Include to get _PC_PATH_MAX defined on system having it.
       +
       +Fri Aug  4 22:42:00 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * finddomain.c (stpcpy): Include prototype.
       +
       +        * Makefile.in (dist): Remove `copying instead' message.
       +
       +Wed Aug  2 18:52:03 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * Makefile.in (ID, TAGS): Do not use $^.
       +
       +Tue Aug  1 20:07:11 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * Makefile.in (TAGS, ID): Use $^ as command argument.
       +        (TAGS): Give etags -o option t write to current directory,
       +         not $(srcdir).
       +        (ID): Use $(srcdir) instead os $(top_srcdir)/src.
       +        (distclean): Remove ID.
       +
       +Sun Jul 30 11:51:46 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * Makefile.in (gnulocaledir):
       +        New variable, always using share/ for data directory.
       +        (DEFS): Add GNULOCALEDIR, used in finddomain.c.
       +
       +        * finddomain.c (_nl_default_dirname):
       +        Set to GNULOCALEDIR, because it always has to point
       +        to the directory where GNU gettext Library writes it to.
       +
       +        * intl-compat.c (textdomain, bindtextdomain):
       +        Undefine macros before function definition.
       +
       +Sat Jul 22 01:10:02 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * libgettext.h (_LIBINTL_H):
       +        Protect definition in case where this file is included as
       +        libgettext.h on Solaris machines.  Add comment about this.
       +
       +Wed Jul 19 02:36:42 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * intl-compat.c (textdomain): Correct typo.
       +
       +Wed Jul 19 01:51:35 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * dcgettext.c (dcgettext): Function now called __dcgettext.
       +
       +        * dgettext.c (dgettext): Now called __dgettext and calls
       +         __dcgettext.
       +
       +        * gettext.c (gettext):
       +        Function now called __gettext and calls __dgettext.
       +
       +        * textdomain.c (textdomain): Function now called __textdomain.
       +
       +        * bindtextdom.c (bindtextdomain): Function now called
       +         __bindtextdomain.
       +
       +        * intl-compat.c: Initial revision.
       +
       +        * Makefile.in (SOURCES): Add intl-compat.c.
       +        (OBJECTS): We always compile the GNU gettext library functions.
       +          OBJECTS contains all objects but cat-compat.o, ../po/cat-if-tbl.o,
       +         and intl-compat.o.
       +          (GETTOBJS): Contains now only intl-compat.o.
       +
       +        * libgettext.h:
       +        Re-include protection matches dualistic character of libgettext.h.
       +        For all functions in GNU gettext library define __ counter part.
       +
       +        * finddomain.c (strchr): Define as index if not found in C library.
       +        (_nl_find_domain): For relative paths paste / in between.
       +
       +Tue Jul 18 16:37:45 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * loadmsgcat.c, finddomain.c: Add inclusion of sys/types.h.
       +
       +        * xopen-msg.sed: Fix bug with `msgstr ""' lines.
       +        A little bit better comments.
       +
       +Tue Jul 18 01:18:27 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * Makefile.in:
       +        po-mode.el, makelinks, combine-sh are now found in ../misc.
       +
       +        * po-mode.el, makelinks, combine-sh, elisp-comp:
       +        Moved to ../misc/.
       +
       +        * libgettext.h, gettextP.h, gettext.h: Uniform test for __STDC__.
       +
       +Sun Jul 16 22:33:02 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * Makefile.in (INSTALL, INSTALL_DATA): New variables.
       +        (install-data, uninstall): Install/uninstall .elc file.
       +
       +        * po-mode.el (Installation comment):
       +        Add .pox as possible extension of .po files.
       +
       +Sun Jul 16 13:23:27 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * elisp-comp: Complete new version by Franc,ois: This does not
       +         fail when not compiling in the source directory.
       +
       +Sun Jul 16 00:12:17 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * Makefile.in (../po/cat-id-tbl.o):
       +        Use $(MAKE) instead of make for recursive make.
       +
       +        * Makefile.in (.el.elc): Use $(SHELL) instead of /bin/sh.
       +        (install-exec): Add missing dummy goal.
       +        (install-data, uninstall): @ in multi-line shell command at
       +         beginning, not in front of echo.  Reported by Eric Backus.
       +
       +Sat Jul 15 00:21:28 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * Makefile.in (DISTFILES):
       +        Rename libgettext.perl to gettext.perl to fit in 14 chars
       +        file systems.
       +
       +        * gettext.perl:
       +         Rename to gettext.perl to fit in 14 chars file systems.
       +
       +Thu Jul 13 23:17:20 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * cat-compat.c: If !STDC_HEADERS try to include malloc.h.
       +
       +Thu Jul 13 20:55:02 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * po2tbl.sed.in: Pretty printing.
       +
       +        * linux-msg.sed, xopen-msg.sed:
       +        Correct bugs with handling substitute flags in branches.
       +
       +        * hash-string.h (hash_string):
       +        Old K&R compilers don't under stand `unsigned char'.
       +
       +        * gettext.h (nls_uint32):
       +        Some old K&R compilers (eg HP) don't understand `unsigned int'.
       +
       +        * cat-compat.c (msg_to_cat_id): De-ANSI-fy prototypes.
       +
       +Thu Jul 13 01:34:33 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * Makefile.in (ELCFILES): New variable.
       +        (DISTFILES): Add elisp-comp.
       +        Add implicit rule for .el -> .elc compilation.
       +        (install-data): install $ELCFILES
       +        (clean): renamed po-to-tbl and po-to-msg to po2tbl and po2msg resp.
       +
       +        * elisp-comp: Initial revision
       +
       +Wed Jul 12 16:14:52 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * Makefile.in:
       +        cat-id-tbl.c is now found in po/.  This enables us to use an identical
       +        intl/ directory in all packages.
       +
       +        * dcgettext.c (dcgettext): hashing does not work for table size <= 2.
       +
       +        * textdomain.c: fix typo (#if def -> #if defined)
       +
       +Tue Jul 11 18:44:43 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * Makefile.in (stamp-cat-id): use top_srcdir to address source files
       +        (DISTFILES,distclean): move tupdate.perl to src/
       +
       +        * po-to-tbl.sed.in:
       +        add additional jump to clear change flag to recognize multiline strings
       +
       +Tue Jul 11 01:32:50 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * textdomain.c: Protect inclusion of stdlib.h and string.h.
       +
       +        * loadmsgcat.c: Protect inclusion of stdlib.h.
       +
       +        * libgettext.h: Protect inclusion of locale.h.
       +        Allow use in C++ programs.
       +        Define NULL is not happened already.
       +
       +        * Makefile.in (DISTFILES): ship po-to-tbl.sed.in instead of
       +        po-to-tbl.sed.
       +        (distclean): remove po-to-tbl.sed and tupdate.perl.
       +
       +        * tupdate.perl.in: Substitute Perl path even in exec line.
       +        Don't include entries without translation from old .po file.
       +
       +Tue Jul  4 00:41:51 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * tupdate.perl.in: use "Updated: " in msgid "".
       +
       +        * cat-compat.c: Fix typo (LOCALDIR -> LOCALEDIR).
       +         Define getenv if !__STDC__.
       +
       +        * bindtextdom.c: Protect stdlib.h and string.h inclusion.
       +         Define free if !__STDC__.
       +
       +        * finddomain.c: Change DEF_MSG_DOM_DIR to LOCALEDIR.
       +         Define free if !__STDC__.
       +
       +        * cat-compat.c: Change DEF_MSG_DOM_DIR to LOCALEDIR.
       +
       +Mon Jul  3 23:56:30 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * Makefile.in: Use LOCALEDIR instead of DEF_MSG_DOM_DIR.
       +        Remove unneeded $(srcdir) from Makefile.in dependency.
       +
       +        * makelinks: Add copyright and short description.
       +
       +        * po-mode.el: Last version for 0.7.
       +
       +        * tupdate.perl.in: Fix die message.
       +
       +        * dcgettext.c: Protect include of string.h.
       +
       +        * gettext.c: Protect include of stdlib.h and further tries to get NULL.
       +
       +        * finddomain.c: Some corrections in includes.
       +
       +        * Makefile.in (INCLUDES): Prune list correct path to Makefile.in.
       +
       +        * po-to-tbl.sed: Adopt for new .po file format.
       +
       +        * linux-msg.sed, xopen-msg.sed: Adopt for new .po file format.
       +
       +Sun Jul  2 23:55:03 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * tupdate.perl.in: Complete rewrite for new .po file format.
       +
       +Sun Jul  2 02:06:50 1995  Ulrich Drepper  <drepper@myware>
       +
       +        * First official release.  This directory contains all the code
       +        needed to internationalize own packages.  It provides functions
       +        which allow to use the X/Open catgets function with an interface
       +        like the Uniforum gettext function.  For system which does not
       +        have neither of those a complete implementation is provided.
 (DIR) diff --git a/intl/Makefile b/intl/Makefile
       t@@ -0,0 +1,214 @@
       +# Generated automatically from Makefile.in by configure.
       +# Makefile for directory with message catalog handling in GNU NLS Utilities.
       +# Copyright (C) 1995, 1996, 1997 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.
       +
       +PACKAGE = dopewars
       +VERSION = 1.4.8-devel
       +
       +SHELL = /bin/sh
       +
       +srcdir = .
       +top_srcdir = ..
       +top_builddir = ..
       +
       +prefix = /usr/local
       +exec_prefix = ${prefix}
       +transform = s,x,x,
       +libdir = $(exec_prefix)/lib
       +includedir = $(prefix)/include
       +datadir = $(prefix)/share
       +localedir = $(datadir)/locale
       +gnulocaledir = $(prefix)/share/locale
       +gettextsrcdir = ${prefix}/share/gettext/intl
       +aliaspath = $(localedir):.
       +subdir = intl
       +
       +INSTALL = /usr/bin/install -c
       +INSTALL_DATA = ${INSTALL} -m 644
       +MKINSTALLDIRS = ./mkinstalldirs
       +
       +l = 
       +
       +AR = ar
       +CC = gcc
       +LIBTOOL = @LIBTOOL@
       +RANLIB = ranlib
       +
       +DEFS = -DLOCALEDIR=\"$(localedir)\" -DGNULOCALEDIR=\"$(gnulocaledir)\" \
       +-DLOCALE_ALIAS_PATH=\"$(aliaspath)\" -DHAVE_CONFIG_H
       +CPPFLAGS = 
       +CFLAGS = -g -O2 -I/usr/lib/glib/include -Wall -DDATADIR=\"${prefix}/share\"
       +LDFLAGS =  -L/usr/lib -lglib
       +
       +COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS)
       +
       +HEADERS = $(COMHDRS) libgettext.h loadinfo.h
       +COMHDRS = gettext.h gettextP.h hash-string.h
       +SOURCES = $(COMSRCS) intl-compat.c cat-compat.c
       +COMSRCS = bindtextdom.c dcgettext.c dgettext.c gettext.c \
       +finddomain.c loadmsgcat.c localealias.c textdomain.c l10nflist.c \
       +explodename.c
       +OBJECTS =  bindtextdom.$lo dcgettext.$lo dgettext.$lo gettext.$lo \
       +finddomain.$lo loadmsgcat.$lo localealias.$lo textdomain.$lo l10nflist.$lo \
       +explodename.$lo
       +CATOBJS = cat-compat.$lo ../po/cat-id-tbl.$lo
       +GETTOBJS = intl-compat.$lo
       +DISTFILES.common = ChangeLog Makefile.in linux-msg.sed po2tbl.sed.in \
       +xopen-msg.sed $(HEADERS) $(SOURCES)
       +DISTFILES.normal = VERSION
       +DISTFILES.gettext = libintl.glibc intlh.inst.in
       +
       +.SUFFIXES:
       +.SUFFIXES: .c .o .lo
       +.c.o:
       +        $(COMPILE) $<
       +.c.lo:
       +        $(LIBTOOL) --mode=compile $(COMPILE) $<
       +
       +INCLUDES = -I.. -I. -I$(top_srcdir)/intl -I$(top_srcdir)/lib
       +
       +all: all-no
       +
       +all-yes: libintl.$la intlh.inst
       +all-no:
       +
       +libintl.a: $(OBJECTS)
       +        rm -f $@
       +        $(AR) cru $@ $(OBJECTS)
       +        $(RANLIB) $@
       +
       +libintl.la: $(OBJECTS)
       +        $(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $@ $(OBJECTS) \
       +                   -version-info 1:0 -rpath $(libdir)
       +
       +../po/cat-id-tbl.$lo: ../po/cat-id-tbl.c $(top_srcdir)/po/$(PACKAGE).pot
       +        cd ../po && $(MAKE) cat-id-tbl.$lo
       +
       +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 gettext() function in its C library or in a
       +# separate library or use the catgets interface.  A special case is
       +# where configure found a previously installed GNU gettext 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 '' = '$(GETTOBJS)'; then \
       +          if test -r $(MKINSTALLDIRS); then \
       +            $(MKINSTALLDIRS) $(libdir) $(includedir); \
       +          else \
       +            $(top_srcdir)/mkinstalldirs $(libdir) $(includedir); \
       +          fi; \
       +          $(INSTALL_DATA) intlh.inst $(includedir)/libintl.h; \
       +          $(INSTALL_DATA) libintl.a $(libdir)/libintl.a; \
       +        else \
       +          : ; \
       +        fi
       +install-data: all
       +        if test "$(PACKAGE)" = "gettext"; then \
       +          if test -r $(MKINSTALLDIRS); then \
       +            $(MKINSTALLDIRS) $(gettextsrcdir); \
       +          else \
       +            $(top_srcdir)/mkinstalldirs $(gettextsrcdir); \
       +          fi; \
       +          $(INSTALL_DATA) VERSION $(gettextsrcdir)/VERSION; \
       +          dists="$(DISTFILES.common)"; \
       +          for file in $$dists; do \
       +            $(INSTALL_DATA) $(srcdir)/$$file $(gettextsrcdir)/$$file; \
       +          done; \
       +        else \
       +          : ; \
       +        fi
       +
       +# Define this as empty until I found a useful application.
       +installcheck:
       +
       +uninstall:
       +        dists="$(DISTFILES.common)"; \
       +        for file in $$dists; do \
       +          rm -f $(gettextsrcdir)/$$file; \
       +        done
       +
       +info dvi:
       +
       +$(OBJECTS): ../config.h libgettext.h
       +bindtextdom.$lo finddomain.$lo loadmsgcat.$lo: gettextP.h gettext.h loadinfo.h
       +dcgettext.$lo: gettextP.h gettext.h hash-string.h loadinfo.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 *.o *.lo core core.*
       +
       +clean: mostlyclean
       +
       +distclean: clean
       +        rm -f Makefile ID TAGS po2msg.sed po2tbl.sed
       +
       +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 $(DISTFILES)
       +        if test "$(PACKAGE)" = gettext; then \
       +          additional="$(DISTFILES.gettext)"; \
       +        else \
       +          additional="$(DISTFILES.normal)"; \
       +        fi; \
       +        for file in $(DISTFILES.common) $$additional; do \
       +          ln $(srcdir)/$$file $(distdir) 2> /dev/null \
       +            || cp -p $(srcdir)/$$file $(distdir); \
       +        done
       +
       +dist-libc:
       +        tar zcvf intl-glibc.tar.gz $(COMSRCS) $(COMHDRS) libintl.h.glibc
       +
       +Makefile: Makefile.in ../config.status
       +        cd .. \
       +          && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
       +
       +# The dependency for intlh.inst is different in gettext and all other
       +# packages.  Because we cannot you GNU make features we have to solve
       +# the problem while rewriting Makefile.in.
       +#YES#intlh.inst: intlh.inst.in ../config.status
       +#YES#        cd .. \
       +#YES#        && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= \
       +#YES#          $(SHELL) ./config.status
       +.PHONY: intlh.inst
       +intlh.inst:
       +
       +# 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:
 (DIR) diff --git a/intl/Makefile.in b/intl/Makefile.in
       t@@ -0,0 +1,214 @@
       +# Makefile for directory with message catalog handling in GNU NLS Utilities.
       +# Copyright (C) 1995, 1996, 1997 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.
       +
       +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 = $(exec_prefix)/lib
       +includedir = $(prefix)/include
       +datadir = $(prefix)/@DATADIRNAME@
       +localedir = $(datadir)/locale
       +gnulocaledir = $(prefix)/share/locale
       +gettextsrcdir = @datadir@/gettext/intl
       +aliaspath = $(localedir):.
       +subdir = intl
       +
       +INSTALL = @INSTALL@
       +INSTALL_DATA = @INSTALL_DATA@
       +MKINSTALLDIRS = @MKINSTALLDIRS@
       +
       +l = @l@
       +
       +AR = ar
       +CC = @CC@
       +LIBTOOL = @LIBTOOL@
       +RANLIB = @RANLIB@
       +
       +DEFS = -DLOCALEDIR=\"$(localedir)\" -DGNULOCALEDIR=\"$(gnulocaledir)\" \
       +-DLOCALE_ALIAS_PATH=\"$(aliaspath)\" @DEFS@
       +CPPFLAGS = @CPPFLAGS@
       +CFLAGS = @CFLAGS@
       +LDFLAGS = @LDFLAGS@
       +
       +COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS)
       +
       +HEADERS = $(COMHDRS) libgettext.h loadinfo.h
       +COMHDRS = gettext.h gettextP.h hash-string.h
       +SOURCES = $(COMSRCS) intl-compat.c cat-compat.c
       +COMSRCS = bindtextdom.c dcgettext.c dgettext.c gettext.c \
       +finddomain.c loadmsgcat.c localealias.c textdomain.c l10nflist.c \
       +explodename.c
       +OBJECTS = @INTLOBJS@ bindtextdom.$lo dcgettext.$lo dgettext.$lo gettext.$lo \
       +finddomain.$lo loadmsgcat.$lo localealias.$lo textdomain.$lo l10nflist.$lo \
       +explodename.$lo
       +CATOBJS = cat-compat.$lo ../po/cat-id-tbl.$lo
       +GETTOBJS = intl-compat.$lo
       +DISTFILES.common = ChangeLog Makefile.in linux-msg.sed po2tbl.sed.in \
       +xopen-msg.sed $(HEADERS) $(SOURCES)
       +DISTFILES.normal = VERSION
       +DISTFILES.gettext = libintl.glibc intlh.inst.in
       +
       +.SUFFIXES:
       +.SUFFIXES: .c .o .lo
       +.c.o:
       +        $(COMPILE) $<
       +.c.lo:
       +        $(LIBTOOL) --mode=compile $(COMPILE) $<
       +
       +INCLUDES = -I.. -I. -I$(top_srcdir)/intl -I$(top_srcdir)/lib
       +
       +all: all-@USE_INCLUDED_LIBINTL@
       +
       +all-yes: libintl.$la intlh.inst
       +all-no:
       +
       +libintl.a: $(OBJECTS)
       +        rm -f $@
       +        $(AR) cru $@ $(OBJECTS)
       +        $(RANLIB) $@
       +
       +libintl.la: $(OBJECTS)
       +        $(LIBTOOL) --mode=link $(CC) $(LDFLAGS) -o $@ $(OBJECTS) \
       +                   -version-info 1:0 -rpath $(libdir)
       +
       +../po/cat-id-tbl.$lo: ../po/cat-id-tbl.c $(top_srcdir)/po/$(PACKAGE).pot
       +        cd ../po && $(MAKE) cat-id-tbl.$lo
       +
       +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 gettext() function in its C library or in a
       +# separate library or use the catgets interface.  A special case is
       +# where configure found a previously installed GNU gettext 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 \
       +          if test -r $(MKINSTALLDIRS); then \
       +            $(MKINSTALLDIRS) $(libdir) $(includedir); \
       +          else \
       +            $(top_srcdir)/mkinstalldirs $(libdir) $(includedir); \
       +          fi; \
       +          $(INSTALL_DATA) intlh.inst $(includedir)/libintl.h; \
       +          $(INSTALL_DATA) libintl.a $(libdir)/libintl.a; \
       +        else \
       +          : ; \
       +        fi
       +install-data: all
       +        if test "$(PACKAGE)" = "gettext"; then \
       +          if test -r $(MKINSTALLDIRS); then \
       +            $(MKINSTALLDIRS) $(gettextsrcdir); \
       +          else \
       +            $(top_srcdir)/mkinstalldirs $(gettextsrcdir); \
       +          fi; \
       +          $(INSTALL_DATA) VERSION $(gettextsrcdir)/VERSION; \
       +          dists="$(DISTFILES.common)"; \
       +          for file in $$dists; do \
       +            $(INSTALL_DATA) $(srcdir)/$$file $(gettextsrcdir)/$$file; \
       +          done; \
       +        else \
       +          : ; \
       +        fi
       +
       +# Define this as empty until I found a useful application.
       +installcheck:
       +
       +uninstall:
       +        dists="$(DISTFILES.common)"; \
       +        for file in $$dists; do \
       +          rm -f $(gettextsrcdir)/$$file; \
       +        done
       +
       +info dvi:
       +
       +$(OBJECTS): ../config.h libgettext.h
       +bindtextdom.$lo finddomain.$lo loadmsgcat.$lo: gettextP.h gettext.h loadinfo.h
       +dcgettext.$lo: gettextP.h gettext.h hash-string.h loadinfo.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 *.o *.lo core core.*
       +
       +clean: mostlyclean
       +
       +distclean: clean
       +        rm -f Makefile ID TAGS po2msg.sed po2tbl.sed
       +
       +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 $(DISTFILES)
       +        if test "$(PACKAGE)" = gettext; then \
       +          additional="$(DISTFILES.gettext)"; \
       +        else \
       +          additional="$(DISTFILES.normal)"; \
       +        fi; \
       +        for file in $(DISTFILES.common) $$additional; do \
       +          ln $(srcdir)/$$file $(distdir) 2> /dev/null \
       +            || cp -p $(srcdir)/$$file $(distdir); \
       +        done
       +
       +dist-libc:
       +        tar zcvf intl-glibc.tar.gz $(COMSRCS) $(COMHDRS) libintl.h.glibc
       +
       +Makefile: Makefile.in ../config.status
       +        cd .. \
       +          && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= $(SHELL) ./config.status
       +
       +# The dependency for intlh.inst is different in gettext and all other
       +# packages.  Because we cannot you GNU make features we have to solve
       +# the problem while rewriting Makefile.in.
       +@GT_YES@intlh.inst: intlh.inst.in ../config.status
       +@GT_YES@        cd .. \
       +@GT_YES@        && CONFIG_FILES=$(subdir)/$@ CONFIG_HEADERS= \
       +@GT_YES@          $(SHELL) ./config.status
       +@GT_NO@.PHONY: intlh.inst
       +@GT_NO@intlh.inst:
       +
       +# 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:
 (DIR) diff --git a/intl/VERSION b/intl/VERSION
       t@@ -0,0 +1 @@
       +GNU gettext library from gettext-0.10.35
 (DIR) diff --git a/intl/bindtextdom.c b/intl/bindtextdom.c
       t@@ -0,0 +1,203 @@
       +/* Implementation of the bindtextdomain(3) function
       +   Copyright (C) 1995, 1996, 1997, 1998 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.  */
       +
       +#ifdef HAVE_CONFIG_H
       +# include <config.h>
       +#endif
       +
       +#if defined STDC_HEADERS || defined _LIBC
       +# include <stdlib.h>
       +#else
       +# ifdef HAVE_MALLOC_H
       +#  include <malloc.h>
       +# else
       +void free ();
       +# endif
       +#endif
       +
       +#if defined HAVE_STRING_H || defined _LIBC
       +# include <string.h>
       +#else
       +# include <strings.h>
       +# ifndef memcpy
       +#  define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num)
       +# endif
       +#endif
       +
       +#ifdef _LIBC
       +# include <libintl.h>
       +#else
       +# include "libgettext.h"
       +#endif
       +#include "gettext.h"
       +#include "gettextP.h"
       +
       +/* @@ 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;
       +
       +
       +/* 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
       +# ifndef strdup
       +#  define strdup(str) __strdup (str)
       +# endif
       +#else
       +# define BINDTEXTDOMAIN bindtextdomain__
       +#endif
       +
       +/* 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;
       +{
       +  struct binding *binding;
       +
       +  /* Some sanity checks.  */
       +  if (domainname == NULL || domainname[0] == '\0')
       +    return NULL;
       +
       +  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 (dirname == NULL)
       +    /* The current binding has be to returned.  */
       +    return binding == NULL ? (char *) _nl_default_dirname : binding->dirname;
       +
       +  if (binding != NULL)
       +    {
       +      /* The domain is already bound.  If the new value and the old
       +         one are equal we simply do nothing.  Otherwise replace the
       +         old binding.  */
       +      if (strcmp (dirname, binding->dirname) != 0)
       +        {
       +          char *new_dirname;
       +
       +          if (strcmp (dirname, _nl_default_dirname) == 0)
       +            new_dirname = (char *) _nl_default_dirname;
       +          else
       +            {
       +#if defined _LIBC || defined HAVE_STRDUP
       +              new_dirname = strdup (dirname);
       +              if (new_dirname == NULL)
       +                return NULL;
       +#else
       +              size_t len = strlen (dirname) + 1;
       +              new_dirname = (char *) malloc (len);
       +              if (new_dirname == NULL)
       +                return NULL;
       +
       +              memcpy (new_dirname, dirname, len);
       +#endif
       +            }
       +
       +          if (binding->dirname != _nl_default_dirname)
       +            free (binding->dirname);
       +
       +          binding->dirname = new_dirname;
       +        }
       +    }
       +  else
       +    {
       +      /* We have to create a new binding.  */
       +#if !defined _LIBC && !defined HAVE_STRDUP
       +      size_t len;
       +#endif
       +      struct binding *new_binding =
       +        (struct binding *) malloc (sizeof (*new_binding));
       +
       +      if (new_binding == NULL)
       +        return NULL;
       +
       +#if defined _LIBC || defined HAVE_STRDUP
       +      new_binding->domainname = strdup (domainname);
       +      if (new_binding->domainname == NULL)
       +        return NULL;
       +#else
       +      len = strlen (domainname) + 1;
       +      new_binding->domainname = (char *) malloc (len);
       +      if (new_binding->domainname == NULL)
       +        return NULL;
       +      memcpy (new_binding->domainname, domainname, len);
       +#endif
       +
       +      if (strcmp (dirname, _nl_default_dirname) == 0)
       +        new_binding->dirname = (char *) _nl_default_dirname;
       +      else
       +        {
       +#if defined _LIBC || defined HAVE_STRDUP
       +          new_binding->dirname = strdup (dirname);
       +          if (new_binding->dirname == NULL)
       +            return NULL;
       +#else
       +          len = strlen (dirname) + 1;
       +          new_binding->dirname = (char *) malloc (len);
       +          if (new_binding->dirname == NULL)
       +            return NULL;
       +          memcpy (new_binding->dirname, dirname, len);
       +#endif
       +        }
       +
       +      /* 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;
       +        }
       +
       +      binding = new_binding;
       +    }
       +
       +  return binding->dirname;
       +}
       +
       +#ifdef _LIBC
       +/* Alias for function name in GNU C Library.  */
       +weak_alias (__bindtextdomain, bindtextdomain);
       +#endif
 (DIR) diff --git a/intl/cat-compat.c b/intl/cat-compat.c
       t@@ -0,0 +1,262 @@
       +/* Compatibility code for gettext-using-catgets interface.
       +   Copyright (C) 1995, 1997 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.  */
       +
       +#ifdef HAVE_CONFIG_H
       +# include <config.h>
       +#endif
       +
       +#include <stdio.h>
       +
       +#ifdef STDC_HEADERS
       +# include <stdlib.h>
       +# include <string.h>
       +#else
       +char *getenv ();
       +# ifdef HAVE_MALLOC_H
       +#  include <malloc.h>
       +# endif
       +#endif
       +
       +#ifdef HAVE_NL_TYPES_H
       +# include <nl_types.h>
       +#endif
       +
       +#include "libgettext.h"
       +
       +/* @@ end of prolog @@ */
       +
       +/* 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.  And even worse: POSIX
       +   defines this not at all.  So we can use this feature only on selected
       +   system (e.g. those using GNU C Library).  */
       +#ifdef _LIBC
       +# define HAVE_LOCALE_NULL
       +#endif
       +
       +/* The catalog descriptor.  */
       +static nl_catd catalog = (nl_catd) -1;
       +
       +/* Name of the default catalog.  */
       +static const char default_catalog_name[] = "messages";
       +
       +/* Name of currently used catalog.  */
       +static const char *catalog_name = default_catalog_name;
       +
       +/* Get ID for given string.  If not found return -1.  */
       +static int msg_to_cat_id PARAMS ((const char *msg));
       +
       +/* Substitution for systems lacking this function in their C library.  */
       +#if !_LIBC && !HAVE_STPCPY
       +static char *stpcpy PARAMS ((char *dest, const char *src));
       +#endif
       +
       +
       +/* Set currently used domain/catalog.  */
       +char *
       +textdomain (domainname)
       +     const char *domainname;
       +{
       +  nl_catd new_catalog;
       +  char *new_name;
       +  size_t new_name_len;
       +  char *lang;
       +
       +#if defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES \
       +    && defined HAVE_LOCALE_NULL
       +  lang = setlocale (LC_MESSAGES, NULL);
       +#else
       +  lang = getenv ("LC_ALL");
       +  if (lang == NULL || lang[0] == '\0')
       +    {
       +      lang = getenv ("LC_MESSAGES");
       +      if (lang == NULL || lang[0] == '\0')
       +        lang = getenv ("LANG");
       +    }
       +#endif
       +  if (lang == NULL || lang[0] == '\0')
       +    lang = "C";
       +
       +  /* See whether name of currently used domain is asked.  */
       +  if (domainname == NULL)
       +    return (char *) catalog_name;
       +
       +  if (domainname[0] == '\0')
       +    domainname = default_catalog_name;
       +
       +  /* Compute length of added path element.  */
       +  new_name_len = sizeof (LOCALEDIR) - 1 + 1 + strlen (lang)
       +                 + sizeof ("/LC_MESSAGES/") - 1 + sizeof (PACKAGE) - 1
       +                 + sizeof (".cat");
       +
       +  new_name = (char *) malloc (new_name_len);
       +  if (new_name == NULL)
       +    return NULL;
       +
       +  strcpy (new_name, PACKAGE);
       +  new_catalog = catopen (new_name, 0);
       +
       +  if (new_catalog == (nl_catd) -1)
       +    {
       +      /* NLSPATH search didn't work, try absolute path */
       +      sprintf (new_name, "%s/%s/LC_MESSAGES/%s.cat", LOCALEDIR, lang,
       +               PACKAGE);
       +      new_catalog = catopen (new_name, 0);
       +
       +      if (new_catalog == (nl_catd) -1)
       +        {
       +          free (new_name);
       +          return (char *) catalog_name;
       +        }
       +    }
       +
       +  /* Close old catalog.  */
       +  if (catalog != (nl_catd) -1)
       +    catclose (catalog);
       +  if (catalog_name != default_catalog_name)
       +    free ((char *) catalog_name);
       +
       +  catalog = new_catalog;
       +  catalog_name = new_name;
       +
       +  return (char *) catalog_name;
       +}
       +
       +char *
       +bindtextdomain (domainname, dirname)
       +     const char *domainname;
       +     const char *dirname;
       +{
       +#if HAVE_SETENV || HAVE_PUTENV
       +  char *old_val, *new_val, *cp;
       +  size_t new_val_len;
       +
       +  /* This does not make much sense here but to be compatible do it.  */
       +  if (domainname == NULL)
       +    return NULL;
       +
       +  /* Compute length of added path element.  If we use setenv we don't need
       +     the first byts for NLSPATH=, but why complicate the code for this
       +     peanuts.  */
       +  new_val_len = sizeof ("NLSPATH=") - 1 + strlen (dirname)
       +                + sizeof ("/%L/LC_MESSAGES/%N.cat");
       +
       +  old_val = getenv ("NLSPATH");
       +  if (old_val == NULL || old_val[0] == '\0')
       +    {
       +      old_val = NULL;
       +      new_val_len += 1 + sizeof (LOCALEDIR) - 1
       +                     + sizeof ("/%L/LC_MESSAGES/%N.cat");
       +    }
       +  else
       +    new_val_len += strlen (old_val);
       +
       +  new_val = (char *) malloc (new_val_len);
       +  if (new_val == NULL)
       +    return NULL;
       +
       +# if HAVE_SETENV
       +  cp = new_val;
       +# else
       +  cp = stpcpy (new_val, "NLSPATH=");
       +# endif
       +
       +  cp = stpcpy (cp, dirname);
       +  cp = stpcpy (cp, "/%L/LC_MESSAGES/%N.cat:");
       +
       +  if (old_val == NULL)
       +    {
       +# if __STDC__
       +      stpcpy (cp, LOCALEDIR "/%L/LC_MESSAGES/%N.cat");
       +# else
       +
       +      cp = stpcpy (cp, LOCALEDIR);
       +      stpcpy (cp, "/%L/LC_MESSAGES/%N.cat");
       +# endif
       +    }
       +  else
       +    stpcpy (cp, old_val);
       +
       +# if HAVE_SETENV
       +  setenv ("NLSPATH", new_val, 1);
       +  free (new_val);
       +# else
       +  putenv (new_val);
       +  /* Do *not* free the environment entry we just entered.  It is used
       +     from now on.   */
       +# endif
       +
       +#endif
       +
       +  return (char *) domainname;
       +}
       +
       +#undef gettext
       +char *
       +gettext (msg)
       +     const char *msg;
       +{
       +  int msgid;
       +
       +  if (msg == NULL || catalog == (nl_catd) -1)
       +    return (char *) msg;
       +
       +  /* Get the message from the catalog.  We always use set number 1.
       +     The message ID is computed by the function `msg_to_cat_id'
       +     which works on the table generated by `po-to-tbl'.  */
       +  msgid = msg_to_cat_id (msg);
       +  if (msgid == -1)
       +    return (char *) msg;
       +
       +  return catgets (catalog, 1, msgid, (char *) msg);
       +}
       +
       +/* Look through the table `_msg_tbl' which has `_msg_tbl_length' entries
       +   for the one equal to msg.  If it is found return the ID.  In case when
       +   the string is not found return -1.  */
       +static int
       +msg_to_cat_id (msg)
       +     const char *msg;
       +{
       +  int cnt;
       +
       +  for (cnt = 0; cnt < _msg_tbl_length; ++cnt)
       +    if (strcmp (msg, _msg_tbl[cnt]._msg) == 0)
       +      return _msg_tbl[cnt]._msg_number;
       +
       +  return -1;
       +}
       +
       +
       +/* @@ 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
 (DIR) diff --git a/intl/dcgettext.c b/intl/dcgettext.c
       t@@ -0,0 +1,624 @@
       +/* Implementation of the dcgettext(3) function.
       +   Copyright (C) 1995, 1996, 1997, 1998 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.  */
       +
       +#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
       +
       +#if defined STDC_HEADERS || defined _LIBC
       +# include <stdlib.h>
       +#else
       +char *getenv ();
       +# ifdef HAVE_MALLOC_H
       +#  include <malloc.h>
       +# else
       +void free ();
       +# endif
       +#endif
       +
       +#if defined HAVE_STRING_H || defined _LIBC
       +# ifndef _GNU_SOURCE
       +#  define _GNU_SOURCE        1
       +# endif
       +# include <string.h>
       +#else
       +# include <strings.h>
       +#endif
       +#if !HAVE_STRCHR && !defined _LIBC
       +# ifndef strchr
       +#  define strchr index
       +# endif
       +#endif
       +
       +#if defined HAVE_UNISTD_H || defined _LIBC
       +# include <unistd.h>
       +#endif
       +
       +#include "gettext.h"
       +#include "gettextP.h"
       +#ifdef _LIBC
       +# include <libintl.h>
       +#else
       +# include "libgettext.h"
       +#endif
       +#include "hash-string.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 getcwd __getcwd
       +# ifndef stpcpy
       +#  define stpcpy __stpcpy
       +# endif
       +#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
       +#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
       +
       +/* 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.  And even worse: POSIX
       +   defines this not at all.  So we can use this feature only on selected
       +   system (e.g. those using GNU C Library).  */
       +#ifdef _LIBC
       +# define HAVE_LOCALE_NULL
       +#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[] = "messages";
       +
       +/* Value used as the default domain for gettext(3).  */
       +const char *_nl_current_default_domain = _nl_default_default_domain;
       +
       +/* Contains the default location of the message catalogs.  */
       +const char _nl_default_dirname[] = GNULOCALEDIR;
       +
       +/* List with bindings of specific domains created by bindtextdomain()
       +   calls.  */
       +struct binding *_nl_domain_bindings;
       +
       +/* Prototypes for local functions.  */
       +static char *find_msg PARAMS ((struct loaded_l10nfile *domain_file,
       +                               const char *msgid)) 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 */
       +
       +
       +/* 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
       +#else
       +# define DCGETTEXT dcgettext__
       +#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;
       +{
       +#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;
       +  int saved_errno = errno;
       +
       +  /* If no real MSGID is given return NULL.  */
       +  if (msgid == NULL)
       +    return NULL;
       +
       +  /* 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
       +     defintion left this undefined.  */
       +  if (domainname == NULL)
       +    domainname = _nl_current_default_domain;
       +
       +  /* 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 (binding->dirname[0] == '/')
       +    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) PATH_MAX;
       +      path_max += 2;                /* The getcwd docs say to do this.  */
       +
       +      dirname = (char *) alloca (path_max + dirname_len);
       +      ADD_BLOCK (block_list, dirname);
       +
       +      __set_errno (0);
       +      while ((ret = getcwd (dirname, path_max)) == NULL && errno == ERANGE)
       +        {
       +          path_max += PATH_INCR;
       +          dirname = (char *) alloca (path_max + dirname_len);
       +          ADD_BLOCK (block_list, dirname);
       +          __set_errno (0);
       +        }
       +
       +      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);
       +          __set_errno (saved_errno);
       +          return (char *) msgid;
       +        }
       +
       +      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);
       +
       +  xdomainname = (char *) alloca (strlen (categoryname)
       +                                 + strlen (domainname) + 5);
       +  ADD_BLOCK (block_list, xdomainname);
       +
       +  stpcpy (stpcpy (stpcpy (stpcpy (xdomainname, categoryname), "/"),
       +                  domainname),
       +          ".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 th 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';
       +        }
       +
       +      /* 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);
       +          __set_errno (saved_errno);
       +          return (char *) msgid;
       +        }
       +
       +
       +      /* Find structure describing the message catalog matching the
       +         DOMAINNAME and CATEGORY.  */
       +      domain = _nl_find_domain (dirname, single_locale, xdomainname);
       +
       +      if (domain != NULL)
       +        {
       +          retval = find_msg (domain, msgid);
       +
       +          if (retval == NULL)
       +            {
       +              int cnt;
       +
       +              for (cnt = 0; domain->successor[cnt] != NULL; ++cnt)
       +                {
       +                  retval = find_msg (domain->successor[cnt], msgid);
       +
       +                  if (retval != NULL)
       +                    break;
       +                }
       +            }
       +
       +          if (retval != NULL)
       +            {
       +              FREE_BLOCKS (block_list);
       +              __set_errno (saved_errno);
       +              return retval;
       +            }
       +        }
       +    }
       +  /* NOTREACHED */
       +}
       +
       +#ifdef _LIBC
       +/* Alias for function name in GNU C Library.  */
       +weak_alias (__dcgettext, dcgettext);
       +#endif
       +
       +
       +static char *
       +internal_function
       +find_msg (domain_file, msgid)
       +     struct loaded_l10nfile *domain_file;
       +     const char *msgid;
       +{
       +  size_t top, act, bottom;
       +  struct loaded_domain *domain;
       +
       +  if (domain_file->decided == 0)
       +    _nl_load_domain (domain_file);
       +
       +  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));
       +      nls_uint32 nstr = W (domain->must_swap, domain->hash_tab[idx]);
       +
       +      if (nstr == 0)
       +        /* Hash table entry is empty.  */
       +        return NULL;
       +
       +      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)
       +        return (char *) domain->data + W (domain->must_swap,
       +                                          domain->trans_tab[nstr - 1].offset);
       +
       +      while (1)
       +        {
       +          if (idx >= domain->hash_size - incr)
       +            idx -= domain->hash_size - incr;
       +          else
       +            idx += incr;
       +
       +          nstr = W (domain->must_swap, domain->hash_tab[idx]);
       +          if (nstr == 0)
       +            /* Hash table entry is empty.  */
       +            return NULL;
       +
       +          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)
       +            return (char *) domain->data
       +              + W (domain->must_swap, domain->trans_tab[nstr - 1].offset);
       +        }
       +      /* NOTREACHED */
       +    }
       +
       +  /* Now we try the default method:  binary search in the sorted
       +     array of messages.  */
       +  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
       +        break;
       +    }
       +
       +  /* If an translation is found return this.  */
       +  return bottom >= top ? NULL : (char *) domain->data
       +                                + W (domain->must_swap,
       +                                     domain->trans_tab[act].offset);
       +}
       +
       +
       +/* 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 *retval;
       +
       +  /* The highest priority value is the `LANGUAGE' environment
       +     variable.  This is a GNU extension.  */
       +  retval = getenv ("LANGUAGE");
       +  if (retval != NULL && retval[0] != '\0')
       +    return retval;
       +
       +  /* `LANGUAGE' is not set.  So 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.  */
       +#if defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES && defined HAVE_LOCALE_NULL
       +  return setlocale (category, NULL);
       +#else
       +  /* Setting of LC_ALL overwrites all other.  */
       +  retval = getenv ("LC_ALL");
       +  if (retval != NULL && retval[0] != '\0')
       +    return retval;
       +
       +  /* Next comes the name of the desired category.  */
       +  retval = getenv (categoryname);
       +  if (retval != NULL && retval[0] != '\0')
       +    return retval;
       +
       +  /* Last possibility is the LANG environment variable.  */
       +  retval = getenv ("LANG");
       +  if (retval != NULL && retval[0] != '\0')
       +    return retval;
       +
       +  /* We use C as the default domain.  POSIX says this is implementation
       +     defined.  */
       +  return "C";
       +#endif
       +}
       +
       +/* @@ begin of epilog @@ */
       +
       +/* We don't want libintl.a to depend on any other library.  So we
       +   avoid the non-standard function stpcpy.  In GNU C Library this
       +   function is available, though.  Also allow the symbol HAVE_STPCPY
       +   to be defined.  */
       +#if !_LIBC && !HAVE_STPCPY
       +static char *
       +stpcpy (dest, src)
       +     char *dest;
       +     const char *src;
       +{
       +  while ((*dest++ = *src++) != '\0')
       +    /* Do nothing. */ ;
       +  return dest - 1;
       +}
       +#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)
       +{
       +  struct binding *runp;
       +
       +  for (runp = _nl_domain_bindings; runp != NULL; runp = runp->next)
       +    {
       +      free (runp->domainname);
       +      if (runp->dirname != _nl_default_dirname)
       +        /* Yes, this is a pointer comparison.  */
       +        free (runp->dirname);
       +    }
       +
       +  if (_nl_current_default_domain != _nl_default_default_domain)
       +    /* Yes, again a pointer comparison.  */
       +    free ((char *) _nl_current_default_domain);
       +}
       +
       +text_set_element (__libc_subfreeres, free_mem);
       +#endif
 (DIR) diff --git a/intl/dgettext.c b/intl/dgettext.c
       t@@ -0,0 +1,59 @@
       +/* Implementation of the dgettext(3) function
       +   Copyright (C) 1995, 1996, 1997 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.  */
       +
       +#ifdef HAVE_CONFIG_H
       +# include <config.h>
       +#endif
       +
       +#if defined HAVE_LOCALE_H || defined _LIBC
       +# include <locale.h>
       +#endif
       +
       +#ifdef _LIBC
       +# include <libintl.h>
       +#else
       +# include "libgettext.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 __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
 (DIR) diff --git a/intl/explodename.c b/intl/explodename.c
       t@@ -0,0 +1,188 @@
       +/* Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
       +   Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
       +
       +   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.  */
       +
       +#ifdef HAVE_CONFIG_H
       +# include <config.h>
       +#endif
       +
       +#if defined STDC_HEADERS || defined _LIBC
       +# include <stdlib.h>
       +#endif
       +
       +#if defined HAVE_STRING_H || defined _LIBC
       +# include <string.h>
       +#else
       +# include <strings.h>
       +#endif
       +#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 @@ */
       +
       +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;
       +  while (cp[0] != '\0' && cp[0] != '_' && cp[0] != '@'
       +         && cp[0] != '+' && cp[0] != ',')
       +    ++cp;
       +
       +  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;
       +}
 (DIR) diff --git a/intl/finddomain.c b/intl/finddomain.c
       t@@ -0,0 +1,216 @@
       +/* Handle list of needed message catalogs
       +   Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
       +   Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
       +
       +   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.  */
       +
       +#ifdef HAVE_CONFIG_H
       +# include <config.h>
       +#endif
       +
       +#include <ctype.h>
       +#include <errno.h>
       +#include <stdio.h>
       +#include <sys/types.h>
       +
       +#if defined STDC_HEADERS || defined _LIBC
       +# include <stdlib.h>
       +#else
       +# ifdef HAVE_MALLOC_H
       +#  include <malloc.h>
       +# else
       +void free ();
       +# endif
       +#endif
       +
       +#if defined HAVE_STRING_H || defined _LIBC
       +# include <string.h>
       +#else
       +# include <strings.h>
       +# ifndef memcpy
       +#  define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num)
       +# endif
       +#endif
       +#if !HAVE_STRCHR && !defined _LIBC
       +# ifndef strchr
       +#  define strchr index
       +# endif
       +#endif
       +
       +#if defined HAVE_UNISTD_H || defined _LIBC
       +# include <unistd.h>
       +#endif
       +
       +#include "gettext.h"
       +#include "gettextP.h"
       +#ifdef _LIBC
       +# include <libintl.h>
       +#else
       +# include "libgettext.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)
       +     const char *dirname;
       +     char *locale;
       +     const char *domainname;
       +{
       +  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);
       +
       +      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]);
       +
       +          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);
       +  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]);
       +          if (retval->successor[cnt]->data != NULL)
       +            break;
       +        }
       +    }
       +
       +  /* The room for an alias was dynamically allocated.  Free it now.  */
       +  if (alias_value != NULL)
       +    free (locale);
       +
       +  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 (here);
       +    }
       +}
       +
       +text_set_element (__libc_subfreeres, free_mem);
       +#endif
 (DIR) diff --git a/intl/gettext.c b/intl/gettext.c
       t@@ -0,0 +1,70 @@
       +/* Implementation of gettext(3) function.
       +   Copyright (C) 1995, 1997 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.  */
       +
       +#ifdef HAVE_CONFIG_H
       +# include <config.h>
       +#endif
       +
       +#ifdef _LIBC
       +# define __need_NULL
       +# include <stddef.h>
       +#else
       +# ifdef STDC_HEADERS
       +#  include <stdlib.h>                /* Just for NULL.  */
       +# else
       +#  ifdef HAVE_STRING_H
       +#   include <string.h>
       +#  else
       +#   define NULL ((void *) 0)
       +#  endif
       +# endif
       +#endif
       +
       +#ifdef _LIBC
       +# include <libintl.h>
       +#else
       +# include "libgettext.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 DGETTEXT __dgettext
       +#else
       +# define GETTEXT gettext__
       +# define DGETTEXT dgettext__
       +#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 DGETTEXT (NULL, msgid);
       +}
       +
       +#ifdef _LIBC
       +/* Alias for function name in GNU C Library.  */
       +weak_alias (__gettext, gettext);
       +#endif
 (DIR) diff --git a/intl/gettext.h b/intl/gettext.h
       t@@ -0,0 +1,105 @@
       +/* Internal header for GNU gettext internationalization functions.
       +   Copyright (C) 1995, 1997 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 Library General Public
       +   License along with the GNU C Library; see the file COPYING.LIB.  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 <stdio.h>
       +
       +#if HAVE_LIMITS_H || _LIBC
       +# include <limits.h>
       +#endif
       +
       +/* @@ 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
       +   doing that would require that the configure script compile and *run*
       +   the resulting executable.  Locally running cross-compiled executables
       +   is usually not possible.  */
       +
       +#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  */
 (DIR) diff --git a/intl/gettextP.h b/intl/gettextP.h
       t@@ -0,0 +1,89 @@
       +/* Header describing internals of gettext library
       +   Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
       +   Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
       +
       +   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.  */
       +
       +#ifndef _GETTEXTP_H
       +#define _GETTEXTP_H
       +
       +#include "loadinfo.h"
       +
       +/* @@ end of prolog @@ */
       +
       +#ifndef PARAMS
       +# if __STDC__
       +#  define PARAMS(args) args
       +# else
       +#  define PARAMS(args) ()
       +# endif
       +#endif
       +
       +#ifndef internal_function
       +# define internal_function
       +#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 nls_uint32 SWAP PARAMS ((nls_uint32 i));
       +
       +static inline nls_uint32
       +SWAP (i)
       +     nls_uint32 i;
       +{
       +  return (i << 24) | ((i & 0xff00) << 8) | ((i >> 8) & 0xff00) | (i >> 24);
       +}
       +#endif
       +
       +
       +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;
       +};
       +
       +struct binding
       +{
       +  struct binding *next;
       +  char *domainname;
       +  char *dirname;
       +};
       +
       +struct loaded_l10nfile *_nl_find_domain PARAMS ((const char *__dirname,
       +                                                 char *__locale,
       +                                                 const char *__domainname))
       +     internal_function;
       +void _nl_load_domain PARAMS ((struct loaded_l10nfile *__domain))
       +     internal_function;
       +void _nl_unload_domain PARAMS ((struct loaded_domain *__domain))
       +     internal_function;
       +
       +/* @@ begin of epilog @@ */
       +
       +#endif /* gettextP.h  */
 (DIR) diff --git a/intl/hash-string.h b/intl/hash-string.h
       t@@ -0,0 +1,59 @@
       +/* Implements a string hashing function.
       +   Copyright (C) 1995, 1997 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 Library General Public
       +   License along with the GNU C Library; see the file COPYING.LIB.  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__
       +#  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 hash_string PARAMS ((const char *__str_param));
       +
       +static inline unsigned long
       +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) *str++;
       +      g = hval & ((unsigned long) 0xf << (HASHWORDBITS - 4));
       +      if (g != 0)
       +        {
       +          hval ^= g >> (HASHWORDBITS - 8);
       +          hval ^= g;
       +        }
       +    }
       +  return hval;
       +}
 (DIR) diff --git a/intl/intl-compat.c b/intl/intl-compat.c
       t@@ -0,0 +1,76 @@
       +/* intl-compat.c - Stub functions to call gettext functions from GNU gettext
       +   Library.
       +   Copyright (C) 1995 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.  */
       +
       +#ifdef HAVE_CONFIG_H
       +# include <config.h>
       +#endif
       +
       +#include "libgettext.h"
       +
       +/* @@ end of prolog @@ */
       +
       +
       +#undef gettext
       +#undef dgettext
       +#undef dcgettext
       +#undef textdomain
       +#undef bindtextdomain
       +
       +
       +char *
       +bindtextdomain (domainname, dirname)
       +     const char *domainname;
       +     const char *dirname;
       +{
       +  return bindtextdomain__ (domainname, dirname);
       +}
       +
       +
       +char *
       +dcgettext (domainname, msgid, category)
       +     const char *domainname;
       +     const char *msgid;
       +     int category;
       +{
       +  return dcgettext__ (domainname, msgid, category);
       +}
       +
       +
       +char *
       +dgettext (domainname, msgid)
       +     const char *domainname;
       +     const char *msgid;
       +{
       +  return dgettext__ (domainname, msgid);
       +}
       +
       +
       +char *
       +gettext (msgid)
       +     const char *msgid;
       +{
       +  return gettext__ (msgid);
       +}
       +
       +
       +char *
       +textdomain (domainname)
       +     const char *domainname;
       +{
       +  return textdomain__ (domainname);
       +}
 (DIR) diff --git a/intl/l10nflist.c b/intl/l10nflist.c
       t@@ -0,0 +1,411 @@
       +/* Handle list of needed message catalogs
       +   Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
       +   Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
       +
       +   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.  */
       +
       +#ifdef HAVE_CONFIG_H
       +# include <config.h>
       +#endif
       +
       +
       +#if defined HAVE_STRING_H || defined _LIBC
       +# ifndef _GNU_SOURCE
       +#  define _GNU_SOURCE        1
       +# endif
       +# include <string.h>
       +#else
       +# include <strings.h>
       +# ifndef memcpy
       +#  define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num)
       +# endif
       +#endif
       +#if !HAVE_STRCHR && !defined _LIBC
       +# ifndef strchr
       +#  define strchr index
       +# endif
       +#endif
       +
       +#if defined _LIBC || defined HAVE_ARGZ_H
       +# include <argz.h>
       +#endif
       +#include <ctype.h>
       +#include <sys/types.h>
       +
       +#if defined STDC_HEADERS || defined _LIBC
       +# include <stdlib.h>
       +#endif
       +
       +#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)
       +#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)
       +#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, ':');
       +  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.  */
       +const char *
       +_nl_normalize_codeset (codeset, name_len)
       +     const unsigned 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 (codeset[cnt]))
       +      {
       +        ++len;
       +
       +        if (isalpha (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 (codeset[cnt]))
       +          *wp++ = tolower (codeset[cnt]);
       +        else if (isdigit (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
 (DIR) diff --git a/intl/libgettext.h b/intl/libgettext.h
       t@@ -0,0 +1,182 @@
       +/* Message catalogs for internationalization.
       +   Copyright (C) 1995, 1996, 1997, 1998 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.  */
       +
       +/* Because on some systems (e.g. Solaris) we sometimes have to include
       +   the systems libintl.h as well as this file we have more complex
       +   include protection above.  But the systems header might perhaps also
       +   define _LIBINTL_H and therefore we have to protect the definition here.  */
       +
       +#if !defined _LIBINTL_H || !defined _LIBGETTEXT_H
       +#ifndef _LIBINTL_H
       +# define _LIBINTL_H        1
       +#endif
       +#define _LIBGETTEXT_H        1
       +
       +/* We define an additional symbol to signal that we use the GNU
       +   implementation of gettext.  */
       +#define __USE_GNU_GETTEXT 1
       +
       +#include <sys/types.h>
       +
       +#if HAVE_LOCALE_H
       +# include <locale.h>
       +#endif
       +
       +
       +#ifdef __cplusplus
       +extern "C" {
       +#endif
       +
       +/* @@ end of prolog @@ */
       +
       +#ifndef PARAMS
       +# if __STDC__ || defined __cplusplus
       +#  define PARAMS(args) args
       +# else
       +#  define PARAMS(args) ()
       +# endif
       +#endif
       +
       +#ifndef NULL
       +# if !defined __cplusplus || defined __GNUC__
       +#  define NULL ((void *) 0)
       +# else
       +#  define NULL (0)
       +# endif
       +#endif
       +
       +#if !HAVE_LC_MESSAGES
       +/* This value determines the behaviour of the gettext() and dgettext()
       +   function.  But some system does not have this defined.  Define it
       +   to a default value.  */
       +# define LC_MESSAGES (-1)
       +#endif
       +
       +
       +/* Declarations for gettext-using-catgets interface.  Derived from
       +   Jim Meyering's libintl.h.  */
       +struct _msg_ent
       +{
       +  const char *_msg;
       +  int _msg_number;
       +};
       +
       +
       +#if HAVE_CATGETS
       +/* These two variables are defined in the automatically by po-to-tbl.sed
       +   generated file `cat-id-tbl.c'.  */
       +extern const struct _msg_ent _msg_tbl[];
       +extern int _msg_tbl_length;
       +#endif
       +
       +
       +/* For automatical extraction of messages sometimes no real
       +   translation is needed.  Instead the string itself is the result.  */
       +#define gettext_noop(Str) (Str)
       +
       +/* 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 PARAMS ((const char *__msgid));
       +extern char *gettext__ PARAMS ((const char *__msgid));
       +
       +/* Look up MSGID in the DOMAINNAME message catalog for the current
       +   LC_MESSAGES locale.  */
       +extern char *dgettext PARAMS ((const char *__domainname, const char *__msgid));
       +extern char *dgettext__ PARAMS ((const char *__domainname,
       +                                 const char *__msgid));
       +
       +/* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY
       +   locale.  */
       +extern char *dcgettext PARAMS ((const char *__domainname, const char *__msgid,
       +                                int __category));
       +extern char *dcgettext__ PARAMS ((const char *__domainname,
       +                                  const char *__msgid, 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 PARAMS ((const char *__domainname));
       +extern char *textdomain__ 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 PARAMS ((const char *__domainname,
       +                                  const char *__dirname));
       +extern char *bindtextdomain__ PARAMS ((const char *__domainname,
       +                                    const char *__dirname));
       +
       +#if ENABLE_NLS
       +
       +/* Solaris 2.3 has the gettext function but dcgettext is missing.
       +   So we omit this optimization for Solaris 2.3.  BTW, Solaris 2.4
       +   has dcgettext.  */
       +# if !HAVE_CATGETS && (!HAVE_GETTEXT || HAVE_DCGETTEXT)
       +
       +#  define gettext(Msgid)                                                      \
       +     dgettext (NULL, Msgid)
       +
       +#  define dgettext(Domainname, Msgid)                                              \
       +     dcgettext (Domainname, Msgid, LC_MESSAGES)
       +
       +#  if defined __GNUC__ && __GNUC__ == 2 && __GNUC_MINOR__ >= 7
       +/* This global variable is defined in loadmsgcat.c.  We need a sign,
       +   whether a new catalog was loaded, which can be associated with all
       +   translations.  */
       +extern int _nl_msg_cat_cntr;
       +
       +#   define dcgettext(Domainname, Msgid, Category)                              \
       +  (__extension__                                                              \
       +   ({                                                                              \
       +     char *__result;                                                              \
       +     if (__builtin_constant_p (Msgid))                                              \
       +       {                                                                      \
       +         static char *__translation__;                                              \
       +         static int __catalog_counter__;                                      \
       +         if (! __translation__ || __catalog_counter__ != _nl_msg_cat_cntr)    \
       +           {                                                                      \
       +             __translation__ =                                                      \
       +               dcgettext__ (Domainname, Msgid, Category);                      \
       +             __catalog_counter__ = _nl_msg_cat_cntr;                              \
       +           }                                                                      \
       +         __result = __translation__;                                              \
       +       }                                                                      \
       +     else                                                                      \
       +       __result = dcgettext__ (Domainname, Msgid, Category);                      \
       +     __result;                                                                      \
       +    }))
       +#  endif
       +# endif
       +
       +#else
       +
       +# define gettext(Msgid) (Msgid)
       +# define dgettext(Domainname, Msgid) (Msgid)
       +# define dcgettext(Domainname, Msgid, Category) (Msgid)
       +# define textdomain(Domainname) ((char *) Domainname)
       +# define bindtextdomain(Domainname, Dirname) ((char *) Dirname)
       +
       +#endif
       +
       +/* @@ begin of epilog @@ */
       +
       +#ifdef __cplusplus
       +}
       +#endif
       +
       +#endif
 (DIR) diff --git a/intl/linux-msg.sed b/intl/linux-msg.sed
       t@@ -0,0 +1,100 @@
       +# po2msg.sed - Convert Uniforum style .po file to Linux style .msg file
       +# Copyright (C) 1995 Free Software Foundation, Inc.
       +# Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
       +#
       +# 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.
       +#
       +#
       +# The first directive in the .msg should be the definition of the
       +# message set number.  We use always set number 1.
       +#
       +1 {
       +  i\
       +$set 1 # Automatically created by po2msg.sed
       +  h
       +  s/.*/0/
       +  x
       +}
       +#
       +# Mitch's old catalog format does not allow comments.
       +#
       +# We copy the original message as a comment into the .msg file.
       +#
       +/^msgid/ {
       +  s/msgid[         ]*"//
       +#
       +# This does not work now with the new format.
       +# /"$/! {
       +#   s/\\$//
       +#   s/$/ ... (more lines following)"/
       +# }
       +  x
       +# The following nice solution is by
       +# Bruno <Haible@ma2s2.mathematik.uni-karlsruhe.de>
       +  td
       +# Increment a decimal number in pattern space.
       +# First hide trailing `9' digits.
       +  :d
       +  s/9\(_*\)$/_\1/
       +  td
       +# Assure at least one digit is available.
       +  s/^\(_*\)$/0\1/
       +# Increment the last digit.
       +  s/8\(_*\)$/9\1/
       +  s/7\(_*\)$/8\1/
       +  s/6\(_*\)$/7\1/
       +  s/5\(_*\)$/6\1/
       +  s/4\(_*\)$/5\1/
       +  s/3\(_*\)$/4\1/
       +  s/2\(_*\)$/3\1/
       +  s/1\(_*\)$/2\1/
       +  s/0\(_*\)$/1\1/
       +# Convert the hidden `9' digits to `0's.
       +  s/_/0/g
       +  x
       +  G
       +  s/\(.*\)"\n\([0-9]*\)/$ #\2 Original Message:(\1)/p
       +}
       +#
       +# The .msg file contains, other then the .po file, only the translations
       +# but each given a unique ID.  Starting from 1 and incrementing by 1 for
       +# each message we assign them to the messages.
       +# It is important that the .po file used to generate the cat-id-tbl.c file
       +# (with po-to-tbl) is the same as the one used here.  (At least the order
       +# of declarations must not be changed.)
       +#
       +/^msgstr/ {
       +  s/msgstr[         ]*"\(.*\)"/# \1/
       +# Clear substitution flag.
       +  tb
       +# Append the next line.
       +  :b
       +  N
       +# Look whether second part is continuation line.
       +  s/\(.*\n\)"\(.*\)"/\1\2/
       +# Yes, then branch.
       +  ta
       +  P
       +  D
       +# Note that D includes a jump to the start!!
       +# We found a continuation line.  But before printing insert '\'.
       +  :a
       +  s/\(.*\)\(\n.*\)/\1\\\2/
       +  P
       +# We cannot use D here.
       +  s/.*\n\(.*\)/\1/
       +  tb
       +}
       +d
 (DIR) diff --git a/intl/loadinfo.h b/intl/loadinfo.h
       t@@ -0,0 +1,76 @@
       +/* Copyright (C) 1996, 1997 Free Software Foundation, Inc.
       +   This file is part of the GNU C Library.
       +   Contributed by Ulrich Drepper <drepper@cygnus.com>, 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.  */
       +
       +#ifndef PARAMS
       +# if __STDC__
       +#  define PARAMS(args) args
       +# else
       +#  define PARAMS(args) ()
       +# endif
       +#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];
       +};
       +
       +
       +extern const char *_nl_normalize_codeset PARAMS ((const unsigned 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));
       +
       +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));
 (DIR) diff --git a/intl/loadmsgcat.c b/intl/loadmsgcat.c
       t@@ -0,0 +1,222 @@
       +/* Load needed message catalogs.
       +   Copyright (C) 1995, 1996, 1997, 1998 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.  */
       +
       +#ifdef HAVE_CONFIG_H
       +# include <config.h>
       +#endif
       +
       +#include <fcntl.h>
       +#include <sys/types.h>
       +#include <sys/stat.h>
       +
       +#if defined STDC_HEADERS || defined _LIBC
       +# include <stdlib.h>
       +#endif
       +
       +#if defined HAVE_UNISTD_H || defined _LIBC
       +# include <unistd.h>
       +#endif
       +
       +#if (defined HAVE_MMAP && defined HAVE_MUNMAP) || defined _LIBC
       +# include <sys/mman.h>
       +#endif
       +
       +#include "gettext.h"
       +#include "gettextP.h"
       +
       +/* @@ 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
       +
       +/* 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 = 0;
       +
       +
       +/* Load the message catalogs specified by FILENAME.  If it is no valid
       +   message catalog do nothing.  */
       +void
       +internal_function
       +_nl_load_domain (domain_file)
       +     struct loaded_l10nfile *domain_file;
       +{
       +  int fd;
       +  size_t size;
       +  struct stat st;
       +  struct mo_file_header *data = (struct mo_file_header *) -1;
       +#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \
       +    || defined _LIBC
       +  int use_mmap = 0;
       +#endif
       +  struct loaded_domain *domain;
       +
       +  domain_file->decided = 1;
       +  domain_file->data = NULL;
       +
       +  /* 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);
       +  if (fd == -1)
       +    return;
       +
       +  /* We must know about the size of the file.  */
       +  if (fstat (fd, &st) != 0
       +      || (size = (size_t) st.st_size) != st.st_size
       +      || size < sizeof (struct mo_file_header))
       +    {
       +      /* Something went wrong.  */
       +      close (fd);
       +      return;
       +    }
       +
       +#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \
       +    || defined _LIBC
       +  /* 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 (data != (struct mo_file_header *) -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 == -1)
       +            {
       +              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 (data->magic != _MAGIC && data->magic != _MAGIC_SWAPPED)
       +    {
       +      /* The magic number is wrong: not a message catalog file.  */
       +#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \
       +    || defined _LIBC
       +      if (use_mmap)
       +        munmap ((caddr_t) data, size);
       +      else
       +#endif
       +        free (data);
       +      return;
       +    }
       +
       +  domain_file->data
       +    = (struct loaded_domain *) malloc (sizeof (struct loaded_domain));
       +  if (domain_file->data == NULL)
       +    return;
       +
       +  domain = (struct loaded_domain *) domain_file->data;
       +  domain->data = (char *) data;
       +#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \
       +    || defined _LIBC
       +  domain->use_mmap = use_mmap;
       +#endif
       +  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 illegal revision.  */
       +#if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \
       +    || defined _LIBC
       +      if (use_mmap)
       +        munmap ((caddr_t) data, size);
       +      else
       +#endif
       +        free (data);
       +      free (domain);
       +      domain_file->data = NULL;
       +      return;
       +    }
       +
       +  /* Show that one domain is changed.  This might make some cached
       +     translations invalid.  */
       +  ++_nl_msg_cat_cntr;
       +}
       +
       +
       +#ifdef _LIBC
       +void
       +internal_function
       +_nl_unload_domain (domain)
       +     struct loaded_domain *domain;
       +{
       +  if (domain->use_mmap)
       +    munmap ((caddr_t) domain->data, domain->mmap_size);
       +  else
       +    free ((void *) domain->data);
       +
       +  free (domain);
       +}
       +#endif
 (DIR) diff --git a/intl/localealias.c b/intl/localealias.c
       t@@ -0,0 +1,424 @@
       +/* Handle aliases for locale names.
       +   Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
       +   Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
       +
       +   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.  */
       +
       +#ifdef HAVE_CONFIG_H
       +# include <config.h>
       +#endif
       +
       +#include <ctype.h>
       +#include <stdio.h>
       +#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
       +
       +#if defined STDC_HEADERS || defined _LIBC
       +# include <stdlib.h>
       +#else
       +char *getenv ();
       +# ifdef HAVE_MALLOC_H
       +#  include <malloc.h>
       +# else
       +void free ();
       +# endif
       +#endif
       +
       +#if defined HAVE_STRING_H || defined _LIBC
       +# ifndef _GNU_SOURCE
       +#  define _GNU_SOURCE        1
       +# endif
       +# include <string.h>
       +#else
       +# include <strings.h>
       +# ifndef memcpy
       +#  define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num)
       +# endif
       +#endif
       +#if !HAVE_STRCHR && !defined _LIBC
       +# ifndef strchr
       +#  define strchr index
       +# endif
       +#endif
       +
       +#include "gettext.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
       +
       +# define mempcpy __mempcpy
       +# define HAVE_MEMPCPY        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
       +
       +
       +/* 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 */
       +
       +
       +struct alias_map
       +{
       +  const char *alias;
       +  const char *value;
       +};
       +
       +
       +static char *string_space = NULL;
       +static size_t string_space_act = 0;
       +static size_t string_space_max = 0;
       +static struct alias_map *map;
       +static size_t nmap = 0;
       +static size_t maxmap = 0;
       +
       +
       +/* Prototypes for local functions.  */
       +static size_t read_alias_file PARAMS ((const char *fname, int fname_len))
       +     internal_function;
       +static void 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 = LOCALE_ALIAS_PATH;
       +  struct alias_map *retval;
       +  const char *result = NULL;
       +  size_t added;
       +
       +#ifdef _LIBC
       +  __libc_lock_lock (lock);
       +#endif
       +
       +  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] == ':')
       +            ++locale_alias_path;
       +          start = locale_alias_path;
       +
       +          while (locale_alias_path[0] != '\0' && locale_alias_path[0] != ':')
       +            ++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;
       +{
       +#ifndef HAVE_ALLOCA
       +  struct block_list *block_list = NULL;
       +#endif
       +  FILE *fp;
       +  char *full_fname;
       +  size_t added;
       +  static const char aliasfile[] = "/locale.alias";
       +
       +  full_fname = (char *) alloca (fname_len + sizeof aliasfile);
       +  ADD_BLOCK (block_list, full_fname);
       +#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");
       +  if (fp == NULL)
       +    {
       +      FREE_BLOCKS (block_list);
       +      return 0;
       +    }
       +
       +  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
       +       */
       +      unsigned char buf[BUFSIZ];
       +      unsigned char *alias;
       +      unsigned char *value;
       +      unsigned 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 (cp[0]))
       +        ++cp;
       +
       +      /* A leading '#' signals a comment line.  */
       +      if (cp[0] != '\0' && cp[0] != '#')
       +        {
       +          alias = cp++;
       +          while (cp[0] != '\0' && !isspace (cp[0]))
       +            ++cp;
       +          /* Terminate alias name.  */
       +          if (cp[0] != '\0')
       +            *cp++ = '\0';
       +
       +          /* Now look for the beginning of the value.  */
       +          while (isspace (cp[0]))
       +            ++cp;
       +
       +          if (cp[0] != '\0')
       +            {
       +              size_t alias_len;
       +              size_t value_len;
       +
       +              value = cp++;
       +              while (cp[0] != '\0' && !isspace (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)
       +                extend_alias_table ();
       +
       +              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)
       +                    {
       +                      FREE_BLOCKS (block_list);
       +                      return added;
       +                    }
       +                  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);
       +
       +  FREE_BLOCKS (block_list);
       +  return added;
       +}
       +
       +
       +static void
       +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;
       +
       +  map = new_map;
       +  maxmap = new_size;
       +}
       +
       +
       +#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
       +}
 (DIR) diff --git a/intl/po2tbl.sed b/intl/po2tbl.sed
       t@@ -0,0 +1,60 @@
       +1 {
       +  i\
       +/* Automatically generated by po2tbl.sed from @PACKAGE NAME@.pot.  */\
       +\
       +#if HAVE_CONFIG_H\
       +# include <config.h>\
       +#endif\
       +\
       +#include "libgettext.h"\
       +\
       +const struct _msg_ent _msg_tbl[] = {
       +  h
       +  s/.*/0/
       +  x
       +}
       +/^msgid/ {
       +  s/msgid[         ]*\(".*"\)/  {\1/
       +  tb
       +  :b
       +  N
       +  s/\(.*\)"\(\n\)"\(.*"\)/\1\2\3/
       +  ta
       +  s/\(.*\)\n.*/\1/
       +  bc
       +  :a
       +  s/\(.*\)\(\n.*\)/\1\\\2/
       +  P
       +  s/.*\n\(.*\)/\1/
       +  tb
       +  :c
       +  x
       +  td
       +  :d
       +  s/9\(_*\)$/_\1/
       +  td
       +  s/^\(_*\)$/0\1/
       +  s/8\(_*\)$/9\1/
       +  s/7\(_*\)$/8\1/
       +  s/6\(_*\)$/7\1/
       +  s/5\(_*\)$/6\1/
       +  s/4\(_*\)$/5\1/
       +  s/3\(_*\)$/4\1/
       +  s/2\(_*\)$/3\1/
       +  s/1\(_*\)$/2\1/
       +  s/0\(_*\)$/1\1/
       +  s/_/0/g
       +  x
       +  G
       +  s/\(.*\)\n\([0-9]*\)/\1, \2},/
       +  s/\(.*\)"$/\1/
       +  p
       +}
       +$ {
       +  i\
       +};\
       +
       +  g
       +  s/0*\(.*\)/int _msg_tbl_length = \1;/p
       +}
       +d
 (DIR) diff --git a/intl/po2tbl.sed.in b/intl/po2tbl.sed.in
       t@@ -0,0 +1,102 @@
       +# po2tbl.sed - Convert Uniforum style .po file to lookup table for catgets
       +# Copyright (C) 1995 Free Software Foundation, Inc.
       +# Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
       +#
       +# 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.
       +#
       +1 {
       +  i\
       +/* Automatically generated by po2tbl.sed from @PACKAGE NAME@.pot.  */\
       +\
       +#if HAVE_CONFIG_H\
       +# include <config.h>\
       +#endif\
       +\
       +#include "libgettext.h"\
       +\
       +const struct _msg_ent _msg_tbl[] = {
       +  h
       +  s/.*/0/
       +  x
       +}
       +#
       +# Write msgid entries in C array form.
       +#
       +/^msgid/ {
       +  s/msgid[         ]*\(".*"\)/  {\1/
       +  tb
       +# Append the next line
       +  :b
       +  N
       +# Look whether second part is continuation line.
       +  s/\(.*\)"\(\n\)"\(.*"\)/\1\2\3/
       +# Yes, then branch.
       +  ta
       +# Because we assume that the input file correctly formed the line
       +# just read cannot be again be a msgid line.  So it's safe to ignore
       +# it.
       +  s/\(.*\)\n.*/\1/
       +  bc
       +# We found a continuation line.  But before printing insert '\'.
       +  :a
       +  s/\(.*\)\(\n.*\)/\1\\\2/
       +  P
       +# We cannot use D here.
       +  s/.*\n\(.*\)/\1/
       +# Some buggy seds do not clear the `successful substitution since last ``t'''
       +# flag on `N', so we do a `t' here to clear it.
       +  tb
       +# Not reached
       +  :c
       +  x
       +# The following nice solution is by
       +# Bruno <Haible@ma2s2.mathematik.uni-karlsruhe.de>
       +  td
       +# Increment a decimal number in pattern space.
       +# First hide trailing `9' digits.
       +  :d
       +  s/9\(_*\)$/_\1/
       +  td
       +# Assure at least one digit is available.
       +  s/^\(_*\)$/0\1/
       +# Increment the last digit.
       +  s/8\(_*\)$/9\1/
       +  s/7\(_*\)$/8\1/
       +  s/6\(_*\)$/7\1/
       +  s/5\(_*\)$/6\1/
       +  s/4\(_*\)$/5\1/
       +  s/3\(_*\)$/4\1/
       +  s/2\(_*\)$/3\1/
       +  s/1\(_*\)$/2\1/
       +  s/0\(_*\)$/1\1/
       +# Convert the hidden `9' digits to `0's.
       +  s/_/0/g
       +  x
       +  G
       +  s/\(.*\)\n\([0-9]*\)/\1, \2},/
       +  s/\(.*\)"$/\1/
       +  p
       +}
       +#
       +# Last line.
       +#
       +$ {
       +  i\
       +};\
       +
       +  g
       +  s/0*\(.*\)/int _msg_tbl_length = \1;/p
       +}
       +d
 (DIR) diff --git a/intl/textdomain.c b/intl/textdomain.c
       t@@ -0,0 +1,108 @@
       +/* Implementation of the textdomain(3) function.
       +   Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
       +   Written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
       +
       +   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.  */
       +
       +#ifdef HAVE_CONFIG_H
       +# include <config.h>
       +#endif
       +
       +#if defined STDC_HEADERS || defined _LIBC
       +# include <stdlib.h>
       +#endif
       +
       +#if defined STDC_HEADERS || defined HAVE_STRING_H || defined _LIBC
       +# include <string.h>
       +#else
       +# include <strings.h>
       +# ifndef memcpy
       +#  define memcpy(Dst, Src, Num) bcopy (Src, Dst, Num)
       +# endif
       +#endif
       +
       +#ifdef _LIBC
       +# include <libintl.h>
       +#else
       +# include "libgettext.h"
       +#endif
       +
       +/* @@ end of prolog @@ */
       +
       +/* Name of the default text domain.  */
       +extern const char _nl_default_default_domain[];
       +
       +/* Default text domain in which entries for gettext(3) are to be found.  */
       +extern const char *_nl_current_default_domain;
       +
       +
       +/* 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
       +
       +/* 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 *old;
       +
       +  /* A NULL pointer requests the current setting.  */
       +  if (domainname == NULL)
       +    return (char *) _nl_current_default_domain;
       +
       +  old = (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;
       +  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
       +      _nl_current_default_domain = strdup (domainname);
       +#else
       +      size_t len = strlen (domainname) + 1;
       +      char *cp = (char *) malloc (len);
       +      if (cp != NULL)
       +        memcpy (cp, domainname, len);
       +      _nl_current_default_domain = cp;
       +#endif
       +    }
       +
       +  if (old != _nl_default_default_domain)
       +    free (old);
       +
       +  return (char *) _nl_current_default_domain;
       +}
       +
       +#ifdef _LIBC
       +/* Alias for function name in GNU C Library.  */
       +weak_alias (__textdomain, textdomain);
       +#endif
 (DIR) diff --git a/intl/xopen-msg.sed b/intl/xopen-msg.sed
       t@@ -0,0 +1,104 @@
       +# po2msg.sed - Convert Uniforum style .po file to X/Open style .msg file
       +# Copyright (C) 1995 Free Software Foundation, Inc.
       +# Ulrich Drepper <drepper@gnu.ai.mit.edu>, 1995.
       +#
       +# 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.
       +#
       +#
       +# The first directive in the .msg should be the definition of the
       +# message set number.  We use always set number 1.
       +#
       +1 {
       +  i\
       +$set 1 # Automatically created by po2msg.sed
       +  h
       +  s/.*/0/
       +  x
       +}
       +#
       +# We copy all comments into the .msg file.  Perhaps they can help.
       +#
       +/^#/ s/^#[         ]*/$ /p
       +#
       +# We copy the original message as a comment into the .msg file.
       +#
       +/^msgid/ {
       +# Does not work now
       +#  /"$/! {
       +#    s/\\$//
       +#    s/$/ ... (more lines following)"/
       +#  }
       +  s/^msgid[         ]*"\(.*\)"$/$ Original Message: \1/
       +  p
       +}
       +#
       +# The .msg file contains, other then the .po file, only the translations
       +# but each given a unique ID.  Starting from 1 and incrementing by 1 for
       +# each message we assign them to the messages.
       +# It is important that the .po file used to generate the cat-id-tbl.c file
       +# (with po-to-tbl) is the same as the one used here.  (At least the order
       +# of declarations must not be changed.)
       +#
       +/^msgstr/ {
       +  s/msgstr[         ]*"\(.*\)"/\1/
       +  x
       +# The following nice solution is by
       +# Bruno <Haible@ma2s2.mathematik.uni-karlsruhe.de>
       +  td
       +# Increment a decimal number in pattern space.
       +# First hide trailing `9' digits.
       +  :d
       +  s/9\(_*\)$/_\1/
       +  td
       +# Assure at least one digit is available.
       +  s/^\(_*\)$/0\1/
       +# Increment the last digit.
       +  s/8\(_*\)$/9\1/
       +  s/7\(_*\)$/8\1/
       +  s/6\(_*\)$/7\1/
       +  s/5\(_*\)$/6\1/
       +  s/4\(_*\)$/5\1/
       +  s/3\(_*\)$/4\1/
       +  s/2\(_*\)$/3\1/
       +  s/1\(_*\)$/2\1/
       +  s/0\(_*\)$/1\1/
       +# Convert the hidden `9' digits to `0's.
       +  s/_/0/g
       +  x
       +# Bring the line in the format `<number> <message>'
       +  G
       +  s/^[^\n]*$/& /
       +  s/\(.*\)\n\([0-9]*\)/\2 \1/
       +# Clear flag from last substitution.
       +  tb
       +# Append the next line.
       +  :b
       +  N
       +# Look whether second part is a continuation line.
       +  s/\(.*\n\)"\(.*\)"/\1\2/
       +# Yes, then branch.
       +  ta
       +  P
       +  D
       +# Note that `D' includes a jump to the start!!
       +# We found a continuation line.  But before printing insert '\'.
       +  :a
       +  s/\(.*\)\(\n.*\)/\1\\\2/
       +  P
       +# We cannot use the sed command `D' here
       +  s/.*\n\(.*\)/\1/
       +  tb
       +}
       +d
 (DIR) diff --git a/po/Makefile.in.in b/po/Makefile.in.in
       t@@ -0,0 +1,248 @@
       +# Makefile for program source directory in GNU NLS utilities package.
       +# Copyright (C) 1995, 1996, 1997 by Ulrich Drepper <drepper@gnu.ai.mit.edu>
       +#
       +# This file file be copied and used freely without restrictions.  It can
       +# be used in projects which are not available under the GNU Public License
       +# but which still want to provide support for the GNU gettext functionality.
       +# Please note that the actual code is *not* freely available.
       +
       +PACKAGE = @PACKAGE@
       +VERSION = @VERSION@
       +
       +SHELL = /bin/sh
       +@SET_MAKE@
       +
       +srcdir = @srcdir@
       +top_srcdir = @top_srcdir@
       +VPATH = @srcdir@
       +
       +prefix = @prefix@
       +exec_prefix = @exec_prefix@
       +datadir = $(prefix)/@DATADIRNAME@
       +localedir = $(datadir)/locale
       +gnulocaledir = $(prefix)/share/locale
       +gettextsrcdir = $(prefix)/share/gettext/po
       +subdir = po
       +
       +INSTALL = @INSTALL@
       +INSTALL_DATA = @INSTALL_DATA@
       +MKINSTALLDIRS = $(top_srcdir)/@MKINSTALLDIRS@
       +
       +CC = @CC@
       +GENCAT = @GENCAT@
       +GMSGFMT = PATH=../src:$$PATH @GMSGFMT@
       +MSGFMT = @MSGFMT@
       +XGETTEXT = PATH=../src:$$PATH @XGETTEXT@
       +MSGMERGE = PATH=../src:$$PATH msgmerge
       +
       +DEFS = @DEFS@
       +CFLAGS = @CFLAGS@
       +CPPFLAGS = @CPPFLAGS@
       +
       +INCLUDES = -I.. -I$(top_srcdir)/intl
       +
       +COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS)
       +
       +SOURCES = cat-id-tbl.c
       +POFILES = @POFILES@
       +GMOFILES = @GMOFILES@
       +DISTFILES = ChangeLog Makefile.in.in POTFILES.in $(PACKAGE).pot \
       +stamp-cat-id $(POFILES) $(GMOFILES) $(SOURCES)
       +
       +POTFILES = \
       +
       +CATALOGS = @CATALOGS@
       +CATOBJEXT = @CATOBJEXT@
       +INSTOBJEXT = @INSTOBJEXT@
       +
       +.SUFFIXES:
       +.SUFFIXES: .c .o .po .pox .gmo .mo .msg .cat
       +
       +.c.o:
       +        $(COMPILE) $<
       +
       +.po.pox:
       +        $(MAKE) $(PACKAGE).pot
       +        $(MSGMERGE) $< $(srcdir)/$(PACKAGE).pot -o $*.pox
       +
       +.po.mo:
       +        $(MSGFMT) -o $@ $<
       +
       +.po.gmo:
       +        file=$(srcdir)/`echo $* | sed 's,.*/,,'`.gmo \
       +          && rm -f $$file && $(GMSGFMT) -o $$file $<
       +
       +.po.cat:
       +        sed -f ../intl/po2msg.sed < $< > $*.msg \
       +          && rm -f $@ && $(GENCAT) $@ $*.msg
       +
       +
       +all: all-@USE_NLS@
       +
       +all-yes: cat-id-tbl.c $(CATALOGS)
       +all-no:
       +
       +$(srcdir)/$(PACKAGE).pot: $(POTFILES)
       +        $(XGETTEXT) --default-domain=$(PACKAGE) --directory=$(top_srcdir) \
       +          --add-comments --keyword=_ --keyword=N_ \
       +          --files-from=$(srcdir)/POTFILES.in \
       +        && test ! -f $(PACKAGE).po \
       +           || ( rm -f $(srcdir)/$(PACKAGE).pot \
       +                && mv $(PACKAGE).po $(srcdir)/$(PACKAGE).pot )
       +
       +$(srcdir)/cat-id-tbl.c: stamp-cat-id; @:
       +$(srcdir)/stamp-cat-id: $(PACKAGE).pot
       +        rm -f cat-id-tbl.tmp
       +        sed -f ../intl/po2tbl.sed $(srcdir)/$(PACKAGE).pot \
       +                | sed -e "s/@PACKAGE NAME@/$(PACKAGE)/" > cat-id-tbl.tmp
       +        if cmp -s cat-id-tbl.tmp $(srcdir)/cat-id-tbl.c; then \
       +          rm cat-id-tbl.tmp; \
       +        else \
       +          echo cat-id-tbl.c changed; \
       +          rm -f $(srcdir)/cat-id-tbl.c; \
       +          mv cat-id-tbl.tmp $(srcdir)/cat-id-tbl.c; \
       +        fi
       +        cd $(srcdir) && rm -f stamp-cat-id && echo timestamp > stamp-cat-id
       +
       +
       +install: install-exec install-data
       +install-exec:
       +install-data: install-data-@USE_NLS@
       +install-data-no: all
       +install-data-yes: all
       +        if test -r "$(MKINSTALLDIRS)"; then \
       +          $(MKINSTALLDIRS) $(datadir); \
       +        else \
       +          $(SHELL) $(top_srcdir)/mkinstalldirs $(datadir); \
       +        fi
       +        @catalogs='$(CATALOGS)'; \
       +        for cat in $$catalogs; do \
       +          cat=`basename $$cat`; \
       +          case "$$cat" in \
       +            *.gmo) destdir=$(gnulocaledir);; \
       +            *)     destdir=$(localedir);; \
       +          esac; \
       +          lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \
       +          dir=$$destdir/$$lang/LC_MESSAGES; \
       +          if test -r "$(MKINSTALLDIRS)"; then \
       +            $(MKINSTALLDIRS) $$dir; \
       +          else \
       +            $(SHELL) $(top_srcdir)/mkinstalldirs $$dir; \
       +          fi; \
       +          if test -r $$cat; then \
       +            $(INSTALL_DATA) $$cat $$dir/$(PACKAGE)$(INSTOBJEXT); \
       +            echo "installing $$cat as $$dir/$(PACKAGE)$(INSTOBJEXT)"; \
       +          else \
       +            $(INSTALL_DATA) $(srcdir)/$$cat $$dir/$(PACKAGE)$(INSTOBJEXT); \
       +            echo "installing $(srcdir)/$$cat as" \
       +                 "$$dir/$(PACKAGE)$(INSTOBJEXT)"; \
       +          fi; \
       +          if test -r $$cat.m; then \
       +            $(INSTALL_DATA) $$cat.m $$dir/$(PACKAGE)$(INSTOBJEXT).m; \
       +            echo "installing $$cat.m as $$dir/$(PACKAGE)$(INSTOBJEXT).m"; \
       +          else \
       +            if test -r $(srcdir)/$$cat.m ; then \
       +              $(INSTALL_DATA) $(srcdir)/$$cat.m \
       +                $$dir/$(PACKAGE)$(INSTOBJEXT).m; \
       +              echo "installing $(srcdir)/$$cat as" \
       +                   "$$dir/$(PACKAGE)$(INSTOBJEXT).m"; \
       +            else \
       +              true; \
       +            fi; \
       +          fi; \
       +        done
       +        if test "$(PACKAGE)" = "gettext"; then \
       +          if test -r "$(MKINSTALLDIRS)"; then \
       +            $(MKINSTALLDIRS) $(gettextsrcdir); \
       +          else \
       +            $(SHELL) $(top_srcdir)/mkinstalldirs $(gettextsrcdir); \
       +          fi; \
       +          $(INSTALL_DATA) $(srcdir)/Makefile.in.in \
       +                          $(gettextsrcdir)/Makefile.in.in; \
       +        else \
       +          : ; \
       +        fi
       +
       +# Define this as empty until I found a useful application.
       +installcheck:
       +
       +uninstall:
       +        catalogs='$(CATALOGS)'; \
       +        for cat in $$catalogs; do \
       +          cat=`basename $$cat`; \
       +          lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \
       +          rm -f $(localedir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT); \
       +          rm -f $(localedir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT).m; \
       +          rm -f $(gnulocaledir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT); \
       +          rm -f $(gnulocaledir)/$$lang/LC_MESSAGES/$(PACKAGE)$(INSTOBJEXT).m; \
       +        done
       +        rm -f $(gettextsrcdir)/po-Makefile.in.in
       +
       +check: all
       +
       +cat-id-tbl.o: ../intl/libgettext.h
       +
       +dvi info tags TAGS ID:
       +
       +mostlyclean:
       +        rm -f core core.* *.pox $(PACKAGE).po *.old.po cat-id-tbl.tmp
       +        rm -fr *.o
       +
       +clean: mostlyclean
       +
       +distclean: clean
       +        rm -f Makefile Makefile.in POTFILES *.mo *.msg *.cat *.cat.m
       +
       +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 = ../$(PACKAGE)-$(VERSION)/$(subdir)
       +dist distdir: update-po $(DISTFILES)
       +        dists="$(DISTFILES)"; \
       +        for file in $$dists; do \
       +          ln $(srcdir)/$$file $(distdir) 2> /dev/null \
       +            || cp -p $(srcdir)/$$file $(distdir); \
       +        done
       +
       +update-po: Makefile
       +        $(MAKE) $(PACKAGE).pot
       +        PATH=`pwd`/../src:$$PATH; \
       +        cd $(srcdir); \
       +        catalogs='$(CATALOGS)'; \
       +        for cat in $$catalogs; do \
       +          cat=`basename $$cat`; \
       +          lang=`echo $$cat | sed 's/\$(CATOBJEXT)$$//'`; \
       +          mv $$lang.po $$lang.old.po; \
       +          echo "$$lang:"; \
       +          if $(MSGMERGE) $$lang.old.po $(PACKAGE).pot -o $$lang.po; then \
       +            rm -f $$lang.old.po; \
       +          else \
       +            echo "msgmerge for $$cat failed!"; \
       +            rm -f $$lang.po; \
       +            mv $$lang.old.po $$lang.po; \
       +          fi; \
       +        done
       +
       +POTFILES: POTFILES.in
       +        ( if test 'x$(srcdir)' != 'x.'; then \
       +            posrcprefix='$(top_srcdir)/'; \
       +          else \
       +            posrcprefix="../"; \
       +          fi; \
       +          rm -f $@-t $@ \
       +            && (sed -e '/^#/d' -e '/^[         ]*$$/d' \
       +                    -e "s@.*@        $$posrcprefix& \\\\@" < $(srcdir)/$@.in \
       +                | sed -e '$$s/\\$$//') > $@-t \
       +            && chmod a-w $@-t \
       +            && mv $@-t $@ )
       +
       +Makefile: Makefile.in.in ../config.status POTFILES
       +        cd .. \
       +          && CONFIG_FILES=$(subdir)/$@.in 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:
 (DIR) diff --git a/po/dopewars.pot b/po/dopewars.pot
       t@@ -6,7 +6,7 @@
        msgid ""
        msgstr ""
        "Project-Id-Version: PACKAGE VERSION\n"
       -"POT-Creation-Date: 2000-09-10 04:08+0100\n"
       +"POT-Creation-Date: 2000-09-10 22:48+0100\n"
        "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
        "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
        "Language-Team: LANGUAGE <LL@li.org>\n"
       t@@ -998,7 +998,7 @@ msgstr ""
        msgid "CLQP"
        msgstr ""
        
       -#: src/curses_client.c:363 src/gtk_client.c:795
       +#: src/curses_client.c:363 src/gtk_client.c:800
        msgid "Where to, dude ? "
        msgstr ""
        
       t@@ -1146,22 +1146,22 @@ msgstr ""
        msgid "You don't have any %s to sell!"
        msgstr ""
        
       -#: src/curses_client.c:807 src/gtk_client.c:1067
       +#: src/curses_client.c:807 src/gtk_client.c:1072
        #, c-format
        msgid "You'll need more %s to carry any more %s!"
        msgstr ""
        
       -#: src/curses_client.c:829 src/gtk_client.c:1071
       +#: src/curses_client.c:829 src/gtk_client.c:1076
        #, c-format
        msgid "You don't have enough space to carry that %s!"
        msgstr ""
        
       -#: src/curses_client.c:837 src/gtk_client.c:1075
       +#: src/curses_client.c:837 src/gtk_client.c:1080
        #, c-format
        msgid "You don't have enough cash to buy that %s!"
        msgstr ""
        
       -#: src/curses_client.c:850 src/gtk_client.c:1079
       +#: src/curses_client.c:850 src/gtk_client.c:1084
        msgid "You don't have any to sell!"
        msgstr ""
        
       t@@ -1169,7 +1169,7 @@ msgstr ""
        msgid "How much money do you pay back? "
        msgstr ""
        
       -#: src/curses_client.c:880 src/curses_client.c:910 src/gtk_client.c:1879
       +#: src/curses_client.c:880 src/curses_client.c:910 src/gtk_client.c:1888
        msgid "You don't have that much money!"
        msgstr ""
        
       t@@ -1185,7 +1185,7 @@ msgstr ""
        msgid "How much money? "
        msgstr ""
        
       -#: src/curses_client.c:913 src/gtk_client.c:1872
       +#: src/curses_client.c:913 src/gtk_client.c:1881
        msgid "There isn't that much money in the bank..."
        msgstr ""
        
       t@@ -1197,7 +1197,7 @@ msgstr ""
        msgid "Messages"
        msgstr ""
        
       -#: src/curses_client.c:1130 src/gtk_client.c:1362
       +#: src/curses_client.c:1130 src/gtk_client.c:1371
        msgid "Stats"
        msgstr ""
        
       t@@ -1445,7 +1445,7 @@ msgstr ""
        msgid "Inventory"
        msgstr ""
        
       -#: src/gtk_client.c:230 src/gtk_client.c:2115 src/gtk_client.c:2483
       +#: src/gtk_client.c:230 src/gtk_client.c:2124 src/gtk_client.c:2492
        msgid "Close"
        msgstr ""
        
       t@@ -1488,9 +1488,9 @@ msgstr ""
        msgid "High Scores"
        msgstr ""
        
       -#: src/gtk_client.c:427 src/gtk_client.c:1018 src/gtk_client.c:1475
       -#: src/gtk_client.c:1788 src/gtk_client.c:1953 src/gtk_client.c:2232
       -#: src/gtk_client.c:2390
       +#: src/gtk_client.c:427 src/gtk_client.c:1023 src/gtk_client.c:1484
       +#: src/gtk_client.c:1797 src/gtk_client.c:1962 src/gtk_client.c:2241
       +#: src/gtk_client.c:2399
        msgid "OK"
        msgstr ""
        
       t@@ -1503,7 +1503,7 @@ msgstr ""
        msgid "_Deal %s"
        msgstr ""
        
       -#: src/gtk_client.c:537 src/gtk_client.c:1111 src/gtk_client.c:1307
       +#: src/gtk_client.c:537 src/gtk_client.c:1119 src/gtk_client.c:1316
        msgid "_Fight"
        msgstr ""
        
       t@@ -1511,146 +1511,146 @@ msgstr ""
        msgid "_Stand"
        msgstr ""
        
       -#: src/gtk_client.c:543 src/gtk_client.c:1110
       +#: src/gtk_client.c:543 src/gtk_client.c:1118
        msgid "_Run"
        msgstr ""
        
       -#: src/gtk_client.c:786
       +#: src/gtk_client.c:791
        msgid "Jet to location"
        msgstr ""
        
       -#: src/gtk_client.c:851
       +#: src/gtk_client.c:856
        #, c-format
        msgid "at %s"
        msgstr ""
        
       -#: src/gtk_client.c:856
       +#: src/gtk_client.c:861
        #, c-format
        msgid "You are currently carrying %d %s"
        msgstr ""
        
       -#: src/gtk_client.c:861
       +#: src/gtk_client.c:866
        #, c-format
        msgid "Available space: %d"
        msgstr ""
        
       -#: src/gtk_client.c:866
       +#: src/gtk_client.c:871
        #, c-format
        msgid "You can afford %d"
        msgstr ""
        
       -#: src/gtk_client.c:916 src/gtk_client.c:1047
       +#: src/gtk_client.c:921 src/gtk_client.c:1052
        msgid "Buy"
        msgstr ""
        
       -#: src/gtk_client.c:917 src/gtk_client.c:1048
       +#: src/gtk_client.c:922 src/gtk_client.c:1053
        msgid "Sell"
        msgstr ""
        
       -#: src/gtk_client.c:918 src/gtk_client.c:1049
       +#: src/gtk_client.c:923 src/gtk_client.c:1054
        msgid "Drop"
        msgstr ""
        
       -#: src/gtk_client.c:1006
       +#: src/gtk_client.c:1011
        #, c-format
        msgid "%s how many?"
        msgstr ""
        
       -#: src/gtk_client.c:1024 src/gtk_client.c:1788 src/gtk_client.c:1964
       -#: src/gtk_client.c:2240
       +#: src/gtk_client.c:1029 src/gtk_client.c:1797 src/gtk_client.c:1973
       +#: src/gtk_client.c:2249
        msgid "Cancel"
        msgstr ""
        
       -#: src/gtk_client.c:1063
       +#: src/gtk_client.c:1068
        #, c-format
        msgid "You don't have any %s!"
        msgstr ""
        
       -#: src/gtk_client.c:1110 src/gtk_client.c:1789
       +#: src/gtk_client.c:1118 src/gtk_client.c:1798
        msgid "_Yes"
        msgstr ""
        
       -#: src/gtk_client.c:1110 src/gtk_client.c:1789
       +#: src/gtk_client.c:1118 src/gtk_client.c:1798
        msgid "_No"
        msgstr ""
        
       -#: src/gtk_client.c:1111
       +#: src/gtk_client.c:1119
        msgid "_Attack"
        msgstr ""
        
       -#: src/gtk_client.c:1111
       +#: src/gtk_client.c:1119
        msgid "_Evade"
        msgstr ""
        
       -#: src/gtk_client.c:1129
       +#: src/gtk_client.c:1138
        msgid "Question"
        msgstr ""
        
       -#: src/gtk_client.c:1237
       +#: src/gtk_client.c:1246
        msgid "<main>/Talk"
        msgstr ""
        
       -#: src/gtk_client.c:1239
       +#: src/gtk_client.c:1248
        msgid "<main>/List"
        msgstr ""
        
       -#: src/gtk_client.c:1241
       +#: src/gtk_client.c:1250
        msgid "<main>/Errands"
        msgstr ""
        
       -#: src/gtk_client.c:1257
       +#: src/gtk_client.c:1266
        msgid "Space"
        msgstr ""
        
       -#: src/gtk_client.c:1262
       +#: src/gtk_client.c:1271
        msgid "Cash"
        msgstr ""
        
       -#: src/gtk_client.c:1267
       +#: src/gtk_client.c:1276
        msgid "Debt"
        msgstr ""
        
       -#: src/gtk_client.c:1272
       +#: src/gtk_client.c:1281
        msgid "Bank"
        msgstr ""
        
       -#: src/gtk_client.c:1287
       +#: src/gtk_client.c:1296
        msgid "Health"
        msgstr ""
        
       -#: src/gtk_client.c:1307
       +#: src/gtk_client.c:1316
        msgid "_Jet!"
        msgstr ""
        
       -#: src/gtk_client.c:1338
       +#: src/gtk_client.c:1347
        msgid "dopewars"
        msgstr ""
        
       -#: src/gtk_client.c:1422
       +#: src/gtk_client.c:1431
        msgid "Drug Dealing and Research"
        msgstr ""
        
       -#: src/gtk_client.c:1423
       +#: src/gtk_client.c:1432
        msgid "Play Testing"
        msgstr ""
        
       -#: src/gtk_client.c:1424
       +#: src/gtk_client.c:1433
        msgid "Extensive Play Testing"
        msgstr ""
        
       -#: src/gtk_client.c:1426
       +#: src/gtk_client.c:1435
        msgid "Constructive Criticism"
        msgstr ""
        
       -#: src/gtk_client.c:1428
       +#: src/gtk_client.c:1437
        msgid "Unconstructive Criticism"
        msgstr ""
        
       -#: src/gtk_client.c:1432
       +#: src/gtk_client.c:1441
        msgid "About dopewars"
        msgstr ""
        
       -#: src/gtk_client.c:1441
       +#: src/gtk_client.c:1450
        msgid ""
        "Based on John E. Dell's old Drug Wars game, dopewars is a simulation of an\n"
        "imaginary drug market.  dopewars is an All-American game which features\n"
       t@@ -1662,150 +1662,150 @@ msgid ""
        "have one month of game time to make your fortune.\n"
        msgstr ""
        
       -#: src/gtk_client.c:1449
       +#: src/gtk_client.c:1458
        #, c-format
        msgid ""
        "Version %s     Copyright (C) 1998-2000  Ben Webb ben@bellatrix.pcl.ox.ac.uk\n"
        "dopewars is released under the GNU General Public Licence\n"
        msgstr ""
        
       -#: src/gtk_client.c:1467
       +#: src/gtk_client.c:1476
        msgid ""
        "\n"
        "For information on the command line options, type dopewars -h at your\n"
        "Unix prompt. This will display a help screen, listing the availableoptions."
        msgstr ""
        
       -#: src/gtk_client.c:1505 src/gtk_client.c:1590
       +#: src/gtk_client.c:1514 src/gtk_client.c:1599
        msgid "Status: Attempting to contact server..."
        msgstr ""
        
       -#: src/gtk_client.c:1511 src/gtk_client.c:1596
       +#: src/gtk_client.c:1520 src/gtk_client.c:1605
        #, c-format
        msgid "Status: Could not connect (%s)"
        msgstr ""
        
       -#: src/gtk_client.c:1545
       +#: src/gtk_client.c:1554
        #, c-format
        msgid "%d of %d"
        msgstr ""
        
       -#: src/gtk_client.c:1612 src/gtk_client.c:1649 src/gtk_client.c:1690
       +#: src/gtk_client.c:1621 src/gtk_client.c:1658 src/gtk_client.c:1699
        msgid "Server"
        msgstr ""
        
       -#: src/gtk_client.c:1613 src/gtk_client.c:1664
       +#: src/gtk_client.c:1622 src/gtk_client.c:1673
        msgid "Port"
        msgstr ""
        
       -#: src/gtk_client.c:1614
       +#: src/gtk_client.c:1623
        msgid "Version"
        msgstr ""
        
       -#: src/gtk_client.c:1615
       +#: src/gtk_client.c:1624
        msgid "Players"
        msgstr ""
        
       -#: src/gtk_client.c:1616
       +#: src/gtk_client.c:1625
        msgid "Comment"
        msgstr ""
        
       -#: src/gtk_client.c:1625
       +#: src/gtk_client.c:1634
        msgid "New Game"
        msgstr ""
        
       -#: src/gtk_client.c:1634
       +#: src/gtk_client.c:1643
        msgid "Hey dude, what's your _name?"
        msgstr ""
        
       -#: src/gtk_client.c:1656
       +#: src/gtk_client.c:1665
        msgid "Host name"
        msgstr ""
        
       -#: src/gtk_client.c:1679 src/gtk_client.c:1742
       +#: src/gtk_client.c:1688 src/gtk_client.c:1751
        msgid "_Connect"
        msgstr ""
        
       -#: src/gtk_client.c:1692 src/gtk_client.c:1713
       +#: src/gtk_client.c:1701 src/gtk_client.c:1722
        msgid "Single player"
        msgstr ""
        
       -#: src/gtk_client.c:1698
       +#: src/gtk_client.c:1707
        msgid "_Antique mode"
        msgstr ""
        
       -#: src/gtk_client.c:1705
       +#: src/gtk_client.c:1714
        msgid "_Start single-player game"
        msgstr ""
        
       -#: src/gtk_client.c:1715 src/gtk_client.c:1753
       +#: src/gtk_client.c:1724 src/gtk_client.c:1762
        msgid "Metaserver"
        msgstr ""
        
       -#: src/gtk_client.c:1732
       +#: src/gtk_client.c:1741
        msgid "_Update"
        msgstr ""
        
       -#: src/gtk_client.c:1757
       +#: src/gtk_client.c:1766
        msgid "Status: Waiting for user input"
        msgstr ""
        
       -#: src/gtk_client.c:1910
       +#: src/gtk_client.c:1919
        #, c-format
        msgid "Cash: %s"
        msgstr ""
        
       -#: src/gtk_client.c:1917
       +#: src/gtk_client.c:1926
        #, c-format
        msgid "Debt: %s"
        msgstr ""
        
       -#: src/gtk_client.c:1920
       +#: src/gtk_client.c:1929
        #, c-format
        msgid "Bank: %s"
        msgstr ""
        
       -#: src/gtk_client.c:1928
       +#: src/gtk_client.c:1937
        msgid "Pay back:"
        msgstr ""
        
       -#: src/gtk_client.c:1931
       +#: src/gtk_client.c:1940
        msgid "Deposit"
        msgstr ""
        
       -#: src/gtk_client.c:1935
       +#: src/gtk_client.c:1944
        msgid "Withdraw"
        msgstr ""
        
       -#: src/gtk_client.c:1959
       +#: src/gtk_client.c:1968
        msgid "Pay all"
        msgstr ""
        
       -#: src/gtk_client.c:1981
       +#: src/gtk_client.c:1990
        msgid "Player List"
        msgstr ""
        
       -#: src/gtk_client.c:2070
       +#: src/gtk_client.c:2079
        msgid "Talk to player(s)"
        msgstr ""
        
       -#: src/gtk_client.c:2092
       +#: src/gtk_client.c:2101
        msgid "Talk to all players"
        msgstr ""
        
       -#: src/gtk_client.c:2096
       +#: src/gtk_client.c:2105
        msgid "Message:-"
        msgstr ""
        
       -#: src/gtk_client.c:2109
       +#: src/gtk_client.c:2118
        msgid "Send"
        msgstr ""
        
       -#: src/gtk_client.c:2202
       +#: src/gtk_client.c:2211
        msgid "Spy On Player"
        msgstr ""
        
       -#: src/gtk_client.c:2204
       +#: src/gtk_client.c:2213
        #, c-format
        msgid ""
        "Please choose the player to spy on. Your %s will\n"
       t@@ -1815,11 +1815,11 @@ msgid ""
        "you, so any %s or %s that he's carrying may be lost!"
        msgstr ""
        
       -#: src/gtk_client.c:2212
       +#: src/gtk_client.c:2221
        msgid "Tip Off The Cops"
        msgstr ""
        
       -#: src/gtk_client.c:2214
       +#: src/gtk_client.c:2223
        #, c-format
        msgid ""
        "Please choose the player to tip off the cops to. Your %s will\n"
       t@@ -1828,71 +1828,71 @@ msgid ""
        "so any %s or %s that he's carrying may be lost!"
        msgstr ""
        
       -#: src/gtk_client.c:2254
       +#: src/gtk_client.c:2263
        #, c-format
        msgid "Sack %s"
        msgstr ""
        
       -#: src/gtk_client.c:2255
       +#: src/gtk_client.c:2264
        #, c-format
        msgid ""
        "Are you sure? (Any %s or %s carried\n"
        "by this %s may be lost!)"
        msgstr ""
        
       -#: src/gtk_client.c:2276
       +#: src/gtk_client.c:2285
        msgid "Name"
        msgstr ""
        
       -#: src/gtk_client.c:2277
       +#: src/gtk_client.c:2286
        msgid "Price"
        msgstr ""
        
       -#: src/gtk_client.c:2278
       +#: src/gtk_client.c:2287
        msgid "Number"
        msgstr ""
        
       -#: src/gtk_client.c:2280
       +#: src/gtk_client.c:2289
        msgid "_Buy ->"
        msgstr ""
        
       -#: src/gtk_client.c:2281
       +#: src/gtk_client.c:2290
        msgid "<- _Sell"
        msgstr ""
        
       -#: src/gtk_client.c:2282
       +#: src/gtk_client.c:2291
        msgid "_Drop <-"
        msgstr ""
        
       -#: src/gtk_client.c:2287
       +#: src/gtk_client.c:2296
        #, c-format
        msgid "%s here"
        msgstr ""
        
       -#: src/gtk_client.c:2290
       +#: src/gtk_client.c:2299
        #, c-format
        msgid "%s carried"
        msgstr ""
        
       -#: src/gtk_client.c:2366
       +#: src/gtk_client.c:2375
        msgid "Change Name"
        msgstr ""
        
       -#: src/gtk_client.c:2376
       +#: src/gtk_client.c:2385
        msgid ""
        "Unfortunately, somebody else is already using \"your\" name. Please change "
        "it:-"
        msgstr ""
        
       -#: src/gtk_client.c:2435
       +#: src/gtk_client.c:2444
        msgid "Done"
        msgstr ""
        
       -#: src/gtk_client.c:2469
       +#: src/gtk_client.c:2478
        msgid "Spy reports"
        msgstr ""
        
       -#: src/gtk_client.c:2540
       +#: src/gtk_client.c:2549
        msgid ""
        "No GTK+ client available - rebuild the binary passing the\n"
        "--enable-gtk-client option to configure, or use the curses\n"